diff --git a/.circleci/OWNERS b/.circleci/OWNERS
index 002922bb9cc9..69a88bfe0386 100644
--- a/.circleci/OWNERS
+++ b/.circleci/OWNERS
@@ -4,7 +4,7 @@
{
rules: [
{
- owners: [{name: 'ampproject/wg-infra'}, {name: 'rsimha', notify: true}],
+ owners: [{name: 'ampproject/wg-infra'}],
},
],
}
diff --git a/.circleci/check_config.sh b/.circleci/check_config.sh
index 3732eeeef7c5..f2bce219d9b5 100755
--- a/.circleci/check_config.sh
+++ b/.circleci/check_config.sh
@@ -11,8 +11,8 @@ RED() { echo -e "\033[0;31m$1\033[0m"; }
YELLOW() { echo -e "\033[0;33m$1\033[0m"; }
CYAN() { echo -e "\033[0;36m$1\033[0m"; }
-# Push builds are only run against the main branch and amp-release branches.
-if [[ "$CIRCLE_BRANCH" == "main" || "$CIRCLE_BRANCH" =~ ^amp-release-* ]]; then
+# Push builds are only run against the main, nightly, and amp-release branches.
+if [[ "$CIRCLE_BRANCH" == "main" || "$CIRCLE_BRANCH" == "nightly" || "$CIRCLE_BRANCH" =~ ^amp-release-* ]]; then
echo $(GREEN "Nothing to do because $CIRCLE_BRANCH is not a PR branch.")
exit 0
fi
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 0fa4cc316e17..9b22ac658fbe 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -1,8 +1,10 @@
version: 2.1
orbs:
- browser-tools: circleci/browser-tools@1.2.3
- node: circleci/node@4.7.0
+ browser-tools: circleci/browser-tools@1.5.1
+ codecov: codecov/codecov@5.0.0
+ macos: circleci/macos@2.5.2
+ node: circleci/node@6.3.0
push_and_pr_builds: &push_and_pr_builds
filters:
@@ -10,13 +12,6 @@ push_and_pr_builds: &push_and_pr_builds
ignore:
- nightly
-push_builds_only: &push_builds_only
- filters:
- branches:
- only:
- - main
- - /^amp-release-.*$/
-
release_builds_only: &release_builds_only
filters:
branches:
@@ -24,14 +19,6 @@ release_builds_only: &release_builds_only
- nightly
- /^amp-release-.*$/
-pr_builds_only: &pr_builds_only
- filters:
- branches:
- ignore:
- - main
- - /^amp-release-.*$/
- - nightly
-
experiment_job: &experiment_job
parameters:
exp:
@@ -39,12 +26,30 @@ experiment_job: &experiment_job
type: enum
enum: ['A', 'B', 'C']
environment:
- EXP: << parameters.exp >>
+ FLAVOR: experiment<< parameters.exp >>
+
+dist_job: &dist_job
+ parameters:
+ module:
+ description: 'Whether to build Module or Nomodule'
+ type: enum
+ enum: ['Module', 'Nomodule']
+ purpose:
+ description: 'What is the downstream purpose of this build'
+ type: enum
+ enum: ['Test', 'Bundle Size']
+
+test_types_job: &test_types_job
+ parameters:
+ test_type:
+ description: 'Which test type to run'
+ type: enum
+ enum: ['Unit', 'Integration', 'End-to-End']
executors:
base-docker-small:
docker:
- - image: cimg/base:stable
+ - image: cimg/base:current
resource_class: small
node-docker-medium:
docker:
@@ -58,76 +63,118 @@ executors:
docker:
- image: cimg/node:lts-browsers
resource_class: xlarge
- jdk-docker-xlarge:
+ jdk-docker-2xlarge:
docker:
- - image: cimg/openjdk:17.0-node
- resource_class: xlarge
+ - image: cimg/openjdk:21.0.5-node
+ resource_class: 2xlarge
macos-medium:
macos:
- xcode: 12.4.0
- resource_class: medium
+ xcode: 15.3.0
+ resource_class: macos.m1.medium.gen1
commands:
checkout_repo:
- parameters:
- save-git-cache:
- type: boolean
- default: false
steps:
- restore_cache:
- name: 'Restore Git Cache'
+ name: '♻️ Restore Git Cache'
keys:
- - git-cache-{{ arch }}-v2-{{ .Branch }}-{{ .Revision }}
- - git-cache-{{ arch }}-v2-{{ .Branch }}-
- - git-cache-{{ arch }}-v2-
+ - git-cache-{{ arch }}-v3-main-{{ .Revision }}
+ - git-cache-{{ arch }}-v3-main-
+ - git-cache-{{ arch }}-v3-
- checkout
- when:
- condition: << parameters.save-git-cache >>
+ condition:
+ equal: ['main', << pipeline.git.branch >>]
steps:
+ - run:
+ name: '🗜️ Garbage Collection for Git'
+ command: git gc --auto
- save_cache:
- name: 'Save Git Cache'
- key: git-cache-{{ arch }}-v2-{{ .Branch }}-{{ .Revision }}
+ name: '💾 Save Git Cache'
+ key: git-cache-{{ arch }}-v3-main-{{ .Revision }}
paths:
- .git
- setup_node_environment:
- steps:
- - node/install:
- lts: true
- install-npm: false
- - node/install-packages
setup_vm:
+ parameters:
+ is-initializing-job:
+ description: 'True when this is an initializing job, which would perform several caching and workspace setup steps'
+ type: boolean
+ default: false
+ node-version:
+ type: string
+ default: 'lts/*'
steps:
- - attach_workspace:
- at: /tmp
- - run:
- name: 'Configure Temporary Workspace'
- command: |
- mv /tmp/workspace /tmp/restored-workspace
- mkdir -p /tmp/workspace
- - run:
- name: 'Maybe Gracefully Halt'
- command: /tmp/restored-workspace/maybe_gracefully_halt.sh
- - checkout_repo
+ - unless:
+ condition: << parameters.is-initializing-job >>
+ steps:
+ - checkout_repo
+ - attach_workspace:
+ at: /tmp
+ - run:
+ name: '⚙️ Configure Temporary Workspace'
+ command: |
+ mv /tmp/workspace /tmp/restored-workspace
+ mkdir -p /tmp/workspace
+ - run:
+ name: '❓ Maybe Gracefully Halt'
+ command: /tmp/restored-workspace/maybe_gracefully_halt.sh
+ - run:
+ name: '⚙️ Configure Development Environment'
+ command: |
+ ./.circleci/fetch_merge_commit.sh
+ ./.circleci/restore_build_output.sh
+ cat ./build-system/test-configs/hosts | sudo tee -a /etc/hosts
+ - restore_cache:
+ name: '♻️ Restore nvm Cache'
+ keys:
+ - nvm-cache-{{ arch }}-v2-<< parameters.node-version >>-
- run:
- name: 'Configure Development Environment'
- command: |
- ./.circleci/fetch_merge_commit.sh
- ./.circleci/restore_build_output.sh
- cat ./build-system/test-configs/hosts | sudo tee -a /etc/hosts
- - setup_node_environment
+ name: '♻️ Create .nvmrc file'
+ command: echo << parameters.node-version >> > .nvmrc
+ - node/install
+ - when:
+ condition: << parameters.is-initializing-job >>
+ steps:
+ - run:
+ name: '⚙️ Create nvm Cache Checksum File'
+ command: node -v > ~/.node-version
+ - save_cache:
+ name: '💾 Save nvm Cache'
+ key: nvm-cache-{{ arch }}-v2-<< parameters.node-version >>-{{ checksum "~/.node-version" }}
+ paths:
+ - ~/.nvm/.cache
+ - restore_cache:
+ name: '♻️ Restore node_modules/ Cache'
+ keys:
+ - node-modules-cache-{{ arch }}-v3-{{ checksum "package-lock.json" }}
+ - when:
+ condition: << parameters.is-initializing-job >>
+ steps:
+ - run:
+ name: '💿 Install npm Packages'
+ command: if [[ ! -d node_modules/ ]]; then npm ci; fi
+ - save_cache:
+ name: '💾 Save node_modules/ Cache'
+ key: node-modules-cache-{{ arch }}-v3-{{ checksum "package-lock.json" }}
+ paths:
+ - node_modules/
teardown_vm:
steps:
- persist_to_workspace:
+ name: '📁 Persist Temporary Workspace'
root: /tmp
paths:
- workspace
install_chrome:
steps:
- run:
- name: 'Get Pinned Chrome Version'
+ name: '⚙️ Get Pinned Chrome Version'
command: ./.circleci/get_pinned_chrome_version.sh
+ - run:
+ name: '💿 Update list of available apt packages'
+ command: sudo apt update
- browser-tools/install-chrome:
- chrome-version: ${CHROME_VERSION}
+ # chrome-version is set in ./.circleci/get_pinned_chrome_version.sh, see files for details.
replace-existing: true
- browser-tools/install-chromedriver
install_firefox:
@@ -136,25 +183,17 @@ commands:
install_edge:
steps:
- run:
- name: 'Install Microsoft Edge'
+ name: '💿 Install Microsoft Edge'
command: ./.circleci/install_microsoft_edge.sh
- enable_safari_automation:
- steps:
- - run:
- name: 'Enable Safari Automation'
- command: |
- defaults write com.apple.Safari AllowRemoteAutomation 1
- defaults write com.apple.Safari IncludeDevelopMenu 1
- sudo safaridriver --enable
store_test_output:
steps:
- - store_artifacts:
- path: result-reports
- store_test_results:
+ name: '⬆️ Store Test Results'
path: result-reports
store_filelist:
steps:
- store_artifacts:
+ name: '⬆️ Store Artifact filelist.txt'
path: /tmp/filelist.txt
skip_on_push_builds:
steps:
@@ -165,26 +204,34 @@ commands:
value: << pipeline.git.branch >>
steps:
- run:
- name: 'Skip Job on Push Builds'
+ name: '➡️ Skip Job on Push Builds'
command: circleci-agent step halt
jobs:
initialize_repository:
executor:
- name: base-docker-small
+ name: node-docker-medium
steps:
- - checkout_repo:
- save-git-cache: true
+ - checkout_repo
- run:
- name: 'Initialize Repository'
+ name: '⚙️ Initialize Repository'
command: ./.circleci/initialize_repo.sh
- run:
- name: 'Check Config'
+ name: '🔍 Check Config'
command: ./.circleci/check_config.sh
- run:
- name: 'Initialize Workspace'
+ name: '⚙️ Initialize Temporary Workspace'
command: cp .circleci/maybe_gracefully_halt.sh /tmp/workspace
+ - setup_vm:
+ is-initializing-job: true
- teardown_vm
+ initialize_mac_os:
+ executor:
+ name: macos-medium
+ steps:
+ - checkout_repo
+ - setup_vm:
+ is-initializing-job: true
checks:
executor:
name: node-docker-medium
@@ -192,7 +239,7 @@ jobs:
- setup_vm
- install_chrome
- run:
- name: '⭐ Checks ⭐'
+ name: '⭐⭐⭐ Checks ⭐⭐⭐'
command: node build-system/pr-check/checks.js
- teardown_vm
unminified_build:
@@ -201,55 +248,37 @@ jobs:
steps:
- setup_vm
- run:
- name: '⭐ Unminified Build ⭐'
+ name: '⭐⭐⭐ Unminified Build ⭐⭐⭐'
command: node build-system/pr-check/unminified-build.js
- teardown_vm
- nomodule_build_test:
+ dist:
executor:
name: node-docker-xlarge
+ <<: *dist_job
+ parallelism: 3
steps:
- setup_vm
- run:
- name: '⭐ Nomodule Build ⭐'
- command: node build-system/pr-check/nomodule-build.js
+ name: '⭐⭐⭐ << parameters.module >> Build (<< parameters.purpose >>) ⭐⭐⭐'
+ command: node build-system/pr-check/dist.js --type "<< parameters.module >> Build (<< parameters.purpose >>)"
- teardown_vm
- module_build_test:
+ dist_3p:
executor:
name: node-docker-xlarge
+ <<: *dist_job
steps:
- setup_vm
+ - when:
+ condition:
+ and:
+ - equal: ['Module', <>]
+ - equal: ['Test', <>]
+ steps:
+ # Required in the edge case where we need to run `amp visual-diff --empty` in this step. See build-system/pr-check/dist.js for details.
+ - install_chrome
- run:
- name: '⭐ Module Build ⭐'
- command: node build-system/pr-check/module-build.js
- - teardown_vm
- nomodule_build_prod:
- executor:
- name: node-docker-xlarge
- steps:
- - setup_vm
- - run:
- name: '⭐ Nomodule Build ⭐'
- command: node build-system/pr-check/bundle-size-nomodule-build.js
- - teardown_vm
- module_build_prod:
- executor:
- name: node-docker-xlarge
- steps:
- - setup_vm
- - run:
- name: '⭐ Module Build ⭐'
- command: node build-system/pr-check/bundle-size-module-build.js
- - teardown_vm
- pr_deploy:
- executor:
- name: node-docker-medium
- steps:
- - setup_vm
- - run:
- name: '⭐ PR Deploy ⭐'
- command: node build-system/pr-check/pr-deploy.js
- - store_artifacts:
- path: /tmp/artifacts/amp_nomodule_build.tar.gz
+ name: '⭐⭐⭐ << parameters.module >> 3p Build (<< parameters.purpose >>) ⭐⭐⭐'
+ command: node build-system/pr-check/dist.js --type "<< parameters.module >> 3p Build (<< parameters.purpose >>)"
- teardown_vm
bundle_size:
executor:
@@ -257,19 +286,19 @@ jobs:
steps:
- setup_vm
- run:
- name: '⭐ Bundle Size ⭐'
+ name: '⭐⭐⭐ Bundle Size ⭐⭐⭐'
command: node build-system/pr-check/bundle-size.js
- teardown_vm
validator_tests:
executor:
- name: jdk-docker-xlarge
+ name: jdk-docker-2xlarge
steps:
- setup_vm
- run:
name: 'Install Validator Dependencies'
command: ./.circleci/install_validator_dependencies.sh
- run:
- name: '⭐ Validator Tests ⭐'
+ name: '⭐⭐⭐ Validator Tests ⭐⭐⭐'
command: node build-system/pr-check/validator-tests.js
- store_test_output
- teardown_vm
@@ -278,8 +307,9 @@ jobs:
name: node-docker-large
steps:
- setup_vm
+ - install_chrome
- run:
- name: '⭐ Visual Diff Tests ⭐'
+ name: '⭐⭐⭐ Visual Diff Tests ⭐⭐⭐'
command: node build-system/pr-check/visual-diff-tests.js
- store_test_output
- teardown_vm
@@ -291,20 +321,24 @@ jobs:
- setup_vm
- install_chrome
- run:
- name: '⭐ Local Unit Tests ⭐'
+ name: '⭐⭐⭐ Local Unit Tests ⭐⭐⭐'
command: node build-system/pr-check/unit-tests-local.js
- store_test_output
- teardown_vm
all_unit_tests:
executor:
- name: node-docker-medium
+ name: node-docker-large
parallelism: 6
steps:
- setup_vm
- install_chrome
- run:
- name: '⭐ All Unit Tests ⭐'
+ name: '⭐⭐⭐ All Unit Tests ⭐⭐⭐'
command: node build-system/pr-check/unit-tests.js
+ - codecov/upload:
+ disable_search: true
+ files: test/coverage/lcov-unit.info
+ flags: unit_tests
- store_test_output
- store_filelist
- teardown_vm
@@ -315,8 +349,12 @@ jobs:
- setup_vm
- install_chrome
- run:
- name: '⭐ Unminified Tests ⭐'
+ name: '⭐⭐⭐ Unminified Tests ⭐⭐⭐'
command: node build-system/pr-check/unminified-tests.js
+ - codecov/upload:
+ disable_search: true
+ files: test/coverage/lcov-integration.info
+ flags: integration_tests
- store_test_output
- teardown_vm
nomodule_tests:
@@ -331,7 +369,7 @@ jobs:
- setup_vm
- install_chrome
- run:
- name: '⭐ Nomodule Tests (<< parameters.config >>) ⭐'
+ name: '⭐⭐⭐ Nomodule Tests (<< parameters.config >>) ⭐⭐⭐'
command: node build-system/pr-check/nomodule-tests.js --config=<< parameters.config >>
- store_test_output
- teardown_vm
@@ -347,19 +385,19 @@ jobs:
- setup_vm
- install_chrome
- run:
- name: '⭐ Module Tests (<< parameters.config >>) ⭐'
+ name: '⭐⭐⭐ Module Tests (<< parameters.config >>) ⭐⭐⭐'
command: node build-system/pr-check/module-tests.js --config=<< parameters.config >>
- store_test_output
- teardown_vm
end_to_end_tests:
executor:
- name: node-docker-medium
+ name: node-docker-large
parallelism: 6
steps:
- setup_vm
- install_chrome
- run:
- name: '⭐ End-to-End Tests ⭐'
+ name: '⭐⭐⭐ End-to-End Tests ⭐⭐⭐'
command: node build-system/pr-check/e2e-tests.js
- store_test_output
- store_filelist
@@ -367,45 +405,38 @@ jobs:
browser_tests_safari:
executor:
name: macos-medium
+ <<: *test_types_job
steps:
- setup_vm
- - enable_safari_automation
+ - macos/install-rosetta
+ - macos/add-safari-permissions
- run:
- name: '⭐ Browser Tests (Safari) ⭐'
- command: node build-system/pr-check/browser-tests.js --browser=safari
+ name: '⭐⭐⭐ << parameters.test_type >> Tests (Safari) ⭐⭐⭐'
+ command: node build-system/pr-check/browser-tests.js --browser=safari --type=<< parameters.test_type >>
- store_test_output
- teardown_vm
browser_tests_firefox:
executor:
name: node-docker-medium
+ <<: *test_types_job
steps:
- setup_vm
- install_firefox
- run:
- name: '⭐ Browser Tests (Firefox) ⭐'
- command: node build-system/pr-check/browser-tests.js --browser=firefox
+ name: '⭐⭐⭐ << parameters.test_type >> Tests (Firefox) ⭐⭐⭐'
+ command: node build-system/pr-check/browser-tests.js --browser=firefox --type=<< parameters.test_type >>
- store_test_output
- teardown_vm
browser_tests_edge:
executor:
name: node-docker-medium
+ <<: *test_types_job
steps:
- setup_vm
- install_edge
- run:
- name: '⭐ Browser Tests (Edge) ⭐'
- command: node build-system/pr-check/browser-tests.js --browser=edge
- - store_test_output
- - teardown_vm
- performance_tests:
- executor:
- name: node-docker-xlarge
- steps:
- - setup_vm
- - install_chrome
- - run:
- name: '⭐ Performance Tests ⭐'
- command: node build-system/pr-check/performance-tests.js
+ name: '⭐⭐⭐ << parameters.test_type >> Tests (Edge) ⭐⭐⭐'
+ command: node build-system/pr-check/browser-tests.js --browser=edge --type=<< parameters.test_type >>
- store_test_output
- teardown_vm
experiment_build:
@@ -415,7 +446,7 @@ jobs:
steps:
- setup_vm
- run:
- name: '⭐ Experiment << parameters.exp >> Build ⭐'
+ name: '⭐⭐⭐ Experiment << parameters.exp >> Build ⭐⭐⭐'
command: node build-system/pr-check/experiment-build.js --experiment=experiment<< parameters.exp >>
- teardown_vm
experiment_integration_tests:
@@ -426,7 +457,7 @@ jobs:
- setup_vm
- install_chrome
- run:
- name: '⭐ Experiment << parameters.exp >> Integration Tests ⭐'
+ name: '⭐⭐⭐ Experiment << parameters.exp >> Integration Tests ⭐⭐⭐'
command: node build-system/pr-check/experiment-integration-tests.js --experiment=experiment<< parameters.exp >>
- store_test_output
- teardown_vm
@@ -439,7 +470,7 @@ jobs:
- setup_vm
- install_chrome
- run:
- name: '⭐ Experiment << parameters.exp >> End-to-End Tests ⭐'
+ name: '⭐⭐⭐ Experiment << parameters.exp >> End-to-End Tests ⭐⭐⭐'
command: node build-system/pr-check/experiment-e2e-tests.js --experiment=experiment<< parameters.exp >>
- store_test_output
- store_filelist
@@ -457,13 +488,12 @@ jobs:
type: enum
enum: ['no-esm', 'esm']
environment:
- EXP: << parameters.flavor >>
FLAVOR: << parameters.flavor >>
ESM: << parameters.esm >>
steps:
- setup_vm
- run:
- name: '⭐ amp release ⭐'
+ name: '⭐⭐⭐ amp release ⭐⭐⭐'
command: node --unhandled-rejections=strict build-system/release-workflows/build-release.js
- teardown_vm
upload_release:
@@ -472,11 +502,21 @@ jobs:
steps:
- setup_vm
- run:
- name: '⭐ Upload Release Artifacts ⭐'
+ name: '⭐⭐⭐ Upload Release Artifacts (to Cloudflare R2) ⭐⭐⭐'
command: node --unhandled-rejections=strict build-system/release-workflows/upload-release.js
- store_artifacts:
+ name: '⬆️ Upload Release Artifacts (to CircleCI)'
path: /tmp/release.tar.gz
- teardown_vm
+ trigger_promote:
+ executor:
+ name: base-docker-small
+ steps:
+ - setup_vm
+ - run:
+ name: '⭐⭐⭐ Trigger Promote Workflow ⭐⭐⭐'
+ command: node --unhandled-rejections=strict build-system/release-workflows/trigger-promote.js
+ - teardown_vm
workflows:
version: 2
@@ -486,6 +526,9 @@ workflows:
- initialize_repository:
name: 'Initialize Repository'
<<: *push_and_pr_builds
+ - initialize_mac_os:
+ name: 'Initialize for Mac OS'
+ <<: *push_and_pr_builds
- checks:
name: 'Checks'
<<: *push_and_pr_builds
@@ -496,37 +539,32 @@ workflows:
<<: *push_and_pr_builds
requires:
- 'Initialize Repository'
- - nomodule_build_test:
- name: 'Nomodule Build (Test)'
- <<: *push_and_pr_builds
- requires:
- - 'Initialize Repository'
- - module_build_test:
- name: 'Module Build (Test)'
- <<: *push_and_pr_builds
- requires:
- - 'Initialize Repository'
- - nomodule_build_prod:
- name: 'Nomodule Build (Prod)'
+ - dist:
+ matrix:
+ parameters:
+ module: ['Module', 'Nomodule']
+ purpose: ['Test', 'Bundle Size']
+ name: '⛓️ << matrix.module >> Build (<< matrix.purpose >>)'
<<: *push_and_pr_builds
requires:
- 'Initialize Repository'
- - module_build_prod:
- name: 'Module Build (Prod)'
+ - dist_3p:
+ matrix:
+ parameters:
+ module: ['Module', 'Nomodule']
+ purpose: ['Test', 'Bundle Size']
+ name: '<< matrix.module >> 3p Build (<< matrix.purpose >>)'
<<: *push_and_pr_builds
requires:
- 'Initialize Repository'
- - pr_deploy:
- name: 'PR Deploy'
- <<: *pr_builds_only
- requires:
- - 'Nomodule Build (Test)'
- bundle_size:
name: 'Bundle Size'
<<: *push_and_pr_builds
requires:
- - 'Nomodule Build (Prod)'
- - 'Module Build (Prod)'
+ - '⛓️ Nomodule Build (Bundle Size)'
+ - 'Nomodule 3p Build (Bundle Size)'
+ - '⛓️ Module Build (Bundle Size)'
+ - 'Module 3p Build (Bundle Size)'
- validator_tests:
name: 'Validator Tests'
<<: *push_and_pr_builds
@@ -536,7 +574,10 @@ workflows:
name: 'Visual Diff Tests'
<<: *push_and_pr_builds
requires:
- - 'Nomodule Build (Test)'
+ - '⛓️ Module Build (Test)'
+ - 'Module 3p Build (Test)'
+ - '⛓️ Nomodule Build (Test)'
+ - 'Nomodule 3p Build (Test)'
- local_unit_tests:
name: 'Local Unit Tests'
<<: *push_and_pr_builds
@@ -559,7 +600,8 @@ workflows:
config: ['prod', 'canary']
<<: *push_and_pr_builds
requires:
- - 'Nomodule Build (Test)'
+ - '⛓️ Nomodule Build (Test)'
+ - 'Nomodule 3p Build (Test)'
- module_tests:
name: 'Module Tests (<< matrix.config >>)'
matrix:
@@ -567,28 +609,45 @@ workflows:
config: ['prod', 'canary']
<<: *push_and_pr_builds
requires:
- - 'Nomodule Build (Test)'
- - 'Module Build (Test)'
+ - '⛓️ Module Build (Test)'
+ - 'Module 3p Build (Test)'
+ - '⛓️ Nomodule Build (Test)'
+ - 'Nomodule 3p Build (Test)'
- end_to_end_tests:
name: '⛓️ End-to-End Tests'
<<: *push_and_pr_builds
requires:
- - 'Nomodule Build (Test)'
+ - '⛓️ Nomodule Build (Test)'
+ - 'Nomodule 3p Build (Test)'
- browser_tests_safari:
- name: 'Browser Tests (Safari)'
+ name: '<< matrix.test_type >> Tests (Safari)'
+ matrix:
+ parameters:
+ test_type: ['Unit', 'Integration', 'End-to-End']
<<: *push_and_pr_builds
requires:
- - 'Nomodule Build (Test)'
+ - 'Initialize for Mac OS'
+ - '⛓️ Nomodule Build (Test)'
+ - 'Nomodule 3p Build (Test)'
- browser_tests_firefox:
- name: 'Browser Tests (Firefox)'
+ name: '<< matrix.test_type >> Tests (Firefox)'
+ matrix:
+ parameters:
+ test_type: ['Unit', 'Integration', 'End-to-End']
<<: *push_and_pr_builds
requires:
- - 'Nomodule Build (Test)'
+ - '⛓️ Nomodule Build (Test)'
+ - 'Nomodule 3p Build (Test)'
- browser_tests_edge:
- name: 'Browser Tests (Edge)'
+ name: '<< matrix.test_type >> Tests (Edge)'
+ matrix:
+ parameters:
+ # Note: we can't run e2e tests on Edge.
+ test_type: ['Unit', 'Integration']
<<: *push_and_pr_builds
requires:
- - 'Nomodule Build (Test)'
+ - '⛓️ Nomodule Build (Test)'
+ - 'Nomodule 3p Build (Test)'
- experiment_build:
name: 'Experiment << matrix.exp >> Build'
matrix:
@@ -613,11 +672,6 @@ workflows:
<<: *push_and_pr_builds
requires:
- 'Experiment << matrix.exp >> Build'
- # TODO(wg-performance, #12128): This takes 30 mins and fails regularly.
- # - performance_tests:
- # <<: *push_builds_only
- # requires:
- # - 'Nomodule Build (Test)'
'Release':
jobs:
@@ -640,3 +694,10 @@ workflows:
- amp_release
context:
- release-build-uploader
+ - trigger_promote:
+ name: 'Trigger Promote'
+ <<: *release_builds_only
+ requires:
+ - 'Upload Release'
+ context:
+ - release-build-uploader
diff --git a/.circleci/get_pinned_chrome_version.sh b/.circleci/get_pinned_chrome_version.sh
index e83d83981001..51b6ff9b3445 100755
--- a/.circleci/get_pinned_chrome_version.sh
+++ b/.circleci/get_pinned_chrome_version.sh
@@ -46,12 +46,9 @@ echo "$(GREEN "Chrome version history URL is") $(CYAN "${CHROME_VERSION_HISTORY_
# Determine the Chrome version
# See https://developer.chrome.com/docs/versionhistory/guide
echo "$(GREEN "Determining Chrome version...")"
-CHROME_VERSION="$(curl -sS ${CHROME_VERSION_HISTORY_URL} | jq -r ".versions[]|.version" | grep -m 1 "${CHROME_MAJOR_VERSION}\.")"
-if [[ -z "$CHROME_VERSION" ]]; then
- echo "$(RED "Could not determine Chrome version")"
- exit 1
-fi
+CHROME_VERSION="$(curl -sS --retry 3 ${CHROME_VERSION_HISTORY_URL} | jq -r ".versions[]|.version" | grep -m 1 "${CHROME_MAJOR_VERSION}\.[[:digit:]]\+.[[:digit:]]\+.[[:digit:]]\+")"
echo "$(GREEN "Chrome version is") $(CYAN "${CHROME_VERSION}")"
-echo "export CHROME_VERSION=$CHROME_VERSION" >> $BASH_ENV
+# Workaround for https://github.com/CircleCI-Public/browser-tools-orb/issues/70
+echo "export ORB_PARAM_CHROME_VERSION=$CHROME_VERSION" >> $BASH_ENV
echo $(GREEN "Successfully determined pinned version of Chrome")
diff --git a/.circleci/get_pr_number.sh b/.circleci/get_pr_number.sh
index c77f38513fbf..b9cde864da92 100755
--- a/.circleci/get_pr_number.sh
+++ b/.circleci/get_pr_number.sh
@@ -9,8 +9,8 @@ err=0
GREEN() { echo -e "\033[0;32m$1\033[0m"; }
YELLOW() { echo -e "\033[0;33m$1\033[0m"; }
-# Push builds are only run against the main branch and amp-release branches.
-if [[ "$CIRCLE_BRANCH" == "main" || "$CIRCLE_BRANCH" =~ ^amp-release-* ]]; then
+# Push builds are only run against the main, nightly, and amp-release branches.
+if [[ "$CIRCLE_BRANCH" == "main" || "$CIRCLE_BRANCH" == "nightly" || "$CIRCLE_BRANCH" =~ ^amp-release-* ]]; then
echo $(GREEN "Nothing to do because $CIRCLE_BRANCH is not a PR branch.")
# Warn if the build is linked to a PR on a different repo (known CircleCI bug).
if [[ -n "$CIRCLE_PULL_REQUEST" && ! "$CIRCLE_PULL_REQUEST" =~ ^https://github.com/ampproject/amphtml* ]]; then
diff --git a/.circleci/install_microsoft_edge.sh b/.circleci/install_microsoft_edge.sh
index c7405d1fb295..99151e64a706 100755
--- a/.circleci/install_microsoft_edge.sh
+++ b/.circleci/install_microsoft_edge.sh
@@ -1,8 +1,7 @@
#!/bin/bash
#
-# Script used by AMP's CI builds to install Microsoft Edge Beta on CircleCI.
+# Script used by AMP's CI builds to install Microsoft Edge Stable on CircleCI.
# Reference: https://www.microsoftedgeinsider.com/en-us/download?platform=linux-deb
-# TODO(rsimha): Switch from Beta to Stable once it's available.
set -e
@@ -13,7 +12,7 @@ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microso
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main" > /etc/apt/sources.list.d/microsoft-edge-dev.list'
sudo rm microsoft.gpg
-sudo apt update && sudo apt install microsoft-edge-beta
-EDGE_BETA_BIN=`which microsoft-edge-beta`
-echo "export EDGE_BETA_BIN=${EDGE_BETA_BIN}" >> $BASH_ENV
+sudo apt update && sudo apt install microsoft-edge-stable
+EDGE_STABLE_BIN=`which microsoft-edge-stable`
+echo "export EDGE_STABLE_BIN=${EDGE_STABLE_BIN}" >> $BASH_ENV
echo $(GREEN "Installation complete.")
diff --git a/.circleci/install_validator_dependencies.sh b/.circleci/install_validator_dependencies.sh
index 0bc77becfee2..e6e13bbcd490 100755
--- a/.circleci/install_validator_dependencies.sh
+++ b/.circleci/install_validator_dependencies.sh
@@ -13,7 +13,7 @@ sudo mv bazel.gpg /etc/apt/trusted.gpg.d/
echo "deb [arch=amd64] https://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
echo $(GREEN "Updating and installing apt packages...")
-sudo apt update && sudo apt install bazel clang python3 python3-pip protobuf-compiler
+sudo apt update && sudo apt install bazel-5.4.0 clang python3 python3-pip protobuf-compiler
echo $(GREEN "Installing protobuf python module...")
-pip3 install protobuf
+pip3 install protobuf==3.19.4
diff --git a/.circleci/maybe_gracefully_halt.sh b/.circleci/maybe_gracefully_halt.sh
index 4fe3ea84330d..656388355701 100755
--- a/.circleci/maybe_gracefully_halt.sh
+++ b/.circleci/maybe_gracefully_halt.sh
@@ -15,7 +15,7 @@ if ls /tmp/restored-workspace/.CI_GRACEFULLY_HALT_* 1>/dev/null 2>&1; then
exit 0
fi
-if [[ ${EXP} && ${EXP} != 'base' ]]; then
+if [[ ${FLAVOR} && ${FLAVOR} != 'base' ]]; then
# Extract the commit SHA. For PR jobs, this is written to .CIRCLECI_MERGE_COMMIT.
if [[ -f /tmp/restored-workspace/.CIRCLECI_MERGE_COMMIT ]]; then
COMMIT_SHA="$(cat /tmp/restored-workspace/.CIRCLECI_MERGE_COMMIT)"
@@ -24,9 +24,9 @@ if [[ ${EXP} && ${EXP} != 'base' ]]; then
fi
# Do not proceed if the experiment config is missing a valid name, constant, or date.
- EXPERIMENT_JSON=$(curl -sS "https://raw.githubusercontent.com/ampproject/amphtml/${COMMIT_SHA}/build-system/global-configs/experiments-config.json" | jq ".experiment${EXP}")
+ EXPERIMENT_JSON=$(curl -sS "https://raw.githubusercontent.com/ampproject/amphtml/${COMMIT_SHA}/build-system/global-configs/experiments-config.json" | jq ".${FLAVOR}")
if ! echo "${EXPERIMENT_JSON}" | jq -e '.name,.define_experiment_constant,.expiration_date_utc'; then
- echo $(YELLOW "Experiment ${EXP} is misconfigured, or does not exist.")
+ echo $(YELLOW "Flavor ${FLAVOR} is misconfigured, or does not exist.")
echo $(GREEN "Gracefully halting this job")
circleci-agent step halt
exit 0
@@ -36,7 +36,7 @@ if [[ ${EXP} && ${EXP} != 'base' ]]; then
CURRENT_TIMESTAMP=$(date --utc +'%s')
EXPERIMENT_EXPIRATION_TIMESTAMP=$(date --utc --date $(echo "${EXPERIMENT_JSON}" | jq -er '.expiration_date_utc') +'%s')
if [[ $CURRENT_TIMESTAMP -gt $EXPERIMENT_EXPIRATION_TIMESTAMP ]]; then
- echo $(YELLOW "Experiment ${EXP} is expired.")
+ echo $(YELLOW "Flavor ${FLAVOR} is expired.")
echo $(GREEN "Gracefully halting this job")
circleci-agent step halt
exit 0
diff --git a/.circleci/restore_build_output.sh b/.circleci/restore_build_output.sh
index e94fbc0a1793..688d989dcba4 100755
--- a/.circleci/restore_build_output.sh
+++ b/.circleci/restore_build_output.sh
@@ -25,13 +25,6 @@ if [[ -d "${WORKSPACE_DIR}/builds" ]]; then
rsync -a "${RESTORED_DIR}/" "./${OUTPUT_DIR}"
fi
done
- # Bento components are compiled inside the extension source file.
- for RESTORED_COMPONENT_DIR in ${RESTORED_BUILD_DIR}/extensions/*/?.?/dist; do
- OUTPUT_DIR=${RESTORED_COMPONENT_DIR##$RESTORED_BUILD_DIR/}
- echo "*" $(GREEN "Merging") $(CYAN "${RESTORED_COMPONENT_DIR}") $(GREEN "into") $(CYAN "./${OUTPUT_DIR}")
- mkdir -p $RESTORED_DIR
- rsync -a "${RESTORED_COMPONENT_DIR}/" "./${OUTPUT_DIR}"
- done
done
else
echo $(YELLOW "Workspace does not contain any build outputs to restore")
diff --git a/.eslintplugin.js b/.eslint-plugin-local.js
similarity index 100%
rename from .eslintplugin.js
rename to .eslint-plugin-local.js
diff --git a/.eslintignore b/.eslintignore
index e5e331241b6b..3ff512febbea 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -19,8 +19,6 @@ validator/**
.*cache
.amp-dep-check
build
-build-system/tasks/performance/cache
-build-system/tasks/performance/results.json
dist
dist.3p
dist.tools
diff --git a/.eslintrc.js b/.eslintrc.js
index 5457c9ae8f8a..35cfcc7747ef 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,12 +1,12 @@
const fs = require('fs');
+const {
+ getImportResolver,
+} = require('./build-system/babel-config/import-resolver');
const {
forbiddenTermsGlobal,
forbiddenTermsSrcInclusive,
} = require('./build-system/test-configs/forbidden-terms');
-const {
- getImportResolver,
-} = require('./build-system/babel-config/import-resolver');
const importAliases = getImportResolver().alias;
@@ -28,7 +28,7 @@ function getExperimentGlobals() {
module.exports = {
'root': true,
- 'parser': '@babel/eslint-parser',
+ 'parser': '@typescript-eslint/parser',
'plugins': [
'chai-expect',
'import',
@@ -39,24 +39,25 @@ module.exports = {
'react',
'react-hooks',
'sort-destructure-keys',
- 'sort-requires',
+ '@typescript-eslint',
],
'env': {
'es6': true,
'browser': true,
},
'parserOptions': {
- 'ecmaVersion': 6,
'jsx': true,
'sourceType': 'module',
},
'globals': {
...getExperimentGlobals(),
'IS_ESM': 'readonly',
+ 'IS_SSR_CSS': 'readonly',
'IS_SXG': 'readonly',
'IS_MINIFIED': 'readonly',
'IS_PROD': 'readonly',
'INTERNAL_RUNTIME_VERSION': 'readonly',
+ 'AMP_STORY_SUPPORTED_LANGUAGES': 'readonly',
'AMP': 'readonly',
'context': 'readonly',
'global': 'readonly',
@@ -165,7 +166,7 @@ module.exports = {
'local/await-expect': 2,
'local/camelcase': 2,
'local/closure-type-primitives': 2,
- 'local/dict-string-keys': 2,
+ 'local/core-dom-jsx': 2,
'local/enums': 2,
'local/get-mode-usage': 2,
'local/html-template': 2,
@@ -176,7 +177,6 @@ module.exports = {
'local/no-bigint': 2,
'local/no-deep-destructuring': 2,
'local/no-duplicate-import': 2,
- 'local/no-duplicate-name-typedef': 2,
'local/no-dynamic-import': 2,
'local/no-es2015-number-props': 2,
'local/no-export-side-effect': 2,
@@ -197,7 +197,6 @@ module.exports = {
'local/no-mixed-interpolation': 2,
'local/no-mixed-operators': 2,
'local/no-module-exports': 2,
- 'local/no-static-this': 2,
'local/no-style-display': 2,
'local/no-style-property-setting': 2,
'local/no-swallow-return-from-allow-console-error': 2,
@@ -255,12 +254,39 @@ module.exports = {
'no-native-reassign': 2,
'no-redeclare': 2,
'no-restricted-globals': [2, 'error', 'event', 'Animation'],
+ 'no-restricted-syntax': [
+ 2,
+ // Ban all TS features that don't have a direct ECMAScript equivalent.
+ {
+ 'selector': 'TSEnumDeclaration',
+ 'message': 'Enums are banned.',
+ },
+ {
+ 'selector': 'TSModuleDeclaration',
+ 'message': 'Namespaces are banned.',
+ },
+ {
+ 'selector': 'TSParameterProperty',
+ 'message': 'Parameter properties are banned.',
+ },
+ {
+ 'selector': 'Decorator',
+ 'message': 'Decorators are banned.',
+ },
+ {
+ 'selector': 'PropertyDefinition[declare="false"]:not([value])',
+ 'message':
+ 'Class properties should be declared or initialized. ' +
+ 'See https://github.com/ampproject/amphtml/pull/37387#discussion_r791232943',
+ },
+ ],
'no-script-url': 2,
'no-self-compare': 2,
'no-sequences': 2,
'no-throw-literal': 2,
'no-unused-expressions': 0,
- 'no-unused-vars': [
+ 'no-unused-vars': 'off',
+ '@typescript-eslint/no-unused-vars': [
2,
{
'argsIgnorePattern': '^(var_args$|opt_|unused)',
@@ -299,9 +325,7 @@ module.exports = {
],
'sort-destructure-keys/sort-destructure-keys': 2,
'import/order': [
- // Disabled for now, so individual folders can opt-in one PR at a time and
- // minimize disruption/merge conflicts
- 0,
+ 2,
{
// Split up imports groups with exactly one newline
'newlines-between': 'always',
@@ -341,9 +365,19 @@ module.exports = {
'ignoreDeclarationSort': true,
},
],
- 'sort-requires/sort-requires': 2,
},
'overrides': [
+ {
+ 'files': ['**/*.ts', '**/*.tsx'],
+ 'rules': {
+ 'require-jsdoc': 0,
+ 'jsdoc/require-param': 0,
+ 'jsdoc/require-param-type': 0,
+ 'jsdoc/require-returns': 0,
+ 'no-undef': 0,
+ 'import/no-unresolved': 0,
+ },
+ },
{
'files': [
'test/**/*.js',
@@ -432,7 +466,7 @@ module.exports = {
'rules': {
'no-var': 0,
'no-undef': 0,
- 'no-unused-vars': 0,
+ '@typescript-eslint/no-unused-vars': 0,
'prefer-const': 0,
'require-jsdoc': 0,
'jsdoc/check-tag-names': 0,
@@ -452,13 +486,18 @@ module.exports = {
},
},
{
- 'files': ['3p/**/*.js', 'src/**/*.js', 'test/**/*.js', 'testing/**/*.js'],
- 'rules': {'import/order': 2},
+ 'files': ['build-system/**/*.js'],
+ 'rules': {'import/order': 0},
},
{
- 'files': ['src/preact/**', 'extensions/**/1.0/**', '**/storybook/**'],
+ 'files': ['extensions/**/1.0/**', 'src/preact/**', '**/storybook/**'],
'rules': {'local/preact-preferred-props': 2},
},
+ {
+ // src/preact can directly import from 'preact' without issue.
+ 'files': ['src/preact/**'],
+ 'rules': {'local/no-import': 0},
+ },
{
// Files that use JSX for plain DOM nodes instead of Preact
'files': [
@@ -469,5 +508,10 @@ module.exports = {
],
'rules': {'local/preact': [2, '#core/dom/jsx']},
},
+ {
+ // Allow sinon stub for release tagger tests
+ 'files': ['build-system/release-tagger/test/**'],
+ 'rules': {'local/no-forbidden-terms': 0},
+ },
],
};
diff --git a/.github/ISSUE_TEMPLATE/bento-component-tracker.yml b/.github/ISSUE_TEMPLATE/bento-component-tracker.yml
deleted file mode 100644
index 2b939957e9b9..000000000000
--- a/.github/ISSUE_TEMPLATE/bento-component-tracker.yml
+++ /dev/null
@@ -1,97 +0,0 @@
----
-name: Bento Component Tracker
-description: Track a new Bento component.
-labels: 'WG: bento'
-title: "\U0001F371 [amp-component-name:version] Bento tracking issue"
-body:
- - type: markdown
- id: header
- attributes:
- value: |
- This is a tracker meant to be used by AMP developers working on new Bento components.
- - See AMP's [documentation](https://github.com/ampproject/amphtml/blob/main/docs/building-a-bento-amp-extension.md) to learn about how to write a Bento component.
- - See [additional documentation](https://github.com/ampproject/amphtml/blob/main/docs/building-a-bento-video-player.md) for considerations when building a Bento video player.
- - See past [tracking issues](https://github.com/ampproject/amphtml/issues?q=is%3Aopen+label%3A%22WG%3A+bento%22+%22bento+tracking+issue%22) for information about other Bento components.
- - type: textarea
- id: requirements
- attributes:
- label: High-Level Requirements
- description: Matrix of considerations to be addressed.
- value: |
-
-
-
- _To be updated as information becomes available._
-
- | Consideration | Ready When | Status |
- | ----------------------- | ------------------------------------------ | ------- |
- | Component Compatibility | Feature checklist is covered | ✅ / ✖️ |
- | Testing | Unit tests and pre-existing e2e tests pass | ✅ / ✖️ |
- | Internationalization | | ✅ / ✖️ |
- | Analytics | | ✅ / ✖️ |
- | Accessibility | Audit performed | ✅ / ✖️ |
- | Page Experience | Audit performed | ✅ / ✖️ |
- | Documentation | Written | ✅ / ✖️ |
- | Storybook | Samples written in Preact and AMP | ✅ / ✖️ |
- validations:
- required: true
- - type: textarea
- id: feature_checklist
- attributes:
- label: Feature Checklist
- description: Checklist of features of the component.
- value: |
- _To be updated as information becomes available._
-
- ### Existing attributes
- - [ ] `attribute 1`
- - [ ] `attribute 2`
- - [ ] `attribute 3`
-
- ### Actions
- - [ ] `action 1`
- - [ ] `action 2`
- - [ ] `action 3`
-
- ### Events
- - [ ] `event 1`
- - [ ] `event 2`
- - [ ] `event 3`
-
- ### Analytics Events
- - [ ] `analytics event 1`
- - [ ] `analytics event 2`
- - [ ] `analytics event 3`
- validations:
- required: true
- - type: textarea
- id: migration_notes
- attributes:
- label: Migration Notes
- description: Relevant information for document authors using the classic version of the component.
- placeholder: Provide information about any API changes that might prevent document authors from upgrading a classic version component to the new Bento version.
- validations:
- required: true
- - type: textarea
- id: open_tasks
- attributes:
- label: Open Tasks
- description: Checklist of tasks to be completed before this component can be shipped.
- value: |
- _To be updated as information becomes available._
-
- - [ ] open task 1
- - [ ] open task 2
- - [ ] open task 3
- - [ ] open task 4
- - [ ] open task 5
- validations:
- required: true
- - type: textarea
- id: notifications
- attributes:
- label: Notifications
- description: Add working groups or individuals you want to notify about this component.
- value: /cc @ampproject/wg-bento
- validations:
- required: true
diff --git a/.github/ISSUE_TEMPLATE/cherry-pick-request.yml b/.github/ISSUE_TEMPLATE/cherry-pick-request.yml
index 905641ec05b5..feec1cd320d1 100644
--- a/.github/ISSUE_TEMPLATE/cherry-pick-request.yml
+++ b/.github/ISSUE_TEMPLATE/cherry-pick-request.yml
@@ -36,11 +36,10 @@ body:
validations:
required: true
- type: input
- id: release_tracker
+ id: amp_versions
attributes:
- label: Release Tracker(s)
- description: The [tracker issue(s)](https://github.com/ampproject/amphtml/labels/Type%3A%20Release) for the release to which the cherry-pick will be applied. Remember to update the issue title with this info.
- placeholder: 'e.g. #44444, #55555'
+ label: AMP Version(s)
+ description: The AMP version(s) to which the cherry-pick will be applied.
validations:
required: true
- type: dropdown
diff --git a/.github/ISSUE_TEMPLATE/ga4-bug-report.yml b/.github/ISSUE_TEMPLATE/ga4-bug-report.yml
new file mode 100644
index 000000000000..58f6603627f0
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/ga4-bug-report.yml
@@ -0,0 +1,74 @@
+---
+name: Google Analytics 4 and AMP Bug Report
+description: Report a bug in GA4 and AMP integration.
+labels: ['Type: Bug', 'Component: amp-analytics', 'Component: GA4']
+title: "\U0001F41B Google Analytics 4 Related Bug: "
+body:
+ - type: markdown
+ id: header
+ attributes:
+ value: |
+ Thanks for filling out this bug report. Bugs related to Google Analytics 4 and amp-analytics can be reported using the form below.
+ - Bugs related to the [AMP](https://amp.dev) format and cache can be reported using the form below.
+ - Bugs related to the [AMP WordPress Plugin](https://wordpress.org/plugins/amp/) can be reported at the [support forum](https://wordpress.org/support/plugin/amp/) or at the [`amp-wp`](https://github.com/ampproject/amp-wp/issues) repository.
+ - Questions about AMP uage can be asked at the [`#using-amp`](https://amphtml.slack.com/archives/C9HPA6HGB) Slack channel or at the [`amp-html`](http://stackoverflow.com/questions/tagged/amp-html) tag at Stack Overflow.
+ - Questions about Google Search can be asked at Google's [Help Community](https://goo.gl/utQ1KZ).
+ - type: textarea
+ id: description
+ attributes:
+ label: Description
+ description: A brief description of the bug.
+ placeholder: Describe the expected vs. the current behavior, so this issue can be directed to the correct working group for investigation.
+ validations:
+ required: true
+ - type: input
+ id: example
+ attributes:
+ label: URL where we can debug and reproduce the problem
+ description: If applicable, give an example web page where we can reproduce the problem.
+ placeholder: e.g. https://amp-dev.cdn.ampproject.org/c/s/amp.dev/
+ - type: textarea
+ id: repro_steps
+ attributes:
+ label: Reproduction Steps
+ description: Step-by-step instructions for reproducing the issue.
+ placeholder: Provide a publicly accessible URL and a reduced set of steps that clearly demonstrate the issue.
+ validations:
+ required: true
+ - type: textarea
+ id: logs
+ attributes:
+ label: Relevant Logs
+ description: Relevant logging output.
+ placeholder: Paste any plain-text logs here (e.g. console warnings or errors from Chrome DevTools). They will automatically be formatted as code.
+ render: shell
+ - type: dropdown
+ id: browsers
+ attributes:
+ label: Browser(s) Affected
+ description: If applicable, specify which browser(s) are affected. Select one or more options below.
+ multiple: true
+ options:
+ - Chrome
+ - Firefox
+ - Safari
+ - Edge
+ - UC Browser
+ - type: input
+ id: operating_systems
+ attributes:
+ label: OS(s) Affected
+ description: If applicable, specify which operating system(s) are affected.
+ placeholder: e.g. Android 11
+ - type: input
+ id: devices
+ attributes:
+ label: Device(s) Affected
+ description: If applicable, specify which device(s) are affected.
+ placeholder: e.g. Pixel 3
+ - type: input
+ id: version
+ attributes:
+ label: AMP Version Affected
+ description: If applicable, specify which version is affected, in the format YYMMDDHHMMXXX.
+ placeholder: e.g. 2101280515000
diff --git a/.github/ISSUE_TEMPLATE/release-tracker.yml b/.github/ISSUE_TEMPLATE/release-tracker.yml
deleted file mode 100644
index 6f4b60ad5fb0..000000000000
--- a/.github/ISSUE_TEMPLATE/release-tracker.yml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-name: Release Tracker
-description: Manually track a new AMP release. (This is automatically updated by the release-tagger GitHub Action).
-labels: 'Type: Release'
-title: "\U0001F684 Release VERSION"
-body:
- - type: textarea
- id: amp_version
- attributes:
- label: AMP Version
- description: Replace VERSION with AMP version.
- value: |
- [VERSION](https://github.com/ampproject/amphtml/releases/tag/VERSION)
- validations:
- required: true
- - type: textarea
- id: promotions
- attributes:
- label: Promotions
- description: Replace `VERSION` with AMP version and `` with CL submit time.
- value: |
- - [ ] VERSION promoted to Experimental and Beta (opt-in) channels
- - [ ] VERSION promoted to Experimental and Beta (1% traffic) channels
- - [ ] VERSION promoted to Stable channel
- - [ ] VERSION promoted to LTS channel
-
- /cc @ampproject/release-on-duty
- validations:
- required: true
diff --git a/.github/codeql/config.yml b/.github/codeql/config.yml
new file mode 100644
index 000000000000..9cef4632165b
--- /dev/null
+++ b/.github/codeql/config.yml
@@ -0,0 +1,2 @@
+paths-ignore:
+ - 'extensions/**/test/**'
diff --git a/.github/create_issue_on_error.md b/.github/create_issue_on_error.md
new file mode 100644
index 000000000000..2993ac83cf8f
--- /dev/null
+++ b/.github/create_issue_on_error.md
@@ -0,0 +1,8 @@
+---
+title: 'Workflow "{{ env.WORKFLOW_NAME }}" failed (run_id: {{ env.RUN_ID }})'
+---
+
+The workflow "**{{ env.WORKFLOW_NAME }}**" failed. See logs:
+https://github.com/{{ env.REPO_SLUG }}/actions/runs/{{ env.RUN_ID }}
+
+// cc: {{ env.MENTION }} — please triage and resolve this issue
diff --git a/.github/stale.yml b/.github/stale.yml
index b8ae45e3fa44..d81b2367de32 100644
--- a/.github/stale.yml
+++ b/.github/stale.yml
@@ -1,4 +1,4 @@
-daysUntilStale: 540 # 1.5Y - 7d
+daysUntilStale: 358 # 1Y - 7d
daysUntilClose: 7
staleLabel: Stale
markComment: >
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
new file mode 100644
index 000000000000..09160f77f7d0
--- /dev/null
+++ b/.github/workflows/codeql.yml
@@ -0,0 +1,49 @@
+name: 'CodeQL'
+
+on:
+ push:
+ branches: ['main']
+ pull_request:
+ # The branches below must be a subset of the branches above
+ branches: ['main']
+ schedule:
+ - cron: '0 0 * * 1'
+
+permissions:
+ contents: read
+
+jobs:
+ analyze:
+ name: Analyze
+ runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+
+ strategy:
+ fail-fast: false
+ matrix:
+ # TODO: add `cpp` for Validator; don't forget to add a build step
+ language: ['go', 'javascript', 'python', 'typescript']
+
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
+
+ - name: Checkout repository
+ uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13
+ with:
+ config-file: ./.github/codeql/config.yml
+ languages: ${{ matrix.language }}
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13
+ with:
+ category: '/language:${{matrix.language}}'
diff --git a/.github/workflows/cross-platform-builds.yml b/.github/workflows/cross-platform-builds.yml
index 221996e84cce..75e9836b916a 100644
--- a/.github/workflows/cross-platform-builds.yml
+++ b/.github/workflows/cross-platform-builds.yml
@@ -5,6 +5,9 @@ on:
branches:
- main
+permissions:
+ contents: read
+
jobs:
compile:
if: github.repository == 'ampproject/amphtml'
@@ -12,15 +15,48 @@ jobs:
matrix:
platform: [ubuntu, macos, windows]
flavor: [Build, Dist]
+ fail-fast: false
runs-on: ${{ matrix.platform }}-latest
steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
+
- name: Checkout Repo
- uses: actions/checkout@v2
+ uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
- name: Set Up Node
- uses: actions/setup-node@v2
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
- node-version: 16
+ node-version: lts/*
- name: Install Dependencies
run: bash ./.github/workflows/install_dependencies.sh
- name: ${{ matrix.flavor }}
run: node build-system/pr-check/cross-platform-builds.js --flavor=${{ matrix.flavor }}
+
+ create-issue-on-error:
+ if: failure()
+ needs: compile
+ permissions:
+ contents: read
+ issues: write
+ runs-on: ubuntu-latest
+ environment: create_issue_on_error
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
+
+ - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+
+ - name: Create issue on error
+ uses: JasonEtco/create-an-issue@1b14a70e4d8dc185e5cc76d3bec9eab20257b2c5 # v2.9.2
+ with:
+ filename: .github/create_issue_on_error.md
+ env:
+ GITHUB_TOKEN: ${{ secrets.AMPPROJECTBOT }}
+ WORKFLOW_NAME: ${{ github.workflow }}
+ MENTION: '@ampproject/release-on-duty'
+ REPO_SLUG: ${{ github.repository }}
+ RUN_ID: ${{ github.run_id }}
diff --git a/.github/workflows/cut-nightly.yml b/.github/workflows/cut-nightly.yml
index cb3a60dd997a..f053b0cc0f40 100644
--- a/.github/workflows/cut-nightly.yml
+++ b/.github/workflows/cut-nightly.yml
@@ -6,24 +6,33 @@ on:
schedule:
# 1 a.m. PST / 12 a.m. PDT, Tuesdays through Saturdays.
- cron: '0 8 * * 2-6'
+ workflow_dispatch:
+
+permissions:
+ contents: read
jobs:
cut-nightly:
- environment: release_tagger
+ environment: cut_nightly
if: github.repository == 'ampproject/amphtml'
name: Cut Nightly Branch
runs-on: ubuntu-latest
steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
+
- name: Checkout Repo
- uses: actions/checkout@v2
+ uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
with:
fetch-depth: 100
- name: Set Up Node
- uses: actions/setup-node@v2
+ uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
- node-version: 16
+ node-version: lts/*
- name: Set Up Environment
run: sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
@@ -35,3 +44,30 @@ jobs:
run: node --unhandled-rejections=strict build-system/release-workflows/cut-nightly.js
env:
GITHUB_TOKEN: ${{ secrets.AMPPROJECTBOT }}
+
+ create-issue-on-error:
+ if: failure()
+ needs: cut-nightly
+ permissions:
+ contents: read
+ issues: write
+ runs-on: ubuntu-latest
+ environment: create_issue_on_error
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
+
+ - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+
+ - name: Create issue on error
+ uses: JasonEtco/create-an-issue@1b14a70e4d8dc185e5cc76d3bec9eab20257b2c5 # v2.9.2
+ with:
+ filename: .github/create_issue_on_error.md
+ env:
+ GITHUB_TOKEN: ${{ secrets.AMPPROJECTBOT }}
+ WORKFLOW_NAME: ${{ github.workflow }}
+ MENTION: '@ampproject/release-on-duty'
+ REPO_SLUG: ${{ github.repository }}
+ RUN_ID: ${{ github.run_id }}
diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml
new file mode 100644
index 000000000000..9ad36ee2b313
--- /dev/null
+++ b/.github/workflows/dependency-review.yml
@@ -0,0 +1,27 @@
+# Dependency Review Action
+#
+# This Action will scan dependency manifest files that change as part of a Pull Request,
+# surfacing known-vulnerable versions of the packages declared or updated in the PR.
+# Once installed, if the workflow run is marked as required,
+# PRs introducing known-vulnerable packages will be blocked from merging.
+#
+# Source repository: https://github.com/actions/dependency-review-action
+name: 'Dependency Review'
+on: [pull_request]
+
+permissions:
+ contents: read
+
+jobs:
+ dependency-review:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
+
+ - name: 'Checkout Repository'
+ uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ - name: 'Dependency Review'
+ uses: actions/dependency-review-action@5a2ce3f5b92ee19cbb1541a4984c76d921601d7c # v4.3.4
diff --git a/.github/workflows/publish-npm-packages.yml b/.github/workflows/publish-npm-packages.yml
deleted file mode 100644
index a50f8cd6a726..000000000000
--- a/.github/workflows/publish-npm-packages.yml
+++ /dev/null
@@ -1,78 +0,0 @@
-name: Publish Bento Packages on npm
-on:
- workflow_dispatch:
- inputs:
- ampversion:
- description: 'AMP version'
- required: true
- tag:
- description: 'npm package tag (latest | nightly)'
- required: true
-env:
- REPO: 'https://raw.githubusercontent.com/ampproject/amphtml/main'
- DIR: 'build-system/npm-publish'
-jobs:
- setup:
- runs-on: ubuntu-latest
- outputs:
- extensions: ${{ steps.get-extensions.outputs.extensions }}
- steps:
- - name: Print inputs
- run: |
- echo "AMP version: ${{ github.event.inputs.ampversion }}"
- echo "npm tag: ${{ github.event.inputs.tag }}"
- - uses: actions/checkout@v2
- with:
- ref: ${{ github.events.inputs.ampversion }}
- - name: Get latest scripts
- run: wget -q "${{ env.REPO }}/${{ env.DIR }}/get-extensions.js" -O ${{ env.DIR }}/get-extensions.js
- - name: Get extensions to publish
- id: get-extensions
- run: |
- EXTENSIONS=$(node ${{ env.DIR }}/get-extensions.js)
- echo "::set-output name=extensions::{\"include\":${EXTENSIONS}}"
- publish:
- if: github.repository == 'ampproject/amphtml'
- environment: bento_publishing
- needs: setup
- runs-on: ubuntu-latest
- strategy:
- matrix: ${{ fromJson(needs.setup.outputs.extensions) }}
- fail-fast: false
- steps:
- - uses: actions/checkout@v2
- with:
- ref: ${{ github.events.inputs.ampversion }}
- - uses: actions/setup-node@v2
- with:
- registry-url: https://registry.npmjs.org
- node-version: 16
- - name: Install dependencies
- run: bash ./.github/workflows/install_dependencies.sh
- - name: Get latest scripts
- run: |
- wget -q "${{ env.REPO }}/${{ env.DIR }}/utils.js" -O ${{ env.DIR }}/utils.js
- wget -q "${{ env.REPO }}/${{ env.DIR }}/build-npm-binaries.js" -O ${{ env.DIR }}/build-npm-binaries.js
- wget -q "${{ env.REPO }}/${{ env.DIR }}/write-package-files.js" -O ${{ env.DIR }}/write-package-files.js
- - name: Build package
- run: |
- node ${{ env.DIR }}/build-npm-binaries.js ${{ matrix.extension }}
- node ${{ env.DIR }}/write-package-files.js ${{ matrix.extension }} ${{ github.event.inputs.ampversion }} ${{ matrix.version }}
- - name: Publish package for Nightly releases
- if: github.event.inputs.tag != 'latest'
- run: npm publish ./extensions/${{ matrix.extension }}/${{ matrix.version }} --access public --tag ${{ github.event.inputs.tag }}
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- - name: Tag package as latest for Stable releases
- if: github.event.inputs.tag == 'latest'
- run: |
- NPM_PACKAGE=$(jq -r .name ./extensions/${{ matrix.extension }}/${{ matrix.version }}/package.json)
- NPM_VERSION=$(jq -r .version ./extensions/${{ matrix.extension }}/${{ matrix.version }}/package.json)
- echo "Processing ${NPM_PACKAGE}@${NPM_VERSION}"
- if [[ $(npm view ${NPM_PACKAGE}@${NPM_VERSION}) ]]; then
- npm dist-tag add ${NPM_PACKAGE}@${NPM_VERSION} latest
- else
- npm publish ./extensions/${{ matrix.extension }}/${{ matrix.version }} --access public --tag latest
- fi
- env:
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.github/workflows/release-tagger.yml b/.github/workflows/release-tagger.yml
index 8f87865c9215..13c821d93ffe 100644
--- a/.github/workflows/release-tagger.yml
+++ b/.github/workflows/release-tagger.yml
@@ -14,21 +14,26 @@ on:
channel:
description: 'release channel (beta-opt-in | beta-percent | stable | lts)'
required: true
- time:
- description: 'action time'
- required: true
sha:
description: 'commit sha'
required: true
+permissions:
+ contents: read
+
jobs:
tagger:
environment: release_tagger
runs-on: ubuntu-latest
steps:
- - uses: actions/setup-node@v2
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
+
+ - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
with:
- node-version: 16
- - uses: actions/checkout@v2
+ node-version: lts/*
+ - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
- run: bash ./.github/workflows/install_dependencies.sh
- name: Run tagger
run: |
@@ -37,7 +42,33 @@ jobs:
--head ${{ github.event.inputs.head }} \
--base ${{ github.event.inputs.base }} \
--channel ${{ github.event.inputs.channel }} \
- --time ${{ github.event.inputs.time }} \
--sha ${{ github.event.inputs.sha }}
env:
GITHUB_TOKEN: ${{ secrets.AMPPROJECTBOT }}
+
+ create-issue-on-error:
+ if: failure()
+ needs: tagger
+ permissions:
+ contents: read
+ issues: write
+ runs-on: ubuntu-latest
+ environment: create_issue_on_error
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
+
+ - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+
+ - name: Create issue on error
+ uses: JasonEtco/create-an-issue@1b14a70e4d8dc185e5cc76d3bec9eab20257b2c5 # v2.9.2
+ with:
+ filename: .github/create_issue_on_error.md
+ env:
+ GITHUB_TOKEN: ${{ secrets.AMPPROJECTBOT }}
+ WORKFLOW_NAME: ${{ github.workflow }}
+ MENTION: '@ampproject/wg-infra'
+ REPO_SLUG: ${{ github.repository }}
+ RUN_ID: ${{ github.run_id }}
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
new file mode 100644
index 000000000000..81784684028b
--- /dev/null
+++ b/.github/workflows/scorecard.yml
@@ -0,0 +1,77 @@
+# This workflow uses actions that are not certified by GitHub. They are provided
+# by a third-party and are governed by separate terms of service, privacy
+# policy, and support documentation.
+
+name: Scorecard supply-chain security
+on:
+ # For Branch-Protection check. Only the default branch is supported. See
+ # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
+ branch_protection_rule:
+ # To guarantee Maintained check is occasionally updated. See
+ # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
+ schedule:
+ - cron: '16 14 * * 1'
+ push:
+ branches: ['main']
+
+# Declare default permissions as read only.
+permissions: read-all
+
+jobs:
+ analysis:
+ name: Scorecard analysis
+ runs-on: ubuntu-latest
+ permissions:
+ # Needed to upload the results to code-scanning dashboard.
+ security-events: write
+ # Needed to publish results and get a badge (see publish_results below).
+ id-token: write
+ # Uncomment the permissions below if installing in a private repository.
+ # contents: read
+ # actions: read
+
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
+
+ - name: 'Checkout code'
+ uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+ with:
+ persist-credentials: false
+
+ - name: 'Run analysis'
+ uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0
+ with:
+ results_file: results.sarif
+ results_format: sarif
+ # (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
+ # - you want to enable the Branch-Protection check on a *public* repository, or
+ # - you are installing Scorecard on a *private* repository
+ # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.
+ repo_token: ${{ secrets.SCORECARD_TOKEN }}
+
+ # Public repositories:
+ # - Publish results to OpenSSF REST API for easy access by consumers
+ # - Allows the repository to include the Scorecard badge.
+ # - See https://github.com/ossf/scorecard-action#publishing-results.
+ # For private repositories:
+ # - `publish_results` will always be set to `false`, regardless
+ # of the value entered here.
+ publish_results: true
+
+ # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
+ # format to the repository Actions tab.
+ - name: 'Upload artifact'
+ uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
+ with:
+ name: SARIF file
+ path: results.sarif
+ retention-days: 5
+
+ # Upload the results to GitHub's code scanning dashboard.
+ - name: 'Upload to code-scanning'
+ uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13
+ with:
+ sarif_file: results.sarif
diff --git a/.github/workflows/status-page.yml b/.github/workflows/status-page.yml
index 59bf3f2f4266..1d126e19f1c0 100644
--- a/.github/workflows/status-page.yml
+++ b/.github/workflows/status-page.yml
@@ -4,16 +4,24 @@ on:
types: [opened]
issue_comment:
types: [edited]
+permissions:
+ contents: read
+
jobs:
status-page:
if: contains(github.event.issue.title, '🌸 Cherry-pick request')
runs-on: ubuntu-latest
environment: status_page
steps:
- - uses: actions/setup-node@v2
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
- node-version: 16
- - uses: actions/checkout@v2
+ egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
+
+ - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4
+ with:
+ node-version: lts/*
+ - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
- name: Add progress comment to cherry-pick issue for Stable and LTS
if: github.event_name == 'issues' && github.event.action == 'opened'
run: |
@@ -33,3 +41,30 @@ jobs:
COMMENT_AFTER: ${{ github.event.comment.body }}
STATUS_PAGE_ID: ${{ secrets.STATUS_PAGE_ID }}
STATUS_PAGE_TOKEN: ${{ secrets.STATUS_PAGE_TOKEN }}
+
+ create-issue-on-error:
+ if: failure()
+ needs: status-page
+ permissions:
+ contents: read
+ issues: write
+ runs-on: ubuntu-latest
+ environment: create_issue_on_error
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
+
+ - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
+
+ - name: Create issue on error
+ uses: JasonEtco/create-an-issue@1b14a70e4d8dc185e5cc76d3bec9eab20257b2c5 # v2.9.2
+ with:
+ filename: .github/create_issue_on_error.md
+ env:
+ GITHUB_TOKEN: ${{ secrets.AMPPROJECTBOT }}
+ WORKFLOW_NAME: ${{ github.workflow }}
+ MENTION: '@ampproject/wg-infra'
+ REPO_SLUG: ${{ github.repository }}
+ RUN_ID: ${{ github.run_id }}
diff --git a/.github/workflows/sweep-experiments.yml b/.github/workflows/sweep-experiments.yml
deleted file mode 100644
index 4d093ff48e9e..000000000000
--- a/.github/workflows/sweep-experiments.yml
+++ /dev/null
@@ -1,79 +0,0 @@
-# Executes `amp sweep-experiments` on a schedule.
-# If experiments are swept, a PR is created.
-
-name: Sweep Experiments
-
-on:
- schedule:
- # First day of the month at 00:00:00
- - cron: '0 0 1 * *'
-
-jobs:
- sweep-experiments:
- if: github.repository == 'ampproject/amphtml'
- name: Sweep Experiments
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout Repo
- uses: actions/checkout@v2
- with:
- fetch-depth: 0
-
- - name: Set Up Node
- uses: actions/setup-node@v2
- with:
- node-version: 16
-
- - name: Set Up Environment
- run: sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
-
- - name: Install Dependencies
- run: npm ci
-
- - name: Sweep
- id: sweep
- run: |
- git config --global user.name "${GITHUB_ACTOR}"
- git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com"
-
- amp sweep-experiments
-
- title=$(git log -1 --format=%s)
- title="${title//'%'/'%25'}"
- title="${title//$'\n'/'%0A'}"
- title="${title//$'\r'/'%0D'}"
- echo "::set-output name=title::$(echo "$title")"
-
- body=$(git log -1 --format=%b)
- body="${body//'%'/'%25'}"
- body="${body//$'\n'/'%0A'}"
- body="${body//$'\r'/'%0D'}"
- echo "::set-output name=body::$(echo "$body")"
-
- hash=$(git log -1 --format=%h)
- hash="${hash//'%'/'%25'}"
- hash="${hash//$'\n'/'%0A'}"
- hash="${hash//$'\r'/'%0D'}"
- echo "::set-output name=branch::$(echo "sweep-experiments-${hash}")"
-
- - name: Create Pull Request
- id: pull-request
- uses: peter-evans/create-pull-request@v3
- with:
- draft: true
- title: ${{ steps.sweep.outputs.title }}
- body: ${{ steps.sweep.outputs.body }}
- branch: ${{ steps.sweep.outputs.branch }}
-
- - name: Comment on Pull Request
- if: ${{ steps.pull-request.outputs.pull-request-number }}
- uses: peter-evans/create-or-update-comment@v1
- with:
- issue-number: ${{ steps.pull-request.outputs.pull-request-number }}
- body: |
- You may checkout this pull request to follow-up manually:
-
- ```
- git checkout -t upstream/${{ steps.sweep.outputs.branch }}
- ```
diff --git a/.github/workflows/sync-client-side-experiments-config-to-cdn.yml b/.github/workflows/sync-client-side-experiments-config-to-cdn.yml
deleted file mode 100644
index fc7a99eb3915..000000000000
--- a/.github/workflows/sync-client-side-experiments-config-to-cdn.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-name: CDN config sync
-
-on:
- push:
- branches:
- - main
- paths:
- - build-system/global-configs/client-side-experiments-config.json
-
-jobs:
- sync:
- if: github.repository == 'ampproject/amphtml'
- name: client-side-experiments-config.json
- runs-on: ubuntu-latest
- environment: wrangler
-
- steps:
- - name: Checkout Repo
- uses: actions/checkout@v2
- with:
- fetch-depth: 1
-
- - name: Install Dependencies
- run: npm i -g @cloudflare/wrangler
-
- - name: ⭐ Sync client-side-experiments-config.json to the CDN ⭐
- run: wrangler kv:key put AMP_EXP "$(cat build-system/global-configs/client-side-experiments-config.json)" --config .github/workflows/wrangler.toml --binding AMP_EXP
- env:
- CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
- CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
diff --git a/.github/workflows/sync-versioning-to-cdn.yml b/.github/workflows/sync-versioning-to-cdn.yml
deleted file mode 100644
index ee3b965a9ab6..000000000000
--- a/.github/workflows/sync-versioning-to-cdn.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-name: CDN config sync
-
-on:
- push:
- branches:
- - main
- paths:
- - build-system/global-configs/versioning.json
-
-jobs:
- sync:
- if: github.repository == 'ampproject/amphtml'
- name: versioning.json
- runs-on: ubuntu-latest
- environment: wrangler
-
- steps:
- - name: Checkout Repo
- uses: actions/checkout@v2
- with:
- fetch-depth: 1
-
- - name: Install Dependencies
- run: npm i -g @cloudflare/wrangler
-
- - name: ⭐ Sync versioning.json to the CDN ⭐
- run: |
- for CHANNEL in $(jq 'keys[]' build-system/global-configs/versioning.json --raw-output)
- do
- RTV=$(jq ".[\"${CHANNEL}\"]" build-system/global-configs/versioning.json --raw-output)
- if [[ RTV != "null" ]]
- then
- echo "Setting ${CHANNEL} to ${RTV}"
- wrangler kv:key put "${CHANNEL}" "${RTV}" --config .github/workflows/wrangler.toml --binding RTV
- else
- echo "Unsetting ${CHANNEL}"
- wrangler kv:key delete "${CHANNEL}" --config .github/workflows/wrangler.toml --binding RTV --force
- fi
- done
- env:
- CF_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}
- CF_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
diff --git a/.github/workflows/update-session-issues.yml b/.github/workflows/update-session-issues.yml
index 8fa2fe3fb518..2f22bca167b6 100644
--- a/.github/workflows/update-session-issues.yml
+++ b/.github/workflows/update-session-issues.yml
@@ -8,16 +8,25 @@ on:
schedule:
- cron: '30 16,17 * * 3' # Africa/Europe/western Asia
- cron: '0 21,22 * * 3' # Americas
- - cron: '0 1,2 * * 4' # Asia/Oceania
+
+permissions:
+ contents: read
jobs:
update-session-issues:
+ permissions:
+ issues: write
if: github.repository == 'ampproject/amphtml'
name: Update Session Issues
runs-on: ubuntu-latest
steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
+ with:
+ egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs
+
- name: Checkout Repo
- uses: actions/checkout@v2
+ uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
- name: Update Session Issues
run: |
node ./build-system/common/update-session-issues
diff --git a/.github/workflows/wrangler.toml b/.github/workflows/wrangler.toml
deleted file mode 100644
index 16efb1c5052c..000000000000
--- a/.github/workflows/wrangler.toml
+++ /dev/null
@@ -1,11 +0,0 @@
-name = "cdn-worker"
-type = "javascript"
-zone_id = ""
-account_id = "78e1d5140b47fc9dab18dc8b25351b7a"
-compatibility_date = "2021-10-08"
-route = ""
-workers_dev = true
-kv_namespaces = [
- { binding = "RTV", id = "f33b97f2e1434004975c0d8553f70488", preview_id = "192df3dff1b345ce8e7c794329bb7ccd" },
- { binding = "AMP_EXP", id = "b03e5db05f3e4d068508da267e248949", preview_id = "69318ded67c0477b85d73ec801b47543" }
-]
diff --git a/.gitignore b/.gitignore
index d78aa770a5bd..06bcedd0dd80 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,8 +27,6 @@ firebase.json
.*cache
.amp-dep-check
build
-build-system/tasks/performance/cache
-build-system/tasks/performance/results.json
dist
dist.3p
dist.tools
diff --git a/.prettierignore b/.prettierignore
index 1afc6c879ad8..1f3a2890a373 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -10,8 +10,6 @@
.*cache
.amp-dep-check
build
-build-system/tasks/performance/cache
-build-system/tasks/performance/results.json
dist
dist.3p
dist.tools
diff --git a/.renovaterc.json b/.renovaterc.json
index f6f72b856aa2..1b42148a80aa 100644
--- a/.renovaterc.json
+++ b/.renovaterc.json
@@ -1,8 +1,5 @@
{
- "extends": ["config:base"],
- "node": {
- "supportPolicy": ["lts_latest"]
- },
+ "extends": ["config:recommended"],
"ignoreDeps": ["ubuntu-2004"],
"commitMessagePrefix": "📦",
"timezone": "America/Los_Angeles",
@@ -20,13 +17,13 @@
"packageRules": [
{
"groupName": "subpackage devDependencies",
- "matchPaths": ["**/*"],
+ "matchFileNames": ["**/*"],
"rebaseWhen": "never",
"automerge": true
},
{
"groupName": "chrome and chromedriver",
- "matchFiles": ["build-system/tasks/e2e/package.json"],
+ "matchFileNames": ["build-system/tasks/e2e/package.json"],
"matchPackageNames": ["chromedriver"],
"labels": ["WG: infra"],
"rebaseWhen": "never",
@@ -34,81 +31,86 @@
},
{
"groupName": "build-system devDependencies",
- "matchPaths": ["build-system/**"],
+ "matchFileNames": ["build-system/**"],
"labels": ["WG: infra"],
"rebaseWhen": "never",
- "automerge": true
+ "automerge": true,
+ "matchPackageNames": ["!chromedriver"]
},
{
"groupName": "validator devDependencies",
- "matchPaths": ["validator/**"],
+ "matchFileNames": ["validator/**"],
"labels": ["WG: caching"],
"rebaseWhen": "never",
"automerge": true
},
{
"groupName": "validator webui",
- "matchPaths": ["validator/js/webui/**"],
+ "matchFileNames": ["validator/js/webui/**"],
"enabled": false
},
{
"groupName": "core devDependencies",
- "matchFiles": ["package.json"],
+ "matchFileNames": ["package.json"],
"labels": ["WG: infra"],
"rebaseWhen": "never",
"automerge": true
},
{
"groupName": "linting devDependencies",
- "matchFiles": ["package.json"],
- "matchPackagePatterns": ["\\b(prettier|eslint)\\b"],
+ "matchFileNames": ["package.json"],
"labels": ["WG: infra"],
"rebaseWhen": "never",
- "automerge": true
+ "automerge": true,
+ "matchPackageNames": ["/\\b(prettier|eslint)\\b/"]
},
{
"groupName": "babel devDependencies",
- "matchFiles": ["package.json"],
- "matchPackagePatterns": ["\\bbabel"],
- "major": {"automerge": false, "assignAutomerge": false},
+ "matchFileNames": ["package.json"],
+ "major": {
+ "automerge": false,
+ "assignAutomerge": false
+ },
"labels": ["WG: infra", "WG: performance"],
"rebaseWhen": "never",
- "automerge": true
+ "automerge": true,
+ "matchPackageNames": ["/\\bbabel/"]
},
{
"groupName": "esbuild devDependencies",
- "matchFiles": ["package.json"],
- "matchPackagePatterns": ["\\besbuild\\b"],
+ "matchFileNames": ["package.json"],
"labels": ["WG: infra", "WG: performance"],
"rebaseWhen": "never",
- "automerge": true
+ "automerge": true,
+ "matchPackageNames": ["/\\besbuild\\b/"]
},
{
"groupName": "ampproject devDependencies",
- "matchFiles": ["package.json"],
- "matchPackagePatterns": ["^@ampproject/"],
+ "matchFileNames": ["package.json"],
"matchDepTypes": ["devDependencies"],
- "labels": ["WG: bento", "WG: components", "WG: performance"],
+ "labels": ["WG: components", "WG: performance"],
"rebaseWhen": "never",
- "automerge": true
+ "automerge": true,
+ "matchPackageNames": ["/^@ampproject//"]
},
{
"groupName": "ampproject dependencies",
- "matchFiles": ["package.json"],
- "matchPackagePatterns": ["^@ampproject/"],
+ "matchFileNames": ["package.json"],
"matchDepTypes": ["dependencies"],
- "labels": ["WG: bento", "WG: components", "WG: performance"],
+ "labels": ["WG: components", "WG: performance"],
"rebaseWhen": "never",
- "automerge": false
+ "automerge": false,
+ "schedule": null,
+ "matchPackageNames": ["/^@ampproject//"]
},
{
"groupName": "core dependencies",
- "matchFiles": ["package.json"],
- "excludePackagePatterns": ["^@ampproject/"],
+ "matchFileNames": ["package.json"],
"matchDepTypes": ["dependencies"],
- "labels": ["WG: bento", "WG: components", "WG: performance"],
+ "labels": ["WG: components", "WG: performance"],
"rebaseWhen": "never",
- "automerge": false
+ "automerge": false,
+ "matchPackageNames": ["!/^@ampproject//"]
}
]
}
diff --git a/.vscode/OWNERS b/.vscode/OWNERS
index 002922bb9cc9..69a88bfe0386 100644
--- a/.vscode/OWNERS
+++ b/.vscode/OWNERS
@@ -4,7 +4,7 @@
{
rules: [
{
- owners: [{name: 'ampproject/wg-infra'}, {name: 'rsimha', notify: true}],
+ owners: [{name: 'ampproject/wg-infra'}],
},
],
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index d2299dd8882e..da066d95027f 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -7,12 +7,19 @@
// Enable JSON auto-formatting for these files.
".prettierrc": "json",
- ".renovaterc.json": "json"
+ ".renovaterc.json": "json",
+
+ // Allow comments in JSON schema files.
+ "*.schema.json": "jsonc"
},
+ "files.insertFinalNewline": true,
+
// Auto-fix JS files with ESLint using amphtml's custom settings. Needs
// https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint
- "editor.codeActionsOnSave": {"source.fixAll.eslint": true},
+ "editor.codeActionsOnSave": {
+ "source.fixAll.eslint": "explicit"
+ },
"[js]": {"editor.formatOnSave": false},
// Auto-fix non-JS files with Prettier using amphtml's custom settings. Needs
@@ -40,20 +47,10 @@
"fileMatch": ["build-system/global-configs/caches.json"],
"url": "./build-system/json-schemas/caches.json"
},
- {
- "fileMatch": [
- "build-system/global-configs/client-side-experiments-config.json"
- ],
- "url": "./build-system/json-schemas/client-side-experiments-config.json"
- },
{
"fileMatch": ["build-system/tasks/bundle-size/filesize.json"],
"url": "./build-system/json-schemas/filesize.json"
},
- {
- "fileMatch": ["build-system/global-configs/versioning.json"],
- "url": "./build-system/json-schemas/versioning.json"
- },
{
"fileMatch": ["test/visual-diff/visual-tests.jsonc"],
"url": "./build-system/json-schemas/visual-tests.json"
diff --git a/3p/3d-gltf/index.js b/3p/3d-gltf/index.js
index 86f0a874b0ab..001b3242ce9b 100644
--- a/3p/3d-gltf/index.js
+++ b/3p/3d-gltf/index.js
@@ -3,7 +3,6 @@
import {loadScript} from '#3p/3p';
import {listenParent, nonSensitiveDataPostMessage} from '#3p/messaging';
-import {dict} from '#core/types/object';
import {parseJson} from '#core/types/object/json';
import {user} from '#utils/log';
@@ -54,22 +53,16 @@ export function gltfViewer(global) {
if (!e.lengthComputable) {
return;
}
- nonSensitiveDataPostMessage(
- 'progress',
- dict({
- 'total': e.total,
- 'loaded': e.loaded,
- })
- );
+ nonSensitiveDataPostMessage('progress', {
+ 'total': e.total,
+ 'loaded': e.loaded,
+ });
},
onerror: (err) => {
user().error('3DGLTF', err);
- nonSensitiveDataPostMessage(
- 'error',
- dict({
- 'error': (err || '').toString(),
- })
- );
+ nonSensitiveDataPostMessage('error', {
+ 'error': (err || '').toString(),
+ });
},
});
listenParent(global, 'action', (msg) => {
diff --git a/3p/3p.js b/3p/3p.js
index e223027de451..9bf84f0eca66 100644
--- a/3p/3p.js
+++ b/3p/3p.js
@@ -15,7 +15,7 @@ import {devAssert, userAssert} from '#utils/log';
let ThirdPartyFunctionDef;
/**
- * @const {!Object}
+ * @const {!{[key: string]: ThirdPartyFunctionDef}}
* @visibleForTesting
*/
let registrations;
@@ -285,7 +285,7 @@ function validateAllowedFields(data, allowedFields) {
}
}
-/** @private {!Object} */
+/** @private {!{[key: string]: boolean}} */
let experimentToggles = {};
/**
@@ -299,7 +299,7 @@ export function isExperimentOn(experimentId) {
/**
* Set experiment toggles.
- * @param {!Object} toggles
+ * @param {!{[key: string]: boolean}} toggles
*/
export function setExperimentToggles(toggles) {
experimentToggles = toggles;
diff --git a/3p/ampcontext-integration.js b/3p/ampcontext-integration.js
index aea522c64b2e..dea3e3f28e4a 100644
--- a/3p/ampcontext-integration.js
+++ b/3p/ampcontext-integration.js
@@ -1,5 +1,3 @@
-import {dict} from '#core/types/object';
-
import {dev, user, userAssert} from '#utils/log';
import {computeInMasterFrame} from './3p';
@@ -114,12 +112,9 @@ export class IntegrationAmpContext extends AbstractAmpContext {
* @param {string} entityId See comment above for content.
*/
reportRenderedEntityIdentifier(entityId) {
- this.client_.sendMessage(
- 'entity-id',
- dict({
- 'id': user().assertString(entityId),
- })
- );
+ this.client_.sendMessage('entity-id', {
+ 'id': user().assertString(entityId),
+ });
}
/**
diff --git a/3p/ampcontext.js b/3p/ampcontext.js
index 87f922dbbd6b..55e8eb1f6d17 100644
--- a/3p/ampcontext.js
+++ b/3p/ampcontext.js
@@ -1,8 +1,8 @@
-import {MessageType} from '#core/3p-frame-messaging';
-import {AmpEvents} from '#core/constants/amp-events';
+import {MessageType_Enum} from '#core/3p-frame-messaging';
+import {AmpEvents_Enum} from '#core/constants/amp-events';
import {Deferred} from '#core/data-structures/promise';
import {isObject} from '#core/types';
-import {dict, map} from '#core/types/object';
+import {map} from '#core/types/object';
import {tryParseJson} from '#core/types/object/json';
import {dev, devAssert} from '#utils/log';
@@ -51,7 +51,7 @@ export class AbstractAmpContext {
/** @type {?Object} */
this.consentSharedData = null;
- /** @type {?Object} */
+ /** @type {?{[key: string]: *}} */
this.data = null;
/** @type {?string} */
@@ -102,7 +102,7 @@ export class AbstractAmpContext {
/** @type {?string} */
this.tagName = null;
- /** @type {!Object} */
+ /** @type {!{[key: number]: Deferred}} */
this.resizeIdToDeferred_ = map();
/** @type {number} */
@@ -129,8 +129,8 @@ export class AbstractAmpContext {
/** Registers an general handler for page visibility. */
listenForPageVisibility_() {
this.client_.makeRequest(
- MessageType.SEND_EMBED_STATE,
- MessageType.EMBED_STATE,
+ MessageType_Enum.SEND_EMBED_STATE,
+ MessageType_Enum.EMBED_STATE,
(data) => {
this.hidden = data['pageHidden'];
this.dispatchVisibilityChangeEvent_();
@@ -145,7 +145,7 @@ export class AbstractAmpContext {
dispatchVisibilityChangeEvent_() {
const event = this.win_.document.createEvent('Event');
event.data = {hidden: this.hidden};
- event.initEvent(AmpEvents.VISIBILITY_CHANGE, true, true);
+ event.initEvent(AmpEvents_Enum.VISIBILITY_CHANGE, true, true);
this.win_.dispatchEvent(event);
}
@@ -157,9 +157,12 @@ export class AbstractAmpContext {
* every time we receive a page visibility message.
*/
onPageVisibilityChange(callback) {
- return this.client_.registerCallback(MessageType.EMBED_STATE, (data) => {
- callback({hidden: data['pageHidden']});
- });
+ return this.client_.registerCallback(
+ MessageType_Enum.EMBED_STATE,
+ (data) => {
+ callback({hidden: data['pageHidden']});
+ }
+ );
}
/**
@@ -171,8 +174,8 @@ export class AbstractAmpContext {
*/
observeIntersection(callback) {
return this.client_.makeRequest(
- MessageType.SEND_INTERSECTIONS,
- MessageType.INTERSECTION,
+ MessageType_Enum.SEND_INTERSECTIONS,
+ MessageType_Enum.INTERSECTION,
(intersection) => {
callback(intersection['changes']);
}
@@ -188,11 +191,11 @@ export class AbstractAmpContext {
*/
getHtml(selector, attributes, callback) {
this.client_.getData(
- MessageType.GET_HTML,
- dict({
+ MessageType_Enum.GET_HTML,
+ {
'selector': selector,
'attributes': attributes,
- }),
+ },
callback
);
}
@@ -203,7 +206,7 @@ export class AbstractAmpContext {
* @param {function(*)} callback
*/
getConsentState(callback) {
- this.client_.getData(MessageType.GET_CONSENT_STATE, null, callback);
+ this.client_.getData(MessageType_Enum.GET_CONSENT_STATE, null, callback);
}
/**
@@ -216,15 +219,12 @@ export class AbstractAmpContext {
*/
requestResize(width, height, hasOverflow) {
const requestId = this.nextResizeRequestId_++;
- this.client_.sendMessage(
- MessageType.EMBED_SIZE,
- dict({
- 'id': requestId,
- 'width': width,
- 'height': height,
- 'hasOverflow': hasOverflow,
- })
- );
+ this.client_.sendMessage(MessageType_Enum.EMBED_SIZE, {
+ 'id': requestId,
+ 'width': width,
+ 'height': height,
+ 'hasOverflow': hasOverflow,
+ });
const deferred = new Deferred();
this.resizeIdToDeferred_[requestId] = deferred;
return deferred.promise;
@@ -234,21 +234,27 @@ export class AbstractAmpContext {
* Set up listeners to handle responses from request size.
*/
listenToResizeResponse_() {
- this.client_.registerCallback(MessageType.EMBED_SIZE_CHANGED, (data) => {
- const id = data['id'];
- if (id !== undefined) {
- this.resizeIdToDeferred_[id].resolve();
- delete this.resizeIdToDeferred_[id];
+ this.client_.registerCallback(
+ MessageType_Enum.EMBED_SIZE_CHANGED,
+ (data) => {
+ const id = data['id'];
+ if (id !== undefined) {
+ this.resizeIdToDeferred_[id].resolve();
+ delete this.resizeIdToDeferred_[id];
+ }
}
- });
+ );
- this.client_.registerCallback(MessageType.EMBED_SIZE_DENIED, (data) => {
- const id = data['id'];
- if (id !== undefined) {
- this.resizeIdToDeferred_[id].reject('Resizing is denied');
- delete this.resizeIdToDeferred_[id];
+ this.client_.registerCallback(
+ MessageType_Enum.EMBED_SIZE_DENIED,
+ (data) => {
+ const id = data['id'];
+ if (id !== undefined) {
+ this.resizeIdToDeferred_[id].reject('Resizing is denied');
+ delete this.resizeIdToDeferred_[id];
+ }
}
- });
+ );
}
/**
@@ -256,13 +262,10 @@ export class AbstractAmpContext {
* @private
*/
sendDeprecationNotice_(endpoint) {
- this.client_.sendMessage(
- MessageType.USER_ERROR_IN_IFRAME,
- dict({
- 'message': `${endpoint} is deprecated`,
- 'expected': true,
- })
- );
+ this.client_.sendMessage(MessageType_Enum.USER_ERROR_IN_IFRAME, {
+ 'message': `${endpoint} is deprecated`,
+ 'expected': true,
+ });
}
/**
@@ -273,9 +276,12 @@ export class AbstractAmpContext {
* request succeeds.
*/
onResizeSuccess(callback) {
- this.client_.registerCallback(MessageType.EMBED_SIZE_CHANGED, (obj) => {
- callback(obj['requestedHeight'], obj['requestedWidth']);
- });
+ this.client_.registerCallback(
+ MessageType_Enum.EMBED_SIZE_CHANGED,
+ (obj) => {
+ callback(obj['requestedHeight'], obj['requestedWidth']);
+ }
+ );
this.sendDeprecationNotice_('onResizeSuccess');
}
@@ -287,7 +293,7 @@ export class AbstractAmpContext {
* request is denied.
*/
onResizeDenied(callback) {
- this.client_.registerCallback(MessageType.EMBED_SIZE_DENIED, (obj) => {
+ this.client_.registerCallback(MessageType_Enum.EMBED_SIZE_DENIED, (obj) => {
callback(obj['requestedHeight'], obj['requestedWidth']);
});
this.sendDeprecationNotice_('onResizeDenied');
@@ -297,7 +303,7 @@ export class AbstractAmpContext {
* Make the ad interactive.
*/
signalInteractive() {
- this.client_.sendMessage(MessageType.SIGNAL_INTERACTIVE);
+ this.client_.sendMessage(MessageType_Enum.SIGNAL_INTERACTIVE);
}
/**
@@ -314,13 +320,13 @@ export class AbstractAmpContext {
* Notifies the parent document of no content available inside embed.
*/
noContentAvailable() {
- this.client_.sendMessage(MessageType.NO_CONTENT);
+ this.client_.sendMessage(MessageType_Enum.NO_CONTENT);
}
/**
* Parse the metadata attributes from the name and add them to
* the class instance.
- * @param {!Object|string} data
+ * @param {string} data
* @private
*/
setupMetadata_(data) {
@@ -340,6 +346,17 @@ export class AbstractAmpContext {
delete this.data['_context'];
}
+ this.setupMetadataFromContext_(context);
+
+ this.embedType_ = dataObject.type || null;
+ }
+
+ /**
+ * Set the metadata attributes from the "context" instance directly.
+ * @param {!Object} context
+ * @private
+ */
+ setupMetadataFromContext_(context) {
this.canary = context.canary;
this.canonicalUrl = context.canonicalUrl;
this.clientId = context.clientId;
@@ -361,8 +378,6 @@ export class AbstractAmpContext {
this.sourceUrl = context.sourceUrl;
this.startTime = context.startTime;
this.tagName = context.tagName;
-
- this.embedType_ = dataObject.type || null;
}
/**
@@ -397,8 +412,11 @@ export class AbstractAmpContext {
} else if (this.win_.AMP_CONTEXT_DATA) {
if (typeof this.win_.AMP_CONTEXT_DATA == 'string') {
this.sentinel = this.win_.AMP_CONTEXT_DATA;
+ // If AMP_CONTEXT_DATA is an Object, Assume that it is the Context Object
+ // and not inside the attributes._context which is the structure
+ // parsed from "name" on other instances.
} else if (isObject(this.win_.AMP_CONTEXT_DATA)) {
- this.setupMetadata_(this.win_.AMP_CONTEXT_DATA);
+ this.setupMetadataFromContext_(this.win_.AMP_CONTEXT_DATA);
}
} else {
this.setupMetadata_(this.win_.name);
@@ -413,12 +431,9 @@ export class AbstractAmpContext {
if (!e.message) {
return;
}
- this.client_.sendMessage(
- MessageType.USER_ERROR_IN_IFRAME,
- dict({
- 'message': e.message,
- })
- );
+ this.client_.sendMessage(MessageType_Enum.USER_ERROR_IN_IFRAME, {
+ 'message': e.message,
+ });
}
}
diff --git a/3p/bodymovinanimation.js b/3p/bodymovinanimation.js
index c60a3b2f3120..aafcadd54a5a 100644
--- a/3p/bodymovinanimation.js
+++ b/3p/bodymovinanimation.js
@@ -1,20 +1,19 @@
import {setStyles} from '#core/dom/style';
import {tryPlay} from '#core/dom/video';
-import {dict} from '#core/types/object';
import {parseJson} from '#core/types/object/json';
import {getData} from '#utils/event-helper';
import {loadScript} from './3p';
-const libSourceUrl = dict({
+const libSourceUrl = {
'canvas':
'https://cdnjs.cloudflare.com/ajax/libs/lottie-web/5.7.6/lottie_canvas.min.js',
'html':
'https://cdnjs.cloudflare.com/ajax/libs/lottie-web/5.7.6/lottie_html.min.js',
'svg':
'https://cdnjs.cloudflare.com/ajax/libs/lottie-web/5.7.6/lottie_svg.min.js',
-});
+};
/**
* Produces the AirBnB Bodymovin Player SDK object for the passed in callback.
@@ -84,11 +83,9 @@ export function bodymovinanimation(global) {
autoplay: dataReceived['autoplay'],
animationData: dataReceived['animationData'],
});
- const message = JSON.stringify(
- dict({
- 'action': 'ready',
- })
- );
+ const message = JSON.stringify({
+ 'action': 'ready',
+ });
global.addEventListener('message', parseMessage, false);
global.parent./*OK*/ postMessage(message, '*');
});
diff --git a/3p/environment.js b/3p/environment.js
index 63be7559461c..b67105cd7055 100644
--- a/3p/environment.js
+++ b/3p/environment.js
@@ -18,7 +18,11 @@ export function setInViewportForTesting(inV) {
// Active intervals. Must be global, because people clear intervals
// with clearInterval from a different window.
const intervals = {};
-let intervalId = 1;
+
+// TODO(40235): This is so we avoid the ID range of setTimeout. We
+// should also patch setTimeout and clearTimeout to avoid having to
+// use this.
+let intervalId = 10000000;
/**
* Add instrumentation to a window and all child iframes.
diff --git a/3p/facebook.js b/3p/facebook.js
index 83fd622a2a97..6206888b860f 100644
--- a/3p/facebook.js
+++ b/3p/facebook.js
@@ -1,6 +1,5 @@
import {setStyle} from '#core/dom/style';
import {isEnumValue} from '#core/types/enum';
-import {dict} from '#core/types/object';
import {dashToUnderline} from '#core/types/string';
import {devAssert} from '#utils/log';
@@ -9,9 +8,6 @@ import {loadScript} from './3p';
/** @const @enum {string} */
export const FacebookEmbedType = {
- // Embeds a single comment or reply to a comment on a post rendered by
- // amp-facebook.
- COMMENT: 'comment',
// Allows users to comment on the embedded content using their Facebook
// accounts. Correlates to amp-facebook-comments.
COMMENTS: 'comments',
@@ -93,25 +89,6 @@ function getVideoContainer(global, data) {
return container;
}
-/**
- * Create DOM element for the Facebook embedded content plugin for comments or
- * comment replies.
- * @see https://developers.facebook.com/docs/plugins/embedded-comments
- * @param {!Window} global
- * @param {!Object} data The element data
- * @return {!Element} div
- */
-function getCommentContainer(global, data) {
- const c = global.document.getElementById('c');
- const container = createContainer(global, 'comment-embed', data.href);
- container.setAttribute(
- 'data-include-parent',
- data.includeCommentParent || 'false'
- );
- container.setAttribute('data-width', c./*OK*/ offsetWidth);
- return container;
-}
-
/**
* Gets the default type to embed as, if not specified.
* @param {string} href
@@ -197,8 +174,6 @@ function getEmbedContainer(global, data, embedAs) {
return getLikeContainer(global, data);
case FacebookEmbedType.COMMENTS:
return getCommentsContainer(global, data);
- case FacebookEmbedType.COMMENT:
- return getCommentContainer(global, data);
case FacebookEmbedType.VIDEO:
return getVideoContainer(global, data);
default:
@@ -232,14 +207,12 @@ export function facebook(global, data) {
);
});
- FB.init({xfbml: true, version: 'v2.5'});
+ FB.init({xfbml: true, version: 'v17.0'});
// Report to parent that the SDK has loaded and is ready to paint
- const message = JSON.stringify(
- dict({
- 'action': 'ready',
- })
- );
+ const message = JSON.stringify({
+ 'action': 'ready',
+ });
global.parent./*OK*/ postMessage(message, '*');
},
data.locale ? data.locale : dashToUnderline(window.navigator.language)
diff --git a/3p/frame-metadata.js b/3p/frame-metadata.js
index e7f65673e120..6bb2e21f2f24 100644
--- a/3p/frame-metadata.js
+++ b/3p/frame-metadata.js
@@ -1,5 +1,4 @@
import {once} from '#core/types/function';
-import {dict} from '#core/types/object';
import {parseJson} from '#core/types/object/json';
import {dev} from '#utils/log';
@@ -32,11 +31,11 @@ import {parseUrlDeprecated} from '../src/url';
export let ContextStateDef;
/** @const {!JsonObject} */
-const FALLBACK = dict({
- 'attributes': dict({
- '_context': dict(),
- }),
-});
+const FALLBACK = {
+ 'attributes': {
+ '_context': {},
+ },
+};
/**
* Gets metadata encoded in iframe name attribute.
@@ -72,8 +71,8 @@ export function getAmpConfig() {
/**
* @return {!JsonObject}
*/
-const getAttributeDataImpl_ = once(() => {
- const data = Object.assign(dict({}), allMetadata()['attributes']);
+const getAttributeData = once(() => {
+ const data = Object.assign(Object.create(null), allMetadata()['attributes']);
// TODO(alanorozco): don't delete _context. refactor data object structure.
if ('_context' in data) {
@@ -83,13 +82,7 @@ const getAttributeDataImpl_ = once(() => {
return data;
});
-/**
- * @return {!JsonObject}
- */
-export function getAttributeData() {
- // using indirect invocation to prevent no-export-side-effect issue
- return getAttributeDataImpl_();
-}
+export {getAttributeData};
/**
* @return {!Location}
diff --git a/3p/frame.max.html b/3p/frame.max.html
index 85783273e917..c8955d4d68d2 100644
--- a/3p/frame.max.html
+++ b/3p/frame.max.html
@@ -7,7 +7,9 @@
try {
url = JSON.parse(window.name).bootstrap;
} catch (e) {}
-document.write('
diff --git a/3p/iframe-messaging-client.js b/3p/iframe-messaging-client.js
index f4215813adea..68608bc75cbe 100644
--- a/3p/iframe-messaging-client.js
+++ b/3p/iframe-messaging-client.js
@@ -5,7 +5,7 @@ import {
serializeMessage,
} from '#core/3p-frame-messaging';
import {Observable} from '#core/data-structures/observable';
-import {dict, map} from '#core/types/object';
+import {map} from '#core/types/object';
import {getData} from '#utils/event-helper';
import {dev} from '#utils/log';
@@ -55,7 +55,7 @@ export class IframeMessagingClient {
callback(result[CONSTANTS.contentFieldName]);
}
});
- const data = dict();
+ const data = {};
data[CONSTANTS.payloadFieldName] = payload;
data[CONSTANTS.messageIdFieldName] = messageId;
this.sendMessage(requestType, data);
@@ -156,16 +156,12 @@ export class IframeMessagingClient {
/**
* @param {!Window} win
* @param {string} msg
- * @suppress {checkTypes} // Can be removed after closure compiler update their externs.
*/
postMessageWithUserActivation_(win, msg) {
- win./*OK*/ postMessage(
- msg,
- dict({
- 'targetOrigin': '*',
- 'includeUserActivation': true,
- })
- );
+ win./*OK*/ postMessage(msg, {
+ 'targetOrigin': '*',
+ 'includeUserActivation': true,
+ });
}
/**
@@ -223,7 +219,7 @@ export class IframeMessagingClient {
/**
* @param {string} messageType
- * @param {Object} message
+ * @param {object} message
*/
fireObservable_(messageType, message) {
if (messageType in this.observableFor_) {
diff --git a/3p/iframe-transport-client.js b/3p/iframe-transport-client.js
index 58d7c26dc24c..cac728bcc7a2 100644
--- a/3p/iframe-transport-client.js
+++ b/3p/iframe-transport-client.js
@@ -1,10 +1,12 @@
-import {IframeTransportEventDef, MessageType} from '#core/3p-frame-messaging';
+import {MessageType_Enum} from '#core/3p-frame-messaging';
import {tryParseJson} from '#core/types/object/json';
import {dev, devAssert, user, userAssert} from '#utils/log';
import {IframeMessagingClient} from './iframe-messaging-client';
+/** @typedef {import('#core/3p-frame-messaging').IframeTransportEventDef} IframeTransportDef */
+
/** @private @const {string} */
const TAG_ = 'iframe-transport-client';
@@ -18,7 +20,7 @@ export class IframeTransportClient {
/** @private {!Window} */
this.win_ = win;
- /** @private {!Object} */
+ /** @private {!{[key: string]: IframeTransportContext}} */
this.creativeIdToContext_ = {};
const parsedFrameName = tryParseJson(this.win_.name);
@@ -46,8 +48,8 @@ export class IframeTransportClient {
)
);
this.iframeMessagingClient_.makeRequest(
- MessageType.SEND_IFRAME_TRANSPORT_EVENTS,
- MessageType.IFRAME_TRANSPORT_EVENTS,
+ MessageType_Enum.SEND_IFRAME_TRANSPORT_EVENTS,
+ MessageType_Enum.IFRAME_TRANSPORT_EVENTS,
(eventData) => {
const events = /** @type {!Array} */ (
eventData['events']
@@ -159,11 +161,11 @@ export class IframeTransportContext {
/**
* Sends a response message back to the creative.
- * @param {!Object} data
+ * @param {!{[key: string]: string}} data
*/
sendResponseToCreative(data) {
this.iframeMessagingClient_./*OK*/ sendMessage(
- MessageType.IFRAME_TRANSPORT_RESPONSE,
+ MessageType_Enum.IFRAME_TRANSPORT_RESPONSE,
/** @type {!JsonObject} */
({message: data, ...this.baseMessage_})
);
diff --git a/3p/integration-lib.js b/3p/integration-lib.js
index 36f9a2d3f373..5076d6ed8440 100644
--- a/3p/integration-lib.js
+++ b/3p/integration-lib.js
@@ -1,5 +1,4 @@
import * as mode from '#core/mode';
-import {dict} from '#core/types/object';
import {parseJson} from '#core/types/object/json';
import {endsWith} from '#core/types/string';
@@ -15,12 +14,12 @@ import {IntegrationAmpContext} from './ampcontext-integration';
import {installEmbedStateListener, manageWin} from './environment';
import {getAmpConfig, getEmbedType, getLocation} from './frame-metadata';
-import {urls} from '../src/config';
+import * as urls from '../src/config/urls';
import {getSourceUrl, isProxyOrigin, parseUrlDeprecated} from '../src/url';
/**
* Whether the embed type may be used with amp-embed tag.
- * @const {!Object}
+ * @const {!{[key: string]: boolean}}
*/
const AMP_EMBED_ALLOWED = {
_ping_: true,
@@ -49,7 +48,6 @@ const AMP_EMBED_ALLOWED = {
myua: true,
mywidget: true,
nativery: true,
- lentainform: true,
opinary: true,
outbrain: true,
plista: true,
@@ -314,7 +312,7 @@ export function parseFragment(fragment) {
if (json.startsWith('{%22')) {
json = decodeURIComponent(json);
}
- return /** @type {!JsonObject} */ (json ? parseJson(json) : dict());
+ return /** @type {!JsonObject} */ (json ? parseJson(json) : {});
} catch (err) {
return null;
}
diff --git a/3p/integration.js b/3p/integration.js
index c8a07dea8761..14dcc4d90bc4 100644
--- a/3p/integration.js
+++ b/3p/integration.js
@@ -33,6 +33,7 @@ import {_ping_} from '#ads/vendors/_ping_';
// 3P Ad Networks - please keep in alphabetic order
import {_1wo} from '#ads/vendors/1wo';
import {_24smi} from '#ads/vendors/24smi';
+import {_4wmarketplace} from '#ads/vendors/4wmarketplace';
import {a8} from '#ads/vendors/a8';
import {a9} from '#ads/vendors/a9';
import {accesstrade} from '#ads/vendors/accesstrade';
@@ -48,6 +49,7 @@ import {adincube} from '#ads/vendors/adincube';
import {adition} from '#ads/vendors/adition';
import {adman} from '#ads/vendors/adman';
import {admanmedia} from '#ads/vendors/admanmedia';
+import {admatic} from '#ads/vendors/admatic';
import {admixer} from '#ads/vendors/admixer';
import {adnuntius} from '#ads/vendors/adnuntius';
import {adocean} from '#ads/vendors/adocean';
@@ -57,6 +59,7 @@ import {adplugg} from '#ads/vendors/adplugg';
import {adpon} from '#ads/vendors/adpon';
import {adpushup} from '#ads/vendors/adpushup';
import {adreactor} from '#ads/vendors/adreactor';
+import {ads2bid} from '#ads/vendors/ads2bid';
import {adsensor} from '#ads/vendors/adsensor';
import {adservsolutions} from '#ads/vendors/adservsolutions';
import {adsloom} from '#ads/vendors/adsloom';
@@ -80,6 +83,7 @@ import {aja} from '#ads/vendors/aja';
import {amoad} from '#ads/vendors/amoad';
import {aniview} from '#ads/vendors/aniview';
import {anyclip} from '#ads/vendors/anyclip';
+import {appmonsta} from '#ads/vendors/appmonsta';
import {appnexus} from '#ads/vendors/appnexus';
import {appvador} from '#ads/vendors/appvador';
import {atomx} from '#ads/vendors/atomx';
@@ -155,7 +159,6 @@ import {ketshwa} from '#ads/vendors/ketshwa';
import {kiosked} from '#ads/vendors/kiosked';
import {kixer} from '#ads/vendors/kixer';
import {kuadio} from '#ads/vendors/kuadio';
-import {lentainform} from '#ads/vendors/lentainform';
import {ligatus} from '#ads/vendors/ligatus';
import {lockerdome} from '#ads/vendors/lockerdome';
import {logly} from '#ads/vendors/logly';
@@ -196,6 +199,7 @@ import {openadstream} from '#ads/vendors/openadstream';
import {openx} from '#ads/vendors/openx';
import {opinary} from '#ads/vendors/opinary';
import {outbrain} from '#ads/vendors/outbrain';
+import {pixad} from '#ads/vendors/pixad';
import {pixels} from '#ads/vendors/pixels';
import {playstream} from '#ads/vendors/playstream';
import {plista} from '#ads/vendors/plista';
@@ -233,11 +237,11 @@ import {runative} from '#ads/vendors/runative';
import {sas} from '#ads/vendors/sas';
import {seedingalliance} from '#ads/vendors/seedingalliance';
import {sekindo} from '#ads/vendors/sekindo';
+import {sevio} from '#ads/vendors/sevio';
import {sharethrough} from '#ads/vendors/sharethrough';
import {shemedia} from '#ads/vendors/shemedia';
import {sklik} from '#ads/vendors/sklik';
import {slimcutmedia} from '#ads/vendors/slimcutmedia';
-import {smartadserver} from '#ads/vendors/smartadserver';
import {smartclip} from '#ads/vendors/smartclip';
import {smi2} from '#ads/vendors/smi2';
import {smilewanted} from '#ads/vendors/smilewanted';
@@ -283,7 +287,6 @@ import {wisteria} from '#ads/vendors/wisteria';
import {wpmedia} from '#ads/vendors/wpmedia';
import {wunderkind} from '#ads/vendors/wunderkind';
import {xlift} from '#ads/vendors/xlift';
-import {yahoo} from '#ads/vendors/yahoo';
import {yahoofedads} from '#ads/vendors/yahoofedads';
import {yahoojp} from '#ads/vendors/yahoojp';
import {yahoonativeads} from '#ads/vendors/yahoonativeads';
@@ -314,6 +317,7 @@ if (getMode().test || getMode().localDev) {
register('1wo', _1wo);
register('24smi', _24smi);
register('3d-gltf', gltfViewer);
+register('4wmarketplace', _4wmarketplace);
register('a8', a8);
register('a9', a9);
register('accesstrade', accesstrade);
@@ -329,6 +333,7 @@ register('adincube', adincube);
register('adition', adition);
register('adman', adman);
register('admanmedia', admanmedia);
+register('admatic', admatic);
register('admixer', admixer);
register('adnuntius', adnuntius);
register('adocean', adocean);
@@ -339,6 +344,7 @@ register('adpon', adpon);
register('adpushup', adpushup);
register('adreactor', adreactor);
register('adsensor', adsensor);
+register('ads2bid', ads2bid);
register('adservsolutions', adservsolutions);
register('adsloom', adsloom);
register('adsnative', adsnative);
@@ -361,6 +367,7 @@ register('aja', aja);
register('amoad', amoad);
register('aniview', aniview);
register('anyclip', anyclip);
+register('appmonsta', appmonsta);
register('appnexus', appnexus);
register('appvador', appvador);
register('atomx', atomx);
@@ -441,7 +448,6 @@ register('ketshwa', ketshwa);
register('kiosked', kiosked);
register('kixer', kixer);
register('kuadio', kuadio);
-register('lentainform', lentainform);
register('ligatus', ligatus);
register('lockerdome', lockerdome);
register('logly', logly);
@@ -485,6 +491,7 @@ register('openadstream', openadstream);
register('openx', openx);
register('opinary', opinary);
register('outbrain', outbrain);
+register('pixad', pixad);
register('pixels', pixels);
register('playstream', playstream);
register('plista', plista);
@@ -523,12 +530,12 @@ register('runative', runative);
register('sas', sas);
register('seedingalliance', seedingalliance);
register('sekindo', sekindo);
+register('sevio', sevio);
register('sharethrough', sharethrough);
register('shemedia', shemedia);
register('sklik', sklik);
register('ssp', ssp);
register('slimcutmedia', slimcutmedia);
-register('smartadserver', smartadserver);
register('smartclip', smartclip);
register('smi2', smi2);
register('smilewanted', smilewanted);
@@ -575,7 +582,6 @@ register('wisteria', wisteria);
register('wunderkind', wunderkind);
register('wpmedia', wpmedia);
register('xlift', xlift);
-register('yahoo', yahoo);
register('yahoofedads', yahoofedads);
register('yahoojp', yahoojp);
register('yahoonativeads', yahoonativeads);
diff --git a/3p/recaptcha.js b/3p/recaptcha.js
index 5af6e6cf2e6d..3797bf140907 100644
--- a/3p/recaptcha.js
+++ b/3p/recaptcha.js
@@ -1,7 +1,7 @@
// src/polyfills.js must be the first import.
import './polyfills';
-import {dict, hasOwn} from '#core/types/object';
+import {hasOwn} from '#core/types/object';
import {parseJson} from '#core/types/object/json';
import {
@@ -142,7 +142,7 @@ function initializeIframeMessagingClient(win, grecaptcha, dataObject) {
*
* @param {Window} win
* @param {*} grecaptcha
- * @param {Object} data
+ * @param {object} data
*/
function actionTypeHandler(win, grecaptcha, data) {
doesOriginDomainMatchIframeSrc(win, data)
@@ -154,13 +154,10 @@ function actionTypeHandler(win, grecaptcha, data) {
// .then() promise pollyfilled by recaptcha api script
executePromise./*OK*/ then(
function (token) {
- iframeMessagingClient./*OK*/ sendMessage(
- 'amp-recaptcha-token',
- dict({
- 'id': data.id,
- 'token': token,
- })
- );
+ iframeMessagingClient./*OK*/ sendMessage('amp-recaptcha-token', {
+ 'id': data.id,
+ 'token': token,
+ });
},
function (err) {
let message =
@@ -170,13 +167,10 @@ function actionTypeHandler(win, grecaptcha, data) {
message = err.toString();
}
user().error(TAG, '%s', message);
- iframeMessagingClient./*OK*/ sendMessage(
- 'amp-recaptcha-error',
- dict({
- 'id': data.id,
- 'error': message,
- })
- );
+ iframeMessagingClient./*OK*/ sendMessage('amp-recaptcha-error', {
+ 'id': data.id,
+ 'error': message,
+ });
}
);
})
@@ -189,7 +183,7 @@ function actionTypeHandler(win, grecaptcha, data) {
* Function to verify our origin domain from the
* parent window.
* @param {Window} win
- * @param {Object} data
+ * @param {object} data
* @return {!Promise}
*/
export function doesOriginDomainMatchIframeSrc(win, data) {
diff --git a/3p/vendors/4wmarketplace.js b/3p/vendors/4wmarketplace.js
new file mode 100644
index 000000000000..e1efe0efb1c3
--- /dev/null
+++ b/3p/vendors/4wmarketplace.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {_4wmarketplace} from '#ads/vendors/4wmarketplace';
+
+init(window);
+register('4wmarketplace', _4wmarketplace);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/adenza.js b/3p/vendors/adenza.js
new file mode 100644
index 000000000000..df68846aca40
--- /dev/null
+++ b/3p/vendors/adenza.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {adenza} from '#ads/vendors/adenza';
+
+init(window);
+register('adenza', adenza);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/admatic.js b/3p/vendors/admatic.js
new file mode 100644
index 000000000000..725738aa2a47
--- /dev/null
+++ b/3p/vendors/admatic.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {admatic} from '#ads/vendors/admatic';
+
+init(window);
+register('admatic', admatic);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/ads2bid.js b/3p/vendors/ads2bid.js
new file mode 100644
index 000000000000..52fe84f21acc
--- /dev/null
+++ b/3p/vendors/ads2bid.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {ads2bid} from '#ads/vendors/ads2bid';
+
+init(window);
+register('ads2bid', ads2bid);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/adsviu.js b/3p/vendors/adsviu.js
new file mode 100644
index 000000000000..2bd3e00c4bac
--- /dev/null
+++ b/3p/vendors/adsviu.js
@@ -0,0 +1,28 @@
+/**
+ * Copyright 2023 The AMP HTML Authors. All Rights Reserved.
+ *
+ * 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.
+ */
+
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {adsviu} from '#ads/vendors/adsviu';
+
+init(window);
+register('adsviu', adsviu);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/affinity.js b/3p/vendors/affinity.js
new file mode 100644
index 000000000000..5730b83da6a8
--- /dev/null
+++ b/3p/vendors/affinity.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {affinity} from '#ads/vendors/affinity';
+
+init(window);
+register('affinity', affinity);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/appmonsta.js b/3p/vendors/appmonsta.js
new file mode 100644
index 000000000000..642b7b4717f8
--- /dev/null
+++ b/3p/vendors/appmonsta.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {appmonsta} from '#ads/vendors/appmonsta';
+
+init(window);
+register('appmonsta', appmonsta);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/bidgear.js b/3p/vendors/bidgear.js
new file mode 100644
index 000000000000..79ec95df9b1b
--- /dev/null
+++ b/3p/vendors/bidgear.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {bidgear} from '#ads/vendors/bidgear';
+
+init(window);
+register('bidgear', bidgear);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/clever.js b/3p/vendors/clever.js
new file mode 100644
index 000000000000..b01e369227cb
--- /dev/null
+++ b/3p/vendors/clever.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {clever} from '#ads/vendors/clever';
+
+init(window);
+register('clever', clever);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/cognativex.js b/3p/vendors/cognativex.js
new file mode 100644
index 000000000000..b34fea36016d
--- /dev/null
+++ b/3p/vendors/cognativex.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {cognativex} from '#ads/vendors/cognativex';
+
+init(window);
+register('cognativex', cognativex);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/dex.js b/3p/vendors/dex.js
new file mode 100644
index 000000000000..247668faa382
--- /dev/null
+++ b/3p/vendors/dex.js
@@ -0,0 +1,11 @@
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {dex} from '#ads/vendors/dex';
+
+init(window);
+register('dex', dex);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/fairground.js b/3p/vendors/fairground.js
new file mode 100644
index 000000000000..c74b28279e49
--- /dev/null
+++ b/3p/vendors/fairground.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {fairground} from '#ads/vendors/fairground';
+
+init(window);
+register('fairground', fairground);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/geozo.js b/3p/vendors/geozo.js
new file mode 100644
index 000000000000..ff832726a711
--- /dev/null
+++ b/3p/vendors/geozo.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {geozo} from '#ads/vendors/geozo';
+
+init(window);
+register('geozo', geozo);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/incrementx.js b/3p/vendors/incrementx.js
new file mode 100644
index 000000000000..d9a7fde3a56e
--- /dev/null
+++ b/3p/vendors/incrementx.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {incrementx} from '#ads/vendors/incrementx';
+
+init(window);
+register('incrementx', incrementx);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/insurads.js b/3p/vendors/insurads.js
new file mode 100644
index 000000000000..0ff98bc358b4
--- /dev/null
+++ b/3p/vendors/insurads.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {insurads} from '#ads/vendors/insurads';
+
+init(window);
+register('insurads', insurads);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/jioads.js b/3p/vendors/jioads.js
new file mode 100644
index 000000000000..05f171aaba73
--- /dev/null
+++ b/3p/vendors/jioads.js
@@ -0,0 +1,11 @@
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {jioads} from '#ads/vendors/jioads';
+
+init(window);
+register('jioads', jioads);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/lentainform.js b/3p/vendors/lentainform.js
deleted file mode 100644
index 88b18c1081e4..000000000000
--- a/3p/vendors/lentainform.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// src/polyfills.js must be the first import.
-import '#3p/polyfills';
-
-import {register} from '#3p/3p';
-import {draw3p, init} from '#3p/integration-lib';
-
-import {lentainform} from '#ads/vendors/lentainform';
-
-init(window);
-register('lentainform', lentainform);
-
-window.draw3p = draw3p;
diff --git a/3p/vendors/momagic.js b/3p/vendors/momagic.js
new file mode 100644
index 000000000000..7b0c769c1852
--- /dev/null
+++ b/3p/vendors/momagic.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {momagic} from '#ads/vendors/momagic';
+
+init(window);
+register('momagic', momagic);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/piberica.js b/3p/vendors/piberica.js
new file mode 100644
index 000000000000..4eb1888eb471
--- /dev/null
+++ b/3p/vendors/piberica.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {piberica} from '#ads/vendors/piberica';
+
+init(window);
+register('piberica', piberica);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/pixad.js b/3p/vendors/pixad.js
new file mode 100644
index 000000000000..6a90617263a9
--- /dev/null
+++ b/3p/vendors/pixad.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {pixad} from '#ads/vendors/pixad';
+
+init(window);
+register('pixad', pixad);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/pubfuture.js b/3p/vendors/pubfuture.js
new file mode 100644
index 000000000000..81764096b740
--- /dev/null
+++ b/3p/vendors/pubfuture.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {pubfuture} from '#ads/vendors/pubfuture';
+
+init(window);
+register('pubfuture', pubfuture);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/pubscale.js b/3p/vendors/pubscale.js
new file mode 100644
index 000000000000..2e8eb9f38e16
--- /dev/null
+++ b/3p/vendors/pubscale.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {pubscale} from '#ads/vendors/pubscale';
+
+init(window);
+register('pubscale', pubscale);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/r9x.js b/3p/vendors/r9x.js
new file mode 100644
index 000000000000..6a1e789678c3
--- /dev/null
+++ b/3p/vendors/r9x.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {r9x} from '#ads/vendors/r9x';
+
+init(window);
+register('r9x', r9x);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/sevio.js b/3p/vendors/sevio.js
new file mode 100644
index 000000000000..3a8b56ceea1a
--- /dev/null
+++ b/3p/vendors/sevio.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {sevio} from '#ads/vendors/sevio';
+
+init(window);
+register('sevio', sevio);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/skoiy.js b/3p/vendors/skoiy.js
new file mode 100644
index 000000000000..8b6dc9d55523
--- /dev/null
+++ b/3p/vendors/skoiy.js
@@ -0,0 +1,12 @@
+// src/polyfills.js must be the first import.
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {skoiy} from '#ads/vendors/skoiy';
+
+init(window);
+register('skoiy', skoiy);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/smartadserver.js b/3p/vendors/smartadserver.js
deleted file mode 100644
index b93432464cc0..000000000000
--- a/3p/vendors/smartadserver.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// src/polyfills.js must be the first import.
-import '#3p/polyfills';
-
-import {register} from '#3p/3p';
-import {draw3p, init} from '#3p/integration-lib';
-
-import {smartadserver} from '#ads/vendors/smartadserver';
-
-init(window);
-register('smartadserver', smartadserver);
-
-window.draw3p = draw3p;
diff --git a/3p/vendors/vox.js b/3p/vendors/vox.js
new file mode 100644
index 000000000000..af0dbc25dd48
--- /dev/null
+++ b/3p/vendors/vox.js
@@ -0,0 +1,11 @@
+import '#3p/polyfills';
+
+import {register} from '#3p/3p';
+import {draw3p, init} from '#3p/integration-lib';
+
+import {vox} from '#ads/vendors/vox';
+
+init(window);
+register('vox', vox);
+
+window.draw3p = draw3p;
diff --git a/3p/vendors/yahoo.js b/3p/vendors/yahoo.js
deleted file mode 100644
index 2d0f5475c193..000000000000
--- a/3p/vendors/yahoo.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// src/polyfills.js must be the first import.
-import '#3p/polyfills';
-
-import {register} from '#3p/3p';
-import {draw3p, init} from '#3p/integration-lib';
-
-import {yahoo} from '#ads/vendors/yahoo';
-
-init(window);
-register('yahoo', yahoo);
-
-window.draw3p = draw3p;
diff --git a/3p/viqeoplayer.js b/3p/viqeoplayer.js
index 803630a34024..28e6381b6959 100644
--- a/3p/viqeoplayer.js
+++ b/3p/viqeoplayer.js
@@ -7,7 +7,7 @@ import {loadScript} from './3p';
/**
* @param {Window} global
- * @param {Object} VIQEO
+ * @param {object} VIQEO
* @private
*/
function viqeoPlayerInitLoaded(global, VIQEO) {
diff --git a/OWNERS b/OWNERS
index a7a8022bd378..c67a35cc8f26 100644
--- a/OWNERS
+++ b/OWNERS
@@ -6,10 +6,11 @@
rules: [
{
owners: [
- {name: 'cramforce', requestReviews: false},
- {name: 'dvoytenko', requestReviews: false},
- {name: 'jridgewell', requestReviews: false},
- {name: 'kristoferbaxter', requestReviews: false},
+ {name: 'erwinmombay', requestReviews: true},
+ {name: 'danielrozenberg', requestReviews: true},
+ {name: 'powerivq', requestReviews: true},
+ {name: 'ychsieh', requestReviews: true},
+ {name: 'banaag', requestReviews: true},
],
},
{
@@ -44,12 +45,31 @@
},
{
pattern: '**/OWNERS',
- owners: [{name: 'mrjoro', requestReviews: false}],
+ owners: [
+ {name: 'erwinmombay', requestReviews: false},
+ {name: 'mrjoro', requestReviews: false},
+ {name: 'newmuis', requestReviews: false},
+ ],
},
{
// Locked down to minimize new import aliases being added
- pattern: 'tsconfig.json',
+ pattern: 'tsconfig{,.base}.json',
owners: [{name: 'ampproject/wg-performance', required: true}],
},
+ {
+ pattern: '**/tsconfig.json',
+ owners: [{name: 'ampproject/wg-performance'}],
+ },
+ {
+ pattern: '**/*.d.ts',
+ owners: [
+ {name: 'ampproject/wg-infra'},
+ {name: 'ampproject/wg-performance'},
+ ],
+ },
+ {
+ pattern: '**/build-dom.js',
+ owners: [{name: 'erwinmombay'}],
+ },
],
}
diff --git a/README.md b/README.md
index eab68c33433d..de7ac422d9f4 100644
--- a/README.md
+++ b/README.md
@@ -5,19 +5,6 @@
[](https://app.circleci.com/pipelines/github/ampproject/amphtml?branch=main)
[](https://github.com/ampproject/amphtml/releases/latest)
[](https://github.com/ampproject/amphtml/pulse/monthly)
-[](#)
-
-
-
-Metrics
-
-
-
-[](https://codecov.io/gh/ampproject/amphtml/)
-[](https://github.com/ampproject/amphtml/issues?utf8=%E2%9C%93&q=is%3Aissue+title%3A+%22Cherry-pick%22)
-[](https://github.com/ampproject/amphtml/releases)
-
-
@@ -28,7 +15,6 @@ Tooling
[](https://percy.io/ampproject/amphtml)
[](https://github.com/prettier/prettier)
[](https://codecov.io/gh/ampproject/amphtml/)
-[](https://lgtm.com/projects/g/ampproject/amphtml/)
[](https://renovateapp.com/)
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 000000000000..821e914eb7c1
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,13 @@
+# Security Policy
+
+## Supported Versions
+
+Security updates are applied only to the latest release.
+
+## Reporting a Vulnerability
+
+If you have discovered a security vulnerability in this project, please report it privately. **Do not disclose it as a public issue.** This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released.
+
+Please disclose it at [security advisory](https://github.com/ampproject/amphtml/security/advisories/new).
+
+This project is maintained by a team on a best effort basis. As such, vulnerability reports will be investigated and fixed or disclosed as soon as possible.
diff --git a/ads/_a4a-config.js b/ads/_a4a-config.js
index 9611f0d01f20..9d7aab2fadea 100644
--- a/ads/_a4a-config.js
+++ b/ads/_a4a-config.js
@@ -11,13 +11,13 @@ import {map} from '#core/types/object';
* Otherwise, it will attempt to render the ad via the existing "3p iframe"
* pathway (delay load into a cross-domain iframe).
*
- * @type {!Object}
+ * @type {!{[key: string]: function(!Window, !Element): boolean}}
*/
let a4aRegistry;
/**
* Returns the a4a registry map
- * @return {Object}
+ * @return {object}
*/
export function getA4ARegistry() {
if (!a4aRegistry) {
@@ -27,7 +27,11 @@ export function getA4ARegistry() {
'dianomi': () => true,
'doubleclick': () => true,
'fake': () => true,
+ 'mgid': (win, adTag) =>
+ !adTag.hasAttribute('data-container') &&
+ !adTag.hasAttribute('data-website'),
'nws': () => true,
+ 'smartadserver': () => true,
'valueimpression': () => true,
// TODO: Add new ad network implementation "is enabled" functions here.
// Note: if you add a function here that requires a new "import", above,
@@ -42,9 +46,11 @@ export function getA4ARegistry() {
/**
* An object mapping signing server names to their corresponding URLs.
- * @type {!Object}
+ * @type {!{[key: string]: string}}
*/
export const signingServerURLs = {
+ /* eslint-disable local/no-forbidden-terms */
'google': 'https://cdn.ampproject.org/amp-ad-verifying-keyset.json',
'google-dev': 'https://cdn.ampproject.org/amp-ad-verifying-keyset-dev.json',
+ /* eslint-enable local/no-forbidden-terms */
};
diff --git a/ads/_config.js b/ads/_config.js
index e91d7a43ab6d..560ba24f2e9f 100755
--- a/ads/_config.js
+++ b/ads/_config.js
@@ -46,7 +46,7 @@ let AdNetworkConfigDef;
* fullWidthHeightRatio: number
* }
*
- * @const {!Object}
+ * @const {!{[key: string]: !JsonObject}}
*/
const adConfig = jsonConfiguration({
'_ping_': {
@@ -62,6 +62,10 @@ const adConfig = jsonConfiguration({
preconnect: 'https://data.24smi.net',
},
+ '4wmarketplace': {
+ renderStartImplemented: true,
+ },
+
'a8': {
prefetch: 'https://statics.a8.net/amp/ad.js',
renderStartImplemented: true,
@@ -97,6 +101,10 @@ const adConfig = jsonConfiguration({
prefetch: 'https://servedbyadbutler.com/app.js',
},
+ 'adenza': {
+ renderStartImplemented: true,
+ },
+
'adform': {},
'adfox': {
@@ -129,6 +137,8 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
+ 'admatic': {},
+
'admixer': {
renderStartImplemented: true,
preconnect: ['https://inv-nets.admixer.net', 'https://cdn.admixer.net'],
@@ -166,6 +176,10 @@ const adConfig = jsonConfiguration({
'adreactor': {},
+ 'ads2bid': {
+ renderStartImplemented: true,
+ },
+
'adsensor': {
prefetch: 'https://wfpscripts.webspectator.com/amp/adsensor-amp.js',
clientIdScope: 'amp_ecid_adensor',
@@ -228,6 +242,11 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
+ 'adsviu': {
+ prefetch: 'https://widget.adsviu.com/adsviuAMP.js',
+ preconnect: ['https://api.adsviu.com'],
+ },
+
'adunity': {
preconnect: ['https://content.adunity.com'],
renderStartImplemented: true,
@@ -274,6 +293,11 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
+ 'affinity': {
+ prefetch: 'https://securepubads.g.doubleclick.net/tag/js/gpt.js',
+ preconnect: 'https://cdn4-hbs.affinitymatrix.com',
+ },
+
'aja': {
prefetch: [
'https://cdn.as.amanad.adtdp.com/sdk/asot-amp.js',
@@ -326,6 +350,10 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
+ 'appmonsta': {
+ preconnect: 'https://ssp.appmonsta.ai',
+ },
+
'appnexus': {
prefetch: 'https://acdn.adnxs.com/ast/ast.js',
preconnect: 'https://ib.adnxs.com',
@@ -354,6 +382,11 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
+ 'bidgear': {
+ prefetch: 'https://platform.bidgear.com/bidgear-amp.js',
+ renderStartImplemented: true,
+ },
+
'bidtellect': {},
'blade': {
@@ -402,6 +435,8 @@ const adConfig = jsonConfiguration({
'chargeads': {}, // Deprecated, to be removed on 2019-05-23
+ 'cognativex': {},
+
'colombia': {
prefetch: 'https://static.clmbtech.com/ad/commons/js/colombia-amp.js',
},
@@ -430,6 +465,10 @@ const adConfig = jsonConfiguration({
prefetch: 'https://www.google.com/adsense/search/ads.js',
},
+ 'clever': {
+ renderStartImplemented: true,
+ },
+
'dable': {
preconnect: [
'https://static.dable.io',
@@ -439,6 +478,10 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
+ 'dex': {
+ renderStartImplemented: true,
+ },
+
'digiteka': {
renderStartImplemented: true,
},
@@ -508,6 +551,8 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
+ 'fairground': {},
+
'fake': {},
'fake-delayed': {
@@ -566,6 +611,10 @@ const adConfig = jsonConfiguration({
prefetch: 'https://js.gsspcln.jp/l/amp.js',
},
+ 'geozo': {
+ renderStartImplemented: true,
+ },
+
'giraff': {
renderStartImplemented: true,
},
@@ -614,6 +663,11 @@ const adConfig = jsonConfiguration({
},
'improvedigital': {},
+ 'incrementx': {
+ prefetch: 'https://cdn.incrementxserv.com/ixamp.js',
+ renderStartImplemented: true,
+ },
+
'industrybrains': {
prefetch: 'https://web.industrybrains.com/js/ads/async/show.js',
preconnect: [
@@ -639,6 +693,18 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
+ 'insurads': {
+ prefetch: 'https://securepubads.g.doubleclick.net/tag/js/gpt.js',
+ preconnect: [
+ 'https://tpc.googlesyndication.com',
+ 'https://cdn.insurads.com',
+ 'https://services.insurads.com',
+ 'https://messaging.insurads.com',
+ ],
+ renderStartImplemented: true,
+ consentHandlingOverride: true,
+ },
+
'invibes': {
prefetch: 'https://k.r66net.com/GetAmpLink',
renderStartImplemented: true,
@@ -664,11 +730,13 @@ const adConfig = jsonConfiguration({
'kiosked': {
renderStartImplemented: true,
},
-
+ 'jioads': {
+ renderStartImplemented: true,
+ },
'jixie': {
- prefetch: ['https://scripts.jixie.io/jxamp.min.js'],
+ prefetch: ['https://scripts.jixie.media/jxamp.min.js'],
clientIdScope: '__jxamp',
- clientIdCookieName: '_jx',
+ clientIdCookieName: '_jxx',
renderStartImplemented: true,
},
@@ -679,15 +747,6 @@ const adConfig = jsonConfiguration({
'kuadio': {},
- 'lentainform': {
- renderStartImplemented: true,
- preconnect: [
- 'https://jsc.lentainform.com',
- 'https://servicer.lentainform.com',
- 'https://s-img.lentainform.com',
- ],
- },
-
'ligatus': {
prefetch: 'https://ssl.ligatus.com/render/ligrend.js',
renderStartImplemented: true,
@@ -746,7 +805,6 @@ const adConfig = jsonConfiguration({
'https://marfeel-d.openx.net',
'https://ice.360yield.com',
'https://mbid.marfeelrev.com',
- 'https://adservice.google.com',
],
consentHandlingOverride: true,
},
@@ -814,6 +872,11 @@ const adConfig = jsonConfiguration({
preconnect: ['https://player1.mixpo.com', 'https://player2.mixpo.com'],
},
+ 'momagic': {
+ prefetch: 'https://securepubads.g.doubleclick.net/tag/js/gpt.js',
+ preconnect: ['https://amp.truereach.co.in/'],
+ },
+
'monetizer101': {
renderStartImplemented: true,
},
@@ -933,6 +996,13 @@ const adConfig = jsonConfiguration({
consentHandlingOverride: true,
},
+ 'piberica': {
+ preconnect: ['https://trafico.prensaiberica.es'],
+ renderStartImplemented: true,
+ },
+
+ 'pixad': {},
+
'pixels': {
prefetch: 'https://cdn.adsfactor.net/amp/pixels-amp.min.js',
clientIdCookieName: '__AF',
@@ -973,6 +1043,10 @@ const adConfig = jsonConfiguration({
'pubexchange': {},
+ 'pubfuture': {
+ renderStartImplemented: true,
+ },
+
'pubguru': {
renderStartImplemented: true,
},
@@ -987,6 +1061,10 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
+ 'pubscale': {
+ renderStartImplemented: true,
+ },
+
'puffnetwork': {
prefetch: 'https://static.puffnetwork.com/amp_ad.js',
renderStartImplemented: true,
@@ -1013,6 +1091,11 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
+ 'r9x': {
+ prefetch: 'https://securepubads.g.doubleclick.net/tag/js/gpt.js',
+ preconnect: 'https://cdn.r9x.in',
+ },
+
'rakutenunifiedads': {
prefetch: 'https://s-cdn.rmp.rakuten.co.jp/js/amp.js',
renderStartImplemented: true,
@@ -1025,6 +1108,7 @@ const adConfig = jsonConfiguration({
'rcmwidget': {
prefetch: 'https://rcmjs.rambler.ru/static/rcmw/rcmw-amp.js',
renderStartImplemented: true,
+ clientIdScope: '__rcmw_amp',
},
'readmo': {
@@ -1101,7 +1185,7 @@ const adConfig = jsonConfiguration({
'seedingalliance': {},
'seedtag': {
- prefetch: 'https://config.seedtag.com/omid/bridge/bridge.js',
+ prefetch: 'https://t.seedtag.com/c/loader.js',
preconnect: ['https://s.seedtag.com'],
consentHandlingOverride: true,
renderStartImplemented: true,
@@ -1111,6 +1195,12 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
+ 'sevio': {
+ preconnect: ['https://request.adx.ws'],
+ prefetch: ['https://cdn.adx.ws/scripts/amp.js'],
+ renderStartImplemented: true,
+ },
+
'sharethrough': {
renderStartImplemented: true,
},
@@ -1132,6 +1222,10 @@ const adConfig = jsonConfiguration({
prefetch: 'https://c.imedia.cz/js/amp.js',
},
+ 'skoiy': {
+ preconnect: ['https://svas.skoiy.xyz'],
+ },
+
'slimcutmedia': {
preconnect: [
'https://sb.freeskreen.com',
@@ -1220,8 +1314,20 @@ const adConfig = jsonConfiguration({
},
'sunmedia': {
- prefetch: 'https://vod.addevweb.com/sunmedia/amp/ads/sunmedia.js',
- preconnect: 'https://static.addevweb.com',
+ preconnect: [
+ 'https://static.sunmedia.tv',
+ 'https://services.sunmedia.tv',
+ 'https://creative.sunmedia.tv',
+ 'https://vod.sunmedia.tv',
+ 'https://mx-sunmedia.videoplaza.tv',
+ 'https://es-sunicontent.videoplaza.tv',
+ 'https://es-sunelespanol.videoplaza.tv',
+ 'https://es-suncopperland.videoplaza.tv',
+ 'https://search.spotxchange.com',
+ 'https://tpc.googlesyndication.com',
+ ],
+ clientIdScope: 'AMP_ECID_SUNMEDIA',
+ fullWidthHeightRatio: 1 / 1,
renderStartImplemented: true,
},
@@ -1252,10 +1358,9 @@ const adConfig = jsonConfiguration({
},
'teads': {
- prefetch: 'https://s8t.teads.tv/media/format/v3/teads-format.min.js',
+ prefetch: 'https://a.teads.tv/media/format/v3/teads-format.min.js',
preconnect: [
'https://cdn2.teads.tv',
- 'https://a.teads.tv',
'https://t.teads.tv',
'https://r.teads.tv',
],
@@ -1343,6 +1448,10 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
+ 'vox': {
+ renderStartImplemented: true,
+ },
+
'webediads': {
prefetch: 'https://eu1.wbdds.com/amp.min.js',
preconnect: ['https://goutee.top', 'https://mediaathay.org.uk'],
@@ -1375,6 +1484,7 @@ const adConfig = jsonConfiguration({
'wunderkind': {
preconnect: ['https://tag.wknd.ai', 'https://api.bounceexchange.com'],
renderStartImplemented: true,
+ fullWidthHeightRatio: 4 / 3,
},
'xlift': {
@@ -1382,11 +1492,6 @@ const adConfig = jsonConfiguration({
renderStartImplemented: true,
},
- 'yahoo': {
- prefetch: 'https://s.yimg.com/aaq/ampad/display.js',
- preconnect: 'https://us.adserver.yahoo.com',
- },
-
'yahoofedads': {
renderStartImplemented: true,
},
diff --git a/ads/ads.extern.js b/ads/ads.extern.js
index ea11210c43c1..084ec9302f34 100644
--- a/ads/ads.extern.js
+++ b/ads/ads.extern.js
@@ -319,6 +319,23 @@ window.andbeyond.initAmp = function (
extras
) {};
+// affinity.js
+window.affinity = {};
+window.affinity.initAMP = function (global, data) {};
+data.width;
+data.height;
+data.adtype;
+data.adslot;
+data.slot;
+data.affLayout;
+data.multiSize;
+data.jsontargeting;
+data.affSticky;
+data.affTitle;
+data.affJson;
+data.affRtcConfig;
+data.extras;
+
// adreactor.js
data.zid;
data.pid;
@@ -534,6 +551,9 @@ data.local;
data.enablemraid;
data.jsplayer;
+// momagic
+window.momagicAmpInit;
+
// nativo.js
var PostRelease;
PostRelease.Start;
@@ -576,6 +596,12 @@ data.dfpSlot;
data.nc;
data.auid;
+// piberica.js
+data.height;
+data.publisher;
+data.slot;
+data.width;
+
// pixels.js
var pixelsAd;
var pixelsAMPAd;
@@ -616,6 +642,19 @@ data.section;
// pulsepoint.js
window.PulsePointHeaderTag;
+// r9x.js
+window.r9x = {};
+window.r9x.initAmp = function (
+ global,
+ width,
+ height,
+ siteid,
+ slotpath,
+ totalampslots,
+ jsontargeting,
+ extras
+) {};
+
// rubicon.js
data.method;
data.width;
@@ -631,9 +670,6 @@ data.callback;
// seedtag.js
data.adunitId;
-data.placement;
-data.publisherId;
-data.forceCreative;
// sharethrough.js
data.pkey;
diff --git a/ads/alp/handler.js b/ads/alp/handler.js
index 524f7c6086aa..b52b6f7f70ff 100644
--- a/ads/alp/handler.js
+++ b/ads/alp/handler.js
@@ -1,15 +1,16 @@
+import {closest} from '#core/dom/query';
+import {parseQueryString} from '#core/types/string/url';
+
+import {dev} from '#utils/log';
+
+import * as urls from '../../src/config/urls';
+import {openWindowDialog} from '../../src/open-window-dialog';
import {
addParamToUrl,
isLocalhostOrigin,
isProxyOrigin,
parseUrlDeprecated,
} from '../../src/url';
-import {closest} from '#core/dom/query';
-import {dev} from '#utils/log';
-import {dict} from '#core/types/object';
-import {openWindowDialog} from '../../src/open-window-dialog';
-import {parseQueryString} from '#core/types/string/url';
-import {urls} from '../../src/config';
/**
* Install a click listener that transforms navigation to the AMP cache
@@ -144,11 +145,9 @@ function navigateTo(win, a, url) {
if (a2aAncestor) {
a2aAncestor.win./*OK*/ postMessage(
'a2a;' +
- JSON.stringify(
- dict({
- 'url': url,
- })
- ),
+ JSON.stringify({
+ 'url': url,
+ }),
a2aAncestor.origin
);
return;
diff --git a/ads/alp/install-alp.js b/ads/alp/install-alp.js
index 0350b02661cd..df4bd74d860b 100644
--- a/ads/alp/install-alp.js
+++ b/ads/alp/install-alp.js
@@ -1,7 +1,9 @@
// Utility file that generates URLs suitable for AMP's impression tracking.
import {initLogConstructor, setReportError} from '#utils/log';
+
import {installAlpClickHandler, warmupStatic} from './handler';
+
import {reportError} from '../../src/error-reporting';
initLogConstructor();
diff --git a/ads/google/a4a/cookie-utils.js b/ads/google/a4a/cookie-utils.js
new file mode 100644
index 000000000000..cab14c824f2f
--- /dev/null
+++ b/ads/google/a4a/cookie-utils.js
@@ -0,0 +1,78 @@
+import {setCookie} from 'src/cookies';
+import {isProxyOrigin} from 'src/url';
+
+/** @type {string} */
+export const AMP_GFP_SET_COOKIES_HEADER_NAME = 'amp-ff-set-cookies';
+
+/**
+ * Returns the given domain if the current origin is not the AMP proxy origin,
+ * otherwise returns the empty string.
+ *
+ * On proxy origin, we want cookies to be partitioned by subdomain to prevent
+ * sharing across unrelated publishers, in which case we want to set the domain
+ * equal to the empty string (leave it unset).
+ *
+ * @param {!Window} win
+ * @param {string} domain
+ * @return {string}
+ */
+function getProxySafeDomain(win, domain) {
+ return isProxyOrigin(win.location) ? '' : domain;
+}
+
+/**
+ * @param {!Window} win
+ * @param {!Response} fetchResponse
+ */
+export function maybeSetCookieFromAdResponse(win, fetchResponse) {
+ if (!fetchResponse.headers.has(AMP_GFP_SET_COOKIES_HEADER_NAME)) {
+ return;
+ }
+ let cookiesToSet = /** @type {!Array} */ [];
+ try {
+ cookiesToSet = JSON.parse(
+ fetchResponse.headers.get(AMP_GFP_SET_COOKIES_HEADER_NAME)
+ );
+ } catch {}
+ for (const cookieInfo of cookiesToSet) {
+ const cookieName =
+ (cookieInfo['_version_'] ?? 1) === 2 ? '__gpi' : '__gads';
+ const value = cookieInfo['_value_'];
+ // On proxy origin, we want cookies to be partitioned by subdomain to
+ // prevent sharing across unrelated publishers, so we don't set a domain.
+ const domain = getProxySafeDomain(win, cookieInfo['_domain_']);
+ const expiration = Math.max(cookieInfo['_expiration_'], 0);
+ setCookie(win, cookieName, value, expiration, {
+ domain,
+ secure: false,
+ });
+ }
+}
+
+/**
+ * Sets up postmessage listener for cookie opt out signal.
+ * @param {!Window} win
+ * @param {!Event} event
+ */
+export function handleCookieOptOutPostMessage(win, event) {
+ try {
+ const message = JSON.parse(event.data);
+ if (message['googMsgType'] === 'gpi-uoo') {
+ const userOptOut = !!message['userOptOut'];
+ const clearAdsData = !!message['clearAdsData'];
+ const domain = getProxySafeDomain(win, win.location.hostname);
+ setCookie(
+ win,
+ '__gpi_opt_out',
+ userOptOut ? '1' : '0',
+ // Last valid date for 32-bit browsers; 2038-01-19
+ 2147483646 * 1000,
+ {domain}
+ );
+ if (userOptOut || clearAdsData) {
+ setCookie(win, '__gads', 'delete', Date.now() - 1000, {domain});
+ setCookie(win, '__gpi', 'delete', Date.now() - 1000, {domain});
+ }
+ }
+ } catch {}
+}
diff --git a/ads/google/a4a/experiment-utils.js b/ads/google/a4a/experiment-utils.js
index a6144e7a1ecb..6ed550f55b13 100644
--- a/ads/google/a4a/experiment-utils.js
+++ b/ads/google/a4a/experiment-utils.js
@@ -1,10 +1,10 @@
-import {addExperimentIdToElement} from './traffic-experiments';
import {
forceExperimentBranch,
getExperimentBranch,
randomlySelectUnsetExperiments,
} from '#experiments';
-import {ExperimentInfoDef} from '#experiments/experiments.type';
+
+import {addExperimentIdToElement} from './traffic-experiments';
/**
* Attempts to select into experiment and forces branch if selected.
diff --git a/ads/google/a4a/line-delimited-response-handler.js b/ads/google/a4a/line-delimited-response-handler.js
index 07290e24466d..ac193af2fb14 100644
--- a/ads/google/a4a/line-delimited-response-handler.js
+++ b/ads/google/a4a/line-delimited-response-handler.js
@@ -55,14 +55,14 @@ export function lineDelimitedStreamer(win, response, lineCallback) {
/**
* Given each line, groups such that the first is JSON parsed and second
* html unescaped.
- * @param {function(string, !Object, boolean)} callback
+ * @param {function(string, !{[key: string]: *}, boolean)} callback
* @return {function(string, boolean)}
*/
export function metaJsonCreativeGrouper(callback) {
let first;
return function (line, done) {
if (first) {
- const metadata = /** @type {!Object} */ (
+ const metadata = /** @type {!{[key: string]: *}} */ (
tryParseJson(first) || {}
);
const lowerCasedMetadata = Object.keys(metadata).reduce((newObj, key) => {
diff --git a/ads/google/a4a/shared/content-recommendation.js b/ads/google/a4a/shared/content-recommendation.js
index 04d1d27f501e..3c309dee6c01 100644
--- a/ads/google/a4a/shared/content-recommendation.js
+++ b/ads/google/a4a/shared/content-recommendation.js
@@ -63,7 +63,7 @@ const MAX_PUB_CONTROL_DIMENSION = 1500;
* image_card_sidebyside: https://screenshot.googleplex.com/v3qOZY61tFm
* text: https://screenshot.googleplex.com/taeRQn7DUhq
* text_card: https://screenshot.googleplex.com/ur45m96Tv0D
- * @const {!Object}
+ * @const {!{[key: !LayoutType]: number}}
*/
const LAYOUT_ASPECT_RATIO_MAP = {
[LayoutType.IMAGE_STACKED]: 1 / 1.91,
@@ -84,7 +84,7 @@ const LAYOUT_ASPECT_RATIO_MAP = {
* FontSize * LineHeight * NumTitle + Padding * 2 + UrlBoxHeight.
* image_stacked: https://screenshot.googleplex.com/74S09gFO82b
* image_card_stacked: https://screenshot.googleplex.com/vedjTonVaDT
- * @const {!Object}
+ * @const {!{[key: !LayoutType]: number}}
*/
const LAYOUT_TEXT_HEIGHT_MAP = {
[LayoutType.IMAGE_STACKED]: 80,
@@ -101,7 +101,7 @@ const LAYOUT_TEXT_HEIGHT_MAP = {
/**
* The layout - minimal width map for pub control UIs. We will adjust column
* numbers according to minimal width.
- * @const {!Object}
+ * @const {!{[key: !LayoutType]: number}}
*/
const LAYOUT_AD_WIDTH_MAP = {
[LayoutType.PUB_CONTROL_IMAGE_STACKED]: 100,
diff --git a/ads/google/a4a/shared/url-builder.js b/ads/google/a4a/shared/url-builder.js
index 2cfc9663847c..983b9366432c 100644
--- a/ads/google/a4a/shared/url-builder.js
+++ b/ads/google/a4a/shared/url-builder.js
@@ -5,7 +5,7 @@ export let QueryParameterDef;
* Builds a URL from query parameters, truncating to a maximum length if
* necessary.
* @param {string} baseUrl scheme, domain, and path for the URL.
- * @param {!Object} queryParams query parameters for
+ * @param {!{[key: string]: string|number|null}} queryParams query parameters for
* the URL.
* @param {number} maxLength length to truncate the URL to if necessary.
* @param {?QueryParameterDef=} opt_truncationQueryParam query parameter to
diff --git a/ads/google/a4a/test/test-cookie-utils.js b/ads/google/a4a/test/test-cookie-utils.js
new file mode 100644
index 000000000000..f1488f570255
--- /dev/null
+++ b/ads/google/a4a/test/test-cookie-utils.js
@@ -0,0 +1,101 @@
+import {
+ AMP_GFP_SET_COOKIES_HEADER_NAME,
+ handleCookieOptOutPostMessage,
+ maybeSetCookieFromAdResponse,
+} from '#ads/google/a4a/cookie-utils';
+
+import {getCookie, setCookie} from 'src/cookies';
+
+describes.fakeWin('#maybeSetCookieFromAdResponse', {amp: true}, (env) => {
+ it('should set cookies based on ad response header', () => {
+ maybeSetCookieFromAdResponse(env.win, {
+ headers: {
+ has: (header) => {
+ return header === AMP_GFP_SET_COOKIES_HEADER_NAME;
+ },
+ get: (header) => {
+ if (header !== AMP_GFP_SET_COOKIES_HEADER_NAME) {
+ return;
+ }
+
+ return JSON.stringify([
+ {
+ '_version_': 1,
+ '_value_': 'val1',
+ '_domain_': 'foo.com',
+ '_expiration_': Date.now() + 100_000,
+ },
+ {
+ '_version_': 2,
+ '_value_': 'val2',
+ '_domain_': 'foo.com',
+ '_expiration_': Date.now() + 100_000,
+ },
+ ]);
+ },
+ },
+ });
+
+ expect(getCookie(env.win, '__gads')).to.equal('val1');
+ expect(getCookie(env.win, '__gpi')).to.equal('val2');
+ });
+});
+
+describes.fakeWin('#handleCookieOptOutPostMessage', {amp: true}, (env) => {
+ it('should clear cookies as specified in creative response, with opt out', () => {
+ setCookie(env.win, '__gads', '__gads_val', Date.now() + 100_000);
+ setCookie(env.win, '__gpi', '__gpi_val', Date.now() + 100_000);
+ expect(getCookie(env.win, '__gads')).to.equal('__gads_val');
+ expect(getCookie(env.win, '__gpi')).to.equal('__gpi_val');
+
+ handleCookieOptOutPostMessage(env.win, {
+ data: JSON.stringify({
+ googMsgType: 'gpi-uoo',
+ userOptOut: true,
+ clearAdsData: true,
+ }),
+ });
+
+ expect(getCookie(env.win, '__gpi_opt_out')).to.equal('1');
+ expect(getCookie(env.win, '__gads')).to.be.null;
+ expect(getCookie(env.win, '__gpi')).to.be.null;
+ });
+
+ it('should clear cookies as specified in creative response, without opt out', () => {
+ setCookie(env.win, '__gads', '__gads_val', Date.now() + 100_000);
+ setCookie(env.win, '__gpi', '__gpi_val', Date.now() + 100_000);
+ expect(getCookie(env.win, '__gads')).to.equal('__gads_val');
+ expect(getCookie(env.win, '__gpi')).to.equal('__gpi_val');
+
+ handleCookieOptOutPostMessage(env.win, {
+ data: JSON.stringify({
+ googMsgType: 'gpi-uoo',
+ userOptOut: false,
+ clearAdsData: true,
+ }),
+ });
+
+ expect(getCookie(env.win, '__gpi_opt_out')).to.equal('0');
+ expect(getCookie(env.win, '__gads')).to.be.null;
+ expect(getCookie(env.win, '__gpi')).to.be.null;
+ });
+
+ it('should not clear cookies as specified in creative response, without opt out or clear ads', () => {
+ setCookie(env.win, '__gads', '__gads_val', Date.now() + 100_000);
+ setCookie(env.win, '__gpi', '__gpi_val', Date.now() + 100_000);
+ expect(getCookie(env.win, '__gads')).to.equal('__gads_val');
+ expect(getCookie(env.win, '__gpi')).to.equal('__gpi_val');
+
+ handleCookieOptOutPostMessage(env.win, {
+ data: JSON.stringify({
+ googMsgType: 'gpi-uoo',
+ userOptOut: false,
+ clearAdsData: false,
+ }),
+ });
+
+ expect(getCookie(env.win, '__gpi_opt_out')).to.equal('0');
+ expect(getCookie(env.win, '__gads')).to.equal('__gads_val');
+ expect(getCookie(env.win, '__gpi')).to.equal('__gpi_val');
+ });
+});
diff --git a/ads/google/a4a/test/test-line-delimited-response-handler.js b/ads/google/a4a/test/test-line-delimited-response-handler.js
index 01db3e0d6774..582ca59fa9b3 100644
--- a/ads/google/a4a/test/test-line-delimited-response-handler.js
+++ b/ads/google/a4a/test/test-line-delimited-response-handler.js
@@ -154,38 +154,28 @@ describes.sandboxed('#line-delimited-response-handler', {}, (env) => {
};
});
- // TODO(lannka, #15748): Fails on Safari 11.1.0.
- it.configure().skipSafari(
- 'should handle empty streamed response properly',
- () => {
- slotData = [];
- setup();
- return executeAndVerifyResponse();
- }
- );
+ it('should handle empty streamed response properly', () => {
+ slotData = [];
+ setup();
+ return executeAndVerifyResponse();
+ });
- // TODO(lannka, #15748): Fails on Safari 11.1.0.
- it.configure().skipSafari('should handle no fill response properly', () => {
+ it('should handle no fill response properly', () => {
slotData = [{headers: {}, creative: ''}];
setup();
return executeAndVerifyResponse();
});
- // TODO(lannka, #15748): Fails on Safari 11.1.0.
- it.configure().skipSafari(
- 'should handle multiple no fill responses properly',
- () => {
- slotData = [
- {headers: {}, creative: ''},
- {headers: {}, creative: ''},
- ];
- setup();
- return executeAndVerifyResponse();
- }
- );
+ it('should handle multiple no fill responses properly', () => {
+ slotData = [
+ {headers: {}, creative: ''},
+ {headers: {}, creative: ''},
+ ];
+ setup();
+ return executeAndVerifyResponse();
+ });
- // TODO(lannka, #15748): Fails on Safari 11.1.0.
- it.configure().skipSafari('should stream properly', () => {
+ it('should stream properly', () => {
slotData = [
{headers: {}, creative: ''},
{
diff --git a/ads/google/a4a/test/test-traffic-experiments.js b/ads/google/a4a/test/test-traffic-experiments.js
index 09e80dd3398c..4f526b3fd21a 100644
--- a/ads/google/a4a/test/test-traffic-experiments.js
+++ b/ads/google/a4a/test/test-traffic-experiments.js
@@ -1,13 +1,13 @@
-import {
- AMP_EXPERIMENT_ATTRIBUTE,
- EXPERIMENT_ATTRIBUTE,
-} from '#ads/google/a4a/utils';
import {
addAmpExperimentIdToElement,
addExperimentIdToElement,
isInExperiment,
validateExperimentIds,
} from '#ads/google/a4a/traffic-experiments';
+import {
+ AMP_EXPERIMENT_ATTRIBUTE,
+ EXPERIMENT_ATTRIBUTE,
+} from '#ads/google/a4a/utils';
describes.sandboxed('all-traffic-experiments-tests', {}, () => {
describe('#validateExperimentIds', () => {
diff --git a/ads/google/a4a/test/test-utils.js b/ads/google/a4a/test/test-utils.js
index 56c4e09aeebd..a81d9263c3a7 100644
--- a/ads/google/a4a/test/test-utils.js
+++ b/ads/google/a4a/test/test-utils.js
@@ -1,7 +1,8 @@
import * as fakeTimers from '@sinonjs/fake-timers';
+
import '../../../../extensions/amp-ad/0.1/amp-ad-ui';
import '../../../../extensions/amp-ad/0.1/amp-ad-xorigin-iframe-handler';
-import * as IniLoad from '../../../../src/ini-load';
+import {buildUrl} from '#ads/google/a4a/shared/url-builder';
import {
AMP_EXPERIMENT_ATTRIBUTE,
EXPERIMENT_ATTRIBUTE,
@@ -15,28 +16,29 @@ import {
getCorrelator,
getCsiAmpAnalyticsVariables,
getEnclosingContainerTypes,
- getIdentityToken,
- getIdentityTokenRequestUrl,
getServeNpaPromise,
googleAdUrl,
groupAmpAdsByType,
maybeAppendErrorParameter,
- maybeInsertOriginTrialToken,
mergeExperimentIds,
} from '#ads/google/a4a/utils';
-import {CONSENT_POLICY_STATE} from '#core/constants/consent-state';
-import {GEO_IN_GROUP} from '../../../../extensions/amp-geo/0.1/amp-geo-in-group';
-import {MockA4AImpl} from '../../../../extensions/amp-a4a/0.1/test/utils';
-import {Services} from '#service';
-import {buildUrl} from '#ads/google/a4a/shared/url-builder';
+
import {createElementWithAttributes} from '#core/dom';
-import {createIframePromise} from '#testing/iframe';
+
+import {toggleExperiment} from '#experiments';
+
+import {Services} from '#service';
import {installDocService} from '#service/ampdoc-impl';
import {installExtensionsService} from '#service/extensions-impl';
-import {installXhrService} from '#service/xhr-impl';
-import {toggleExperiment} from '#experiments';
+
import {user} from '#utils/log';
+import {createIframePromise} from '#testing/iframe';
+
+import {MockA4AImpl} from '../../../../extensions/amp-a4a/0.1/test/utils';
+import {GEO_IN_GROUP} from '../../../../extensions/amp-geo/0.1/amp-geo-in-group';
+import * as IniLoad from '../../../../src/ini-load';
+
function setupForAdTesting(fixture) {
installDocService(fixture.win, /* isSingleDoc */ true);
installExtensionsService(fixture.win);
@@ -645,13 +647,15 @@ describes.sandboxed('Google A4A utils', {}, (env) => {
model: 'Pixel',
uaFullVersion: 3.14159,
bitness: 42,
+ fullVersionList: [{brand: 'Chrome', version: '3.14159'}],
+ wow64: true,
}),
},
});
return fixture.addElement(elem).then(() => {
return googleAdUrl(impl, '', Date.now(), [], []).then((url) => {
expect(url).to.match(
- /[&?]uap=Windows&uapv=10&uaa=x86&uam=Pixel&uafv=3.14159&uab=42[&$]/
+ /[&?]uap=Windows&uapv=10&uaa=x86&uam=Pixel&uafv=3.14159&uab=42&uafvl=%5B%7B%22brand%22%3A%22Chrome%22%2C%22version%22%3A%223.14159%22%7D%5D&uaw=true[&$]/
);
});
});
@@ -681,7 +685,7 @@ describes.sandboxed('Google A4A utils', {}, (env) => {
const promise = googleAdUrl(impl, '', Date.now(), [], []).then(
(url) => {
expect(url).to.not.match(
- /[&?]uap=Windows&uapv=10&uaa=x86&uam=Pixel&uafv=3.14159&uab=42[&$]/
+ /[&?]uap=Windows&uapv=10&uaa=x86&uam=Pixel&uafv=3.14159&uab=42&uafvl=%5B%7B%22brand%22%3A%22Chrome%22%2C%22version%22%3A%223.14159%22%7D%5D&uaw=true[&$]/
);
}
);
@@ -774,228 +778,6 @@ describes.sandboxed('Google A4A utils', {}, (env) => {
});
});
- describes.fakeWin('#getIdentityTokenRequestUrl', {}, (env) => {
- let doc;
- let fakeWin;
- beforeEach(() => {
- const documentInfoStub = env.sandbox.stub(Services, 'documentInfoForDoc');
- doc = {};
- fakeWin = {location: {}};
- documentInfoStub
- .withArgs(doc)
- .returns({canonicalUrl: 'http://f.blah.com?some_site'});
- });
-
- it('should use google.com if at top', () => {
- fakeWin.top = fakeWin;
- fakeWin.location.ancestorOrigins = ['foo.google.com.eu'];
- expect(getIdentityTokenRequestUrl(fakeWin, doc)).to.equal(
- 'https://adservice.google.com/adsid/integrator.json?' +
- 'domain=f.blah.com'
- );
- });
-
- it('should use google.com if no ancestorOrigins', () => {
- expect(getIdentityTokenRequestUrl(fakeWin, doc)).to.equal(
- 'https://adservice.google.com/adsid/integrator.json?' +
- 'domain=f.blah.com'
- );
- });
-
- it('should use google.com if non-google top', () => {
- fakeWin.location.ancestorOrigins = ['foo.google2.com'];
- expect(getIdentityTokenRequestUrl(fakeWin, doc)).to.equal(
- 'https://adservice.google.com/adsid/integrator.json?' +
- 'domain=f.blah.com'
- );
- });
-
- it('should use google ancestor origin based top domain', () => {
- fakeWin.location.ancestorOrigins = ['foo.google.eu', 'blah.google.fr'];
- expect(getIdentityTokenRequestUrl(fakeWin, doc)).to.equal(
- 'https://adservice.google.fr/adsid/integrator.json?' +
- 'domain=f.blah.com'
- );
- });
-
- it('should use supplied domain', () => {
- fakeWin.location.ancestorOrigins = ['foo.google.fr'];
- expect(getIdentityTokenRequestUrl(fakeWin, doc, '.google.eu')).to.equal(
- 'https://adservice.google.eu/adsid/integrator.json?' +
- 'domain=f.blah.com'
- );
- });
- });
-
- describes.fakeWin(
- '#getIdentityToken',
- {amp: true, mockFetch: true},
- (env) => {
- beforeEach(() => {
- installXhrService(env.win);
- const documentInfoStub = env.sandbox.stub(
- Services,
- 'documentInfoForDoc'
- );
- documentInfoStub
- .withArgs(env.ampdoc)
- .returns({canonicalUrl: 'http://f.blah.com?some_site'});
- });
-
- afterEach(() => {
- // Verify fetch mocks are all consumed.
- expect(env.fetchMock.done()).to.be.true;
- });
-
- const getUrl = (domain) => {
- domain = domain || 'google.com';
- return (
- `https:\/\/adservice\.${domain}\/adsid\/integrator\.json\?` +
- 'domain=f.blah.com'
- );
- };
-
- it('should ignore response if required fields are missing', () => {
- env.expectFetch(getUrl(), JSON.stringify({newToken: 'abc'}));
- return getIdentityToken(env.win, env.ampdoc).then((result) => {
- expect(result.token).to.not.be.ok;
- expect(result.jar).to.not.be.ok;
- expect(result.pucrd).to.not.be.ok;
- expect(result.freshLifetimeSecs).to.not.be.ok;
- expect(result.validLifetimeSecs).to.not.be.ok;
- expect(result.fetchTimeMs).to.be.at.least(0);
- });
- });
-
- it('should fetch full token as expected', () => {
- env.expectFetch(
- getUrl(),
- JSON.stringify({
- newToken: 'abc',
- '1p_jar': 'some_jar',
- pucrd: 'some_pucrd',
- freshLifetimeSecs: '1234',
- validLifetimeSecs: '5678',
- })
- );
- return getIdentityToken(env.win, env.ampdoc).then((result) => {
- expect(result.token).to.equal('abc');
- expect(result.jar).to.equal('some_jar');
- expect(result.pucrd).to.equal('some_pucrd');
- expect(result.freshLifetimeSecs).to.equal(1234);
- expect(result.validLifetimeSecs).to.equal(5678);
- expect(result.fetchTimeMs).to.be.at.least(0);
- });
- });
-
- it('should redirect as expected', () => {
- env.expectFetch(getUrl(), JSON.stringify({altDomain: '.google.fr'}));
- env.expectFetch(
- getUrl('google.fr'),
- JSON.stringify({
- newToken: 'abc',
- freshLifetimeSecs: '1234',
- validLifetimeSecs: '5678',
- })
- );
- return getIdentityToken(env.win, env.ampdoc, '').then((result) => {
- expect(result.token).to.equal('abc');
- expect(result.jar).to.equal('');
- expect(result.pucrd).to.equal('');
- expect(result.freshLifetimeSecs).to.equal(1234);
- expect(result.validLifetimeSecs).to.equal(5678);
- expect(result.fetchTimeMs).to.be.at.least(0);
- });
- });
-
- it('should stop after 1 redirect', () => {
- env.expectFetch(getUrl(), JSON.stringify({altDomain: '.google.fr'}));
- env.expectFetch(
- getUrl('google.fr'),
- JSON.stringify({altDomain: '.google.com'})
- );
- return getIdentityToken(env.win, env.ampdoc).then((result) => {
- expect(result.token).to.not.be.ok;
- expect(result.jar).to.not.be.ok;
- expect(result.pucrd).to.not.be.ok;
- expect(result.fetchTimeMs).to.be.at.least(0);
- });
- });
-
- it('should use previous execution', () => {
- const ident = {
- newToken: 'foo',
- freshLifetimeSecs: '1234',
- validLifetimeSecs: '5678',
- };
- env.win['goog_identity_prom'] = Promise.resolve(ident);
- return getIdentityToken(env.win, env.ampdoc).then((result) =>
- expect(result).to.jsonEqual(ident)
- );
- });
-
- it('should handle fetch error', () => {
- env.sandbox
- .stub(Services, 'xhrFor')
- .returns({fetchJson: () => Promise.reject('some network failure')});
- return getIdentityToken(env.win, env.ampdoc).then((result) =>
- expect(result).to.jsonEqual({})
- );
- });
-
- it('should fetch if SUFFICIENT consent', () => {
- env.expectFetch(
- getUrl(),
- JSON.stringify({
- newToken: 'abc',
- '1p_jar': 'some_jar',
- pucrd: 'some_pucrd',
- freshLifetimeSecs: '1234',
- validLifetimeSecs: '5678',
- })
- );
- env.sandbox.stub(Services, 'consentPolicyServiceForDocOrNull').returns(
- Promise.resolve({
- whenPolicyResolved: () => CONSENT_POLICY_STATE.SUFFICIENT,
- })
- );
- return getIdentityToken(env.win, env.ampdoc, 'default').then((result) =>
- expect(result.token).to.equal('abc')
- );
- });
-
- it.configure()
- .skipFirefox()
- .run('should not fetch if INSUFFICIENT consent', () => {
- env.sandbox
- .stub(Services, 'consentPolicyServiceForDocOrNull')
- .returns(
- Promise.resolve({
- whenPolicyResolved: () => CONSENT_POLICY_STATE.INSUFFICIENT,
- })
- );
- return expect(
- getIdentityToken(env.win, env.ampdoc, 'default')
- ).to.eventually.jsonEqual({});
- });
-
- it.configure()
- .skipFirefox()
- .run('should not fetch if UNKNOWN consent', () => {
- env.sandbox
- .stub(Services, 'consentPolicyServiceForDocOrNull')
- .returns(
- Promise.resolve({
- whenPolicyResolved: () => CONSENT_POLICY_STATE.UNKNOWN,
- })
- );
- return expect(
- getIdentityToken(env.win, env.ampdoc, 'default')
- ).to.eventually.jsonEqual({});
- });
- }
- );
-
describe('variables for amp-analytics', () => {
let a4a;
let ampdoc;
@@ -1285,27 +1067,3 @@ describes.realWin('#groupAmpAdsByType', {amp: true}, (env) => {
});
});
});
-
-describes.realWin('maybeInsertOriginTrialToken', {}, (env) => {
- let doc;
- let win;
- beforeEach(() => {
- win = env.win;
- doc = win.document;
- });
-
- it('should insert the token', () => {
- expect(doc.querySelector('meta[http-equiv=origin-trial]')).to.not.exist;
- maybeInsertOriginTrialToken(win);
- expect(doc.querySelector('meta[http-equiv=origin-trial]')).to.exist;
- });
-
- it('should only insert the token once on multiple calls', () => {
- maybeInsertOriginTrialToken(win);
- maybeInsertOriginTrialToken(win);
- maybeInsertOriginTrialToken(win);
- expect(
- doc.querySelectorAll('meta[http-equiv=origin-trial]').length
- ).to.equal(1);
- });
-});
diff --git a/ads/google/a4a/traffic-experiments.js b/ads/google/a4a/traffic-experiments.js
index 339a0a8dec04..9f50b69b0405 100644
--- a/ads/google/a4a/traffic-experiments.js
+++ b/ads/google/a4a/traffic-experiments.js
@@ -6,13 +6,15 @@
* impacts on click-throughs.
*/
+import {parseQueryString} from '#core/types/string/url';
+
+import {Services} from '#service';
+
import {
AMP_EXPERIMENT_ATTRIBUTE,
EXPERIMENT_ATTRIBUTE,
mergeExperimentIds,
} from './utils';
-import {Services} from '#service';
-import {parseQueryString} from '#core/types/string/url';
/** @typedef {{
* control: string,
diff --git a/ads/google/a4a/utils.js b/ads/google/a4a/utils.js
index e7ecb80836d3..f1cbc944d0cb 100644
--- a/ads/google/a4a/utils.js
+++ b/ads/google/a4a/utils.js
@@ -1,21 +1,22 @@
-import {CONSENT_POLICY_STATE} from '#core/constants/consent-state';
+import {whenUpgradedToCustomElement} from '#core/dom/amp-element-helpers';
import {DomFingerprint} from '#core/dom/fingerprint';
-import {GEO_IN_GROUP} from '../../../extensions/amp-geo/0.1/amp-geo-in-group';
+import {getPageLayoutBoxBlocking} from '#core/dom/layout/page-layout-box';
+import * as mode from '#core/mode';
+import {parseJson} from '#core/types/object/json';
+
+import {getBinaryType, isExperimentOn, toggleExperiment} from '#experiments';
+
import {Services} from '#service';
-import {buildUrl} from './shared/url-builder';
+import {getTimingDataSync} from '#service/variable-source';
+
import {dev, devAssert, user} from '#utils/log';
-import {dict} from '#core/types/object';
-import {getBinaryType, isExperimentOn, toggleExperiment} from '#experiments';
-import {getConsentPolicyState} from '../../../src/consent';
+
+import {buildUrl} from './shared/url-builder';
+
+import {GEO_IN_GROUP} from '../../../extensions/amp-geo/0.1/amp-geo-in-group';
+import {getOrCreateAdCid} from '../../../src/ad-cid';
import {getMeasuredResources} from '../../../src/ini-load';
import {getMode} from '../../../src/mode';
-import {getOrCreateAdCid} from '../../../src/ad-cid';
-import {getPageLayoutBoxBlocking} from '#core/dom/layout/page-layout-box';
-import {getTimingDataSync} from '#service/variable-source';
-import * as mode from '#core/mode';
-import {parseJson} from '#core/types/object/json';
-import {whenUpgradedToCustomElement} from '#core/dom/amp-element-helpers';
-import {createElementWithAttributes} from '#core/dom';
/** @type {string} */
const AMP_ANALYTICS_HEADER = 'X-AmpAnalytics';
@@ -39,8 +40,8 @@ export const ValidAdContainerTypes = {
};
/**
- * See `VisibilityState` enum.
- * @const {!Object}
+ * See `VisibilityState_Enum` enum.
+ * @const {!{[key: string]: string}}
*/
const visibilityStateCodes = {
'visible': '1',
@@ -94,30 +95,10 @@ export let NameframeExperimentConfig;
*/
export const TRUNCATION_PARAM = {name: 'trunc', value: '1'};
-/** @const {Object} */
+/** @const {object} */
const CDN_PROXY_REGEXP =
/^https:\/\/([a-zA-Z0-9_-]+\.)?cdn\.ampproject\.org((\/.*)|($))+/;
-/** @const {string} */
-export const TOKEN_VALUE =
- 'A2dINGotLJuPqM6Wgp0s4V3te749O/VZEHqN0YsG4pfY+1pcjS5UaX1Bvcyz4aiShd8ZXPcT5spJazIzrbi5AwUAAACVeyJvcmlnaW4iOiJodHRwczovL2FtcHByb2plY3Qub3JnOjQ0MyIsImZlYXR1cmUiOiJDb252ZXJzaW9uTWVhc3VyZW1lbnQiLCJleHBpcnkiOjE2MzQwODMxOTksImlzU3ViZG9tYWluIjp0cnVlLCJpc1RoaXJkUGFydHkiOnRydWUsInVzYWdlIjoic3Vic2V0In0=';
-
-/**
- * Inserts origin-trial token for `attribution-reporting` if not already
- * present in the DOM.
- * @param {!Window} win
- */
-export function maybeInsertOriginTrialToken(win) {
- if (win.document.head.querySelector(`meta[content='${TOKEN_VALUE}']`)) {
- return;
- }
- const metaEl = createElementWithAttributes(win.document, 'meta', {
- 'http-equiv': 'origin-trial',
- content: TOKEN_VALUE,
- });
- win.document.head.appendChild(metaEl);
-}
-
/**
* Returns the value of some navigation timing parameter.
* Feature detection is used for safety on browsers that do not support the
@@ -196,7 +177,7 @@ export function isReportingEnabled(ampElement) {
* @param {!Array=} opt_experimentIds Any experiments IDs (in addition
* to those specified on the ad element) that should be included in the
* request.
- * @return {!Object} block level parameters
+ * @return {!{[key: string]: null|number|string}} block level parameters
*/
export function googleBlockParameters(a4a, opt_experimentIds) {
const {element: adElement, win} = a4a;
@@ -231,7 +212,7 @@ export function googleBlockParameters(a4a, opt_experimentIds) {
* @param {!../../../src/service/ampdoc-impl.AmpDoc} ampdoc
* @param {string} type matching typing attribute.
* @param {function(!Element):string} groupFn
- * @return {!Promise>>>}
+ * @return {!Promise>>}
*/
export function groupAmpAdsByType(ampdoc, type, groupFn) {
// Look for amp-ad elements of correct type or those contained within
@@ -284,7 +265,7 @@ export function groupAmpAdsByType(ampdoc, type, groupFn) {
/**
* @param {! ../../../extensions/amp-a4a/0.1/amp-a4a.AmpA4A} a4a
* @param {number} startTime
- * @return {!Promise>}
+ * @return {!Promise}
*/
export function googlePageParameters(a4a, startTime) {
const {win} = a4a;
@@ -364,6 +345,8 @@ export function googlePageParameters(a4a, startTime) {
'uam': uaDataValues?.model,
'uafv': uaDataValues?.uaFullVersion,
'uab': uaDataValues?.bitness,
+ 'uafvl': JSON.stringify(uaDataValues?.fullVersionList),
+ 'uaw': uaDataValues?.wow64,
};
});
}
@@ -372,7 +355,7 @@ export function googlePageParameters(a4a, startTime) {
* @param {!../../../extensions/amp-a4a/0.1/amp-a4a.AmpA4A} a4a
* @param {string} baseUrl
* @param {number} startTime
- * @param {!Object} parameters
+ * @param {!{[key: string]: null|number|string}} parameters
* @param {!Array=} opt_experimentIds Any experiments IDs (in addition
* to those specified on the ad element) that should be included in the
* request.
@@ -395,7 +378,7 @@ export function googleAdUrl(
/**
* @param {string} baseUrl
- * @param {!Object} parameters
+ * @param {!{[key: string]: null|number|string}} parameters
* @param {number} startTime
* @return {string}
*/
@@ -582,11 +565,11 @@ export function additionalDimensions(win, viewportSize) {
/**
* Returns amp-analytics config for a new CSI trigger.
* @param {string} on The name of the analytics trigger.
- * @param {!Object} params Params to be included on the ping.
+ * @param {!{[key: string]: string}} params Params to be included on the ping.
* @return {!JsonObject}
*/
function csiTrigger(on, params) {
- return dict({
+ return {
'on': on,
'request': 'csi',
'sampleSpec': {
@@ -599,7 +582,7 @@ function csiTrigger(on, params) {
'selector': 'amp-ad',
'selectionMethod': 'closest',
'extraUrlParams': params,
- });
+ };
}
/**
@@ -607,7 +590,7 @@ function csiTrigger(on, params) {
* @return {!JsonObject}
*/
export function getCsiAmpAnalyticsConfig() {
- return dict({
+ return {
'requests': {
'csi': 'https://csi.gstatic.com/csi?',
},
@@ -643,7 +626,7 @@ export function getCsiAmpAnalyticsConfig() {
// evaluated when the URL is built by amp-analytics.
'puid': '${requestCount}~${timestamp}',
},
- });
+ };
}
/**
@@ -708,11 +691,11 @@ export function extractAmpAnalyticsConfig(a4a, responseHeaders) {
if (!hasActiveViewRequests && !hasBeginToRenderRequests) {
return null;
}
- const config = dict({
+ const config = {
'transport': {'beacon': false, 'xhrpost': false},
'requests': {},
'triggers': {},
- });
+ };
if (hasActiveViewRequests) {
generateActiveViewRequest(config, acUrls);
}
@@ -736,7 +719,7 @@ export function extractAmpAnalyticsConfig(a4a, responseHeaders) {
* @param {!Array} urls
*/
function generateActiveViewRequest(config, urls) {
- config['triggers']['continuousVisible'] = dict({
+ config['triggers']['continuousVisible'] = {
'request': [],
'on': 'visible',
'visibilitySpec': {
@@ -745,7 +728,7 @@ function generateActiveViewRequest(config, urls) {
'visiblePercentageMin': 50,
'continuousTimeMin': 1000,
},
- });
+ };
for (let idx = 0; idx < urls.length; idx++) {
// TODO: Ensure url is valid and not freeform JS?
config['requests'][`visibility${idx + 1}`] = `${urls[idx]}`;
@@ -760,12 +743,12 @@ function generateActiveViewRequest(config, urls) {
* @param {!Array} urls
*/
function generateBeginToRenderRequest(config, urls) {
- config['triggers']['beginToRender'] = dict({
+ config['triggers']['beginToRender'] = {
'request': [],
'on': 'ini-load',
'selector': 'amp-ad',
'selectionMethod': 'closest',
- });
+ };
for (let idx = 0; idx < urls.length; idx++) {
// TODO: Ensure url is valid and not freeform JS?
@@ -936,130 +919,6 @@ export function getBinaryTypeNumericalCode(type) {
);
}
-/** @const {!RegExp} */
-const IDENTITY_DOMAIN_REGEXP_ = /\.google\.(?:com?\.)?[a-z]{2,3}$/;
-
-/** @typedef {{
- token: (string|undefined),
- jar: (string|undefined),
- pucrd: (string|undefined),
- freshLifetimeSecs: (number|undefined),
- validLifetimeSecs: (number|undefined),
- fetchTimeMs: (number|undefined)
- }} */
-export let IdentityToken;
-
-/**
- * @param {!Window} win
- * @param {!../../../src/service/ampdoc-impl.AmpDoc} ampDoc
- * @param {?string} consentPolicyId
- * @return {!Promise}
- */
-export function getIdentityToken(win, ampDoc, consentPolicyId) {
- // If configured to use amp-consent, delay request until consent state is
- // resolved.
- win['goog_identity_prom'] =
- win['goog_identity_prom'] ||
- (consentPolicyId
- ? getConsentPolicyState(ampDoc.getHeadNode(), consentPolicyId)
- : Promise.resolve(CONSENT_POLICY_STATE.UNKNOWN_NOT_REQUIRED)
- ).then((consentState) =>
- consentState == CONSENT_POLICY_STATE.INSUFFICIENT ||
- consentState == CONSENT_POLICY_STATE.UNKNOWN
- ? /** @type {!IdentityToken} */ ({})
- : executeIdentityTokenFetch(win, ampDoc)
- );
- return /** @type {!Promise} */ (win['goog_identity_prom']);
-}
-
-/**
- * @param {!Window} win
- * @param {!../../../src/service/ampdoc-impl.AmpDoc} ampDoc
- * @param {number=} redirectsRemaining (default 1)
- * @param {string=} domain
- * @param {number=} startTime
- * @return {!Promise}
- */
-function executeIdentityTokenFetch(
- win,
- ampDoc,
- redirectsRemaining = 1,
- domain = undefined,
- startTime = Date.now()
-) {
- const url = getIdentityTokenRequestUrl(win, ampDoc, domain);
- return Services.xhrFor(win)
- .fetchJson(url, {
- mode: 'cors',
- method: 'GET',
- ampCors: false,
- credentials: 'include',
- })
- .then((res) => res.json())
- .then((obj) => {
- const token = obj['newToken'];
- const jar = obj['1p_jar'] || '';
- const pucrd = obj['pucrd'] || '';
- const freshLifetimeSecs = parseInt(obj['freshLifetimeSecs'] || '', 10);
- const validLifetimeSecs = parseInt(obj['validLifetimeSecs'] || '', 10);
- const altDomain = obj['altDomain'];
- const fetchTimeMs = Date.now() - startTime;
- if (IDENTITY_DOMAIN_REGEXP_.test(altDomain)) {
- if (!redirectsRemaining--) {
- // Max redirects, log?
- return {fetchTimeMs};
- }
- return executeIdentityTokenFetch(
- win,
- ampDoc,
- redirectsRemaining,
- altDomain,
- startTime
- );
- } else if (
- freshLifetimeSecs > 0 &&
- validLifetimeSecs > 0 &&
- typeof token == 'string'
- ) {
- return {
- token,
- jar,
- pucrd,
- freshLifetimeSecs,
- validLifetimeSecs,
- fetchTimeMs,
- };
- }
- // returning empty
- return {fetchTimeMs};
- })
- .catch((unusedErr) => {
- // TODO log?
- return {};
- });
-}
-
-/**
- * @param {!Window} win
- * @param {!../../../src/service/ampdoc-impl.AmpDoc} ampDoc
- * @param {string=} domain
- * @return {string} url
- * @visibleForTesting
- */
-export function getIdentityTokenRequestUrl(win, ampDoc, domain = undefined) {
- if (!domain && win != win.top && win.location.ancestorOrigins) {
- const matches = IDENTITY_DOMAIN_REGEXP_.exec(
- win.location.ancestorOrigins[win.location.ancestorOrigins.length - 1]
- );
- domain = (matches && matches[0]) || undefined;
- }
- domain = domain || '.google.com';
- const canonical = extractHost(
- Services.documentInfoForDoc(ampDoc).canonicalUrl
- );
- return `https://adservice${domain}/adsid/integrator.json?domain=${canonical}`;
-}
-
/**
* Returns whether we are running on the AMP CDN.
* @param {!Window} win
@@ -1090,7 +949,7 @@ export function setNameframeExperimentConfigs(headers, nameframeConfig) {
* than 32 capabilities to this enum.
* @enum {number}
*/
-const Capability = {
+const Capability_Enum = {
SVG_SUPPORTED: 1 << 0,
SANDBOXING_ALLOW_TOP_NAVIGATION_BY_USER_ACTIVATION_SUPPORTED: 1 << 1,
SANDBOXING_ALLOW_POPUPS_TO_ESCAPE_SANDBOX_SUPPORTED: 1 << 2,
@@ -1105,17 +964,17 @@ function getBrowserCapabilitiesBitmap(win) {
let browserCapabilities = 0;
const doc = win.document;
if (win.SVGElement && doc.createElementNS) {
- browserCapabilities |= Capability.SVG_SUPPORTED;
+ browserCapabilities |= Capability_Enum.SVG_SUPPORTED;
}
const iframeEl = doc.createElement('iframe');
if (iframeEl.sandbox && iframeEl.sandbox.supports) {
if (iframeEl.sandbox.supports('allow-top-navigation-by-user-activation')) {
browserCapabilities |=
- Capability.SANDBOXING_ALLOW_TOP_NAVIGATION_BY_USER_ACTIVATION_SUPPORTED;
+ Capability_Enum.SANDBOXING_ALLOW_TOP_NAVIGATION_BY_USER_ACTIVATION_SUPPORTED;
}
if (iframeEl.sandbox.supports('allow-popups-to-escape-sandbox')) {
browserCapabilities |=
- Capability.SANDBOXING_ALLOW_POPUPS_TO_ESCAPE_SANDBOX_SUPPORTED;
+ Capability_Enum.SANDBOXING_ALLOW_POPUPS_TO_ESCAPE_SANDBOX_SUPPORTED;
}
}
return browserCapabilities;
diff --git a/ads/google/ima/OWNERS b/ads/google/ima/OWNERS
index cae983b4cc00..ce67a2eecfaf 100644
--- a/ads/google/ima/OWNERS
+++ b/ads/google/ima/OWNERS
@@ -5,7 +5,6 @@
rules: [
{
owners: [
- {name: 'ampproject/wg-bento'},
{name: 'ampproject/wg-components'},
{name: 'ampproject/wg-monetization'},
],
diff --git a/ads/google/ima/ima-video.js b/ads/google/ima/ima-video.js
index 030345f722a6..bbc4ab0c6f28 100644
--- a/ads/google/ima/ima-video.js
+++ b/ads/google/ima/ima-video.js
@@ -1,13 +1,22 @@
-import {CONSENT_POLICY_STATE} from '#core/constants/consent-state';
-import {ImaPlayerData} from './ima-player-data';
-import {camelCaseToTitleCase, setStyle, toggle} from '#core/dom/style';
-import {getData} from '#utils/event-helper';
+import {loadScript} from '#3p/3p';
+
+import {
+ CONSENT_POLICY_STATE,
+ CONSENT_STRING_TYPE,
+} from '#core/constants/consent-state';
import {htmlFor, htmlRefs, svgFor} from '#core/dom/static-template';
+import {camelCaseToTitleCase, setStyle, toggle} from '#core/dom/style';
import {isArray, isObject} from '#core/types';
-import {loadScript} from '#3p/3p';
import {throttle} from '#core/types/function';
import {tryParseJson} from '#core/types/object/json';
+
+import {getData} from '#utils/event-helper';
+
// Source for this constant is css/amp-ima-video-iframe.css
+import {addParamToUrl} from 'src/url';
+
+import {ImaPlayerData} from './ima-player-data';
+
import {cssText} from '../../../build/amp-ima-video-iframe.css';
/**
@@ -173,8 +182,8 @@ let adsRequested;
// Flag that tracks if the user tapped and dragged on the overlay button.
let userTappedAndDragged;
-// User consent state.
-let consentState;
+// global context
+let context;
// Throttle for the showControls() function
let showControlsThrottled = throttle(window, showControls, 1000);
@@ -205,7 +214,7 @@ function toggleRootDataAttribute(state, active) {
/**
* @param {Document} elementOrDoc
- * @return {!Object}
+ * @return {!{[key: string]: !Element}}
*/
function renderElements(elementOrDoc) {
const html = htmlFor(elementOrDoc);
@@ -322,6 +331,8 @@ function maybeAppendChildren(document, parent, childrenDef) {
* @param {!Object} data
*/
export function imaVideo(global, data) {
+ context = global.context;
+
insertCss(global.document.head, cssText);
videoWidth = global./*OK*/ innerWidth;
@@ -430,10 +441,7 @@ export function imaVideo(global, data) {
);
});
- consentState = global.context.initialConsentState;
-
- if (consentState == 4) {
- // UNKNOWN
+ if (context.initialConsentState == CONSENT_POLICY_STATE.UNKNOWN) {
// On unknown consent state, do not load IMA. Treat this the same as if IMA
// failed to load.
onImaLoadFail();
@@ -549,7 +557,7 @@ function onImaLoadSuccess(global, data) {
requestAds();
} else {
// Let amp-ima-video know that we are done set-up.
- postMessage({event: VideoEvents.LOAD});
+ postMessage({event: VideoEvents_Enum.LOAD});
}
}
@@ -564,7 +572,7 @@ function onImaLoadFail() {
showControlsThrottled
);
imaLoadAllowed = false;
- postMessage({event: VideoEvents.LOAD});
+ postMessage({event: VideoEvents_Enum.LOAD});
}
/**
@@ -622,16 +630,40 @@ function onOverlayButtonTouchMove() {
export function requestAds() {
adsRequested = true;
adRequestFailed = false;
- if (consentState == CONSENT_POLICY_STATE.UNKNOWN) {
+ const {initialConsentState} = context;
+ if (initialConsentState == CONSENT_POLICY_STATE.UNKNOWN) {
// We're unaware of the user's consent state - do not request ads.
imaLoadAllowed = false;
return;
- } else if (consentState == CONSENT_POLICY_STATE.INSUFFICIENT) {
+ }
+ adsRequest.adTagUrl = addParamsToAdTagUrl(adsRequest.adTagUrl);
+ adsLoader.requestAds(adsRequest);
+}
+
+/**
+ * @param {string} url
+ * @return {string}
+ */
+function addParamsToAdTagUrl(url) {
+ const {initialConsentMetadata, initialConsentState, initialConsentValue} =
+ context;
+ if (initialConsentState == CONSENT_POLICY_STATE.INSUFFICIENT) {
// User has provided consent state but has not consented to personalized
// ads.
- adsRequest.adTagUrl += '&npa=1';
+ url = addParamToUrl(url, 'npa', '1');
}
- adsLoader.requestAds(adsRequest);
+ const {additionalConsent, consentStringType} = initialConsentMetadata || {};
+ const isGdpr =
+ consentStringType != null &&
+ consentStringType !== CONSENT_STRING_TYPE.US_PRIVACY_STRING;
+ if (isGdpr && initialConsentValue != null) {
+ url = addParamToUrl(url, 'gdpr', '1');
+ url = addParamToUrl(url, 'gdpr_consent', initialConsentValue);
+ }
+ if (additionalConsent != null) {
+ url = addParamToUrl(url, 'addtl_consent', additionalConsent);
+ }
+ return url;
}
/**
@@ -688,8 +720,8 @@ export function onContentEnded() {
toggle(elements['overlayButton'], true);
}
- postMessage({event: VideoEvents.PAUSE});
- postMessage({event: VideoEvents.ENDED});
+ postMessage({event: VideoEvents_Enum.PAUSE});
+ postMessage({event: VideoEvents_Enum.ENDED});
}
/**
@@ -737,7 +769,7 @@ export function onAdsManagerLoaded(global, adsManagerLoadedEvent) {
if (muteAdsManagerOnLoaded) {
adsManager.setVolume(0);
}
- postMessage({event: VideoEvents.LOAD});
+ postMessage({event: VideoEvents_Enum.LOAD});
}
/**
@@ -750,7 +782,7 @@ export function onAdsLoaderError() {
// Send this message to trigger auto-play for failed pre-roll requests -
// failing to load an ad is just as good as loading one as far as starting
// playback is concerned because our content will be ready to play.
- postMessage({event: VideoEvents.LOAD});
+ postMessage({event: VideoEvents_Enum.LOAD});
addHoverEventToElement(
/** @type {!Element} */ (elements['video']),
showControlsThrottled
@@ -766,7 +798,7 @@ export function onAdsLoaderError() {
* @visibleForTesting
*/
export function onAdError() {
- postMessage({event: VideoEvents.AD_END});
+ postMessage({event: VideoEvents_Enum.AD_END});
currentAd = null;
if (adsManager) {
adsManager.destroy();
@@ -824,7 +856,7 @@ export function onContentPauseRequested(global) {
}
adsActive = true;
playerState = PlayerStates.PLAYING;
- postMessage({event: VideoEvents.AD_START});
+ postMessage({event: VideoEvents_Enum.AD_START});
toggle(elements['adContainer'], true);
showAdControls();
@@ -849,7 +881,7 @@ export function onContentResumeRequested() {
/** @type {!Element} */ (video),
showControlsThrottled
);
- postMessage({event: VideoEvents.AD_END});
+ postMessage({event: VideoEvents_Enum.AD_END});
resetControlsAfterAd();
if (!contentComplete) {
// CONTENT_RESUME will fire after post-rolls as well, and we don't want to
@@ -1096,7 +1128,7 @@ export function playVideo() {
video.play();
}
playerState = PlayerStates.PLAYING;
- postMessage({event: VideoEvents.PLAYING});
+ postMessage({event: VideoEvents_Enum.PLAYING});
toggleRootDataAttribute('playing', true);
}
@@ -1121,7 +1153,7 @@ export function pauseVideo(event = null) {
}
}
playerState = PlayerStates.PAUSED;
- postMessage({event: VideoEvents.PAUSE});
+ postMessage({event: VideoEvents_Enum.PAUSE});
toggleRootDataAttribute('playing', false);
}
@@ -1168,11 +1200,13 @@ export function toggleMuted(video, muted) {
muteAdsManagerOnLoaded = muted;
}
toggleRootDataAttribute('muted', muted);
- postMessage({event: muted ? VideoEvents.MUTED : VideoEvents.UNMUTED});
+ postMessage({
+ event: muted ? VideoEvents_Enum.MUTED : VideoEvents_Enum.UNMUTED,
+ });
}
/**
- * @param {Object} global
+ * @param {object} global
*/
function exitFullscreen(global) {
// The video is currently in fullscreen mode
@@ -1187,7 +1221,7 @@ function exitFullscreen(global) {
}
/**
- * @param {Object} global
+ * @param {object} global
*/
function enterFullscreen(global) {
// Try to enter fullscreen mode in the browser
@@ -1216,7 +1250,7 @@ function enterFullscreen(global) {
}
/**
- * @param {Object} global
+ * @param {object} global
*/
function toggleFullscreen(global) {
if (fullscreen) {
@@ -1228,7 +1262,7 @@ function toggleFullscreen(global) {
/**
* Called when the fullscreen mode of the browser or content player changes.
- * @param {Object} global
+ * @param {object} global
*/
function onFullscreenChange(global) {
if (fullscreen) {
@@ -1609,12 +1643,13 @@ export function setHideControlsTimeoutForTesting(newTimeout) {
}
/**
- * Sets the consent state.
- * @param {*} newConsentState
+ * @param {object} newContext
* @visibleForTesting
*/
-export function setConsentStateForTesting(newConsentState) {
- consentState = newConsentState;
+export function setContextForTesting(newContext) {
+ for (const k in newContext) {
+ context[k] = newContext[k];
+ }
}
/**
@@ -1622,10 +1657,10 @@ export function setConsentStateForTesting(newConsentState) {
*
* Copied from src/video-interface.js.
*
- * @const {!Object}
+ * @enum {string}
*/
// TODO(aghassemi, #9216): Use video-interface.js
-const VideoEvents = {
+const VideoEvents_Enum = {
/**
* load
*
diff --git a/ads/google/utils.js b/ads/google/utils.js
index e51735b4e594..c46c034f3cc1 100644
--- a/ads/google/utils.js
+++ b/ads/google/utils.js
@@ -1,10 +1,11 @@
+import {user} from '#utils/log';
+
import {
ExternalCorePubVars,
MIN_PUB_CONTROL_WIDTH_OF_DESKTOP,
getAutoConfig,
getPubControlConfig,
} from './a4a/shared/content-recommendation';
-import {user} from '#utils/log';
/**
* Approved height for AdSense full-width responsive ads.
diff --git a/ads/inabox/frame-overlay-helper.js b/ads/inabox/frame-overlay-helper.js
index 06fe2519a33b..751b3a452396 100644
--- a/ads/inabox/frame-overlay-helper.js
+++ b/ads/inabox/frame-overlay-helper.js
@@ -1,14 +1,11 @@
-import {
- LayoutRectDef,
- layoutRectFromDomRect,
- layoutRectLtwh,
-} from '#core/dom/layout/rect';
+import {layoutRectFromDomRect, layoutRectLtwh} from '#core/dom/layout/rect';
+import {resetStyles, setImportantStyles} from '#core/dom/style';
+
import {
centerFrameUnderVsyncMutate,
collapseFrameUnderVsyncMutate,
expandFrameUnderVsyncMutate,
} from './full-overlay-frame-helper';
-import {resetStyles, setImportantStyles} from '#core/dom/style';
import {restrictedVsync, timer} from './util';
const CENTER_TRANSITION_TIME_MS = 150;
diff --git a/ads/inabox/inabox-host.js b/ads/inabox/inabox-host.js
index bfe15e55f88a..93c00fa7546e 100644
--- a/ads/inabox/inabox-host.js
+++ b/ads/inabox/inabox-host.js
@@ -3,9 +3,11 @@
* its embed AMP content (such as an ad created in AMP).
*/
-import {InaboxMessagingHost} from './inabox-messaging-host';
-import {dev, initLogConstructor, setReportError, user} from '#utils/log';
import {getData} from '#utils/event-helper';
+import {dev, initLogConstructor, setReportError, user} from '#utils/log';
+
+import {InaboxMessagingHost} from './inabox-messaging-host';
+
import {reportError} from '../../src/error-reporting';
/** @const {string} */
diff --git a/ads/inabox/inabox-messaging-host.js b/ads/inabox/inabox-messaging-host.js
index 60cb766179f3..3e848bf797a9 100644
--- a/ads/inabox/inabox-messaging-host.js
+++ b/ads/inabox/inabox-messaging-host.js
@@ -1,20 +1,22 @@
import {
- MessageType,
+ MessageType_Enum,
deserializeMessage,
serializeMessage,
} from '#core/3p-frame-messaging';
-import {canInspectWindow} from '../../src/iframe-helper';
-import {dev, devAssert} from '#utils/log';
-import {dict} from '#core/types/object';
+
import {getData} from '#utils/event-helper';
+import {dev, devAssert} from '#utils/log';
+
import {getFrameOverlayManager} from './frame-overlay-manager';
import {getPositionObserver} from './position-observer';
+import {canInspectWindow} from '../../src/iframe-helper';
+
/** @const */
const TAG = 'InaboxMessagingHost';
/** @const */
-const READ_ONLY_MESSAGES = [MessageType.SEND_POSITIONS];
+const READ_ONLY_MESSAGES = [MessageType_Enum.SEND_POSITIONS];
/** Simple helper for named callbacks. */
class NamedObservable {
@@ -22,7 +24,7 @@ class NamedObservable {
* Creates an instance of NamedObservable.
*/
constructor() {
- /** @private {!Object} */
+ /** @private {!{[key: string]: !Function}} */
this.map_ = {};
}
@@ -70,7 +72,7 @@ export class InaboxMessagingHost {
/** @private {!Array} */
this.iframes_ = iframes;
- /** @private {!Object} */
+ /** @private {!{[key: string]: !AdFrameDef}} */
this.iframeMap_ = Object.create(null);
/** @private {!./position-observer.PositionObserver} */
@@ -83,17 +85,17 @@ export class InaboxMessagingHost {
this.frameOverlayManager_ = getFrameOverlayManager(hostWin);
this.msgObservable_.listen(
- MessageType.SEND_POSITIONS,
+ MessageType_Enum.SEND_POSITIONS,
this.handleSendPositions_
);
this.msgObservable_.listen(
- MessageType.FULL_OVERLAY_FRAME,
+ MessageType_Enum.FULL_OVERLAY_FRAME,
this.handleEnterFullOverlay_
);
this.msgObservable_.listen(
- MessageType.CANCEL_FULL_OVERLAY_FRAME,
+ MessageType_Enum.CANCEL_FULL_OVERLAY_FRAME,
this.handleCancelFullOverlay_
);
}
@@ -156,14 +158,10 @@ export class InaboxMessagingHost {
handleSendPositions_(iframe, request, source, unusedOrigin) {
const viewportRect = this.positionObserver_.getViewportRect();
const targetRect = this.positionObserver_.getTargetRect(iframe);
- this.sendPosition_(
- request,
- source,
- dict({
- 'viewportRect': viewportRect,
- 'targetRect': targetRect,
- })
- );
+ this.sendPosition_(request, source, {
+ 'viewportRect': viewportRect,
+ 'targetRect': targetRect,
+ });
devAssert(this.iframeMap_[request.sentinel]);
this.iframeMap_[request.sentinel].observeUnregisterFn =
@@ -183,7 +181,7 @@ export class InaboxMessagingHost {
sendPosition_(request, source, data) {
dev().fine(TAG, 'Sent position data to [%s] %s', request.sentinel, data);
source./*OK*/ postMessage(
- serializeMessage(MessageType.POSITION, request.sentinel, data),
+ serializeMessage(MessageType_Enum.POSITION, request.sentinel, data),
// We don't need to restrict what origin we send the data to because (a)
// we've already verified that this iframe is allowed to learn its position,
// and (b) we're post messaging back directly to the requesting frame.
@@ -207,12 +205,12 @@ export class InaboxMessagingHost {
this.frameOverlayManager_.expandFrame(iframe, (boxRect) => {
source./*OK*/ postMessage(
serializeMessage(
- MessageType.FULL_OVERLAY_FRAME_RESPONSE,
+ MessageType_Enum.FULL_OVERLAY_FRAME_RESPONSE,
request.sentinel,
- dict({
+ {
'success': true,
'boxRect': boxRect,
- })
+ }
),
origin
);
@@ -232,12 +230,12 @@ export class InaboxMessagingHost {
this.frameOverlayManager_.collapseFrame(iframe, (boxRect) => {
source./*OK*/ postMessage(
serializeMessage(
- MessageType.CANCEL_FULL_OVERLAY_FRAME_RESPONSE,
+ MessageType_Enum.CANCEL_FULL_OVERLAY_FRAME_RESPONSE,
request.sentinel,
- dict({
+ {
'success': true,
'boxRect': boxRect,
- })
+ }
),
origin
);
diff --git a/ads/inabox/position-observer.js b/ads/inabox/position-observer.js
index 1a2d29fddf76..98a4aa0252f9 100644
--- a/ads/inabox/position-observer.js
+++ b/ads/inabox/position-observer.js
@@ -1,10 +1,9 @@
+import {Observable} from '#core/data-structures/observable';
import {
- LayoutRectDef,
layoutRectFromDomRect,
layoutRectLtwh,
moveLayoutRect,
} from '#core/dom/layout/rect';
-import {Observable} from '#core/data-structures/observable';
import {throttle} from '#core/types/function';
/**
@@ -15,6 +14,8 @@ import {throttle} from '#core/types/function';
*/
let PositionEntryDef;
+/** @typedef {import('#core/dom/layout/rect').LayoutRectDef} LayoutRectDef */
+
/** @const */
const MIN_EVENT_INTERVAL_IN_MS = 100;
diff --git a/ads/vendors/4wmarketplace.js b/ads/vendors/4wmarketplace.js
new file mode 100644
index 000000000000..9cfb384cce90
--- /dev/null
+++ b/ads/vendors/4wmarketplace.js
@@ -0,0 +1,75 @@
+import {loadScript} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function _4wmarketplace(global, data) {
+ const $4wm = global;
+ const containerDiv = $4wm.document.createElement('div');
+ const containerId = 'fwcontainer';
+ containerDiv.id = containerId;
+ $4wm.document.getElementById('c').appendChild(containerDiv);
+
+ if (typeof data.adtype != 'undefined' && data.adtype == 'ad-custom') {
+ $4wm.fwtag = {
+ cmd: [],
+ };
+ $4wm.fwtag.cmd.push(function () {
+ $4wm.fwtag.addSlotNative({
+ id: containerId,
+ sid: data.sid,
+ n: data.n ? data.n : null,
+ hd: data.hd ? data.hd : null,
+ r: data.r ? data.r : null,
+ imgsize: data.imgsize ? data.imgsize : null,
+ excludeMobCss: data.excludemobcss ? data.excludemobcss : null,
+ css: data.css ? data.css : null,
+ class: data.class ? data.class : null,
+ size: data.size ? data.size : null,
+ amp: 1,
+ });
+ });
+ loadScript($4wm, 'https://static-adsr.4wnetwork.com/js/fwloader.js', () => {
+ window.addEventListener('message', (e) => {
+ if (
+ e.data.message == 'RESIZE_AMP' &&
+ typeof e.data.height != 'undefined'
+ ) {
+ $4wm.context.requestResize(undefined, e.data.height);
+ }
+ });
+ });
+ } else {
+ const obj = {
+ cid: containerId,
+ ic: data.id,
+ amp: 1,
+ format: data.format ? data.format : null,
+ position: data.position ? data.position : null,
+ dim: data.dim ? data.dim : null,
+ nid: data.nid ? data.nid : null,
+ };
+ for (const key in obj) {
+ if (obj[key] == null) {
+ delete obj[key];
+ }
+ }
+
+ $4wm.objFw = [];
+ $4wm.objFw.push(obj);
+ loadScript($4wm, 'https://static.4wnetwork.com/js/sdk.min.js', () => {
+ window.addEventListener('message', (e) => {
+ if (
+ e.data.message == 'RESIZE_AMP' &&
+ typeof e.data.height != 'undefined'
+ ) {
+ $4wm.context.requestResize(undefined, e.data.height);
+ }
+ if (e.data.message == 'CLOSE_AMP_STILL') {
+ $4wm.context.noContentAvailable();
+ }
+ });
+ });
+ }
+}
diff --git a/ads/vendors/4wmarketplace.md b/ads/vendors/4wmarketplace.md
new file mode 100644
index 000000000000..7552b87a5be2
--- /dev/null
+++ b/ads/vendors/4wmarketplace.md
@@ -0,0 +1,28 @@
+# 4wMarketplace
+
+4wMarketplace support for AMP covers Passback technologies.
+
+For configuration details and to generate your tags, please refer to [your publisher account](https://publisher.4wmarketplace.com)
+
+## Example - Passback
+
+html
+
+
+## Configuration
+
+The ad size is based on the setup of your 4wMarketplace space. The `width` and `height` attributes of the `amp-ad` tag should match that.
+
+### Passback
+
+Supported parameters:
+
+- `data-dim`: identifies the tag dimensions. Required.
+- `data-id`: your 4wMarketplace space identifier. Required.
diff --git a/ads/vendors/_fakedelayed_.js b/ads/vendors/_fakedelayed_.js
index 5f064bc549fe..61ce8190aa22 100644
--- a/ads/vendors/_fakedelayed_.js
+++ b/ads/vendors/_fakedelayed_.js
@@ -1,6 +1,7 @@
-import {setStyles} from '#core/dom/style';
import {validateData, writeScript} from '#3p/3p';
+import {setStyles} from '#core/dom/style';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/_ping_.js b/ads/vendors/_ping_.js
index fd0276167e06..a81caf9af7da 100644
--- a/ads/vendors/_ping_.js
+++ b/ads/vendors/_ping_.js
@@ -1,6 +1,7 @@
-import {dev, devAssert, userAssert} from '#utils/log';
import {validateData} from '#3p/3p';
+import {dev, devAssert, userAssert} from '#utils/log';
+
/**
* A fake ad network integration that is mainly used for testing
* and demo purposes. This implementation gets stripped out in compiled
diff --git a/ads/vendors/a9.js b/ads/vendors/a9.js
index 042e784abe0c..9c996b5d8ee4 100644
--- a/ads/vendors/a9.js
+++ b/ads/vendors/a9.js
@@ -1,5 +1,6 @@
-import {hasOwn} from '#core/types/object';
import {loadScript, validateData, writeScript} from '#3p/3p';
+
+import {hasOwn} from '#core/types/object';
import {parseJson} from '#core/types/object/json';
const mandatoryParams = [],
diff --git a/ads/vendors/adenza.js b/ads/vendors/adenza.js
new file mode 100644
index 000000000000..1292d96d3fba
--- /dev/null
+++ b/ads/vendors/adenza.js
@@ -0,0 +1,65 @@
+import {validateData, writeScript} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function adenza(global, data) {
+ validateData(data, ['blockId']);
+
+ const url =
+ 'https://adenza.network/network/data/teasers/' +
+ encodeURIComponent(data['blockId']) +
+ '/script?async=1&div=c';
+
+ const mainBlock = global.document.getElementById('c');
+ const insertionBlock = global.document.createElement('div');
+ insertionBlock.setAttribute('id', 'pw-net-' + data.blockId);
+ mainBlock.append(insertionBlock);
+
+ window.context.observeIntersection(function (changes) {
+ changes.forEach(function () {
+ const findIframe = global.document
+ .getElementById('c')
+ .querySelector('iframe');
+ if (findIframe) {
+ const styleString = findIframe.getAttribute('style');
+ const height = getStyleAdenza(styleString, 'height');
+ if (height) {
+ window.context.requestResize(undefined, height);
+ }
+ }
+ });
+ });
+
+ writeScript(
+ global,
+ url,
+ () => {
+ global.context.renderStart();
+ },
+ () => {
+ global.context.noContentAvailable();
+ }
+ );
+}
+
+/**
+ * @param {string} style
+ * @param {string} prop
+ * @return {string}
+ */
+function getStyleAdenza(style, prop) {
+ const styleArr = style.split(';');
+ const res = styleArr.filter(function (value) {
+ return value.includes(prop);
+ });
+ if (res) {
+ return res
+ .join('')
+ .replace(prop + ':', '')
+ .replace(/\s+/g, '');
+ } else {
+ return '480px';
+ }
+}
diff --git a/ads/vendors/adenza.md b/ads/vendors/adenza.md
new file mode 100644
index 000000000000..c64f489d9e06
--- /dev/null
+++ b/ads/vendors/adenza.md
@@ -0,0 +1,19 @@
+# Adenza
+
+## Example
+
+```html
+
+```
+
+## Configuration
+
+For more information, please [see FAQ](https://adenza.network/faq).
+
+Required parameters:
+
+- width
+- height
+- type
+- layout
+- data-block-id
diff --git a/ads/vendors/adincube.js b/ads/vendors/adincube.js
index dba5a35322b1..47d8ad6c2276 100644
--- a/ads/vendors/adincube.js
+++ b/ads/vendors/adincube.js
@@ -1,6 +1,7 @@
-import {hasOwn} from '#core/types/object';
import {loadScript, validateData} from '#3p/3p';
+import {hasOwn} from '#core/types/object';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/adman.js b/ads/vendors/adman.js
index aecdb8258840..7381c211f800 100644
--- a/ads/vendors/adman.js
+++ b/ads/vendors/adman.js
@@ -5,15 +5,24 @@ import {validateData} from '#3p/3p';
* @param {!Object} data
*/
export function adman(global, data) {
- validateData(data, ['ws', 'host', 's'], []);
-
+ validateData(data, ['ws', 'host'], []);
+ const {host, s, ws} = data;
const script = global.document.createElement('script');
- script.setAttribute('data-ws', data.ws);
- script.setAttribute('data-h', data.host);
- script.setAttribute('data-s', data.s);
- script.setAttribute('data-tech', 'amp');
-
script.src = 'https://static.adman.gr/adman.js';
-
global.document.body.appendChild(script);
+
+ if (host.match(/grxchange/)) {
+ script.onload = function () {
+ window.Adman.adunit({
+ id: ws,
+ h: 'https://' + host,
+ elementId: 'c',
+ });
+ };
+ return;
+ }
+ script.setAttribute('data-ws', ws);
+ script.setAttribute('data-h', host);
+ script.setAttribute('data-s', s);
+ script.setAttribute('data-tech', 'amp');
}
diff --git a/ads/vendors/admatic.js b/ads/vendors/admatic.js
new file mode 100644
index 000000000000..7b45ace6b593
--- /dev/null
+++ b/ads/vendors/admatic.js
@@ -0,0 +1,37 @@
+import {validateData, writeScript} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function admatic(global, data) {
+ validateData(data, ['adNetwork', 'adPublisher', 'adTypeId']);
+ global._admatic = global._admatic || {
+ publisher: data['adNetwork'],
+ adNetwork: data['adPublisher'],
+ adTypeId: data['adTypeId'],
+ host: `static.cdn.pixad.com.tr`,
+ prefix: `px`,
+ };
+
+ if (global._admatic.publisher.indexOf('adm-pub') != -1) {
+ global._admatic.host = `static.cdn.admatic.com.tr`;
+ global._admatic.prefix = `adm`;
+ }
+
+ const ins = global.document.createElement('ins');
+ ins.setAttribute('data-publisher', global._admatic.publisher);
+ if (global._admatic.adTypeId == 'standard') {
+ ins.setAttribute('data-ad-size', `[[${data.width},${data.height}]]`);
+ }
+ ins.setAttribute('data-ad-network', global._admatic.adNetwork);
+ ins.setAttribute('data-ad-type-id', global._admatic.adTypeId);
+ ins.setAttribute('class', `${global._admatic.prefix}-ads-area`);
+ global.document.getElementById('c').appendChild(ins);
+ ins.parentNode.addEventListener(
+ 'eventAdbladeRenderStart',
+ global.context.renderStart()
+ );
+
+ writeScript(global, `https://${global._admatic.host}/showad/showad.min.js`);
+}
diff --git a/ads/vendors/admatic.md b/ads/vendors/admatic.md
new file mode 100644
index 000000000000..2e30b894b95c
--- /dev/null
+++ b/ads/vendors/admatic.md
@@ -0,0 +1,51 @@
+# AdMatic
+
+## Example of AdMatic's model implementation
+
+### Basic
+
+```html
+
+
+```
+
+### Sticky Ad
+
+```html
+
+
+
+
+```
+
+Note that ` ` component requires the following script to be included in the page:
+
+```html
+
+```
+
+## Configuration
+
+For details on the configuration semantics, see [AdMatic documentation](https://www.admatic.com.tr/).
+
+### Required parameters
+
+- `data-ad-network`: Network ID
+- `data-ad-publisher`: Publisher ID
+- `data-ad-type-id`: Model ID
diff --git a/ads/vendors/admixer.js b/ads/vendors/admixer.js
index 806fa858becb..7a09b4b17605 100644
--- a/ads/vendors/admixer.js
+++ b/ads/vendors/admixer.js
@@ -1,6 +1,7 @@
-import {tryParseJson} from '#core/types/object/json';
import {validateData, writeScript} from '#3p/3p';
+import {tryParseJson} from '#core/types/object/json';
+
/**
* @param {!Window} global
* @param {!Object} data
@@ -8,7 +9,7 @@ import {validateData, writeScript} from '#3p/3p';
export function admixer(global, data) {
validateData(data, ['zone'], ['sizes']);
/**
- * @type {Object}
+ * @type {object}
*/
const payload = {
imps: [],
diff --git a/ads/vendors/adocean.js b/ads/vendors/adocean.js
index d03716cad8b8..8eae482f4183 100644
--- a/ads/vendors/adocean.js
+++ b/ads/vendors/adocean.js
@@ -1,9 +1,13 @@
-import {CONSENT_POLICY_STATE} from '#core/constants/consent-state';
import {computeInMasterFrame, validateData, writeScript} from '#3p/3p';
+
+import {
+ CONSENT_POLICY_STATE,
+ CONSENT_STRING_TYPE,
+} from '#core/constants/consent-state';
import {parseJson} from '#core/types/object/json';
/**
- * @const {Object}
+ * @const {{[key: string]: string}}
*/
const ADO_JS_PATHS = {
'sync': '/files/js/ado.js',
@@ -21,7 +25,7 @@ function isFalseString(str) {
/**
* @param {string} mode
* @param {!Window} global
- * @param {boolean} consent
+ * @param {object} consent
*/
function setupAdoConfig(mode, global, consent) {
if (global['ado']) {
@@ -31,7 +35,9 @@ function setupAdoConfig(mode, global, consent) {
fif: {
enabled: mode != 'sync',
},
- consent,
+ consent: consent.accepted,
+ gdprApplies: consent.gdprApplies,
+ gdprConsent: consent.consentString,
};
global['ado']['config'](config);
@@ -202,7 +208,7 @@ function requestCodes(masterId, data, global, callback) {
class AdoBuffer {
/**
*
- * @param {Object} container
+ * @param {object} container
* @param {!Window} global
*/
constructor(container, global) {
@@ -305,14 +311,24 @@ export function adocean(global, data) {
const adoUrl = 'https://' + data['aoEmitter'] + ADO_JS_PATHS[mode];
const ctx = global.context;
- /*
- * INSUFFICIENT and UNKNOWN should be treated as INSUFFICIENT
- * not defined states should be treated as INSUFFICIENT
- */
- const consent =
- ctx.initialConsentState === null /* tags without data-block-on-consent */ ||
- ctx.initialConsentState === CONSENT_POLICY_STATE.SUFFICIENT ||
- ctx.initialConsentState === CONSENT_POLICY_STATE.UNKNOWN_NOT_REQUIRED;
+ const consent = {
+ accepted:
+ /* INSUFFICIENT and UNKNOWN should be treated as INSUFFICIENT
+ * not defined states should be treated as INSUFFICIENT */
+ ctx.initialConsentState ===
+ null /* tags without data-block-on-consent */ ||
+ ctx.initialConsentState === CONSENT_POLICY_STATE.SUFFICIENT ||
+ ctx.initialConsentState === CONSENT_POLICY_STATE.UNKNOWN_NOT_REQUIRED,
+ gdprApplies:
+ typeof ctx.initialConsentMetadata?.gdprApplies === 'boolean'
+ ? ctx.initialConsentMetadata.gdprApplies
+ : undefined,
+ consentString:
+ ctx.initialConsentMetadata?.consentStringType ===
+ CONSENT_STRING_TYPE.TCF_V2
+ ? ctx.initialConsentValue
+ : undefined,
+ };
writeScript(global, adoUrl, () => {
setupAdoConfig(mode, global, consent);
diff --git a/ads/vendors/adplugg.js b/ads/vendors/adplugg.js
index d0fb9d2f4117..16274f28a094 100644
--- a/ads/vendors/adplugg.js
+++ b/ads/vendors/adplugg.js
@@ -1,6 +1,7 @@
-import {hasOwn} from '#core/types/object';
import {loadScript, validateData} from '#3p/3p';
+import {hasOwn} from '#core/types/object';
+
/**
* Make an AdPlugg iframe.
* @param {!Window} global
diff --git a/ads/vendors/adpushup.js b/ads/vendors/adpushup.js
index e2289e8660c7..2d20013efd69 100644
--- a/ads/vendors/adpushup.js
+++ b/ads/vendors/adpushup.js
@@ -8,28 +8,29 @@ export function adpushup(global, data) {
validateData(
data,
['siteid', 'slotpath', 'width', 'height'],
- ['totalampslots', 'jsontargeting', 'extras']
+ ['totalampslots', 'jsontargeting', 'extras', 'loadalternate']
);
loadScript(
global,
'https://securepubads.g.doubleclick.net/tag/js/gpt.js',
() => {
- loadScript(
- global,
- 'https://cdn.adpushup.com/' + data.siteid + '/amp.js',
- () => {
- window.adpushup.initAmp(
- global,
- data.width,
- data.height,
- data.siteid,
- data.slotpath,
- data.totalampslots,
- data.jsontargeting,
- data.extras
- );
- }
- );
+ const domain =
+ data.loadalternate === 'true'
+ ? 'https://assets.adpushup.com/'
+ : 'https://cdn.adpushup.com/';
+ const url = domain + data.siteid + '/amp.js';
+ loadScript(global, url, () => {
+ window.adpushup.initAmp(
+ global,
+ data.width,
+ data.height,
+ data.siteid,
+ data.slotpath,
+ data.totalampslots,
+ data.jsontargeting,
+ data.extras
+ );
+ });
}
);
}
diff --git a/ads/vendors/ads2bid.js b/ads/vendors/ads2bid.js
new file mode 100644
index 000000000000..f251cfccdf03
--- /dev/null
+++ b/ads/vendors/ads2bid.js
@@ -0,0 +1,22 @@
+import {loadScript, validateData} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function ads2bid(global, data) {
+ validateData(data, ['blockId', 'siteId', 'src']);
+ const {blockId, siteId, src} = data;
+ const url = src + `/html/amp?site_id=${siteId}&blocks=${blockId}`;
+ createContainer(global);
+ loadScript(global, url);
+}
+
+/**
+ * @param {!Window} global
+ */
+function createContainer(global) {
+ const div = global.document.createElement('div');
+ div.setAttribute('data-ads2bid', 1);
+ global.document.getElementById('c').appendChild(div);
+}
diff --git a/ads/vendors/ads2bid.md b/ads/vendors/ads2bid.md
new file mode 100644
index 000000000000..11b41668516e
--- /dev/null
+++ b/ads/vendors/ads2bid.md
@@ -0,0 +1,21 @@
+# ads2.bid
+
+Provides support for [ads2.bid](https://ads2.bid/) widgets.
+
+### Required parameters
+
+- `src`
+- `data-block-id`
+- `data-site-id`
+
+## Example
+
+```html
+
+
+```
diff --git a/ads/vendors/adskeeper.js b/ads/vendors/adskeeper.js
index 789a68ef252b..13773f424816 100644
--- a/ads/vendors/adskeeper.js
+++ b/ads/vendors/adskeeper.js
@@ -21,41 +21,60 @@ import {loadScript, validateData} from '#3p/3p';
* @param {!Object} data
*/
export function adskeeper(global, data) {
- validateData(data, ['publisher', 'widget', 'container'], ['url', 'options']);
-
- const scriptRoot = global.document.createElement('div');
- scriptRoot.id = data.container;
-
- global.document.body.appendChild(scriptRoot);
-
- /**
- * Returns path for provided js filename
- * @param {string} publisher js filename
- * @return {string} Path to provided filename.
- */
- function getResourceFilePath(publisher) {
- const publisherStr = publisher.replace(/[^A-z0-9]/g, '');
- return `${publisherStr[0]}/${publisherStr[1]}`;
- }
-
- const url =
- `https://jsc.adskeeper.com/${getResourceFilePath(data.publisher)}/` +
- `${encodeURIComponent(data.publisher)}.` +
- `${encodeURIComponent(data.widget)}.js`;
+ validateData(
+ data,
+ [['publisher', 'website'], ['container', 'website'], 'widget'],
+ ['url', 'options']
+ );
global.uniqId = (
'00000' + Math.round(Math.random() * 100000).toString(16)
).slice(-5);
- global['ampOptions' + data.widget + '_' + global.uniqId] = data.options;
+ window['ampOptions' + data.widget + '_' + global.uniqId] = data.options;
global.context.observeIntersection(function (changes) {
/** @type {!Array} */ (changes).forEach(function (c) {
- global['intersectionRect' + data.widget + '_' + global.uniqId] =
+ window['intersectionRect' + data.widget + '_' + global.uniqId] =
c.intersectionRect;
- global['boundingClientRect' + data.widget + '_' + global.uniqId] =
+ window['boundingClientRect' + data.widget + '_' + global.uniqId] =
c.boundingClientRect;
});
});
- loadScript(global, data.url || url);
+ if (data.website) {
+ const widgetContainer = document.createElement('div');
+ widgetContainer.dataset.type = '_mgwidget';
+ widgetContainer.dataset.widgetId = data.widget;
+ document.body.appendChild(widgetContainer);
+
+ const url =
+ `https://jsc.adskeeper.com/site/` +
+ `${encodeURIComponent(data.website)}.js?t=` +
+ Math.floor(Date.now() / 36e5);
+
+ loadScript(global, data.url || url);
+ } else {
+ const scriptRoot = document.createElement('div');
+ scriptRoot.id = data.container;
+
+ document.body.appendChild(scriptRoot);
+
+ /**
+ * Returns path for provided js filename
+ * @param {string} publisher js filename
+ * @return {string} Path to provided filename.
+ */
+ function getResourceFilePath(publisher) {
+ const publisherStr = publisher.replace(/[^a-zA-Z0-9]/g, '');
+ return `${publisherStr[0]}/${publisherStr[1]}`;
+ }
+
+ const url =
+ `https://jsc.adskeeper.com/${getResourceFilePath(data.publisher)}/` +
+ `${encodeURIComponent(data.publisher)}.` +
+ `${encodeURIComponent(data.widget)}.js?t=` +
+ Math.floor(Date.now() / 36e5);
+
+ loadScript(global, data.url || url);
+ }
}
diff --git a/ads/vendors/adskeeper.md b/ads/vendors/adskeeper.md
index 4e292fc80387..a15e7f4a42f5 100644
--- a/ads/vendors/adskeeper.md
+++ b/ads/vendors/adskeeper.md
@@ -20,6 +20,19 @@ limitations under the License.
### Basic
+Latest version:
+```html
+
+
+```
+
+Legacy version:
```html
+
+# Adsviu
+
+## Example
+
+```html
+
+
+```
+
+## Configuration
+
+Supported parameters:
+
+- `data-src`(mandatory): url with the image to be analized
+- `data-site-id`(mandatory): id supplied by Adsviu to identify the site where this widget is going to be used
diff --git a/ads/vendors/adventive.js b/ads/vendors/adventive.js
index 76cf4df6bc41..2f3dfe7580da 100644
--- a/ads/vendors/adventive.js
+++ b/ads/vendors/adventive.js
@@ -1,8 +1,10 @@
-import {addParamsToUrl} from '../../src/url';
-import {dict, hasOwn} from '#core/types/object';
-import {endsWith} from '#core/types/string';
import {loadScript, validateData, writeScript} from '#3p/3p';
+import {hasOwn} from '#core/types/object';
+import {endsWith} from '#core/types/string';
+
+import {addParamsToUrl} from '../../src/url';
+
/**
* @param {!Window} global
* @param {!Object} data
@@ -141,11 +143,11 @@ function reduceSearch(ns, placementId, click, referrer) {
return !needsRequest
? null
- : dict({
+ : {
'click': click,
'referrer': referrer,
'isAmp': '1',
'lib': !ns.isLibLoaded ? '1' : '', // may be prefetchable via _config
'pid': needsRequest ? placementId : '',
- });
+ };
}
diff --git a/ads/vendors/adverticum.js b/ads/vendors/adverticum.js
index 0ac494ef6ace..c3c4301b14d9 100644
--- a/ads/vendors/adverticum.js
+++ b/ads/vendors/adverticum.js
@@ -1,5 +1,6 @@
-import {setStyle} from '#core/dom/style';
import {validateData, writeScript} from '#3p/3p';
+
+import {setStyle} from '#core/dom/style';
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/affinity.js b/ads/vendors/affinity.js
new file mode 100644
index 000000000000..28ff615d9e43
--- /dev/null
+++ b/ads/vendors/affinity.js
@@ -0,0 +1,112 @@
+import {loadScript, validateData} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function affinity(global, data) {
+ validateData(
+ data,
+ ['width', 'height', 'adtype', ['adslot', 'slot']],
+ [
+ 'affLayout',
+ 'multiSize',
+ 'affSticky',
+ 'affTitle',
+ 'affJson',
+ 'affRtcConfig',
+ 'jsontargeting',
+ 'extras',
+ ]
+ );
+
+ const runV1 = function (g, d) {
+ if (false === g.isInitCalled) {
+ g.isInitCalled = true;
+ loadScript(g, gGPT, () => {
+ loadScript(g, affCDN + '/amp/v2022/amp.js', () => {
+ (function () {
+ window.affinity.initAMP(g, d);
+ })();
+ });
+ });
+ }
+ },
+ O2s = Object.prototype.toString,
+ isObject = function (val) {
+ return '[object Object]' == O2s.call(val);
+ },
+ chkIsvalidContext = function (mixContext) {
+ if ('string' == typeof mixContext) {
+ try {
+ mixContext = JSON.parse(mixContext);
+ } catch (e) {
+ return false;
+ }
+ }
+ if (isObject(mixContext) && mixContext.sourceUrl) {
+ return true;
+ }
+ return false;
+ },
+ getAmpContext = function () {
+ if (chkIsvalidContext(W.context)) {
+ return W.context;
+ }
+ if (chkIsvalidContext(W.AMP_CONTEXT_DATA)) {
+ return W.AMP_CONTEXT_DATA;
+ }
+
+ return undefined;
+ },
+ jsonParse = function (strJson) {
+ let ret = null;
+ try {
+ ret = JSON.parse(strJson);
+ } catch (e) {
+ try {
+ ret = JSON.parse(strJson.split("'").join('"'));
+ } catch (e2) {}
+ }
+ return ret;
+ };
+ const W = global,
+ affCDN = 'https://cdn4-hbs.affinitymatrix.com',
+ gGPT = 'https://securepubads.g.doubleclick.net/tag/js/gpt.js',
+ extras = jsonParse(String(data.extras));
+
+ global.affinity = global.affinity || {task: []};
+ global.isInitCalled = false;
+ global.affinity.initAMP = function (global, data) {
+ if (global.isInitCalled == true) {
+ return;
+ }
+ global.isInitCalled = true;
+ try {
+ const dtObj = new Date();
+ const cb = String(dtObj.getDate()) + dtObj.getMonth() + dtObj.getHours();
+ const dmn = extras.d.replace('www.', '');
+
+ const cfgData = {...data, ...extras};
+
+ const libUrl = affCDN + '/amplib/' + dmn + '/a' + cb + '/amp.php?t=' + cb;
+ loadScript(global, libUrl);
+ global.affinity.task.push(function () {
+ global.affinity.init(cfgData);
+ });
+ } catch (e) {
+ runV1(global, data);
+ }
+ };
+ try {
+ if (getAmpContext() !== undefined) {
+ if (extras && extras.ver && extras.ver == 1) {
+ // console.log('extras.ver == 1');
+ global.affinity.initAMP(global, data);
+ data.adStatus = Date.now();
+ return;
+ }
+ }
+ } catch (e) {}
+ runV1(global, data);
+}
diff --git a/ads/vendors/affinity.md b/ads/vendors/affinity.md
new file mode 100644
index 000000000000..1c060a1e0c0c
--- /dev/null
+++ b/ads/vendors/affinity.md
@@ -0,0 +1,24 @@
+# Affinity
+
+Adtype Affinity support for AMP
+
+## Example
+
+```html
+
+
+```
+
+## Configuration
+
+- `data-adtype`: (Mandatory) Type of the adformat
+- `data-adslot`: (Mandatory) Name of of adslot
+- `data-multi-size`: (Optional) Multi-size support
+- `data-jsontargeting`: (Optional) Targeting related paramterers
+- `data-extras`: (Optional) Extra data
diff --git a/ads/vendors/appmonsta.js b/ads/vendors/appmonsta.js
new file mode 100644
index 000000000000..253f389dfa20
--- /dev/null
+++ b/ads/vendors/appmonsta.js
@@ -0,0 +1,30 @@
+import {validateData, writeScript} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function appmonsta(global, data) {
+ validateData(data, ['placementId']);
+
+ const {location} = global.context;
+ let url = 'https://ssp.appmonsta.ai?c=b&m=amp';
+
+ const params = [
+ ['placementId', encodeURIComponent(data.placementId)],
+ ['ua', encodeURIComponent(global.navigator?.userAgent)],
+ ['w', data.width],
+ ['h', data.height],
+ ['domain', location.host],
+ ['page', location.pathname],
+ ['secure', location.protocol === 'https:' ? 1 : 0],
+ ['language', global.navigator?.language],
+ ];
+
+ for (let i = 0; i < params.length; i++) {
+ const param = params[i];
+ url = `${url}&${param[0]}=${param[1] ?? ''}`;
+ }
+
+ writeScript(global, url);
+}
diff --git a/ads/vendors/appmonsta.md b/ads/vendors/appmonsta.md
new file mode 100644
index 000000000000..e22783dce9d5
--- /dev/null
+++ b/ads/vendors/appmonsta.md
@@ -0,0 +1,17 @@
+# AppMonsta
+
+## Basic example
+
+```html
+
+
+```
+
+### Required parameters
+
+- `placement-id`: Placement Id
diff --git a/ads/vendors/appnexus.js b/ads/vendors/appnexus.js
index c7381dd2a1a7..fd109899210e 100644
--- a/ads/vendors/appnexus.js
+++ b/ads/vendors/appnexus.js
@@ -1,4 +1,5 @@
import {loadScript, validateData, writeScript} from '#3p/3p';
+
import {setStyles} from '#core/dom/style';
const APPNEXUS_AST_URL = 'https://acdn.adnxs.com/ast/ast.js';
diff --git a/ads/vendors/bidgear.js b/ads/vendors/bidgear.js
new file mode 100644
index 000000000000..1901c7de7c67
--- /dev/null
+++ b/ads/vendors/bidgear.js
@@ -0,0 +1,35 @@
+import {loadScript, validateData} from '#3p/3p';
+
+const requiredParams = ['zoneid'];
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function bidgear(global, data) {
+ validateData(data, requiredParams);
+
+ const container = document.getElementById('c');
+ const adDivId = 'bg-ssp-' + encodeURIComponent(data.zoneid);
+ const adDiv = document.createElement('div');
+ adDiv.setAttribute('id', adDivId);
+ container.appendChild(adDiv);
+
+ loadScript(
+ global,
+ 'https://platform.bidgear.com/bidgear-amp.js',
+ () => {
+ // Bidgear has been loaded
+ window.pubbidgeartag = window.pubbidgeartag || [];
+ window.pubbidgeartag.push({
+ zoneid: encodeURIComponent(data.zoneid),
+ id: encodeURIComponent(adDivId),
+ wu: window.location.href,
+ });
+ },
+ () => {
+ // Cannot load bidgear-amp.js
+ global.context.noContentAvailable();
+ }
+ );
+}
diff --git a/ads/vendors/bidgear.md b/ads/vendors/bidgear.md
new file mode 100644
index 000000000000..4bfa1d37a917
--- /dev/null
+++ b/ads/vendors/bidgear.md
@@ -0,0 +1,22 @@
+# Bidgear
+
+## Examples
+
+```html
+
+
+```
+
+## Configuration
+
+**Required:**
+
+`width` + `height` - Required for all `` units. Specifies the ad size.
+
+`type` - Always set to "bidgear".
+
+`data-zoneid`: Zone Id.
diff --git a/ads/vendors/blade.js b/ads/vendors/blade.js
index 95d93bcde9e6..c16ec25f6dd5 100644
--- a/ads/vendors/blade.js
+++ b/ads/vendors/blade.js
@@ -1,4 +1,5 @@
import {loadScript, validateData} from '#3p/3p';
+
import {tryParseJson} from '#core/types/object/json';
/**
diff --git a/ads/vendors/broadstreetads.js b/ads/vendors/broadstreetads.js
index 124888600355..80b5d72e44d4 100644
--- a/ads/vendors/broadstreetads.js
+++ b/ads/vendors/broadstreetads.js
@@ -8,12 +8,14 @@ export function broadstreetads(global, data) {
validateData(
data,
['network', 'zone', 'width', 'height'],
- ['keywords', 'place']
+ ['keywords', 'place', 'initurl', 'initoptions']
);
data.place = data.place || 0;
const placeholderID = 'placement_' + data.zone + '_' + data.place;
+ const initUrl =
+ data.initurl || 'https://cdn.broadstreetads.com/init-2.min.js';
// placeholder div
const d = global.document.createElement('div');
@@ -36,7 +38,8 @@ export function broadstreetads(global, data) {
softKeywords: true,
width: data.width,
zoneId: data.zone,
+ options: data.initoptions,
});
});
- loadScript(global, 'https://cdn.broadstreetads.com/init-2.min.js');
+ loadScript(global, initUrl);
}
diff --git a/ads/vendors/cedato.js b/ads/vendors/cedato.js
index fe1129214390..6ee937078ecf 100644
--- a/ads/vendors/cedato.js
+++ b/ads/vendors/cedato.js
@@ -1,7 +1,9 @@
-import {parseUrlDeprecated} from '../../src/url';
-import {setStyles} from '#core/dom/style';
import {validateData} from '#3p/3p';
+import {setStyles} from '#core/dom/style';
+
+import {parseUrlDeprecated} from '../../src/url';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/clever.js b/ads/vendors/clever.js
new file mode 100644
index 000000000000..684a3f838218
--- /dev/null
+++ b/ads/vendors/clever.js
@@ -0,0 +1,23 @@
+import {parseUrlDeprecated} from '../../src/url';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function clever(global, data) {
+ if (!data || !data.id || !data.hash) {
+ global.context.noContentAvailable();
+ return;
+ }
+
+ const domain = parseUrlDeprecated(global.context.sourceUrl).origin;
+ const c = document.createElement('script');
+
+ c.id = 'CleverCoreLoader' + data.id;
+ c.src = '//scripts.cleverwebserver.com/' + data.hash + '.js';
+ c.type = 'text/javascript';
+ c.setAttribute('data-target', global.window.name);
+ c.setAttribute('data-origin', domain);
+
+ global.document.getElementsByTagName('body')[0].append(c);
+}
diff --git a/ads/vendors/clever.md b/ads/vendors/clever.md
new file mode 100644
index 000000000000..3db370354a9e
--- /dev/null
+++ b/ads/vendors/clever.md
@@ -0,0 +1,23 @@
+# Clever
+
+## Example
+
+```html
+
+
+```
+
+## Configuration
+
+For additional details and support contact `suport@cleveradvertising.com`.
+
+### Required parameters
+
+- `data-id`: the id of campaign
+- `data-hash`: MD5 hash of `data-id`
diff --git a/ads/vendors/cognativex.js b/ads/vendors/cognativex.js
new file mode 100644
index 000000000000..69178a987174
--- /dev/null
+++ b/ads/vendors/cognativex.js
@@ -0,0 +1,34 @@
+import {loadScript, validateData} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function cognativex(global, data) {
+ validateData(data, ['appdomain', 'widgetid']);
+ global.COGNATIVEX = global.COGNATIVEX || {};
+ global.COGNATIVEX.config = {
+ appdomain: data['appdomain'],
+ };
+ (global.COGNATIVEX.widgetIDs = global.COGNATIVEX.widgetIDs || []).push({
+ id: data['widgetid'],
+ isRendered: false,
+ });
+ const d = global.document.createElement('div');
+ d.classList.add('cognativex-widget');
+ d.id = 'cognativex-widget-' + data['widgetid'];
+ global.document.getElementById('c').appendChild(d);
+ const td = new Date();
+ const forCache =
+ td.getFullYear() +
+ '-' +
+ (td.getMonth() + 1) +
+ '-' +
+ td.getDate() +
+ '--' +
+ td.getHours();
+ loadScript(
+ global,
+ 'https://static.cognativex.com/scripts/cx_script_amp.js?v=' + forCache
+ );
+}
diff --git a/ads/vendors/cognativex.md b/ads/vendors/cognativex.md
new file mode 100644
index 000000000000..48e003188d43
--- /dev/null
+++ b/ads/vendors/cognativex.md
@@ -0,0 +1,23 @@
+# Cognativex
+
+Cognativex support for AMP.
+
+For configuration details, additional information or support please contact support@cognativex.com
+
+## Example
+
+```html
+
+
+```
+
+parameters:
+
+- `data-widgetid`: widget id. Required.
diff --git a/ads/vendors/connatix.js b/ads/vendors/connatix.js
index 0a4a2781581a..8de2f97c810c 100644
--- a/ads/vendors/connatix.js
+++ b/ads/vendors/connatix.js
@@ -1,6 +1,7 @@
+import {validateData} from '#3p/3p';
+
import {hasOwn} from '#core/types/object';
import {tryParseJson} from '#core/types/object/json';
-import {validateData} from '#3p/3p';
/**
* @param {!Window} global
diff --git a/ads/vendors/contentad.js b/ads/vendors/contentad.js
index 3fc3d0cbb92a..89c8edc98515 100644
--- a/ads/vendors/contentad.js
+++ b/ads/vendors/contentad.js
@@ -1,6 +1,7 @@
-import {parseUrlDeprecated} from '../../src/url';
import {validateData, writeScript} from '#3p/3p';
+import {parseUrlDeprecated} from '../../src/url';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/criteo.js b/ads/vendors/criteo.js
index 4e70c654624a..13f85886737a 100644
--- a/ads/vendors/criteo.js
+++ b/ads/vendors/criteo.js
@@ -1,6 +1,7 @@
-import {dev} from '#utils/log';
import {loadScript} from '#3p/3p';
+import {dev} from '#utils/log';
+
/* global Criteo: false */
/** @const {string} */
diff --git a/ads/vendors/csa.js b/ads/vendors/csa.js
index a4d2a9301ff5..67daf8794b27 100644
--- a/ads/vendors/csa.js
+++ b/ads/vendors/csa.js
@@ -1,8 +1,10 @@
-import {devAssert} from '#utils/log';
-import {getStyle, setStyle, setStyles} from '#core/dom/style';
import {loadScript, validateData} from '#3p/3p';
+
+import {getStyle, setStyle, setStyles} from '#core/dom/style';
import {tryParseJson} from '#core/types/object/json';
+import {devAssert} from '#utils/log';
+
// Keep track of current height of AMP iframe
let currentAmpHeight = null;
@@ -104,7 +106,7 @@ function orientationChangeHandler(global, containerDiv) {
const oldHeight = getStyle(containerDiv, 'height');
global.setTimeout(() => {
// Force DOM reflow and repaint.
- // eslint-disable-next-line no-unused-vars
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
const ignore = global.document.body./*OK*/ offsetHeight;
// Capture new height.
const newHeight = getStyle(containerDiv, 'height');
diff --git a/ads/vendors/dable.js b/ads/vendors/dable.js
index dd2251142f42..61481828594a 100644
--- a/ads/vendors/dable.js
+++ b/ads/vendors/dable.js
@@ -17,7 +17,10 @@ export function dable(global, data) {
'setService',
data['serviceName'] || global.window.context.location.hostname
);
- global.dable('setURL', global.window.context.sourceUrl);
+ global.dable(
+ 'setURL',
+ global.window.context.canonicalUrl || global.window.context.sourceUrl
+ );
global.dable('setRef', global.window.context.referrer);
const slot = global.document.createElement('div');
@@ -30,16 +33,43 @@ export function dable(global, data) {
}
const itemId = data['itemId'] || '';
- const opts = {};
+ const channel = data['channel'] || '';
+ const articleSection = data['articleSection'] || '';
+ const articleSection2 = data['articleSection2'] || '';
+ const articleSection3 = data['articleSection3'] || '';
+ const orgServiceId = data['orgServiceId'] || '';
+ const widgetOpts = {};
+ const logOpts = {};
+
+ if (channel) {
+ widgetOpts.channel = channel;
+ }
+ if (articleSection) {
+ widgetOpts.category1 = articleSection;
+ logOpts.category1 = articleSection;
+ }
+ if (articleSection2) {
+ widgetOpts.category2 = articleSection2;
+ logOpts.category2 = articleSection2;
+ }
+ if (articleSection3) {
+ widgetOpts.category3 = articleSection3;
+ logOpts.category3 = articleSection3;
+ }
+ if (orgServiceId) {
+ widgetOpts.orgServiceId = orgServiceId;
+ logOpts.orgServiceId = orgServiceId;
+ }
if (itemId) {
- global.dable('sendLog', 'view', {id: itemId});
+ logOpts.id = itemId;
+ global.dable('sendLog', 'view', logOpts);
} else {
- opts.ignoreItems = true;
+ widgetOpts.ignoreItems = true;
}
// call render widget
- global.dable('renderWidget', slot.id, itemId, opts, function (hasAd) {
+ global.dable('renderWidget', slot.id, itemId, widgetOpts, function (hasAd) {
if (hasAd) {
global.context.renderStart();
} else {
diff --git a/ads/vendors/dable.md b/ads/vendors/dable.md
index 83216aa55f66..4c287a5db5c2 100644
--- a/ads/vendors/dable.md
+++ b/ads/vendors/dable.md
@@ -10,7 +10,11 @@
height="200"
type="dable"
data-widget-id="jobgqR7W"
+ data-service-name="testservice"
data-item-id="testitem"
+ data-article-section="politics"
+ data-article-section2="global"
+ data-org-service-id="1"
>
```
@@ -22,8 +26,13 @@ For configuration details and to generate your tags, please contact https://admi
### Required parameters
- `data-widget-id`
+- `data-service-name`
### Optional parameters
- `data-item-id`
-- `data-service-name`
+- `data-channel`
+- `data-article-section`
+- `data-article-section2`
+- `data-article-section3`
+- `data-org-service-id`
diff --git a/ads/vendors/dex.js b/ads/vendors/dex.js
new file mode 100644
index 000000000000..8a3d49f449bc
--- /dev/null
+++ b/ads/vendors/dex.js
@@ -0,0 +1,28 @@
+import {loadScript, validateData} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function dex(global, data) {
+ validateData(data, ['zoneid']);
+ loadScript(global, buildUrl(data));
+}
+
+/**
+ * @param {!Object} data
+ * @return {string}
+ */
+function buildUrl(data) {
+ let url = `https://cdnb.4strokemedia.com/amp/amp_tag.js?zoneid=${data['zoneid']}`;
+
+ if (data['videoid']) {
+ url += `&videoid=${data['videoid']}`;
+ }
+
+ if (data['audioid']) {
+ url += `&audioid=${data['audioid']}`;
+ }
+
+ return url;
+}
diff --git a/ads/vendors/dex.md b/ads/vendors/dex.md
new file mode 100644
index 000000000000..903f498dec2c
--- /dev/null
+++ b/ads/vendors/dex.md
@@ -0,0 +1,16 @@
+# DigitalExchange
+
+## Example
+
+```html
+
+
+```
+
+### Required parameters
+
+- `data-zoneid`
diff --git a/ads/vendors/directadvert.js b/ads/vendors/directadvert.js
index bdb7d5778faf..0a6108328471 100644
--- a/ads/vendors/directadvert.js
+++ b/ads/vendors/directadvert.js
@@ -1,4 +1,5 @@
import {loadScript, validateData} from '#3p/3p';
+
import {serializeQueryString} from '../../src/url';
/**
diff --git a/ads/vendors/fairground.js b/ads/vendors/fairground.js
new file mode 100644
index 000000000000..beb128c792b0
--- /dev/null
+++ b/ads/vendors/fairground.js
@@ -0,0 +1,20 @@
+import {validateData} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function fairground(global, data) {
+ validateData(data, ['project', 'hash']);
+
+ const c = document.createElement('script');
+ c.src =
+ 'https://amp.thefairground.com/' +
+ data.project +
+ '/' +
+ data.hash +
+ '/amp.script.js';
+ c.type = 'text/javascript';
+
+ global.document.getElementsByTagName('body')[0].append(c);
+}
diff --git a/ads/vendors/fairground.md b/ads/vendors/fairground.md
new file mode 100644
index 000000000000..a9b59ffbc93e
--- /dev/null
+++ b/ads/vendors/fairground.md
@@ -0,0 +1,16 @@
+# Fairground
+
+Provides support for Fairground ads.
+
+### Required parameters
+
+- `project`
+- `hash`
+
+## Example
+
+```html
+
+
+```
diff --git a/ads/vendors/feedad.js b/ads/vendors/feedad.js
index b5f5aa6ccbfa..26578fd6b519 100644
--- a/ads/vendors/feedad.js
+++ b/ads/vendors/feedad.js
@@ -15,6 +15,7 @@
*/
import {loadScript, validateData} from '#3p/3p';
+
import {setStyle} from '#core/dom/style';
/**
@@ -25,7 +26,7 @@ import {setStyle} from '#core/dom/style';
*/
/**
- * @typedef {Object} FeedAdAsync
+ * @typedef {object} FeedAdAsync
* @private
*
* @property {FeedAd} [sdk]
@@ -33,7 +34,7 @@ import {setStyle} from '#core/dom/style';
*/
/**
- * @typedef {Object} FeedAd
+ * @typedef {object} FeedAd
* @private
*
* @property {function(string)} init
@@ -41,14 +42,14 @@ import {setStyle} from '#core/dom/style';
*/
/**
- * @typedef {Object} FeedAdResponse
+ * @typedef {object} FeedAdResponse
* @private
*
* @property {function():HTMLElement} createAdContainer()
*/
/**
- * @typedef {Object} FeedAdData
+ * @typedef {object} FeedAdData
* @private
*
* @property {string} clientToken
diff --git a/ads/vendors/firstimpression.js b/ads/vendors/firstimpression.js
index d67b4f4d4023..50e72616e597 100644
--- a/ads/vendors/firstimpression.js
+++ b/ads/vendors/firstimpression.js
@@ -1,6 +1,7 @@
-import {parseQueryString} from '#core/types/string/url';
import {validateData, writeScript} from '#3p/3p';
+import {parseQueryString} from '#core/types/string/url';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/geozo.js b/ads/vendors/geozo.js
new file mode 100644
index 000000000000..e2cd25538004
--- /dev/null
+++ b/ads/vendors/geozo.js
@@ -0,0 +1,22 @@
+import {loadScript, validateData} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function geozo(global, data) {
+ validateData(data, ['src', 'gzBlock']);
+ const {src} = data;
+ createContainer(global, data);
+ loadScript(global, src);
+}
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+function createContainer(global, data) {
+ const d = global.document.createElement('div');
+ d.setAttribute('data-gz-block', data['gzBlock']);
+ global.document.getElementById('c').appendChild(d);
+}
diff --git a/ads/vendors/geozo.md b/ads/vendors/geozo.md
new file mode 100644
index 000000000000..1f79a708ef8b
--- /dev/null
+++ b/ads/vendors/geozo.md
@@ -0,0 +1,22 @@
+# Geozo
+
+Provides support for [Geozo](https://geozo.com) widgets.
+
+### Required parameters
+
+- `src`
+- `data-gz-block`
+
+## Example
+
+```html
+
+
+```
diff --git a/ads/vendors/gumgum.js b/ads/vendors/gumgum.js
index 6a9f8518ef35..1d1d18f79f53 100644
--- a/ads/vendors/gumgum.js
+++ b/ads/vendors/gumgum.js
@@ -1,4 +1,5 @@
import {loadScript, validateData} from '#3p/3p';
+
import {setStyles} from '#core/dom/style';
/**
diff --git a/ads/vendors/idealmedia.js b/ads/vendors/idealmedia.js
index 84250f4f553f..f24d97fcde52 100644
--- a/ads/vendors/idealmedia.js
+++ b/ads/vendors/idealmedia.js
@@ -5,28 +5,11 @@ import {loadScript, validateData} from '#3p/3p';
* @param {!Object} data
*/
export function idealmedia(global, data) {
- validateData(data, ['publisher', 'widget', 'container'], ['url', 'options']);
-
- const scriptRoot = document.createElement('div');
- scriptRoot.id = data.container;
-
- document.body.appendChild(scriptRoot);
-
- /**
- * Returns path for provided js filename
- * @param {string} publisher The first number.
- * @return {string} Path to provided filename.
- */
- function getResourceFilePath(publisher) {
- const publisherStr = publisher.replace(/[^A-z0-9]/g, '');
- return `${publisherStr[0]}/${publisherStr[1]}`;
- }
-
- const url =
- `https://jsc.idealmedia.io/${getResourceFilePath(data.publisher)}/` +
- `${encodeURIComponent(data.publisher)}.` +
- `${encodeURIComponent(data.widget)}.js?t=` +
- Math.floor(Date.now() / 36e5);
+ validateData(
+ data,
+ [['publisher', 'website'], ['container', 'website'], 'widget'],
+ ['url', 'options']
+ );
global.uniqId = (
'00000' + Math.round(Math.random() * 100000).toString(16)
@@ -42,5 +25,40 @@ export function idealmedia(global, data) {
});
});
- loadScript(global, data.url || url);
+ if (data.website) {
+ const widgetContainer = document.createElement('div');
+ widgetContainer.dataset.type = '_mgwidget';
+ widgetContainer.dataset.widgetId = data.widget;
+ document.body.appendChild(widgetContainer);
+
+ const url =
+ `https://jsc.idealmedia.io/site/` +
+ `${encodeURIComponent(data.website)}.js?t=` +
+ Math.floor(Date.now() / 36e5);
+
+ loadScript(global, data.url || url);
+ } else {
+ const scriptRoot = document.createElement('div');
+ scriptRoot.id = data.container;
+
+ document.body.appendChild(scriptRoot);
+
+ /**
+ * Returns path for provided js filename
+ * @param {string} publisher js filename
+ * @return {string} Path to provided filename.
+ */
+ function getResourceFilePath(publisher) {
+ const publisherStr = publisher.replace(/[^a-zA-Z0-9]/g, '');
+ return `${publisherStr[0]}/${publisherStr[1]}`;
+ }
+
+ const url =
+ `https://jsc.idealmedia.io/${getResourceFilePath(data.publisher)}/` +
+ `${encodeURIComponent(data.publisher)}.` +
+ `${encodeURIComponent(data.widget)}.js?t=` +
+ Math.floor(Date.now() / 36e5);
+
+ loadScript(global, data.url || url);
+ }
}
diff --git a/ads/vendors/idealmedia.md b/ads/vendors/idealmedia.md
index ea1a4ec1c2ce..3bcdbccf5923 100644
--- a/ads/vendors/idealmedia.md
+++ b/ads/vendors/idealmedia.md
@@ -4,6 +4,19 @@
### Basic
+Latest version:
+```html
+
+
+```
+
+Legacy version:
```html
+
+```
+
+## Configuration
+
+For configuration details and to generate your tags, please contact https://www.incrementx.com/contact-us.
+
+Supported parameters:
+
+- `data-vzid`
diff --git a/ads/vendors/inmobi.js b/ads/vendors/inmobi.js
index 16010a5f13d6..eeb536417ecf 100644
--- a/ads/vendors/inmobi.js
+++ b/ads/vendors/inmobi.js
@@ -1,6 +1,7 @@
-import {setStyle} from '#core/dom/style';
import {validateData, writeScript} from '#3p/3p';
+import {setStyle} from '#core/dom/style';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/insurads.js b/ads/vendors/insurads.js
new file mode 100644
index 000000000000..708d9acc4944
--- /dev/null
+++ b/ads/vendors/insurads.js
@@ -0,0 +1,22 @@
+import {loadScript} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ */
+export function insurads(global) {
+ /**
+ * Create and modify a Date object to return the first day of the current week.
+ * @return {Date} The altered date.
+ */
+ function getCacheBuster() {
+ const t = new Date();
+ t.setDate(t.getDate() - t.getDay());
+ t.setHours(0, 0, 0, 0) / 1000;
+ return Number(t);
+ }
+
+ // For simplicity and flexibility, all validations are performed in the
+ // InsurAds's URL based on the data received
+ const url = 'https://cdn.insurads.com/amp-init.js?_=' + getCacheBuster();
+ loadScript(global, url);
+}
diff --git a/ads/vendors/insurads.md b/ads/vendors/insurads.md
new file mode 100644
index 000000000000..52acd978dc85
--- /dev/null
+++ b/ads/vendors/insurads.md
@@ -0,0 +1,61 @@
+# InsurAds
+
+## Example
+
+### Basic sample
+
+```html
+
+
+```
+
+### Sample with multisize
+
+```html
+
+
+```
+
+### Sample with targeting
+
+```html
+
+
+```
+
+## Configuration
+
+For details on the configuration semantics, please contact the ad network or refer to their documentation.
+
+## Supported parameters
+
+| Parameter name | Description | Required |
+| --------------- | ----------------------------------- | -------- |
+| width | Primary size width | Yes |
+| height | Primary size height | Yes |
+| data-public-id | Application public id | Yes |
+| data-slot | Ad unit code | Yes |
+| data-multi-size | Comma separated list of other sizes | No |
+| json | Custom targeting map | No |
+
+Note: if any of the required parameters is not present, the ad slot will not be filled.
diff --git a/ads/vendors/iprom.js b/ads/vendors/iprom.js
index ce274f9d0a6c..2feb542aa9cb 100644
--- a/ads/vendors/iprom.js
+++ b/ads/vendors/iprom.js
@@ -1,6 +1,7 @@
-import {parseJson} from '#core/types/object/json';
import {validateData, writeScript} from '#3p/3p';
+import {parseJson} from '#core/types/object/json';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/ix.js b/ads/vendors/ix.js
index 272a3dd65560..e045e3ac6f4c 100644
--- a/ads/vendors/ix.js
+++ b/ads/vendors/ix.js
@@ -1,6 +1,8 @@
+import {loadScript, writeScript} from '#3p/3p';
+
import {doubleclick} from '#ads/google/doubleclick';
+
import {hasOwn} from '#core/types/object';
-import {loadScript, writeScript} from '#3p/3p';
const DEFAULT_TIMEOUT = 500; // ms
const EVENT_SUCCESS = 0;
diff --git a/ads/vendors/jioads.js b/ads/vendors/jioads.js
new file mode 100644
index 000000000000..2a2b11a80e11
--- /dev/null
+++ b/ads/vendors/jioads.js
@@ -0,0 +1,82 @@
+import {loadScript, validateData, writeScript} from '#3p/3p';
+
+import {setStyle} from '#core/dom/style';
+import {hasOwn} from '#core/types/object';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function jioads(global, data) {
+ global.context.container = `uid${Math.floor(Date.now())}`;
+ global.context.initialViewAbility = false;
+ validateData(
+ data,
+ ['adspot', 'pkgName'],
+ ['adMetaData', 'refreshRate', 'videoAd']
+ );
+ if (!data) {
+ global.context.noContentAvailable();
+ return;
+ }
+ writeScript(
+ global,
+ 'https://mercury.akamaized.net/jioads/websdk/amp/jioAds.js?rnd=' +
+ Math.random()
+ );
+ loadScript(
+ global,
+ 'https://mercury.akamaized.net/jioads/websdk/amp/ampwrapper.js?rnd=' +
+ Math.random(),
+ () => {
+ let refresh = '';
+ let adMetaData = '';
+ let video = '';
+ let videocontainer = '';
+ if (hasOwn(data, 'refreshRate')) {
+ refresh = ` data-refresh-rate="${data['refreshRate']}"`;
+ }
+ if (hasOwn(data, 'adMetaData')) {
+ adMetaData = ` data-adMetaData="${data['adMetaData']}"`;
+ }
+ if (hasOwn(data, 'videoAd') && data['videoAd'] == '1') {
+ video = `
`;
+ videocontainer = ` data-container-id="instreamContainer"`;
+ }
+ let html = '';
+ const container = document.createElement('div');
+ container.classList.add('jads-flex-center', 'jads-f-align-center');
+ container.setAttribute('id', 'jads_amp_ad');
+ setStyle(
+ container,
+ 'width',
+ `${global.context.initialIntersection.boundingClientRect.width}px`
+ );
+ setStyle(
+ container,
+ 'height',
+ `${global.context.initialIntersection.boundingClientRect.height}px`
+ );
+ html = `${video} `;
+ container./*OK*/ innerHTML = html;
+ global.document.getElementById('c').appendChild(container);
+ },
+ () => {
+ global.context.noContentAvailable();
+ }
+ );
+ // addon observation on entering/leaving the view when scroll vertically and horizontally
+ window.context.observeIntersection(function (newrequest) {
+ /** @type {!Array} */
+ (newrequest).forEach(function (data) {
+ if (data.intersectionRatio >= 0.5) {
+ global.context.initialViewAbility = true;
+ } else {
+ global.context.initialViewAbility = false;
+ }
+ });
+ });
+}
diff --git a/ads/vendors/jioads.md b/ads/vendors/jioads.md
new file mode 100644
index 000000000000..b814b9137cbb
--- /dev/null
+++ b/ads/vendors/jioads.md
@@ -0,0 +1,74 @@
+# JIOADS
+
+## Example of JIOADS AD's implementation
+
+```html
+ Native Banner (Fixed Size W320 x H50)
+
+
+
+ Native Billboard (Fixed Size W300 x H250)
+
+ Loading....
+ Something went wrong in ad load
+
+ Dynamic Display Billboard (Responsive Size Min W320 x H 300)
+
+ Loading....
+ Something went wrong in ad load
+
+ Instream / Video (Responsive Size Min W320 x H280)
+
+ Loading....
+ Something went wrong in ad load
+
+```
+
+## Configuration
+
+For details on the configuration semantics, please contact JioAds
+
+### Required parameters
+
+- `data-adspot`: ADSPOT (publisher will get from jioads campaign dashboard)
+- `data-pkg-name`: PACKAGE NAME (publisher will get from jioads campaign dashboard as unique for each ad)
+
+### Optional parameters
+
+- `data-video-ad`: VIDEO AD boolean, only for instream ad (publisher will get from jioads campaign dashboard and decide taht want to publish video)
+- `data-refersh-rate`: REFRESH RATE integer seconds, defaut refresh rate is 30 seconds, manually set should be greater than 30 (publisher can set refresh rate in seconds, so ad will be refreshed according to given seconds)
+- `data-ad-meta-data`: AD META DATA json format (publisher can set json data like category etc, full example on campaign dashboard)
diff --git a/ads/vendors/jixie.js b/ads/vendors/jixie.js
index 12511aa5479d..7c6f30fd4bfe 100644
--- a/ads/vendors/jixie.js
+++ b/ads/vendors/jixie.js
@@ -6,5 +6,5 @@ import {loadScript} from '#3p/3p';
export function jixie(global) {
// For flexibility, all validations are performed in the
// Jixie side based on the data on the page for the amp-ad
- loadScript(global, 'https://scripts.jixie.io/jxamp.min.js');
+ loadScript(global, 'https://scripts.jixie.media/jxamp.min.js');
}
diff --git a/ads/vendors/kiosked.js b/ads/vendors/kiosked.js
index 2f1d1b67eb43..c1e0070400a3 100644
--- a/ads/vendors/kiosked.js
+++ b/ads/vendors/kiosked.js
@@ -1,6 +1,7 @@
-import {hasOwn} from '#core/types/object';
import {validateData, writeScript} from '#3p/3p';
+import {hasOwn} from '#core/types/object';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/kixer.js b/ads/vendors/kixer.js
index c131d0e722c4..c46046686d9e 100644
--- a/ads/vendors/kixer.js
+++ b/ads/vendors/kixer.js
@@ -1,4 +1,5 @@
import {loadScript, validateData} from '#3p/3p';
+
import {parseUrlDeprecated} from '../../src/url';
/* global
diff --git a/ads/vendors/lentainform.js b/ads/vendors/lentainform.js
deleted file mode 100644
index 1953bd49b7a3..000000000000
--- a/ads/vendors/lentainform.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import {loadScript, validateData} from '#3p/3p';
-
-/**
- * @param {!Window} global
- * @param {!Object} data
- */
-export function lentainform(global, data) {
- validateData(data, ['publisher', 'widget', 'container'], ['url', 'options']);
-
- const scriptRoot = document.createElement('div');
- scriptRoot.id = data.container;
-
- document.body.appendChild(scriptRoot);
-
- const publisherStr = data.publisher.replace(/[^A-z0-9]/g, '');
-
- const url =
- `https://jsc.lentainform.com/${encodeURIComponent(publisherStr[0])}/` +
- `${encodeURIComponent(publisherStr[1])}/` +
- `${encodeURIComponent(data.publisher)}.` +
- `${encodeURIComponent(data.widget)}.js?t=` +
- Math.floor(Date.now() / 36e5);
-
- global.uniqId = (
- '00000' + Math.round(Math.random() * 100000).toString(16)
- ).slice(-5);
- window['ampOptions' + data.widget + '_' + global.uniqId] = data.options;
-
- global.context.observeIntersection(function (changes) {
- /** @type {!Array} */ (changes).forEach(function (c) {
- window['intersectionRect' + data.widget + '_' + global.uniqId] =
- c.intersectionRect;
- window['boundingClientRect' + data.widget + '_' + global.uniqId] =
- c.boundingClientRect;
- });
- });
-
- loadScript(global, data.url || url);
-}
diff --git a/ads/vendors/lentainform.md b/ads/vendors/lentainform.md
deleted file mode 100644
index ef5acac84e51..000000000000
--- a/ads/vendors/lentainform.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Lentainform
-
-## Example
-
-### Basic
-
-```html
-
-
-```
-
-## Configuration
-
-For details on the configuration semantics, please contact the ad network or refer to their documentation.
-
-### Required parameters
-
-- `data-publisher`
-- `data-widget`
-- `data-container`
-
-### Optional parameters
-
-- `data-url`
-- `data-options`
diff --git a/ads/vendors/medianet.js b/ads/vendors/medianet.js
index 0a6ef53c8f0f..4be2102f4b9a 100644
--- a/ads/vendors/medianet.js
+++ b/ads/vendors/medianet.js
@@ -1,7 +1,9 @@
import {computeInMasterFrame, validateData, writeScript} from '#3p/3p';
-import {getSourceUrl, parseUrlDeprecated} from '../../src/url';
+
import {hasOwn} from '#core/types/object';
+import {getSourceUrl, parseUrlDeprecated} from '../../src/url';
+
const mandatoryParams = ['tagtype', 'cid'],
optionalParams = [
'timeout',
diff --git a/ads/vendors/medyanet.js b/ads/vendors/medyanet.js
index 53b1b7bcb2f3..7c25f6072719 100644
--- a/ads/vendors/medyanet.js
+++ b/ads/vendors/medyanet.js
@@ -1,6 +1,7 @@
-import {setStyles} from '#core/dom/style';
import {validateData} from '#3p/3p';
+import {setStyles} from '#core/dom/style';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/mgid.js b/ads/vendors/mgid.js
index 84317509af99..f0f4b643869b 100644
--- a/ads/vendors/mgid.js
+++ b/ads/vendors/mgid.js
@@ -5,28 +5,11 @@ import {loadScript, validateData} from '#3p/3p';
* @param {!Object} data
*/
export function mgid(global, data) {
- validateData(data, ['publisher', 'widget', 'container'], ['url', 'options']);
-
- const scriptRoot = document.createElement('div');
- scriptRoot.id = data.container;
-
- document.body.appendChild(scriptRoot);
-
- /**
- * Returns path for provided js filename
- * @param {string} publisher js filename
- * @return {string} Path to provided filename.
- */
- function getResourceFilePath(publisher) {
- const publisherStr = publisher.replace(/[^A-z0-9]/g, '');
- return `${publisherStr[0]}/${publisherStr[1]}`;
- }
-
- const url =
- `https://jsc.mgid.com/${getResourceFilePath(data.publisher)}/` +
- `${encodeURIComponent(data.publisher)}.` +
- `${encodeURIComponent(data.widget)}.js?t=` +
- Math.floor(Date.now() / 36e5);
+ validateData(
+ data,
+ [['publisher', 'website'], ['container', 'website'], 'widget'],
+ ['url', 'options']
+ );
global.uniqId = (
'00000' + Math.round(Math.random() * 100000).toString(16)
@@ -42,5 +25,40 @@ export function mgid(global, data) {
});
});
- loadScript(global, data.url || url);
+ if (data.website) {
+ const widgetContainer = document.createElement('div');
+ widgetContainer.dataset.type = '_mgwidget';
+ widgetContainer.dataset.widgetId = data.widget;
+ document.body.appendChild(widgetContainer);
+
+ const url =
+ `https://jsc.mgid.com/site/` +
+ `${encodeURIComponent(data.website)}.js?t=` +
+ Math.floor(Date.now() / 36e5);
+
+ loadScript(global, data.url || url);
+ } else {
+ const scriptRoot = document.createElement('div');
+ scriptRoot.id = data.container;
+
+ document.body.appendChild(scriptRoot);
+
+ /**
+ * Returns path for provided js filename
+ * @param {string} publisher js filename
+ * @return {string} Path to provided filename.
+ */
+ function getResourceFilePath(publisher) {
+ const publisherStr = publisher.replace(/[^a-zA-Z0-9]/g, '');
+ return `${publisherStr[0]}/${publisherStr[1]}`;
+ }
+
+ const url =
+ `https://jsc.mgid.com/${getResourceFilePath(data.publisher)}/` +
+ `${encodeURIComponent(data.publisher)}.` +
+ `${encodeURIComponent(data.widget)}.js?t=` +
+ Math.floor(Date.now() / 36e5);
+
+ loadScript(global, data.url || url);
+ }
}
diff --git a/ads/vendors/mgid.md b/ads/vendors/mgid.md
index 67f9824787c6..83f967eaa7bd 100644
--- a/ads/vendors/mgid.md
+++ b/ads/vendors/mgid.md
@@ -4,6 +4,19 @@
### Basic
+Latest version:
+```html
+
+
+```
+
+Legacy version:
```html
+
+```
+
+## Configuration
+
+For details on the configuration semantics, please contact the ad network or refer to their documentation.
+
+### Required parameters
+
+- `data-publisher`
+- `data-container`
+
+
+### Optional parameters
+- `data-format`
+- `data-url`
+- `data-extras`
\ No newline at end of file
diff --git a/ads/vendors/mytarget.js b/ads/vendors/mytarget.js
index e159e28621e2..ceaaa32827ad 100644
--- a/ads/vendors/mytarget.js
+++ b/ads/vendors/mytarget.js
@@ -1,4 +1,5 @@
import {loadScript, validateData} from '#3p/3p';
+
import {setStyles} from '#core/dom/style';
/**
diff --git a/ads/vendors/myua.js b/ads/vendors/myua.js
index 3f41faac6dbe..9684010eee6b 100644
--- a/ads/vendors/myua.js
+++ b/ads/vendors/myua.js
@@ -5,15 +5,15 @@ import {validateData} from '#3p/3p';
* @param {!Object} data
*/
export function myua(global, data) {
- validateData(data, ['sid', 'iid'], ['demo', 'options']);
+ validateData(data, ['sid', 'iid'], ['env', 'options']);
const informerTag = global.document.createElement('div');
informerTag.setAttribute('data-top-iid', data.iid);
global.document.body.appendChild(informerTag);
- const demoSuffix = data.demo ? 'dev.' : '';
+ const env = data.env ? `${data.env}.` : '';
const scriptTag = global.document.createElement('script');
- scriptTag.src = `https://amp.top-js-metrics.top.${demoSuffix}my.ua/script.js`;
+ scriptTag.src = `https://amp.top-js-metrics.top.${env}my.ua/script.js`;
scriptTag.setAttribute('async', 'true');
scriptTag.setAttribute('data-top-sid', data.sid);
diff --git a/ads/vendors/myua.md b/ads/vendors/myua.md
index 72eab091b360..426e87eb69e7 100644
--- a/ads/vendors/myua.md
+++ b/ads/vendors/myua.md
@@ -26,5 +26,5 @@ For details on the configuration semantics, please contact the ad network or ref
### Optional parameters
-- `data-demo`
+- `data-env`
- `data-options`
diff --git a/ads/vendors/nativery.js b/ads/vendors/nativery.js
index 8fd27d3a90d1..d06116ba47a0 100644
--- a/ads/vendors/nativery.js
+++ b/ads/vendors/nativery.js
@@ -1,6 +1,7 @@
-import {toArray} from '#core/types/array';
import {validateData, writeScript} from '#3p/3p';
+import {toArray} from '#core/types/array';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/nativo.js b/ads/vendors/nativo.js
index d8b2d9fa3fe3..d054fd321edc 100644
--- a/ads/vendors/nativo.js
+++ b/ads/vendors/nativo.js
@@ -82,10 +82,13 @@ export function nativo(global, data) {
*/
function loadAdWhenTimedout() {
const g = global;
- setTimeout(function () {
- g.PostRelease.Start();
- delayedAdLoad = true;
- }, parseInt(data.delayByTime, 10));
+ setTimeout(
+ function () {
+ g.PostRelease.Start();
+ delayedAdLoad = true;
+ },
+ parseInt(data.delayByTime, 10)
+ );
}
/**
* @param {*} positions
diff --git a/ads/vendors/navegg.js b/ads/vendors/navegg.js
index b9ed93c79283..cdcf54d82cdb 100644
--- a/ads/vendors/navegg.js
+++ b/ads/vendors/navegg.js
@@ -1,12 +1,17 @@
-import {doubleclick} from '#ads/google/doubleclick';
import {loadScript, validateData} from '#3p/3p';
+import {doubleclick} from '#ads/google/doubleclick';
+
/**
* @param {!Window} global
* @param {!Object} data
*/
export function navegg(global, data) {
- validateData(data, ['acc']);
+ const requiredParams = ['acc', 'wst', 'wct', 'wla'];
+ const optionalParams = [];
+
+ validateData(data, requiredParams, optionalParams);
+
const {acc} = data;
let seg,
nvg = function () {};
@@ -16,6 +21,9 @@ export function navegg(global, data) {
loadScript(global, 'https://tag.navdmp.com/amp.1.0.0.min.js', () => {
nvg = global[`nvg${acc}`] = new global['AMPNavegg']({
acc,
+ wst: data.wst ? '1' : '0',
+ wct: data.wct ? '1' : '0',
+ wla: data.wla ? '1' : '0',
});
nvg.getProfile((nvgTargeting) => {
for (seg in nvgTargeting) {
diff --git a/ads/vendors/navegg.md b/ads/vendors/navegg.md
index ab60804481de..574764a7973f 100644
--- a/ads/vendors/navegg.md
+++ b/ads/vendors/navegg.md
@@ -18,4 +18,4 @@ To get Navegg integration working you only need to specify the `rtc-config` para
The Navegg adapter only supports DoubleClick for now. For the most up-to-date list of DoubleClick supported parameters and usage, refer to the [DoubleClick reference guide](https://github.com/ampproject/amphtml/blob/main/ads/google/doubleclick.md).
-For any help, please contact [Navegg](https://www.navegg.com/en/institutional/#contact).
+For any help, please contact [Navegg](https://www.navegg.com/en/about-us/contacts).
diff --git a/ads/vendors/netletix.js b/ads/vendors/netletix.js
index befd8bcfde8f..0ea6205c6a65 100644
--- a/ads/vendors/netletix.js
+++ b/ads/vendors/netletix.js
@@ -1,8 +1,9 @@
-import {addParamsToUrl, assertHttpsUrl} from '../../src/url';
-import {dev} from '#utils/log';
-import {dict} from '#core/types/object';
import {loadScript, validateData, writeScript} from '#3p/3p';
+import {dev} from '#utils/log';
+
+import {addParamsToUrl, assertHttpsUrl} from '../../src/url';
+
const NX_URL_HOST = 'https://call.adadapter.netzathleten-media.de';
const NX_URL_PATHPREFIX = '/pb/';
const NX_URL_FULL = NX_URL_HOST + NX_URL_PATHPREFIX;
@@ -36,14 +37,14 @@ export function netletix(global, data) {
const url = assertHttpsUrl(
addParamsToUrl(
NX_URL_FULL + encodeURIComponent(data.nxkey || DEFAULT_NX_KEY),
- dict({
+ {
'unit': data.nxunit || DEFAULT_NX_UNIT,
'width': data.nxwidth || DEFAULT_NX_WIDTH,
'height': data.nxheight || DEFAULT_NX_HEIGHT,
'v': data.nxv || DEFAULT_NX_V,
'site': data.nxsite || DEFAULT_NX_SITE,
'ord': Math.round(Math.random() * 100000000),
- })
+ }
),
data.ampSlotIndex
);
diff --git a/ads/vendors/openx.js b/ads/vendors/openx.js
index a68661e92db6..d75b019debcf 100644
--- a/ads/vendors/openx.js
+++ b/ads/vendors/openx.js
@@ -1,6 +1,7 @@
-import {doubleclick} from '#ads/google/doubleclick';
import {loadScript, validateData, writeScript} from '#3p/3p';
+import {doubleclick} from '#ads/google/doubleclick';
+
const {hasOwnProperty} = Object.prototype;
/**
diff --git a/ads/vendors/piberica.js b/ads/vendors/piberica.js
new file mode 100644
index 000000000000..9ee70f5b09fc
--- /dev/null
+++ b/ads/vendors/piberica.js
@@ -0,0 +1,25 @@
+import {loadScript, validateData} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function piberica(global, data) {
+ /*eslint "local/camelcase": 0*/
+ global._piberica_amp = {
+ allowed_data: ['publisher', 'slot'],
+ mandatory_data: ['publisher', 'slot'],
+ data,
+ };
+
+ validateData(
+ data,
+ global._piberica_amp.mandatory_data,
+ global._piberica_amp.allowed_data
+ );
+
+ loadScript(
+ global,
+ `https://trafico.prensaiberica.es/adm/min/intext/${data.publisher}/${data.slot}.js`
+ );
+}
diff --git a/ads/vendors/piberica.md b/ads/vendors/piberica.md
new file mode 100644
index 000000000000..a2059549e176
--- /dev/null
+++ b/ads/vendors/piberica.md
@@ -0,0 +1,24 @@
+# PIberica
+
+## Example
+
+```html
+
+```
+
+## Configuration
+
+For further information, please contact [PIberica](https://www.prensaiberica360.es).
+
+### Required parameters
+
+- `data-publisher`: Publisher Integration ID provided by PIberica
+- `data-slot`: Slot Integration ID provided by PIberica
diff --git a/ads/vendors/pixad.js b/ads/vendors/pixad.js
new file mode 100644
index 000000000000..ceb8d87a3c1c
--- /dev/null
+++ b/ads/vendors/pixad.js
@@ -0,0 +1,37 @@
+import {validateData, writeScript} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function pixad(global, data) {
+ validateData(data, ['adNetwork', 'adPublisher', 'adTypeId']);
+ global._pixad = global._pixad || {
+ publisher: data['adNetwork'],
+ adNetwork: data['adPublisher'],
+ adTypeId: data['adTypeId'],
+ host: `static.cdn.pixad.com.tr`,
+ prefix: `px`,
+ };
+
+ if (global._pixad.publisher.indexOf('adm-pub') != -1) {
+ global._pixad.host = `static.cdn.admatic.com.tr`;
+ global._pixad.prefix = `adm`;
+ }
+
+ const ins = global.document.createElement('ins');
+ ins.setAttribute('data-publisher', global._pixad.publisher);
+ if (global._pixad.adTypeId == 'standard') {
+ ins.setAttribute('data-ad-size', `[[${data.width},${data.height}]]`);
+ }
+ ins.setAttribute('data-ad-network', global._pixad.adNetwork);
+ ins.setAttribute('data-ad-type-id', global._pixad.adTypeId);
+ ins.setAttribute('class', `${global._pixad.prefix}-ads-area`);
+ global.document.getElementById('c').appendChild(ins);
+ ins.parentNode.addEventListener(
+ 'eventAdbladeRenderStart',
+ global.context.renderStart()
+ );
+
+ writeScript(global, `https://${global._pixad.host}/showad/showad.min.js`);
+}
diff --git a/ads/vendors/pixad.md b/ads/vendors/pixad.md
new file mode 100644
index 000000000000..6452c2ca07ca
--- /dev/null
+++ b/ads/vendors/pixad.md
@@ -0,0 +1,51 @@
+# Pixad
+
+## Example of Pixad's model implementation
+
+### Basic
+
+```html
+
+
+```
+
+### Sticky Ad
+
+```html
+
+
+
+
+```
+
+Note that ` ` component requires the following script to be included in the page:
+
+```html
+
+```
+
+## Configuration
+
+For details on the configuration semantics, see [Pixad documentation](https://developer.pixad.com.tr/).
+
+### Required parameters
+
+- `data-ad-network`: Network ID
+- `data-ad-publisher`: Publisher ID
+- `data-ad-type-id`: Model ID
diff --git a/ads/vendors/promoteiq.js b/ads/vendors/promoteiq.js
index 943d67f27ab1..8f72d458e1ea 100644
--- a/ads/vendors/promoteiq.js
+++ b/ads/vendors/promoteiq.js
@@ -1,5 +1,7 @@
import {loadScript, validateData} from '#3p/3p';
+
import {parseJson} from '#core/types/object/json';
+
import {user} from '#utils/log';
const TAG = 'PROMOTEIQ';
diff --git a/ads/vendors/pubfuture.js b/ads/vendors/pubfuture.js
new file mode 100644
index 000000000000..561797076b46
--- /dev/null
+++ b/ads/vendors/pubfuture.js
@@ -0,0 +1,15 @@
+import {validateData, writeScript} from '#3p/3p';
+
+const requiredParams = ['id'];
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function pubfuture(global, data) {
+ validateData(data, requiredParams);
+ writeScript(global, 'https://cdn.pubfuture-ad.com/amp/js/pt.js');
+ global.document.write(
+ ''
+ );
+}
diff --git a/ads/vendors/pubfuture.md b/ads/vendors/pubfuture.md
new file mode 100644
index 000000000000..d6b409c08ad6
--- /dev/null
+++ b/ads/vendors/pubfuture.md
@@ -0,0 +1,22 @@
+# Pubfuture
+
+## Examples
+
+```html
+
+
+```
+
+## Configuration
+
+**Required:**
+
+`width` + `height` - Required for all `` units. Specifies the ad size.
+
+`type` - Always set to "pubfuture".
+
+`data-id`: Tag Id.
diff --git a/ads/vendors/pubmine.js b/ads/vendors/pubmine.js
index 13d2f34c4d73..436aa2482191 100644
--- a/ads/vendors/pubmine.js
+++ b/ads/vendors/pubmine.js
@@ -1,6 +1,7 @@
-import {CONSENT_POLICY_STATE} from '#core/constants/consent-state';
import {loadScript, validateData} from '#3p/3p';
+import {CONSENT_POLICY_STATE} from '#core/constants/consent-state';
+
const pubmineOptional = [
'section',
'pt',
diff --git a/ads/vendors/pubscale.js b/ads/vendors/pubscale.js
new file mode 100644
index 000000000000..3f2c199620cf
--- /dev/null
+++ b/ads/vendors/pubscale.js
@@ -0,0 +1,21 @@
+import {loadScript, validateData, writeScript} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function pubscale(global, data) {
+ // TODO: check mandatory fields
+ validateData(
+ data,
+ ['pid'],
+ ['format', 'appid', 'size', 'params', 'load-strategy', 'version']
+ );
+ global.pubscale = data;
+ const VERSION = data['version'] || 'v1';
+
+ const URL = `https://static.pubscale.com/lib/amp/${VERSION}/index.js`;
+ const load = data['load-strategy'] !== 'sync' ? writeScript : loadScript;
+
+ load(global, URL);
+}
diff --git a/ads/vendors/pubscale.md b/ads/vendors/pubscale.md
new file mode 100644
index 000000000000..fa0522600584
--- /dev/null
+++ b/ads/vendors/pubscale.md
@@ -0,0 +1,32 @@
+
+
+[PubScale](https://pubscale.com) is an all-in-one platform enabling fast monetization and user acquisition for apps, websites, and games while retaining positive user experiences. With PubScale, you can uplift revenue and analyze business growth all in a single place.
+
+## Example
+
+```html
+
+
+```
+
+### Required parameters
+
+- `data-pid`
+
+### Optional parameters
+
+- `data-format`
+- `data-appid`
+- `data-size`
+- `data-params`
+- `data-load-strategy`
+- `data-version`
diff --git a/ads/vendors/pulsepoint.js b/ads/vendors/pulsepoint.js
index 70fec83e513c..4227caeb0a15 100644
--- a/ads/vendors/pulsepoint.js
+++ b/ads/vendors/pulsepoint.js
@@ -1,6 +1,7 @@
-import {doubleclick} from '#ads/google/doubleclick';
import {loadScript, validateData, writeScript} from '#3p/3p';
+import {doubleclick} from '#ads/google/doubleclick';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/r9x.js b/ads/vendors/r9x.js
new file mode 100644
index 000000000000..b34b374e2af9
--- /dev/null
+++ b/ads/vendors/r9x.js
@@ -0,0 +1,35 @@
+import {loadScript, validateData} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function r9x(global, data) {
+ validateData(
+ data,
+ ['siteid', 'slotpath', 'width', 'height'],
+ ['totalampslots', 'jsontargeting', 'extras']
+ );
+ loadScript(
+ global,
+ 'https://securepubads.g.doubleclick.net/tag/js/gpt.js',
+ () => {
+ loadScript(
+ global,
+ 'https://rtbcdn.r9x.media/prod-global-' + data.siteid + '.js',
+ () => {
+ window.r9x.initAmp(
+ global,
+ data.width,
+ data.height,
+ data.siteid,
+ data.slotpath,
+ data.totalampslots,
+ data.jsontargeting,
+ data.extras
+ );
+ }
+ );
+ }
+ );
+}
diff --git a/ads/vendors/r9x.md b/ads/vendors/r9x.md
new file mode 100644
index 000000000000..8a6c875b08df
--- /dev/null
+++ b/ads/vendors/r9x.md
@@ -0,0 +1,18 @@
+# r9x
+
+## Example
+
+```html
+
+
+```
+
+## Configuration
+
+- `data-slot`: The GAM ad unit path corresponding to the ad position
+- `siteid`: r9x Site ID
+- `totalAmpSlots`: Total r9x amp-ad slots on the page
diff --git a/ads/vendors/rakutenunifiedads.js b/ads/vendors/rakutenunifiedads.js
index 9f3543973a62..0f1cd90216bb 100644
--- a/ads/vendors/rakutenunifiedads.js
+++ b/ads/vendors/rakutenunifiedads.js
@@ -1,6 +1,7 @@
-import {hasOwn} from '#core/types/object';
import {validateData, writeScript} from '#3p/3p';
+import {hasOwn} from '#core/types/object';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/rcmwidget.js b/ads/vendors/rcmwidget.js
index dfefcea6aaaf..bf307d77ac43 100644
--- a/ads/vendors/rcmwidget.js
+++ b/ads/vendors/rcmwidget.js
@@ -1,7 +1,5 @@
import {loadScript, validateData} from '#3p/3p';
-const WIDGET_DEFAULT_NODE_ID = 'rcm-widget';
-
/**
* @param {!Window} global
* @param {!Object} data
@@ -9,25 +7,18 @@ const WIDGET_DEFAULT_NODE_ID = 'rcm-widget';
export function rcmwidget(global, data) {
validateData(
data,
- ['rcmId', 'nodeId', 'blockId', 'templateName', 'projectId'],
- ['contextItemId']
+ ['rcmId', 'blockId', 'templateName', 'projectId'],
+ [
+ 'contextItemId',
+ 'customStyles',
+ 'itemExcludedIds',
+ 'itemExcludedUrls',
+ 'params',
+ ]
);
global.rcmWidgetInit = data;
- createContainer(global, data.nodeId);
-
// load the rcmwidget initializer asynchronously
loadScript(global, 'https://rcmjs.rambler.ru/static/rcmw/rcmw-amp.js');
}
-
-/**
- * @param {!Window} global
- * @param {string} nodeId
- */
-function createContainer(global, nodeId = WIDGET_DEFAULT_NODE_ID) {
- const container = global.document.createElement('div');
- container.id = nodeId;
-
- global.document.getElementById('c').appendChild(container);
-}
diff --git a/ads/vendors/rcmwidget.md b/ads/vendors/rcmwidget.md
index 1801c53a5c8e..0ddf7823ff57 100644
--- a/ads/vendors/rcmwidget.md
+++ b/ads/vendors/rcmwidget.md
@@ -3,13 +3,33 @@
## Example
```html
-
+
+
```
+## Configuration
+
+For details on the configuration semantics, please contact the ad network or refer to their documentation.
+
### Required parameters
- `data-rcm-id`
-- `data-node-id`
- `data-block-id`
- `data-template-name`
- `data-project-id`
+
+### Optional parameters
+
+- `data-context-item-id`
+- `data-custom-styles`
+- `data-item-excluded-ids`
+- `data-item-excluded-urls`
+- `data-params`
diff --git a/ads/vendors/relap.js b/ads/vendors/relap.js
index 575b8379d57e..a74c856592a8 100644
--- a/ads/vendors/relap.js
+++ b/ads/vendors/relap.js
@@ -1,5 +1,7 @@
import {loadScript, validateData} from '#3p/3p';
+import {setStyle} from '#core/dom/style';
+
/**
* @param {!Window} global
* @param {!Object} data
@@ -10,13 +12,6 @@ export function relap(global, data) {
const urlParam = data['url'] || window.context.canonicalUrl;
if (data['version'] === 'v7') {
- window.onRelapAPIReady = function (relapAPI) {
- relapAPI['init']({
- token: data['token'],
- url: urlParam,
- });
- };
-
window.onRelapAPIInit = function (relapAPI) {
relapAPI['addWidget']({
cfgId: data['anchorid'],
@@ -27,13 +22,21 @@ export function relap(global, data) {
window.context.renderStart();
},
onNoContent: function () {
+ relapAPI['destroy']();
window.context.noContentAvailable();
},
},
});
};
- loadScript(global, 'https://relap.io/v7/relap.js');
+ const iframeEl = document.createElement('iframe');
+ setStyle(iframeEl, 'position', 'absolute');
+ setStyle(iframeEl, 'visibility', 'hidden');
+ setStyle(iframeEl, 'left', '-9999px');
+ setStyle(iframeEl, 'top', '-9999px');
+ iframeEl.className = 'relap-runtime-iframe';
+ iframeEl.srcdoc = ``;
+ global.document.body.appendChild(iframeEl);
} else {
window.relapV6WidgetReady = function () {
window.context.renderStart();
diff --git a/ads/vendors/relap.md b/ads/vendors/relap.md
index d7cf5bb74a5d..1ece5d4a4df2 100644
--- a/ads/vendors/relap.md
+++ b/ads/vendors/relap.md
@@ -5,12 +5,13 @@
```html
```
diff --git a/ads/vendors/revcontent.js b/ads/vendors/revcontent.js
index 68981da1610b..a5e3989be1c8 100644
--- a/ads/vendors/revcontent.js
+++ b/ads/vendors/revcontent.js
@@ -1,60 +1,250 @@
-import {loadScript, validateData, writeScript} from '#3p/3p';
+import {loadScript, validateData} from '#3p/3p';
+
+import {setStyle, setStyles} from '#core/dom/style';
+
+// Required/optional parameters for legacy/standard builds are consolidated here
+// to provide a more managable way of interacting with them. Most of the legacy
+// optional attributes are deprecated but there's still tags live that might have
+// them so they'll stay in this list to pass validation
+const options = {
+ endpoints: {
+ legacy:
+ 'https://labs-cdn.revcontent.com/build/amphtml/revcontent.amp.min.js',
+ standard: 'https://assets.revcontent.com/master/delivery.js',
+ evergreen: 'https://delivery.revcontent.com/',
+ },
+ params: {
+ legacy: {
+ required: ['id', 'height'],
+ optional: [
+ 'wrapper',
+ 'subIds',
+ 'revcontent',
+ 'env',
+ 'loadscript',
+ 'api',
+ 'key',
+ 'ssl',
+ 'adxw',
+ 'adxh',
+ 'rows',
+ 'cols',
+ 'domain',
+ 'source',
+ 'testing',
+ 'endpoint',
+ 'publisher',
+ 'branding',
+ 'font',
+ 'css',
+ 'sizer',
+ 'debug',
+ 'ampcreative',
+ 'gdpr',
+ 'gdprConsent',
+ 'usPrivacy',
+ 'gamEnabled',
+ ],
+ },
+ evergreen: {
+ required: ['widgetId', 'pubId', 'height'],
+ optional: ['endpoint'],
+ },
+ },
+};
/**
- * @param {!Window} global
+ * Helper function to get endpoint string based on how tag is configured.
+ *
* @param {!Object} data
+ * @return {string}
*/
-export function revcontent(global, data) {
- let endpoint =
- 'https://labs-cdn.revcontent.com/build/amphtml/revcontent.amp.min.js';
-
+function getEndpoint(data) {
if (typeof data.revcontent !== 'undefined') {
if (typeof data.env === 'undefined') {
- endpoint = 'https://assets.revcontent.com/master/delivery.js';
- } else if (data.env == 'dev') {
- endpoint = 'https://performante.revcontent.dev/delivery.js';
- } else {
- endpoint = 'https://assets.revcontent.com/' + data.env + '/delivery.js';
+ return options.endpoints.standard;
+ }
+ if (data.env == 'dev') {
+ return 'https://preact.revcontent.dev/delivery.js';
}
+ return `https://assets.revcontent.com/${data.env}/delivery.js`;
}
- const required = ['id', 'height'];
- const optional = [
- 'wrapper',
- 'subIds',
- 'revcontent',
- 'env',
- 'loadscript',
- 'api',
- 'key',
- 'ssl',
- 'adxw',
- 'adxh',
- 'rows',
- 'cols',
- 'domain',
- 'source',
- 'testing',
- 'endpoint',
- 'publisher',
- 'branding',
- 'font',
- 'css',
- 'sizer',
- 'debug',
- 'ampcreative',
- 'gdpr',
- 'gdprConsent',
- 'usPrivacy',
- ];
+ if (
+ typeof data.placementType !== 'undefined' &&
+ data.placementType === 'evergreen'
+ ) {
+ if (typeof data.devUrl !== 'undefined') {
+ return data.devUrl;
+ }
- data.endpoint = data.endpoint ? data.endpoint : 'trends.revcontent.com';
+ return `${options.endpoints.evergreen}/${data.pubId}/${data.widgetId}/widget.js`;
+ }
- validateData(data, required, optional);
- global.data = data;
- if (data.loadscript) {
- loadScript(window, endpoint);
+ return options.endpoints.legacy;
+}
+
+/**
+ * Internal handler for calling requestResize
+ * @param {!Window} global
+ * @param {!Element} container
+ * @param {number} height
+ */
+function handleResize(global, container, height) {
+ global.context
+ .requestResize(undefined, height, true)
+ .then(() => {
+ handleResizeSuccess(global);
+ //handleResizeDenied(global, container, height);
+ })
+ .catch(() => {
+ handleResizeDenied(global, container, height);
+ });
+}
+
+/**
+ * Helper function for handling denied resize requests. Creates an overflow element if one does not exist
+ * @param {!Window} global
+ * @param {!Element} container
+ * @param {number} height
+ */
+function handleResizeDenied(global, container, height) {
+ const overflowElement = global.document.getElementById('overflow');
+
+ if (overflowElement) {
+ setStyle(overflowElement, 'display', '');
} else {
- writeScript(window, endpoint);
+ createOverflowElement(global, container, height);
+ }
+}
+
+/**
+ * Helper function for handling successful resize requests
+ * @param {!Window} global
+ */
+function handleResizeSuccess(global) {
+ const overflow = global.document.getElementById('overflow');
+ if (overflow) {
+ setStyle(overflow, 'display', 'none');
}
}
+
+/**
+ * Helper function to create an overflow element if one doesn't exist
+ * @param {!Window} global
+ * @param {!Element} container
+ * @param {number} height
+ */
+function createOverflowElement(global, container, height) {
+ const overflow = global.document.createElement('div');
+ overflow.id = 'overflow';
+
+ overflow.addEventListener('click', () => {
+ handleResize(global, container, height);
+ });
+
+ setStyles(overflow, {
+ position: 'absolute',
+ height: `60px`,
+ bottom: '0',
+ left: '0',
+ right: '0',
+ background: 'green',
+ cursor: 'pointer',
+ });
+
+ const indicator = ` `;
+
+ const chevron = global.document.createElement('div');
+ setStyles(chevron, {
+ width: '40px',
+ height: '40px',
+ margin: '0 auto',
+ display: 'block',
+ });
+
+ chevron./*OK*/ innerHTML = indicator;
+ overflow.appendChild(chevron);
+ container.appendChild(overflow);
+}
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function revcontent(global, data) {
+ global.revcontent = global.revcontent || {
+ boundingClientRect: {},
+ detectedWidth: 0,
+ detectedHeight: 0,
+ widgetData: {
+ ...data,
+ },
+ requestedSize: 0,
+ };
+
+ const requiredParams = [];
+ const optionalParams = [];
+ const containerDiv = global.document.getElementById('c');
+
+ if (
+ typeof data.placementType !== 'undefined' &&
+ data.placementType === 'evergreen'
+ ) {
+ // Revcontent evergreen builds do not have an explicit group of optional parameters
+ // to support configuration flexibility. Add any present attributes that are not
+ // part of the required ones to the optional list so tag passes validation.
+ const required = options?.params?.evergreen?.required;
+ const optional = Object.keys(data).filter((entry) => {
+ if (!required.includes(entry)) {
+ return entry;
+ }
+ });
+
+ optional.push(...options?.params?.evergreen?.optional);
+ requiredParams.push(...required);
+ optionalParams.push(...optional);
+
+ global.context.observeIntersection(function (changes) {
+ /** @type {!Array} */ changes.forEach(function (c) {
+ if (c.intersectionRect.height) {
+ if (global.revcontent?.boundingClientRect !== c.boundingClientRect) {
+ Object.assign(
+ global.revcontent?.boundingClientRect,
+ c.boundingClientRect
+ );
+ }
+
+ if (c.boundingClientRect.height < global.revcontent.requestedSize) {
+ handleResize(global, containerDiv, global.revcontent.requestedSize);
+ }
+ }
+ });
+ });
+ } else {
+ const required = options?.params?.legacy?.required;
+ const optional = options?.params?.legacy?.optional;
+
+ requiredParams.push(...required);
+ optionalParams.push(...optional);
+ }
+
+ const endpoint = getEndpoint(data);
+ data.endpoint = data.endpoint ? data.endpoint : 'trends.revcontent.com';
+
+ validateData(data, requiredParams, optionalParams);
+
+ global.data = data;
+ loadScript(global, endpoint, () => {
+ window.addEventListener('message', (e) => {
+ if (
+ e.data.source == 'revcontent' &&
+ e.data.action == 'RESIZE_AMP_TAG' &&
+ typeof e.data.height != 'undefined'
+ ) {
+ global.revcontent.requestedSize = e.data.height;
+ handleResize(global, containerDiv, e.data.height);
+ }
+ });
+ });
+}
diff --git a/ads/vendors/revcontent.md b/ads/vendors/revcontent.md
index 4b313313ce6a..72b3e94f6cb8 100644
--- a/ads/vendors/revcontent.md
+++ b/ads/vendors/revcontent.md
@@ -1,49 +1,67 @@
# Revcontent
-## Example
+## Examples
+
+### Standard Tag
+
+The standard AMP tag for Revcontent is the basic AMP ads integration and is used as shown here:
```html
- Loading ...
+ data-id="{YOUR_WIDGET_ID}">
+
+```
+
+### Evergreen Tag
+
+The evergreen AMP tag leverages new and improved ad code from Revcontent and supports greater performance and customization capabilities:
+
+```html
+
```
## Configuration
-For semantics of configuration, please see [Revcontent's documentation](https://faq.revcontent.com/).
+For help with configuration, please contact Revcontent or refer to their documentation.
-Supported parameters:
+### Standard Tag Options
+
+#### Required Parameters
- `data-id`
-- `data-revcontent`
-- `data-env`
-- `data-wrapper`
-- `data-endpoint`
-- `data-ssl`
-- `data-testing`
-- `data-loadscript`
+- `width`
+- `height`
+
+#### Optional Parameters
+
- `data-sub-ids`
+- `data-gam-enabled`
+- `data-gdpr`
+- `data-gdpr-consent`
+- `data-us-privacy`
+
+### Evergreen Tag Options
+
+#### Required Parameters
+
+- `data-widget-id`
+- `data-pub-id`
+- `width`
+- `height`
-## Auto-sizing of Ads
+#### Optional Parameters
-Revcontent's AMP service will be updated to support resizing of ads for improved rendering, no additional tag parameters are required at this time.
+Please contact Revcontent for more information about optional parameters for evergreen tags.
diff --git a/ads/vendors/runative.js b/ads/vendors/runative.js
index d42d182581de..4828d35f7b3a 100644
--- a/ads/vendors/runative.js
+++ b/ads/vendors/runative.js
@@ -1,4 +1,5 @@
import {loadScript, validateData} from '#3p/3p';
+
import {parseJson} from '#core/types/object/json';
const requiredParams = ['spot'];
diff --git a/ads/vendors/sas.js b/ads/vendors/sas.js
index a2b0aa992f67..98b71432f73a 100644
--- a/ads/vendors/sas.js
+++ b/ads/vendors/sas.js
@@ -1,6 +1,8 @@
+import {validateData, writeScript} from '#3p/3p';
+
import {getMultiSizeDimensions} from '#ads/google/utils';
+
import {parseJson} from '#core/types/object/json';
-import {validateData, writeScript} from '#3p/3p';
/**
* @param {!Window} global
diff --git a/ads/vendors/seedtag.js b/ads/vendors/seedtag.js
index 6e988e9bf1fe..d7954767520f 100644
--- a/ads/vendors/seedtag.js
+++ b/ads/vendors/seedtag.js
@@ -24,7 +24,7 @@ export function seedtag(global, data) {
/*eslint "local/camelcase": 0*/
global._seedtag_amp = {
allowed_data: ['adunitId', 'placement', 'publisherId', 'forceCreative'],
- mandatory_data: ['adunitId', 'placement', 'publisherId'],
+ mandatory_data: ['adunitId'],
data,
};
@@ -34,5 +34,5 @@ export function seedtag(global, data) {
global._seedtag_amp.allowed_data
);
- loadScript(global, 'https://config.seedtag.com/omid/bridge/bridge.js');
+ loadScript(global, `https://t.seedtag.com/a/${data.adunitId}.js`);
}
diff --git a/ads/vendors/seedtag.md b/ads/vendors/seedtag.md
index 9308a30b27a7..721c1ea01958 100644
--- a/ads/vendors/seedtag.md
+++ b/ads/vendors/seedtag.md
@@ -19,15 +19,11 @@ limitations under the License.
## Example
```html
-
```
@@ -39,41 +35,9 @@ For configuration semantics, please contact [Seedtag](https://www.seedtag.com/co
Supported parameters:
- `data-adunit-id` mandatory
-- `data-publisher-id` mandatory
-- `data-placement` mandatory
-## Testing
-
-You can force a creative for test using this parameters
-
-- `data-force-creative` optional
-
-Currently you can test those format :
-| Format | value |
-| ------ | ----- |
-| display 300x250 | https://creatives.seedtag.com/vast/ssp-responses/display-OM300x250.json |
-| display 300x50 | https://creatives.seedtag.com/vast/ssp-responses/display-OM300x50.json |
-| display 320x480 | https://creatives.seedtag.com/vast/ssp-responses/display-OM320x480.json |
-| display 970x90 | https://creatives.seedtag.com/vast/ssp-responses/display-OM970x90.json |
-| display 970x250 | https://creatives.seedtag.com/vast/ssp-responses/display-OM970x250.json |
-| video outstream | https://creatives.seedtag.com/vast/ssp-responses/video-cov.json |
-
-this way :
-
-```html
-
-
-```
## User Consent Integration
-
When [user consent](https://github.com/ampproject/amphtml/blob/main/extensions/amp-consent/amp-consent.md#blocking-behaviors) is required, Seedtag ad approaches user consent in the following ways:
- `CONSENT_POLICY_STATE.SUFFICIENT`: Serve a personalized ad to the user.
diff --git a/ads/vendors/sekindo.js b/ads/vendors/sekindo.js
index 3d950ca8e803..4b453e50afe9 100644
--- a/ads/vendors/sekindo.js
+++ b/ads/vendors/sekindo.js
@@ -1,6 +1,7 @@
-import {hasOwn} from '#core/types/object';
import {loadScript, validateData} from '#3p/3p';
+import {hasOwn} from '#core/types/object';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/sevio.js b/ads/vendors/sevio.js
new file mode 100644
index 000000000000..fb8bef0b6d03
--- /dev/null
+++ b/ads/vendors/sevio.js
@@ -0,0 +1,33 @@
+import {loadScript, validateData} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function sevio(global, data) {
+ validateData(data, ['zone']);
+
+ const container = document.getElementById('c');
+ const adDivId = 'sevioads-amp-' + encodeURIComponent(data.zone);
+ const adDiv = document.createElement('div');
+ adDiv.setAttribute('id', adDivId);
+ container.appendChild(adDiv);
+
+ loadScript(
+ global,
+ 'https://cdn.adx.ws/scripts/amp.js',
+ () => {
+ window.sevioAmpLoader = window.sevioAmpLoader || [];
+ window.sevioAmpLoader.push({
+ zoneId: encodeURIComponent(data.zone),
+ placeholderId: encodeURIComponent(adDivId),
+ wu: window.location.href,
+ width: data.width,
+ height: data.height,
+ });
+ },
+ () => {
+ global.context.noContentAvailable();
+ }
+ );
+}
diff --git a/ads/vendors/sevio.md b/ads/vendors/sevio.md
new file mode 100644
index 000000000000..d49a0a3df890
--- /dev/null
+++ b/ads/vendors/sevio.md
@@ -0,0 +1,19 @@
+# Sevio
+
+## Example of Sevio's model implementation
+
+### Basic
+
+```html
+
+
+```
+
+### Required parameters
+
+- `data-zone`: Zone ID
diff --git a/ads/vendors/skoiy.js b/ads/vendors/skoiy.js
new file mode 100644
index 000000000000..10c248586a4b
--- /dev/null
+++ b/ads/vendors/skoiy.js
@@ -0,0 +1,17 @@
+import {validateData, writeScript} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function skoiy(global, data) {
+ // TODO: check mandatory fields
+ validateData(data, ['token', 'format', 'id'], ['query']);
+
+ const {format, id, query = '', token} = data;
+
+ const options = query ? '&' + query : '';
+
+ const url = `https://svas.skoiy.xyz/${format}/${token}/${id}?amp${options}`;
+ writeScript(global, url);
+}
diff --git a/ads/vendors/skoiy.md b/ads/vendors/skoiy.md
new file mode 100644
index 000000000000..b98a6afd7296
--- /dev/null
+++ b/ads/vendors/skoiy.md
@@ -0,0 +1,26 @@
+
+
+Skoiy is an integrated suite of platforms that simplify and centralize the management, distribution, and monetization of digital media across a suite of independent platforms that fit the needs of each project.
+
+## Example
+
+```html
+
+
+```
+
+### Required parameters
+
+- `data-token`
+- `data-format`
+- `data-id`
+
+### Optional parameters
+
+- `data-query`
diff --git a/ads/vendors/smartadserver.js b/ads/vendors/smartadserver.js
deleted file mode 100644
index fc27c18b698f..000000000000
--- a/ads/vendors/smartadserver.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import {loadScript} from '#3p/3p';
-
-/**
- * @param {!Window} global
- * @param {!Object} data
- */
-export function smartadserver(global, data) {
- // For more flexibility, we construct the call to SmartAdServer's URL in the
- // external loader, based on the data received from the AMP tag.
- loadScript(global, 'https://ec-ns.sascdn.com/diff/js/amp.v0.js', () => {
- global.sas.callAmpAd(data);
- });
-}
diff --git a/ads/vendors/smartclip.md b/ads/vendors/smartclip.md
index 4f63a6fffa59..e6409f0f44ef 100644
--- a/ads/vendors/smartclip.md
+++ b/ads/vendors/smartclip.md
@@ -9,6 +9,7 @@
type="smartclip"
data-plc="68005"
data-sz="400x320"
+ data-block-on-consent="_till_responded"
>
```
diff --git a/ads/vendors/sona.js b/ads/vendors/sona.js
index c5d00220d628..e5caecf11407 100644
--- a/ads/vendors/sona.js
+++ b/ads/vendors/sona.js
@@ -1,4 +1,5 @@
import {loadScript, validateData} from '#3p/3p';
+
import {parseJson} from '#core/types/object/json';
/**
diff --git a/ads/vendors/spotx.js b/ads/vendors/spotx.js
index bdb5d6a8e8b6..dadfc54122ff 100644
--- a/ads/vendors/spotx.js
+++ b/ads/vendors/spotx.js
@@ -1,6 +1,7 @@
-import {hasOwn} from '#core/types/object';
import {validateData} from '#3p/3p';
+import {hasOwn} from '#core/types/object';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/springAds.js b/ads/vendors/springAds.js
index efd0115a3d35..206a954601d3 100644
--- a/ads/vendors/springAds.js
+++ b/ads/vendors/springAds.js
@@ -1,4 +1,5 @@
import {computeInMasterFrame, loadScript} from '#3p/3p';
+
import {parseJson} from '#core/types/object/json';
/**
diff --git a/ads/vendors/ssp.js b/ads/vendors/ssp.js
index f5e110ebb443..b92d27b6f33e 100644
--- a/ads/vendors/ssp.js
+++ b/ads/vendors/ssp.js
@@ -15,8 +15,9 @@
*/
import {computeInMasterFrame, loadScript, validateData} from '#3p/3p';
-import {parseJson} from '#core/types/object/json';
+
import {setStyle, setStyles} from '#core/dom/style';
+import {parseJson} from '#core/types/object/json';
/*
* How to develop:
@@ -27,7 +28,7 @@ import {setStyle, setStyles} from '#core/dom/style';
* @param {!Array.} array
* @param {!Function} iteratee
*
- * @return {Object}
+ * @return {object}
*/
export function keyBy(array, iteratee) {
return array.reduce(
@@ -52,7 +53,7 @@ export function runWhenFetchingSettled(fetchingSSPs, cb) {
/**
* @param {!Element} element
* @param {boolean} center
- * @param {Object} dimensions
+ * @param {object} dimensions
*/
export function handlePosition(element, center, dimensions) {
const styles = {
@@ -199,7 +200,6 @@ export function ssp(global, data) {
// todo on SSP side (option to register error callback)
// requestErrorCallback: () => {},
AMPcallback: (ads) => {
- /** @suppress {checkTypes} */
const adById = keyBy(ads, (item) => item.id);
const ad = adById[position['id']];
diff --git a/ads/vendors/sunmedia.js b/ads/vendors/sunmedia.js
index 62213af8b07e..3757837cf5c2 100644
--- a/ads/vendors/sunmedia.js
+++ b/ads/vendors/sunmedia.js
@@ -7,7 +7,7 @@ import {loadScript, validateData} from '#3p/3p';
export function sunmedia(global, data) {
/*eslint "local/camelcase": 0*/
global._sunmedia_amp = {
- allowed_data: ['cskp', 'crst', 'cdb', 'cid'],
+ allowed_data: ['cid'],
mandatory_data: ['cid'],
data,
};
@@ -20,6 +20,6 @@ export function sunmedia(global, data) {
loadScript(
global,
- 'https://vod.addevweb.com/sunmedia/amp/ads/SMIntextAMP.js'
+ `https://static.sunmedia.tv/integrations/${data.cid}/${data.cid}.js`
);
}
diff --git a/ads/vendors/sunmedia.md b/ads/vendors/sunmedia.md
index cfff4ed59b01..7df310ac5026 100644
--- a/ads/vendors/sunmedia.md
+++ b/ads/vendors/sunmedia.md
@@ -4,15 +4,13 @@
```html
-
+ data-cid="5898aec7-32f5-4e3b-bd67-41f68b58b412"
+ data-block-on-consent="_till_responded"
+>
```
## Configuration
@@ -21,9 +19,4 @@ For further information, please contact [SunMedia](http://sunmedia.tv/#contact).
### Required parameters
-- `data-cid`: Client ID provided by SunMedia
-
-### Optional parameters
-
-- `data-cskp`: Indicates skip button enabled
-- `data-crst`: Indicates restart option enabled
+- `data-cid`: Integration ID provided by SunMedia
diff --git a/ads/vendors/teads.js b/ads/vendors/teads.js
index 8002eecd3cf2..358748efb646 100644
--- a/ads/vendors/teads.js
+++ b/ads/vendors/teads.js
@@ -5,34 +5,15 @@ import {loadScript, validateData} from '#3p/3p';
* @param {!Object} data
*/
export function teads(global, data) {
+ validateData(data, ['pid']);
+
/*eslint "local/camelcase": 0*/
global._teads_amp = {
- allowed_data: ['pid', 'tag'],
- mandatory_data: ['pid'],
- mandatory_tag_data: ['tta', 'ttp'],
data,
};
- validateData(
- data,
- global._teads_amp.mandatory_data,
- global._teads_amp.allowed_data
+ loadScript(
+ global,
+ 'https://a.teads.tv/page/' + encodeURIComponent(data.pid) + '/tag'
);
-
- if (data.tag) {
- validateData(data.tag, global._teads_amp.mandatory_tag_data);
- global._tta = data.tag.tta;
- global._ttp = data.tag.ttp;
-
- loadScript(
- global,
- 'https://s8t.teads.tv/media/format/' +
- encodeURI(data.tag.js || 'v3/teads-format.min.js')
- );
- } else {
- loadScript(
- global,
- 'https://a.teads.tv/page/' + encodeURIComponent(data.pid) + '/tag'
- );
- }
}
diff --git a/ads/vendors/torimochi.js b/ads/vendors/torimochi.js
index e57f4a2a353c..837b51e42ff0 100644
--- a/ads/vendors/torimochi.js
+++ b/ads/vendors/torimochi.js
@@ -1,6 +1,7 @@
-import {parseJson} from '#core/types/object/json';
import {validateData, writeScript} from '#3p/3p';
+import {parseJson} from '#core/types/object/json';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/trafficstars.js b/ads/vendors/trafficstars.js
index 1baf6886e2c3..b904e6092c17 100644
--- a/ads/vendors/trafficstars.js
+++ b/ads/vendors/trafficstars.js
@@ -1,14 +1,25 @@
import {loadScript, validateData} from '#3p/3p';
+
import {parseJson} from '#core/types/object/json';
const requiredParams = ['spot'];
-const jsonParams = ['nativeSettings', 'wrapperStyles', 'iFrameStyles'];
+const jsonParams = [
+ 'nativeSettings',
+ 'wrapperStyles',
+ 'iFrameStyles',
+ 'queriesParams',
+];
const params = [
'uploadLink',
- 'queriesParams',
'onLoadResponseHook',
'onSpotRenderedHook',
'onLoadErrorHook',
+ 'subid',
+ 'subid_1',
+ 'subid_2',
+ 'subid_3',
+ 'subid_4',
+ 'subid_5',
];
const optionalParams = params.concat(jsonParams);
const adContainerId = 'trafficstars_id';
diff --git a/ads/vendors/trafficstars.md b/ads/vendors/trafficstars.md
index bab8bdcbc8dd..6880a2b52bfc 100644
--- a/ads/vendors/trafficstars.md
+++ b/ads/vendors/trafficstars.md
@@ -18,6 +18,12 @@ Serves ads from the [TrafficStars](https://www.trafficstars.com/).
data-on-load-response-hook="{(data: TMasterSpotData) => void}"
data-on-spot-rendered-hook="{(element: HTMLElement) => void}"
data-on-load-error-hook="{() => void}"
+ data-subid="{string}"
+ data-subid_1="{string}"
+ data-subid_2="{string}"
+ data-subid_3="{string}"
+ data-subid_4="{string}"
+ data-subid_5="{string}"
>
```
@@ -40,3 +46,9 @@ For details on the configuration semantics, please contact the ad network or ref
- `onLoadResponseHook` - hook after ad request success
- `onSpotRenderedHook` - hook after ad render success
- `onLoadErrorHook` - hook after ad request error
+- `subid` - attribute of data
+- `subid_1` - attribute of data
+- `subid_2` - attribute of data
+- `subid_3` - attribute of data
+- `subid_4` - attribute of data
+- `subid_5` - attribute of data
diff --git a/ads/vendors/uas.js b/ads/vendors/uas.js
index 933ef6f67f2b..9a90aa192794 100644
--- a/ads/vendors/uas.js
+++ b/ads/vendors/uas.js
@@ -14,9 +14,10 @@
* limitations under the License.
*/
-import {hasOwn} from '#core/types/object';
import {loadScript, validateData} from '#3p/3p';
+
import {setStyles} from '#core/dom/style';
+import {hasOwn} from '#core/types/object';
/**
* @param {!Object} theObject
diff --git a/ads/vendors/uzou.js b/ads/vendors/uzou.js
index e7da69f3f6d5..eda5fc0d7e75 100644
--- a/ads/vendors/uzou.js
+++ b/ads/vendors/uzou.js
@@ -1,4 +1,5 @@
import {loadScript, validateData} from '#3p/3p';
+
import {parseJson} from '#core/types/object/json';
/**
diff --git a/ads/vendors/videonow.js b/ads/vendors/videonow.js
index 74c0f770c04e..35ed7b578bb0 100644
--- a/ads/vendors/videonow.js
+++ b/ads/vendors/videonow.js
@@ -1,4 +1,5 @@
import {loadScript, validateData} from '#3p/3p';
+
import {parseJson} from '#core/types/object/json';
import {tryDecodeUriComponent} from '#core/types/string/url';
diff --git a/ads/vendors/viralize.js b/ads/vendors/viralize.js
index e39abc1621d2..1058c2117b82 100644
--- a/ads/vendors/viralize.js
+++ b/ads/vendors/viralize.js
@@ -1,7 +1,9 @@
-import {addParamsToUrl} from '../../src/url';
import {loadScript, validateData} from '#3p/3p';
+
import {parseJson} from '#core/types/object/json';
+import {addParamsToUrl} from '../../src/url';
+
/**
* @param {!Window} global
* @param {!Object} data
diff --git a/ads/vendors/vox.js b/ads/vendors/vox.js
new file mode 100644
index 000000000000..1096a2fdbd82
--- /dev/null
+++ b/ads/vendors/vox.js
@@ -0,0 +1,13 @@
+import {loadScript, validateData} from '#3p/3p';
+
+/**
+ * @param {!Window} global
+ * @param {!Object} data
+ */
+export function vox(global, data) {
+ const scriptUrl = 'https://st.hbrd.io/amp-helper.js?t=' + Date.now();
+ validateData(data, ['placementid']);
+ loadScript(global, scriptUrl);
+ global._voxParams = data['voxParams'];
+ global._voxPlacementId = data['placementid'];
+}
diff --git a/ads/vendors/vox.md b/ads/vendors/vox.md
new file mode 100644
index 000000000000..fced18ef782f
--- /dev/null
+++ b/ads/vendors/vox.md
@@ -0,0 +1,15 @@
+# VOX
+
+## Example
+
+```html
+
+
+```
+
+### Required parameters
+
+- `data-placementid`
diff --git a/ads/vendors/yahoo.js b/ads/vendors/yahoo.js
deleted file mode 100644
index 3ef287d28235..000000000000
--- a/ads/vendors/yahoo.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import {validateData, writeScript} from '#3p/3p';
-
-/**
- * @param {!Window} global
- * @param {!Object} data
- */
-export function yahoo(global, data) {
- if (data.sid) {
- validateData(data, ['sid', 'site', 'sa']);
- global.yadData = data;
- writeScript(global, 'https://s.yimg.com/aaq/ampad/display.js');
- } else if (data.config) {
- validateData(data, ['config']);
- global.jacData = data;
- writeScript(global, 'https://jac.yahoosandbox.com/amp/jac.js');
- }
-}
diff --git a/ads/vendors/yahoo.md b/ads/vendors/yahoo.md
deleted file mode 100644
index 97eea2222b91..000000000000
--- a/ads/vendors/yahoo.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# yahoo
-
-## Display ad
-
-```html
-
-
-```
-
-```html
-
-
-```
-
-### Configuration
-
-For configuration details, please contact https://advertising.yahoo.com/contact.
-
-Supported parameters:
-
-- `height`
-- `width`
-- `data-sid`
-- `data-site`
-- `data-sa`
-- `data-config`
-- `data-stylesheet`
-
-### Required Parameters:
-
-`data-config` - Config for ad call JAC
-`data-sa` - Config for ad call DARLA
-
-### Optional parameters:
-
-`data-stylesheet` - stylesheet to use inside iframe
-
-### Configuration Details
-
-For JAC ads : Required
-"adServer":{"1AS":{region":"US"}},
-"positions":{"FB":{alias:"1111111"},"sizes":["300x250"]}},
-"site":{name:{"autoblogAMP"}},"spaceId":"111111"}
-
-Alias, Sizes, SiteName and spaceId should be replaced by correct values.
-NOTE: SiteName should be site name + "AMP"
-
-Optional
-"params":{"name":"value"}
diff --git a/ads/vendors/yektanet.js b/ads/vendors/yektanet.js
index ca543a6d6522..10010bd27de7 100644
--- a/ads/vendors/yektanet.js
+++ b/ads/vendors/yektanet.js
@@ -26,7 +26,7 @@ export function yektanet(global, data) {
].join('0');
const scriptSrc = isBanner
- ? 'https://cdn.yektanet.com/template/bnrs/yn_bnr.min.js'
+ ? 'https://cdn.yektanet.com/template/bnrs/yn_bnr.amp.js'
: `https://cdn.yektanet.com/js/${encodeURIComponent(
data['publisherName']
)}/${encodeURIComponent(data['scriptName'])}`;
diff --git a/ads/vendors/yieldbot.js b/ads/vendors/yieldbot.js
index f47938bfd0e6..1689e1a04d90 100644
--- a/ads/vendors/yieldbot.js
+++ b/ads/vendors/yieldbot.js
@@ -1,6 +1,9 @@
-import {getMultiSizeDimensions} from '#ads/google/utils';
import {loadScript, validateData} from '#3p/3p';
+
+import {getMultiSizeDimensions} from '#ads/google/utils';
+
import {rethrowAsync} from '#core/error';
+
import {user} from '#utils/log';
/**
diff --git a/amp.js b/amp.js
index 76d16c21900c..c1549f481b99 100755
--- a/amp.js
+++ b/amp.js
@@ -36,9 +36,7 @@ createTask('check-renovate-config', 'checkRenovateConfig');
createTask('check-sourcemaps', 'checkSourcemaps');
createTask('check-types', 'checkTypes');
createTask('check-video-interface-list', 'checkVideoInterfaceList');
-createTask('cherry-pick', 'cherryPick');
createTask('clean');
-createTask('codecov-upload', 'codecovUpload');
createTask('compile-jison', 'compileJison');
createTask('css');
createTask('default', 'defaultTask', 'default-task');
@@ -51,8 +49,6 @@ createTask('integration');
createTask('lint');
createTask('make-extension', 'makeExtension');
createTask('markdown-toc', 'markdownToc');
-createTask('performance');
-createTask('performance-urls', 'performanceUrls');
createTask('pr-check', 'prCheck');
createTask('prepend-global', 'prependGlobal');
createTask('presubmit', 'presubmit');
@@ -62,7 +58,6 @@ createTask('serve');
createTask('server-tests', 'serverTests');
createTask('storybook');
createTask('sweep-experiments', 'sweepExperiments');
-createTask('test-report-upload', 'testReportUpload');
createTask('unit');
createTask('validate-html-fixtures', 'validateHtmlFixtures');
createTask('validator');
diff --git a/babel.config.js b/babel.config.js
index 0f9e69f3f0a2..404d0bc9c7db 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -10,6 +10,7 @@
'use strict';
const {cyan, yellow} = require('kleur/colors');
+
const {log} = require('./build-system/common/logging');
/**
@@ -18,15 +19,18 @@ const {log} = require('./build-system/common/logging');
*/
const babelTransforms = new Map([
['babel-jest', 'getEmptyConfig'],
- ['post-closure', 'getPostClosureConfig'],
- ['pre-closure', 'getPreClosureConfig'],
+ ['nomodule-loader', 'getNoModuleLoaderConfig'],
['test', 'getTestConfig'],
['unminified', 'getUnminifiedConfig'],
+ ['unminified-ssr-css', 'getUnminifiedSsrCssConfig'],
['minified', 'getMinifiedConfig'],
+ ['minified-ssr-css', 'getMinifiedSsrCssConfig'],
['jss', 'getJssConfig'],
['@babel/eslint-parser', 'getEslintConfig'],
['is-enum-value', 'getEmptyConfig'],
['import-resolver', 'getEmptyConfig'],
+ ['react-minified', 'getReactMinifiedConfig'],
+ ['react-unminified', 'getReactUnminifiedConfig'],
]);
/**
diff --git a/build-system/babel-config/helpers.js b/build-system/babel-config/helpers.js
index 4d1a6d6a768e..8ff8f67a052a 100644
--- a/build-system/babel-config/helpers.js
+++ b/build-system/babel-config/helpers.js
@@ -27,9 +27,10 @@ function getExperimentConstant() {
/**
* Computes options for minify-replace and returns the plugin object.
*
+ * @param {!Object=} opt_overrides overrides for BUILD_CONSTANTS
* @return {Array}
*/
-function getReplacePlugin() {
+function getReplacePlugin(opt_overrides) {
/**
* @param {string} identifierName the identifier name to replace
* @param {boolean|string} value the value to replace with
@@ -43,7 +44,8 @@ function getReplacePlugin() {
return {identifierName, replacement};
}
- const replacements = Object.entries(BUILD_CONSTANTS).map(([ident, val]) =>
+ const constants = Object.assign({}, BUILD_CONSTANTS, opt_overrides);
+ const replacements = Object.entries(constants).map(([ident, val]) =>
createReplacement(ident, val)
);
diff --git a/build-system/babel-config/import-resolver.js b/build-system/babel-config/import-resolver.js
index 9ccd99bf4480..cf7d731cacee 100644
--- a/build-system/babel-config/import-resolver.js
+++ b/build-system/babel-config/import-resolver.js
@@ -2,8 +2,9 @@
const fs = require('fs');
const path = require('path');
+const moduleResolver = require('babel-plugin-module-resolver');
-const TSCONFIG_PATH = path.join(__dirname, '..', '..', 'tsconfig.json');
+const TSCONFIG_PATH = path.join(__dirname, '..', '..', 'tsconfig.base.json');
let tsConfigPaths = null;
/**
@@ -20,7 +21,7 @@ let tsConfigPaths = null;
* '#foo': './src/foo',
* '#bar': './bar',
* }
- * @return {!Object}
+ * @return {!{[key: string]: string}}
*/
function readJsconfigPaths() {
if (!tsConfigPaths) {
@@ -40,14 +41,35 @@ function readJsconfigPaths() {
return tsConfigPaths;
}
+/**
+ * Remap external modules that rely on React if building for Preact.
+ * @param {'preact' | 'react'} buildFor
+ * @return {object}
+ */
+function moduleAliases(buildFor) {
+ if (buildFor === 'react') {
+ return {};
+ }
+ return {
+ 'react': './src/react',
+ 'react-dom': './src/react/dom',
+ };
+}
+
/**
* Import map configuration.
- * @return {!Object}
+ * @param {'preact' | 'react' | null} buildFor determines whether to include preact or react aliases or neither. By default, uses preact aliases (in addition to jsconfig paths).
+ * @return {object}
*/
-function getImportResolver() {
+function getImportResolver(buildFor = 'preact') {
return {
root: ['.'],
- alias: readJsconfigPaths(),
+ alias: {
+ ...readJsconfigPaths(),
+ ...(buildFor ? moduleAliases(buildFor) : {}),
+ },
+ extensions: ['.js', '.jsx', '.ts', '.tsx'],
+ stripExtensions: [],
babelOptions: {
caller: {
name: 'import-resolver',
@@ -59,27 +81,47 @@ function getImportResolver() {
/**
* Produces an alias map with paths relative to the provided root.
* @param {string} rootDir
- * @return {!Object}
+ * @param {'preact' | 'react'} buildFor
+ * @return {!{[key: string]: string}}
*/
-function getRelativeAliasMap(rootDir) {
+function getRelativeAliasMap(rootDir, buildFor = 'preact') {
return Object.fromEntries(
- Object.entries(getImportResolver().alias).map(([alias, destPath]) => [
- alias,
- path.join(rootDir, destPath),
- ])
+ Object.entries(getImportResolver(buildFor).alias).map(
+ ([alias, destPath]) => [alias, path.join(rootDir, destPath)]
+ )
);
}
/**
* Import resolver Babel plugin configuration.
+ * @param {'preact' | 'react'} buildFor
* @return {!Array}
*/
-function getImportResolverPlugin() {
- return ['module-resolver', getImportResolver()];
+function getImportResolverPlugin(buildFor = 'preact') {
+ return ['module-resolver', getImportResolver(buildFor)];
+}
+
+/**
+ * Resolves a filepath using the same logic as the rest of our build pipeline (babel module-resolver).
+ * The return value is a relative path from the amphtml folder.
+ *
+ * @param {string} filepath
+ * @param {'preact' | 'react' | null} buildFor
+ * @return {string}
+ */
+function resolvePath(filepath, buildFor = 'preact') {
+ // 2nd arg is a file from which to make a relative path.
+ // The actual file doesn't need to exist. In this case it is process.cwd()/anything
+ return moduleResolver.resolvePath(
+ filepath,
+ 'anything',
+ getImportResolver(buildFor)
+ );
}
module.exports = {
getImportResolver,
getImportResolverPlugin,
getRelativeAliasMap,
+ resolvePath,
};
diff --git a/build-system/babel-config/jss-config.js b/build-system/babel-config/jss-config.js
deleted file mode 100644
index 7d996ec0297c..000000000000
--- a/build-system/babel-config/jss-config.js
+++ /dev/null
@@ -1,25 +0,0 @@
-'use strict';
-
-// Babel cannot directly return a valid css file.
-// Therefore we provide and export this options object to allow extraction
-// of the created css file via side effect from running babel.transfrorm().
-const jssOptions = {css: 'REPLACED_BY_BABEL'};
-
-/**
- * Gets the config for transforming a JSS file to CSS
- * Only used to generate CSS files for Bento components.
- *
- * @return {!Object}
- */
-function getJssConfig() {
- return {
- plugins: [
- ['./build-system/babel-plugins/babel-plugin-transform-jss', jssOptions],
- ],
- };
-}
-
-module.exports = {
- getJssConfig,
- jssOptions,
-};
diff --git a/build-system/babel-config/minified-config.js b/build-system/babel-config/minified-config.js
index e75e6016ad22..e72f361a55c7 100644
--- a/build-system/babel-config/minified-config.js
+++ b/build-system/babel-config/minified-config.js
@@ -8,9 +8,12 @@ const {getReplacePlugin} = require('./helpers');
/**
* Gets the config for minified babel transforms run, used by 3p vendors.
*
+ * @param {'preact' | 'react'} buildFor
+ * @param {!Object=} opt_replacePluginOverrides
* @return {!Object}
*/
-function getMinifiedConfig() {
+function getMinifiedConfig(buildFor = 'preact', opt_replacePluginOverrides) {
+ const isEsmBuild = argv.esm || argv.sxg;
const isProd = argv._.includes('dist') && !argv.fortesting;
const reactJsxPlugin = [
@@ -21,11 +24,14 @@ function getMinifiedConfig() {
useSpread: true,
},
];
- const replacePlugin = getReplacePlugin();
+ const replacePlugin = getReplacePlugin(opt_replacePluginOverrides);
const plugins = [
'optimize-objstr',
- getImportResolverPlugin(),
+ './build-system/babel-plugins/babel-plugin-deep-pure',
+ './build-system/babel-plugins/babel-plugin-mangle-object-values',
+ './build-system/babel-plugins/babel-plugin-jsx-style-object',
+ getImportResolverPlugin(buildFor),
argv.coverage ? 'babel-plugin-istanbul' : null,
'./build-system/babel-plugins/babel-plugin-imported-helpers',
'./build-system/babel-plugins/babel-plugin-transform-inline-isenumvalue',
@@ -34,7 +40,7 @@ function getMinifiedConfig() {
'./build-system/babel-plugins/babel-plugin-transform-rename-privates',
'./build-system/babel-plugins/babel-plugin-dom-jsx-svg-namespace',
reactJsxPlugin,
- (argv.esm || argv.sxg) &&
+ isEsmBuild &&
'./build-system/babel-plugins/babel-plugin-transform-dev-methods',
// TODO(alanorozco): Remove `replaceCallArguments` once serving infra is up.
[
@@ -45,6 +51,7 @@ function getMinifiedConfig() {
'./build-system/babel-plugins/babel-plugin-transform-amp-extension-call',
'./build-system/babel-plugins/babel-plugin-transform-html-template',
'./build-system/babel-plugins/babel-plugin-transform-jss',
+ './build-system/babel-plugins/babel-plugin-amp-story-supported-languages',
replacePlugin,
'./build-system/babel-plugins/babel-plugin-transform-amp-asserts',
// TODO(erwinm, #28698): fix this in fixit week
@@ -56,27 +63,36 @@ function getMinifiedConfig() {
'./build-system/babel-plugins/babel-plugin-amp-mode-transformer',
BUILD_CONSTANTS,
],
- ['@babel/plugin-transform-for-of', {loose: true, allowArrayLike: true}],
+ !isEsmBuild
+ ? ['@babel/plugin-transform-for-of', {loose: true, allowArrayLike: true}]
+ : null,
].filter(Boolean);
const presetEnv = [
'@babel/preset-env',
{
bugfixes: true,
modules: false,
- targets: argv.esm || argv.sxg ? {esmodules: true} : {ie: 11, chrome: 41},
+ targets: isEsmBuild ? {esmodules: true} : {ie: 11, chrome: 41},
+ shippedProposals: true,
+ exclude: isEsmBuild ? ['@babel/plugin-transform-for-of'] : [],
},
];
+ const presetTypescript = [
+ '@babel/preset-typescript',
+ {jsxPragma: 'Preact', jsxPragmaFrag: 'Preact.Fragment'},
+ ];
return {
compact: false,
plugins,
- sourceMaps: 'inline',
- presets: [presetEnv],
+ sourceMaps: true,
+ presets: [presetTypescript, presetEnv],
retainLines: true,
assumptions: {
constantSuper: true,
noClassCalls: true,
setClassMethods: true,
+ setPublicClassFields: true,
},
};
}
diff --git a/build-system/babel-config/minified-ssr-css-config.js b/build-system/babel-config/minified-ssr-css-config.js
new file mode 100644
index 000000000000..7874daa5c58e
--- /dev/null
+++ b/build-system/babel-config/minified-ssr-css-config.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const {getMinifiedConfig} = require('./minified-config');
+
+/**
+ * Gets the config for minified babel transforms run, used by 3p vendors with
+ * IS_SSR set to true.
+ *
+ * @return {!Object}
+ */
+function getMinifiedSsrCssConfig() {
+ // We use the default `buildFor` which is preact.
+ return getMinifiedConfig('preact', {IS_SSR_CSS: true});
+}
+
+module.exports = {
+ getMinifiedSsrCssConfig,
+};
diff --git a/build-system/babel-config/nomodule-loader-config.js b/build-system/babel-config/nomodule-loader-config.js
new file mode 100644
index 000000000000..0c38ee3579f7
--- /dev/null
+++ b/build-system/babel-config/nomodule-loader-config.js
@@ -0,0 +1,10 @@
+/** @return {{[string: string]: any}} */
+function getNoModuleLoaderConfig() {
+ return {
+ plugins: ['./build-system/babel-plugins/babel-plugin-nomodule-loader'],
+ };
+}
+
+module.exports = {
+ getNoModuleLoaderConfig,
+};
diff --git a/build-system/babel-config/post-closure-config.js b/build-system/babel-config/post-closure-config.js
deleted file mode 100644
index 1b06061f828a..000000000000
--- a/build-system/babel-config/post-closure-config.js
+++ /dev/null
@@ -1,35 +0,0 @@
-'use strict';
-
-const argv = require('minimist')(process.argv.slice(2));
-
-/**
- * Gets the config for post-closure babel transforms run during `amp dist`.
- *
- * @return {!Object}
- */
-function getPostClosureConfig() {
- const postClosurePlugins = [
- argv.esm || argv.sxg
- ? './build-system/babel-plugins/babel-plugin-const-transformer'
- : null,
- argv.esm || argv.sxg
- ? './build-system/babel-plugins/babel-plugin-transform-remove-directives'
- : null,
- argv.esm || argv.sxg
- ? './build-system/babel-plugins/babel-plugin-transform-stringish-literals'
- : null,
- './build-system/babel-plugins/babel-plugin-transform-minified-comments',
- ].filter(Boolean);
-
- return {
- compact: false,
- inputSourceMap: false,
- plugins: postClosurePlugins,
- retainLines: false,
- sourceMaps: true,
- };
-}
-
-module.exports = {
- getPostClosureConfig,
-};
diff --git a/build-system/babel-config/pre-closure-config.js b/build-system/babel-config/pre-closure-config.js
deleted file mode 100644
index f37d2c46df32..000000000000
--- a/build-system/babel-config/pre-closure-config.js
+++ /dev/null
@@ -1,84 +0,0 @@
-'use strict';
-
-const argv = require('minimist')(process.argv.slice(2));
-const {BUILD_CONSTANTS} = require('../compile/build-constants');
-const {getImportResolverPlugin} = require('./import-resolver');
-const {getReplacePlugin} = require('./helpers');
-
-/**
- * Gets the config for pre-closure babel transforms run during `amp dist`.
- *
- * @return {!Object}
- */
-function getPreClosureConfig() {
- const isCheckTypes = argv._.includes('check-types');
- const isProd = argv._.includes('dist') && !argv.fortesting;
-
- const reactJsxPlugin = [
- '@babel/plugin-transform-react-jsx',
- {
- pragma: 'Preact.createElement',
- pragmaFrag: 'Preact.Fragment',
- useSpread: true,
- },
- ];
- const replacePlugin = getReplacePlugin();
- const preClosurePlugins = [
- 'optimize-objstr',
- getImportResolverPlugin(),
- argv.coverage ? 'babel-plugin-istanbul' : null,
- './build-system/babel-plugins/babel-plugin-imported-helpers',
- './build-system/babel-plugins/babel-plugin-transform-inline-isenumvalue',
- './build-system/babel-plugins/babel-plugin-transform-fix-leading-comments',
- './build-system/babel-plugins/babel-plugin-transform-promise-resolve',
- './build-system/babel-plugins/babel-plugin-dom-jsx-svg-namespace',
- reactJsxPlugin,
- argv.esm || argv.sxg
- ? './build-system/babel-plugins/babel-plugin-transform-dev-methods'
- : null,
- // TODO(alanorozco): Remove `replaceCallArguments` once serving infra is up.
- [
- './build-system/babel-plugins/babel-plugin-transform-log-methods',
- {replaceCallArguments: false},
- ],
- './build-system/babel-plugins/babel-plugin-transform-parenthesize-expression',
- './build-system/babel-plugins/babel-plugin-transform-json-import',
- './build-system/babel-plugins/babel-plugin-transform-amp-extension-call',
- './build-system/babel-plugins/babel-plugin-transform-html-template',
- './build-system/babel-plugins/babel-plugin-transform-jss',
- './build-system/babel-plugins/babel-plugin-transform-default-assignment',
- replacePlugin,
- './build-system/babel-plugins/babel-plugin-transform-amp-asserts',
- // TODO(erwinm, #28698): fix this in fixit week
- // argv.esm
- //? './build-system/babel-plugins/babel-plugin-transform-function-declarations'
- //: null,
- !isCheckTypes &&
- './build-system/babel-plugins/babel-plugin-transform-json-configuration',
- isProd && [
- './build-system/babel-plugins/babel-plugin-amp-mode-transformer',
- BUILD_CONSTANTS,
- ],
- ].filter(Boolean);
- const presetEnv = [
- '@babel/preset-env',
- {
- bugfixes: true,
- modules: false,
- targets: {esmodules: true},
- },
- ];
- const preClosurePresets = argv.esm || argv.sxg ? [presetEnv] : [];
- const preClosureConfig = {
- compact: false,
- plugins: preClosurePlugins,
- presets: preClosurePresets,
- retainLines: true,
- sourceMaps: true,
- };
- return preClosureConfig;
-}
-
-module.exports = {
- getPreClosureConfig,
-};
diff --git a/build-system/babel-config/react-config.js b/build-system/babel-config/react-config.js
new file mode 100644
index 000000000000..c722cc2454e0
--- /dev/null
+++ b/build-system/babel-config/react-config.js
@@ -0,0 +1,43 @@
+'use strict';
+
+const path = require('path');
+const {getMinifiedConfig} = require('./minified-config');
+const {getUnminifiedConfig} = require('./unminified-config');
+
+/**
+ * @param {!Object} config
+ * @return {object}
+ */
+function mergeReactBabelConfig(config) {
+ const rootDir = path.join(__dirname, '../../');
+ return {
+ ...config,
+ plugins: [
+ path.join(
+ rootDir,
+ './build-system/babel-plugins/babel-plugin-react-style-props'
+ ),
+ ...(config.plugins || []),
+ ],
+ };
+}
+
+/**
+ * @return {!Object}
+ */
+function getReactUnminifiedConfig() {
+ return mergeReactBabelConfig(getUnminifiedConfig('react'));
+}
+
+/**
+ * @return {!Object}
+ */
+function getReactMinifiedConfig() {
+ return mergeReactBabelConfig(getMinifiedConfig('react'));
+}
+
+module.exports = {
+ getReactMinifiedConfig,
+ getReactUnminifiedConfig,
+ mergeReactBabelConfig,
+};
diff --git a/build-system/babel-config/test-config.js b/build-system/babel-config/test-config.js
index 9f42956bd5ae..439dc4921652 100644
--- a/build-system/babel-config/test-config.js
+++ b/build-system/babel-config/test-config.js
@@ -38,30 +38,43 @@ function getTestConfig() {
modules: 'commonjs',
loose: true,
targets: {'browsers': ['Last 2 versions']},
+ shippedProposals: true,
},
];
+ const presetTypescript = [
+ '@babel/preset-typescript',
+ {jsxPragma: 'Preact', jsxPragmaFrag: 'Preact.Fragment'},
+ ];
const replacePlugin = getReplacePlugin();
const replaceGlobalsPlugin = getReplaceGlobalsPlugin();
const testPlugins = [
getImportResolverPlugin(),
argv.coverage ? instanbulPlugin : null,
+ './build-system/babel-plugins/babel-plugin-amp-story-supported-languages',
replacePlugin,
replaceGlobalsPlugin,
+ './build-system/babel-plugins/babel-plugin-jsx-style-object',
+ './build-system/babel-plugins/babel-plugin-mangle-object-values',
'./build-system/babel-plugins/babel-plugin-imported-helpers',
'./build-system/babel-plugins/babel-plugin-transform-json-import',
'./build-system/babel-plugins/babel-plugin-transform-json-configuration',
'./build-system/babel-plugins/babel-plugin-transform-jss',
'./build-system/babel-plugins/babel-plugin-transform-promise-resolve',
- '@babel/plugin-transform-classes',
'./build-system/babel-plugins/babel-plugin-dom-jsx-svg-namespace',
reactJsxPlugin,
].filter(Boolean);
- const testPresets = [presetEnv];
+ const testPresets = [presetTypescript, presetEnv];
return {
compact: false,
plugins: testPlugins,
presets: testPresets,
sourceMaps: 'inline',
+ assumptions: {
+ constantSuper: true,
+ noClassCalls: true,
+ setClassMethods: true,
+ setPublicClassFields: true,
+ },
};
}
diff --git a/build-system/babel-config/unminified-config.js b/build-system/babel-config/unminified-config.js
index 38bea6abcfb3..e763b5bc6ebf 100644
--- a/build-system/babel-config/unminified-config.js
+++ b/build-system/babel-config/unminified-config.js
@@ -7,9 +7,13 @@ const {getReplacePlugin} = require('./helpers');
/**
* Gets the config for babel transforms run during `amp build`.
*
+ * @param {'preact' | 'react'} buildFor
+ * @param {!Object=} opt_replacePluginOverrides
* @return {!Object}
*/
-function getUnminifiedConfig() {
+function getUnminifiedConfig(buildFor = 'preact', opt_replacePluginOverrides) {
+ const isEsmBuild = argv.esm || argv.sxg;
+
const reactJsxPlugin = [
'@babel/plugin-transform-react-jsx',
{
@@ -19,21 +23,27 @@ function getUnminifiedConfig() {
},
];
- const targets =
- argv.esm || argv.sxg ? {esmodules: true} : {browsers: ['Last 2 versions']};
const presetEnv = [
'@babel/preset-env',
{
bugfixes: true,
modules: false,
loose: true,
- targets,
+ targets: isEsmBuild ? {esmodules: true} : {browsers: ['Last 2 versions']},
+ shippedProposals: true,
+ exclude: isEsmBuild ? ['@babel/plugin-transform-for-of'] : [],
},
];
- const replacePlugin = getReplacePlugin();
+ const presetTypescript = [
+ '@babel/preset-typescript',
+ {jsxPragma: 'Preact', jsxPragmaFrag: 'Preact.Fragment'},
+ ];
+ const replacePlugin = getReplacePlugin(opt_replacePluginOverrides);
const unminifiedPlugins = [
- getImportResolverPlugin(),
+ './build-system/babel-plugins/babel-plugin-jsx-style-object',
+ getImportResolverPlugin(buildFor),
argv.coverage ? 'babel-plugin-istanbul' : null,
+ './build-system/babel-plugins/babel-plugin-amp-story-supported-languages',
replacePlugin,
'./build-system/babel-plugins/babel-plugin-transform-json-import',
'./build-system/babel-plugins/babel-plugin-transform-json-configuration',
@@ -41,20 +51,20 @@ function getUnminifiedConfig() {
'./build-system/babel-plugins/babel-plugin-transform-fix-leading-comments',
'./build-system/babel-plugins/babel-plugin-transform-promise-resolve',
'./build-system/babel-plugins/babel-plugin-transform-amp-extension-call',
- '@babel/plugin-transform-classes',
'./build-system/babel-plugins/babel-plugin-dom-jsx-svg-namespace',
reactJsxPlugin,
].filter(Boolean);
- const unminifiedPresets = [presetEnv];
+ const unminifiedPresets = [presetTypescript, presetEnv];
return {
compact: false,
plugins: unminifiedPlugins,
presets: unminifiedPresets,
- sourceMaps: 'inline',
+ sourceMaps: true,
assumptions: {
constantSuper: true,
noClassCalls: true,
setClassMethods: true,
+ setPublicClassFields: true,
},
};
}
diff --git a/build-system/babel-config/unminified-ssr-css-config.js b/build-system/babel-config/unminified-ssr-css-config.js
new file mode 100644
index 000000000000..f06995b2207d
--- /dev/null
+++ b/build-system/babel-config/unminified-ssr-css-config.js
@@ -0,0 +1,17 @@
+'use strict';
+
+const {getUnminifiedConfig} = require('./unminified-config');
+
+/**
+ * Gets the config for babel transforms run during `amp build` with `IS_SSR`
+ * set to true.
+ *
+ * @return {!Object}
+ */
+function getUnminifiedSsrCssConfig() {
+ return getUnminifiedConfig('preact', {IS_SSR_CSS: true});
+}
+
+module.exports = {
+ getUnminifiedSsrCssConfig,
+};
diff --git a/build-system/babel-plugins/OWNERS b/build-system/babel-plugins/OWNERS
index eeccea4248aa..8bd1335073dc 100644
--- a/build-system/babel-plugins/OWNERS
+++ b/build-system/babel-plugins/OWNERS
@@ -8,7 +8,6 @@
{name: 'ampproject/wg-infra'},
{name: 'ampproject/wg-performance'},
{name: 'erwinmombay', notify: true},
- {name: 'jridgewell', notify: true},
],
},
],
diff --git a/build-system/babel-plugins/babel-plugin-amp-config-urls/index.js b/build-system/babel-plugins/babel-plugin-amp-config-urls/index.js
new file mode 100644
index 000000000000..52f482d6ab12
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-config-urls/index.js
@@ -0,0 +1,67 @@
+/**
+ * @fileoverview
+ * Replaces imports of `src/config/urls` into references to self.AMP.config.urls
+ * This allows us to re-use the value defined by the runtime in extensions.
+ * Binaries that don't depend on the runtime should not use this transform, so
+ * that they can directly use the values from `src/config/urls`.
+ */
+const {dirname, join, posix, relative, sep} = require('path');
+
+const importSource = join(process.cwd(), 'src', 'config', 'urls');
+const reference = 'self.AMP.config.urls';
+
+/**
+ * @param {string} fromFilename
+ * @param {string} toModule
+ * @return {string}
+ */
+function relativeModule(fromFilename, toModule) {
+ const resolved = relative(dirname(fromFilename), toModule);
+ const resolvedPosix = resolved.split(sep).join(posix.sep);
+ return resolvedPosix.startsWith('.') ? resolvedPosix : `./${resolvedPosix}`;
+}
+
+/**
+ * @param {import('@babel/core')} babel
+ * @return {import('@babel/core').PluginObj}
+ */
+module.exports = function (babel) {
+ let importSourceRelative;
+ const {template, types: t} = babel;
+ const buildNamespace = template.statement(
+ `const name = /* #__PURE__ */ (() => ${reference})()`,
+ {preserveComments: true, placeholderPattern: /^name$/}
+ );
+ return {
+ name: 'amp-config-urls',
+ visitor: {
+ Program: {
+ enter(_, state) {
+ const {filename} = state;
+ if (!filename) {
+ throw new Error(
+ 'babel-plugin-amp-config-urls must be called with a filename'
+ );
+ }
+ importSourceRelative = relativeModule(filename, importSource);
+ },
+ },
+ ImportDeclaration(path) {
+ const {source} = path.node;
+ if (!t.isStringLiteral(source, {value: importSourceRelative})) {
+ return;
+ }
+ for (const specifier of path.get('specifiers')) {
+ if (!specifier.isImportNamespaceSpecifier()) {
+ throw specifier.buildCodeFrameError(
+ `Unresolvable specifier. You must import \`urls\` as a namespace:\n` +
+ `\`import * as urls from '${source.value}';\``
+ );
+ }
+ const {name} = specifier.node.local;
+ path.replaceWith(buildNamespace({name}));
+ }
+ },
+ },
+ };
+};
diff --git a/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/error-default-import/input.mjs b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/error-default-import/input.mjs
new file mode 100644
index 000000000000..a9c30acc1622
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/error-default-import/input.mjs
@@ -0,0 +1 @@
+import urls from '../../../../../../../src/config/urls';
diff --git a/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/error-default-import/options.json b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/error-default-import/options.json
new file mode 100644
index 000000000000..0cdb369f01da
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/error-default-import/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../.."
+ ],
+ "throws": "Unresolvable specifier. You must import `urls` as a namespace:\n`import * as urls from '../../../../../../../src/config/urls';`"
+}
diff --git a/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/error-named-import/input.mjs b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/error-named-import/input.mjs
new file mode 100644
index 000000000000..366039f5536a
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/error-named-import/input.mjs
@@ -0,0 +1 @@
+import {named, foo as bar} from '../../../../../../../src/config/urls';
diff --git a/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/error-named-import/options.json b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/error-named-import/options.json
new file mode 100644
index 000000000000..0cdb369f01da
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/error-named-import/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../.."
+ ],
+ "throws": "Unresolvable specifier. You must import `urls` as a namespace:\n`import * as urls from '../../../../../../../src/config/urls';`"
+}
diff --git a/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/ignored-import-source/input.mjs b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/ignored-import-source/input.mjs
new file mode 100644
index 000000000000..4e5dda86a5a9
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/ignored-import-source/input.mjs
@@ -0,0 +1 @@
+import * as urls from 'something other than src/config/urls';
diff --git a/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/ignored-import-source/options.json b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/ignored-import-source/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/ignored-import-source/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/ignored-import-source/output.mjs b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/ignored-import-source/output.mjs
new file mode 100644
index 000000000000..4e5dda86a5a9
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/ignored-import-source/output.mjs
@@ -0,0 +1 @@
+import * as urls from 'something other than src/config/urls';
diff --git a/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/transform-namespace/input.mjs b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/transform-namespace/input.mjs
new file mode 100644
index 000000000000..dd2a9fb445a0
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/transform-namespace/input.mjs
@@ -0,0 +1 @@
+import * as urls from '../../../../../../../src/config/urls';
diff --git a/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/transform-namespace/options.json b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/transform-namespace/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/transform-namespace/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/transform-namespace/output.mjs b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/transform-namespace/output.mjs
new file mode 100644
index 000000000000..4310e0c1f4d1
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/fixtures/transform/transform-namespace/output.mjs
@@ -0,0 +1 @@
+const urls = /* #__PURE__ */(() => self.AMP.config.urls)();
diff --git a/build-system/babel-plugins/babel-plugin-amp-config-urls/test/index.js b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/index.js
new file mode 100644
index 000000000000..23251129fae9
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-config-urls/test/index.js
@@ -0,0 +1,3 @@
+const runner = require('@babel/helper-plugin-test-runner').default;
+
+runner(__dirname);
diff --git a/build-system/babel-plugins/babel-plugin-amp-mode-transformer/index.js b/build-system/babel-plugins/babel-plugin-amp-mode-transformer/index.js
index 021c9787928f..d2e28cab9d72 100644
--- a/build-system/babel-plugins/babel-plugin-amp-mode-transformer/index.js
+++ b/build-system/babel-plugins/babel-plugin-amp-mode-transformer/index.js
@@ -3,7 +3,7 @@
/**
* Changes the values of getMode().test, getMode().localDev to false
* and getMode().localDev to true.
- * @param {Object} babelTypes
+ * @param {object} babelTypes
*/
const {dirname, join, relative, resolve} = require('path').posix;
diff --git a/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/index.js b/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/index.js
new file mode 100644
index 000000000000..1cea6f43e135
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/index.js
@@ -0,0 +1,34 @@
+const fastGlob = require('fast-glob');
+const pathMod = require('path');
+const LOCALES_DIR = 'extensions/amp-story/1.0/_locales/*.json';
+const AMP_STORY_SUPPORTED_LANGUAGES = fastGlob.sync(LOCALES_DIR).map((x) => {
+ return pathMod.basename(x, '.json');
+});
+
+/**
+ * @fileoverview
+ * We need to ensure that the language files we request from the Google AMP
+ * cache is supported on the client before making the request. To do this
+ * we embed the supported list of language codes through this symbol
+ * replacement which can be used anywhere in the codebase.
+ */
+
+/**
+ * @interface {babel.PluginPass}
+ * @param {babel} babel
+ * @return {babel.PluginObj}
+ */
+module.exports = function ({types: t}) {
+ return {
+ name: 'amp-story-supported-languages',
+ visitor: {
+ ReferencedIdentifier(path) {
+ if (path.node.name !== 'AMP_STORY_SUPPORTED_LANGUAGES') {
+ return;
+ }
+
+ path.replaceWith(t.valueToNode(AMP_STORY_SUPPORTED_LANGUAGES));
+ },
+ },
+ };
+};
diff --git a/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/test/fixtures/transform/replace/input.js b/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/test/fixtures/transform/replace/input.js
new file mode 100644
index 000000000000..ebe5f3a7f2eb
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/test/fixtures/transform/replace/input.js
@@ -0,0 +1,8 @@
+let AMP_STORY_SUPPORTED_LANGUAGES;
+AMP_STORY_SUPPORTED_LANGUAGES = 'test';
+
+const a = AMP_STORY_SUPPORTED_LANGUAGES;
+
+if (AMP_STORY_SUPPORTED_LANGUAGES.join(' ')) {
+ console.log(AMP_STORY_SUPPORTED_LANGUAGES);
+}
diff --git a/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/test/fixtures/transform/replace/options.json b/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/test/fixtures/transform/replace/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/test/fixtures/transform/replace/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/test/fixtures/transform/replace/output.js b/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/test/fixtures/transform/replace/output.js
new file mode 100644
index 000000000000..8043b39db9d8
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/test/fixtures/transform/replace/output.js
@@ -0,0 +1,7 @@
+let AMP_STORY_SUPPORTED_LANGUAGES;
+AMP_STORY_SUPPORTED_LANGUAGES = 'test';
+const a = ["af", "am", "ar", "bg", "bn", "bs", "ca", "cs", "da", "de", "el", "en-GB", "en", "es-419", "es", "et", "eu", "fa", "fi", "fil", "fr", "gl", "gu", "hi", "hr", "hu", "id", "is", "it", "iw", "ja", "ka", "km", "kn", "ko", "lo", "lt", "lv", "mk", "ml", "mn", "mr", "ms", "my", "ne", "nl", "no", "pa", "pl", "pt-BR", "pt-PT", "ro", "ru", "si", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", "tr", "uk", "ur", "vi", "zh-CN", "zh-TW", "zu"];
+
+if (["af", "am", "ar", "bg", "bn", "bs", "ca", "cs", "da", "de", "el", "en-GB", "en", "es-419", "es", "et", "eu", "fa", "fi", "fil", "fr", "gl", "gu", "hi", "hr", "hu", "id", "is", "it", "iw", "ja", "ka", "km", "kn", "ko", "lo", "lt", "lv", "mk", "ml", "mn", "mr", "ms", "my", "ne", "nl", "no", "pa", "pl", "pt-BR", "pt-PT", "ro", "ru", "si", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", "tr", "uk", "ur", "vi", "zh-CN", "zh-TW", "zu"].join(' ')) {
+ console.log(["af", "am", "ar", "bg", "bn", "bs", "ca", "cs", "da", "de", "el", "en-GB", "en", "es-419", "es", "et", "eu", "fa", "fi", "fil", "fr", "gl", "gu", "hi", "hr", "hu", "id", "is", "it", "iw", "ja", "ka", "km", "kn", "ko", "lo", "lt", "lv", "mk", "ml", "mn", "mr", "ms", "my", "ne", "nl", "no", "pa", "pl", "pt-BR", "pt-PT", "ro", "ru", "si", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th", "tr", "uk", "ur", "vi", "zh-CN", "zh-TW", "zu"]);
+}
diff --git a/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/test/index.js b/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/test/index.js
new file mode 100644
index 000000000000..23251129fae9
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-amp-story-supported-languages/test/index.js
@@ -0,0 +1,3 @@
+const runner = require('@babel/helper-plugin-test-runner').default;
+
+runner(__dirname);
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/index.js b/build-system/babel-plugins/babel-plugin-deep-pure/index.js
new file mode 100644
index 000000000000..e81ea32d2d6d
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/index.js
@@ -0,0 +1,89 @@
+const pureFnName = 'pure';
+const pureFnImportSourceRe = new RegExp(
+ '(^#|/)core/types/pure(\\.{js,jsx,ts,tsx})?$'
+);
+
+/**
+ * Deeply adds #__PURE__ comments to an expression passed to a function named
+ * `pure()`.
+ * @param {import('@babel/core')} babel
+ * @return {import('@babel/core').PluginObj}
+ */
+module.exports = function (babel) {
+ const {types: t} = babel;
+
+ /**
+ * @param {import('@babel/core').NodePath} path
+ * @return {boolean}
+ */
+ function referencesPureFnImport(path) {
+ if (!path.isIdentifier()) {
+ return false;
+ }
+ const binding = path.scope.getBinding(path.node.name);
+ if (!binding || binding.kind !== 'module') {
+ return false;
+ }
+ const bindingPath = binding.path;
+ const parent = bindingPath.parentPath;
+ if (
+ !parent?.isImportDeclaration() ||
+ !pureFnImportSourceRe.test(parent?.node.source.value)
+ ) {
+ return false;
+ }
+ return (
+ bindingPath.isImportSpecifier() &&
+ t.isIdentifier(bindingPath.node.imported, {name: pureFnName})
+ );
+ }
+
+ /**
+ * @param {import('@babel/core').NodePath} path
+ * @return {boolean}
+ */
+ function isPureFnCallExpression(path) {
+ return (
+ path.node.arguments.length === 1 &&
+ referencesPureFnImport(path.get('callee'))
+ );
+ }
+
+ /** @param {import('@babel/core').NodePath} path */
+ function addPureComment(path) {
+ path.addComment('leading', ' #__PURE__ ');
+ }
+
+ /** @param {import('@babel/core').NodePath} path */
+ function replaceWithFirstArgument(path) {
+ path.replaceWith(path.node.arguments[0]);
+ }
+
+ return {
+ name: 'deep-pure',
+ visitor: {
+ CallExpression(path) {
+ if (isPureFnCallExpression(path)) {
+ path.traverse({
+ NewExpression(path) {
+ addPureComment(path);
+ },
+ CallExpression(path) {
+ if (isPureFnCallExpression(path)) {
+ replaceWithFirstArgument(path);
+ } else {
+ addPureComment(path);
+ }
+ },
+ MemberExpression(path) {
+ throw path.buildCodeFrameError(
+ `${pureFnName}() expressions cannot contain member expressions`
+ );
+ },
+ });
+ replaceWithFirstArgument(path);
+ }
+ },
+ },
+ };
+};
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/error-member-expression/input.mjs b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/error-member-expression/input.mjs
new file mode 100644
index 000000000000..ed635b154ed1
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/error-member-expression/input.mjs
@@ -0,0 +1,2 @@
+import {pure} from '#core/types/pure';
+pure(error.memberExpression);
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/error-member-expression/options.json b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/error-member-expression/options.json
new file mode 100644
index 000000000000..90cfd0869484
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/error-member-expression/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../.."
+ ],
+ "throws": "pure() expressions cannot contain member expressions"
+}
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-import-source/input.mjs b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-import-source/input.mjs
new file mode 100644
index 000000000000..88ef5e8f5e4e
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-import-source/input.mjs
@@ -0,0 +1,4 @@
+import {pure} from 'something other than core/types/pure';
+const ignored = pure(
+ foo() || new Bar() || pure(pure(foo('bar', bar(), new Baz())) || 'foo')
+);
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-import-source/options.json b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-import-source/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-import-source/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-import-source/output.mjs b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-import-source/output.mjs
new file mode 100644
index 000000000000..2f1bf185e592
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-import-source/output.mjs
@@ -0,0 +1,2 @@
+import { pure } from 'something other than core/types/pure';
+const ignored = pure(foo() || new Bar() || pure(pure(foo('bar', bar(), new Baz())) || 'foo'));
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-not-import/input.mjs b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-not-import/input.mjs
new file mode 100644
index 000000000000..897e0c8c815d
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-not-import/input.mjs
@@ -0,0 +1,4 @@
+const pure = (v) => v;
+const ignored = pure(
+ foo() || new Bar() || pure(pure(foo('bar', bar(), new Baz())) || 'foo')
+);
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-not-import/options.json b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-not-import/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-not-import/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-not-import/output.mjs b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-not-import/output.mjs
new file mode 100644
index 000000000000..195af8bae9b6
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/ignored-not-import/output.mjs
@@ -0,0 +1,3 @@
+const pure = v => v;
+
+const ignored = pure(foo() || new Bar() || pure(pure(foo('bar', bar(), new Baz())) || 'foo'));
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-aliased-path/input.mjs b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-aliased-path/input.mjs
new file mode 100644
index 000000000000..4cfbe91c349b
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-aliased-path/input.mjs
@@ -0,0 +1,6 @@
+import {pure} from '#core/types/pure';
+const ignored = foo();
+const a = pure(
+ foo() || new Bar() || pure(pure(foo('bar', bar(), new Baz())) || 'foo')
+);
+const b = pure('foo');
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-aliased-path/options.json b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-aliased-path/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-aliased-path/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-aliased-path/output.mjs b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-aliased-path/output.mjs
new file mode 100644
index 000000000000..8b3ef0f0ac19
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-aliased-path/output.mjs
@@ -0,0 +1,4 @@
+import { pure } from '#core/types/pure';
+const ignored = foo();
+const a = /* #__PURE__ */foo() || /* #__PURE__ */new Bar() || /* #__PURE__ */foo('bar', /* #__PURE__ */bar(), /* #__PURE__ */new Baz()) || 'foo';
+const b = 'foo';
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-relative-path/input.mjs b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-relative-path/input.mjs
new file mode 100644
index 000000000000..bfe5e959b860
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-relative-path/input.mjs
@@ -0,0 +1,6 @@
+import {pure} from '../../../../../../../src/core/types/pure';
+const ignored = foo();
+const a = pure(
+ foo() || new Bar() || pure(pure(foo('bar', bar(), new Baz())) || 'foo')
+);
+const b = pure('foo');
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-relative-path/options.json b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-relative-path/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-relative-path/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-relative-path/output.mjs b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-relative-path/output.mjs
new file mode 100644
index 000000000000..7b5127c163dc
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/fixtures/transform/transform-relative-path/output.mjs
@@ -0,0 +1,4 @@
+import { pure } from '../../../../../../../src/core/types/pure';
+const ignored = foo();
+const a = /* #__PURE__ */foo() || /* #__PURE__ */new Bar() || /* #__PURE__ */foo('bar', /* #__PURE__ */bar(), /* #__PURE__ */new Baz()) || 'foo';
+const b = 'foo';
diff --git a/build-system/babel-plugins/babel-plugin-deep-pure/test/index.js b/build-system/babel-plugins/babel-plugin-deep-pure/test/index.js
new file mode 100644
index 000000000000..23251129fae9
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-deep-pure/test/index.js
@@ -0,0 +1,3 @@
+const runner = require('@babel/helper-plugin-test-runner').default;
+
+runner(__dirname);
diff --git a/build-system/babel-plugins/babel-plugin-imported-helpers/index.js b/build-system/babel-plugins/babel-plugin-imported-helpers/index.js
index bf53e4d93e1a..4cbca20b0c05 100644
--- a/build-system/babel-plugins/babel-plugin-imported-helpers/index.js
+++ b/build-system/babel-plugins/babel-plugin-imported-helpers/index.js
@@ -19,7 +19,7 @@ const helperMap = {
* Cache of identifiers to each helper's ImportDeclaration, per file.
* @const {!WeakMap<
* import('@babel/core').BabelFileResult,
- * Object
+ * {[key: string]: import('@babel/core').types.Identifier}
* >}
*/
const importNamesPerFile = new WeakMap();
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/index.js b/build-system/babel-plugins/babel-plugin-jsx-style-object/index.js
new file mode 100644
index 000000000000..85cda949e591
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/index.js
@@ -0,0 +1,195 @@
+/**
+ * @fileoverview
+ * Converts Object Expression syntax in `style={{foo: 'bar'}}` to a concatenated
+ * string expression.
+ *
+ * This only transforms a file if it imports the `baseModule` for JSX below,
+ * which lacks runtime support for converting the Object into a string.
+ * This transform takes that responsibility instead.
+ */
+
+const {addNamed} = require('@babel/helper-module-imports');
+
+const baseModule = 'core/dom/jsx';
+const helperModule = '#core/dom/jsx/style-property-string';
+const helperFnName = 'jsxStylePropertyString';
+
+// All values from here, converted to dash-case:
+// https://github.com/facebook/react/blob/a7c5726/packages/react-dom/src/shared/CSSProperty.js
+const nonDimensional = new Set([
+ 'animation-iteration-count',
+ 'aspect-ratio',
+ 'border-image-outset',
+ 'border-image-slice',
+ 'border-image-width',
+ 'box-flex',
+ 'box-flex-group',
+ 'box-ordinal-group',
+ 'column-count',
+ 'columns',
+ 'flex',
+ 'flex-grow',
+ 'flex-positive',
+ 'flex-shrink',
+ 'flex-negative',
+ 'flex-order',
+ 'grid-area',
+ 'grid-row',
+ 'grid-row-end',
+ 'grid-row-span',
+ 'grid-row-start',
+ 'grid-column',
+ 'grid-column-end',
+ 'grid-column-span',
+ 'grid-column-start',
+ 'font-weight',
+ 'line-clamp',
+ 'line-height',
+ 'opacity',
+ 'order',
+ 'orphans',
+ 'tab-size',
+ 'widows',
+ 'z-index',
+ 'zoom',
+
+ // SVG-related properties
+ 'fill-opacity',
+ 'flood-opacity',
+ 'stop-opacity',
+ 'stroke-dasharray',
+ 'stroke-dashoffset',
+ 'stroke-miterlimit',
+ 'stroke-opacity',
+ 'stroke-width',
+]);
+
+module.exports = function (babel) {
+ const {types: t} = babel;
+
+ const dashCase = (camelCase) =>
+ camelCase.replace(/[A-Z]/g, '-$&').toLowerCase();
+
+ let hasBaseModule = false;
+
+ /**
+ * @param {babel.NodePath} path
+ * @return {?babel.Node}
+ */
+ function transformProp(path) {
+ // @ts-ignore
+ const name = path.node.key.name || path.node.key.value;
+ const cssName = dashCase(name);
+ const isDimensional = !nonDimensional.has(cssName);
+ const value = path.get('value');
+ const evaluated = value.evaluate();
+
+ // If we can evaluate the value, return a composed string.
+ if (evaluated.confident) {
+ const {value} = evaluated;
+ if (value == null || value === '') {
+ return null;
+ }
+ const withUnit =
+ isDimensional && typeof value === 'number' ? `${value}px` : value;
+ return t.stringLiteral(`${cssName}:${withUnit};`);
+ }
+
+ // Otherwise call the helper function to evaluate nullish and dimensional values.
+ const helperFn = addNamed(path, helperFnName, helperModule);
+ const args = [t.stringLiteral(cssName), value.node];
+ if (isDimensional) {
+ args.push(t.booleanLiteral(true));
+ }
+ return t.callExpression(helperFn, args);
+ }
+
+ /**
+ * @param {(babel.Node|null)[]} props
+ * @return {?babel.Node}
+ */
+ function mergeBinaryConcat(props) {
+ let expr = null;
+ while (props.length) {
+ const part = props.shift();
+ if (part) {
+ if (!expr) {
+ expr = part;
+ } else {
+ expr = t.binaryExpression('+', expr, part);
+ }
+ }
+ }
+ return expr;
+ }
+
+ /** @param {babel.NodePath} path */
+ function replaceExpression(path) {
+ if (path.isLogicalExpression()) {
+ if (
+ path.node.operator === '&&' ||
+ path.node.operator === '||' ||
+ path.node.operator === '??'
+ ) {
+ replaceExpression(path.get('right'));
+ }
+ return;
+ }
+ if (path.isConditionalExpression()) {
+ replaceExpression(path.get('consequent'));
+ replaceExpression(path.get('alternate'));
+ return;
+ }
+ if (!path.isObjectExpression()) {
+ return;
+ }
+ path = /** @type {babel.NodePath} */ (path);
+ // @ts-ignore - expects NodePath|NodePath[] but it's always NodePath[]
+ const props = path.get('properties').map((prop) => {
+ if (prop.isSpreadElement()) {
+ throw prop.buildCodeFrameError(
+ 'You should not use spread properties in style object expressions.'
+ );
+ }
+ if (prop.node.computed) {
+ throw prop
+ .get('key')
+ .buildCodeFrameError(
+ 'You should not use computed props in style object expressions. Instead, use multiple properties directly. They can be "null" when unwanted.'
+ );
+ }
+ return transformProp(prop);
+ });
+ const merged = mergeBinaryConcat(props);
+ path.replaceWith(merged || t.stringLiteral(''));
+ }
+
+ return {
+ name: 'jsx-style-object',
+ visitor: {
+ Program: {
+ enter(path) {
+ hasBaseModule = false;
+ path.traverse({
+ ImportDeclaration(path) {
+ if (path.node.source.value.endsWith(baseModule)) {
+ hasBaseModule = true;
+ path.stop();
+ }
+ },
+ });
+ },
+ },
+ JSXAttribute(path) {
+ if (!hasBaseModule) {
+ return;
+ }
+ if (!t.isJSXIdentifier(path.node.name, {name: 'style'})) {
+ return;
+ }
+ const expression = path.get('value.expression');
+ replaceExpression(expression);
+ },
+ },
+ };
+};
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/dimensional/input.mjs b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/dimensional/input.mjs
new file mode 100644
index 000000000000..7152cb70656b
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/dimensional/input.mjs
@@ -0,0 +1,94 @@
+import * as jsx from 'ANYWHERE_LEADING_TO/core/dom/jsx';
+
+const dimensional = () =>
;
+
+const nonDimensional = () => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/dimensional/options.json b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/dimensional/options.json
new file mode 100644
index 000000000000..4bbe336b0476
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/dimensional/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../..",
+ "@babel/plugin-syntax-jsx"
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/dimensional/output.mjs b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/dimensional/output.mjs
new file mode 100644
index 000000000000..7f891887d13b
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/dimensional/output.mjs
@@ -0,0 +1,136 @@
+import { jsxStylePropertyString as _jsxStylePropertyString44 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString43 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString42 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString41 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString40 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString39 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString38 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString37 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString36 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString35 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString34 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString33 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString32 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString31 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString30 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString29 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString28 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString27 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString26 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString25 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString24 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString23 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString22 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString21 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString20 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString19 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString18 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString17 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString16 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString15 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString14 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString13 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString12 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString11 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString10 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString9 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString8 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString7 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString6 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString5 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString4 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString3 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString2 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString } from "#core/dom/jsx/style-property-string";
+import * as jsx from 'ANYWHERE_LEADING_TO/core/dom/jsx';
+
+const dimensional = () =>
;
+
+const nonDimensional = () =>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
;
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/ignored/input.mjs b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/ignored/input.mjs
new file mode 100644
index 000000000000..0ae71b93ede0
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/ignored/input.mjs
@@ -0,0 +1,11 @@
+const ignoredBecauseNamespaceIsNotImported = () => (
+
+);
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/ignored/options.json b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/ignored/options.json
new file mode 100644
index 000000000000..4bbe336b0476
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/ignored/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../..",
+ "@babel/plugin-syntax-jsx"
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/ignored/output.mjs b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/ignored/output.mjs
new file mode 100644
index 000000000000..b751701b9dc3
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/ignored/output.mjs
@@ -0,0 +1,7 @@
+const ignoredBecauseNamespaceIsNotImported = () =>
;
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/nested/input.mjs b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/nested/input.mjs
new file mode 100644
index 000000000000..c22dfc2906d2
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/nested/input.mjs
@@ -0,0 +1,13 @@
+import * as jsx from 'ANYWHERE_LEADING_TO/core/dom/jsx';
+
+const logicalAnd = () =>
;
+
+const logicalAndDeep = () =>
;
+
+const logicalOr = () =>
;
+
+const ternary = () =>
;
+
+const ternaryNested = () => (
+
+);
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/nested/options.json b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/nested/options.json
new file mode 100644
index 000000000000..4bbe336b0476
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/nested/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../..",
+ "@babel/plugin-syntax-jsx"
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/nested/output.mjs b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/nested/output.mjs
new file mode 100644
index 000000000000..356b533f6558
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/nested/output.mjs
@@ -0,0 +1,11 @@
+import * as jsx from 'ANYWHERE_LEADING_TO/core/dom/jsx';
+
+const logicalAnd = () =>
;
+
+const logicalAndDeep = () =>
;
+
+const logicalOr = () =>
;
+
+const ternary = () =>
;
+
+const ternaryNested = () =>
;
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/transformed/input.mjs b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/transformed/input.mjs
new file mode 100644
index 000000000000..92d68cf6c28e
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/transformed/input.mjs
@@ -0,0 +1,67 @@
+import * as jsx from 'ANYWHERE_LEADING_TO/core/dom/jsx';
+
+const randomObjectExpressionsAreUnmodified = () => ({
+ background,
+ color: null,
+});
+
+const nonObjectExpressionsAreUnmodified = () => (
+
+);
+
+const red = 'red';
+const otherAttributesAreUnmodified = () => (
+
+);
+
+const modified = () => (
+
+);
+
+const emptyStringValueIsRemoved = () =>
;
+
+let dynamic = 0;
+function modifyDynamicValue() {
+ dynamic = 1;
+}
+
+let backgroundColor = 'blue';
+
+const constants = () => (
+
+);
+
+const empty = () => (
+
+);
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/transformed/options.json b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/transformed/options.json
new file mode 100644
index 000000000000..4bbe336b0476
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/transformed/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../..",
+ "@babel/plugin-syntax-jsx"
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/transformed/output.mjs b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/transformed/output.mjs
new file mode 100644
index 000000000000..0af9fc73dbce
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/fixtures/transform/transformed/output.mjs
@@ -0,0 +1,39 @@
+import { jsxStylePropertyString as _jsxStylePropertyString2 } from "#core/dom/jsx/style-property-string";
+import { jsxStylePropertyString as _jsxStylePropertyString } from "#core/dom/jsx/style-property-string";
+import * as jsx from 'ANYWHERE_LEADING_TO/core/dom/jsx';
+
+const randomObjectExpressionsAreUnmodified = () => ({
+ background,
+ color: null
+});
+
+const nonObjectExpressionsAreUnmodified = () => ;
+
+const red = 'red';
+
+const otherAttributesAreUnmodified = () =>
;
+
+const modified = () =>
;
+
+const emptyStringValueIsRemoved = () =>
;
+
+let dynamic = 0;
+
+function modifyDynamicValue() {
+ dynamic = 1;
+}
+
+let backgroundColor = 'blue';
+
+const constants = () =>
;
+
+const empty = () =>
;
diff --git a/build-system/babel-plugins/babel-plugin-jsx-style-object/test/index.js b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/index.js
new file mode 100644
index 000000000000..23251129fae9
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-jsx-style-object/test/index.js
@@ -0,0 +1,3 @@
+const runner = require('@babel/helper-plugin-test-runner').default;
+
+runner(__dirname);
diff --git a/build-system/babel-plugins/babel-plugin-mangle-object-values/index.js b/build-system/babel-plugins/babel-plugin-mangle-object-values/index.js
new file mode 100644
index 000000000000..e2a91b357fd5
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-mangle-object-values/index.js
@@ -0,0 +1,45 @@
+/**
+ * @fileoverview Mangles the values of an object expression into their numeric
+ * indices + 1.
+ * This is useful when defining large enums, as it allows us to use descriptive
+ * values during development, but use short mangled values during production.
+ */
+
+const fnName = 'mangleObjectValues';
+
+module.exports = function (babel) {
+ const {types: t} = babel;
+
+ return {
+ name: 'mangle-object-values',
+ visitor: {
+ CallExpression(path) {
+ const callee = path.get('callee');
+ if (!callee.isIdentifier({name: fnName})) {
+ return;
+ }
+ const {name} = callee.node.name;
+ const args = path.node.arguments;
+ if (args.length !== 1 || !t.isObjectExpression(args[0])) {
+ throw path.buildCodeFrameError(
+ `${name}() should take a single argument that's an object expression.`
+ );
+ }
+ const objectExpression = args[0];
+ const seen = {};
+ for (const [i, prop] of objectExpression.properties.entries()) {
+ if (!t.isStringLiteral(prop.value)) {
+ throw path.buildCodeFrameError(
+ `${name}() should only be used on object expressions with string values.`
+ );
+ }
+ const {value} = prop.value;
+ // Skip 0 because it's falsy
+ const mangled = (seen[value] = seen[value] || i + 1);
+ prop.value = t.valueToNode(mangled);
+ }
+ path.replaceWith(objectExpression);
+ },
+ },
+ };
+};
diff --git a/build-system/babel-plugins/babel-plugin-mangle-object-values/test/fixtures/transform/mangle/input.js b/build-system/babel-plugins/babel-plugin-mangle-object-values/test/fixtures/transform/mangle/input.js
new file mode 100644
index 000000000000..0928f9ae4a5f
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-mangle-object-values/test/fixtures/transform/mangle/input.js
@@ -0,0 +1,132 @@
+// not mangled:
+const x = {
+ foo: 'bar',
+ bar: 'qux',
+ [x]: 'y',
+};
+
+// not mangled:
+const y = notMangled({
+ foo: 'bar',
+ bar: 'qux',
+ [x]: 'y',
+});
+
+// mangled:
+const z = mangleObjectValues({
+ foo: 'bar',
+ bar: 'qux',
+ [x]: 'y',
+});
+
+// dupes:
+const a = mangleObjectValues({
+ foo: 'bar',
+ baz: 'qux',
+ // should be same as foo:
+ bar: 'bar',
+});
+
+// 100 elements:
+const b = mangleObjectValues({
+ k0: 'v_0',
+ k1: 'v_1',
+ k2: 'v_2',
+ k3: 'v_3',
+ k4: 'v_4',
+ k5: 'v_5',
+ k6: 'v_6',
+ k7: 'v_7',
+ k8: 'v_8',
+ k9: 'v_9',
+ k10: 'v_10',
+ k11: 'v_11',
+ k12: 'v_12',
+ k13: 'v_13',
+ k14: 'v_14',
+ k15: 'v_15',
+ k16: 'v_16',
+ k17: 'v_17',
+ k18: 'v_18',
+ k19: 'v_19',
+ k20: 'v_20',
+ k21: 'v_21',
+ k22: 'v_22',
+ k23: 'v_23',
+ k24: 'v_24',
+ k25: 'v_25',
+ k26: 'v_26',
+ k27: 'v_27',
+ k28: 'v_28',
+ k29: 'v_29',
+ k30: 'v_30',
+ k31: 'v_31',
+ k32: 'v_32',
+ k33: 'v_33',
+ k34: 'v_34',
+ k35: 'v_35',
+ k36: 'v_36',
+ k37: 'v_37',
+ k38: 'v_38',
+ k39: 'v_39',
+ k40: 'v_40',
+ k41: 'v_41',
+ k42: 'v_42',
+ k43: 'v_43',
+ k44: 'v_44',
+ k45: 'v_45',
+ k46: 'v_46',
+ k47: 'v_47',
+ k48: 'v_48',
+ k49: 'v_49',
+ k50: 'v_50',
+ k51: 'v_51',
+ k52: 'v_52',
+ k53: 'v_53',
+ k54: 'v_54',
+ k55: 'v_55',
+ k56: 'v_56',
+ k57: 'v_57',
+ k58: 'v_58',
+ k59: 'v_59',
+ k60: 'v_60',
+ k61: 'v_61',
+ k62: 'v_62',
+ k63: 'v_63',
+ k64: 'v_64',
+ k65: 'v_65',
+ k66: 'v_66',
+ k67: 'v_67',
+ k68: 'v_68',
+ k69: 'v_69',
+ k70: 'v_70',
+ k71: 'v_71',
+ k72: 'v_72',
+ k73: 'v_73',
+ k74: 'v_74',
+ k75: 'v_75',
+ k76: 'v_76',
+ k77: 'v_77',
+ k78: 'v_78',
+ k79: 'v_79',
+ k80: 'v_80',
+ k81: 'v_81',
+ k82: 'v_82',
+ k83: 'v_83',
+ k84: 'v_84',
+ k85: 'v_85',
+ k86: 'v_86',
+ k87: 'v_87',
+ k88: 'v_88',
+ k89: 'v_89',
+ k90: 'v_90',
+ k91: 'v_91',
+ k92: 'v_92',
+ k93: 'v_93',
+ k94: 'v_94',
+ k95: 'v_95',
+ k96: 'v_96',
+ k97: 'v_97',
+ k98: 'v_98',
+ k99: 'v_99',
+});
diff --git a/build-system/babel-plugins/babel-plugin-mangle-object-values/test/fixtures/transform/mangle/output.js b/build-system/babel-plugins/babel-plugin-mangle-object-values/test/fixtures/transform/mangle/output.js
new file mode 100644
index 000000000000..deb34a065a1e
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-mangle-object-values/test/fixtures/transform/mangle/output.js
@@ -0,0 +1,128 @@
+// not mangled:
+const x = {
+ foo: 'bar',
+ bar: 'qux',
+ [x]: 'y'
+}; // not mangled:
+
+const y = notMangled({
+ foo: 'bar',
+ bar: 'qux',
+ [x]: 'y'
+}); // mangled:
+
+const z = {
+ foo: 1,
+ bar: 2,
+ [x]: 3
+}; // dupes:
+
+const a = {
+ foo: 1,
+ baz: 2,
+ // should be same as foo:
+ bar: 1
+}; // 100 elements:
+
+const b = {
+ k0: 1,
+ k1: 2,
+ k2: 3,
+ k3: 4,
+ k4: 5,
+ k5: 6,
+ k6: 7,
+ k7: 8,
+ k8: 9,
+ k9: 10,
+ k10: 11,
+ k11: 12,
+ k12: 13,
+ k13: 14,
+ k14: 15,
+ k15: 16,
+ k16: 17,
+ k17: 18,
+ k18: 19,
+ k19: 20,
+ k20: 21,
+ k21: 22,
+ k22: 23,
+ k23: 24,
+ k24: 25,
+ k25: 26,
+ k26: 27,
+ k27: 28,
+ k28: 29,
+ k29: 30,
+ k30: 31,
+ k31: 32,
+ k32: 33,
+ k33: 34,
+ k34: 35,
+ k35: 36,
+ k36: 37,
+ k37: 38,
+ k38: 39,
+ k39: 40,
+ k40: 41,
+ k41: 42,
+ k42: 43,
+ k43: 44,
+ k44: 45,
+ k45: 46,
+ k46: 47,
+ k47: 48,
+ k48: 49,
+ k49: 50,
+ k50: 51,
+ k51: 52,
+ k52: 53,
+ k53: 54,
+ k54: 55,
+ k55: 56,
+ k56: 57,
+ k57: 58,
+ k58: 59,
+ k59: 60,
+ k60: 61,
+ k61: 62,
+ k62: 63,
+ k63: 64,
+ k64: 65,
+ k65: 66,
+ k66: 67,
+ k67: 68,
+ k68: 69,
+ k69: 70,
+ k70: 71,
+ k71: 72,
+ k72: 73,
+ k73: 74,
+ k74: 75,
+ k75: 76,
+ k76: 77,
+ k77: 78,
+ k78: 79,
+ k79: 80,
+ k80: 81,
+ k81: 82,
+ k82: 83,
+ k83: 84,
+ k84: 85,
+ k85: 86,
+ k86: 87,
+ k87: 88,
+ k88: 89,
+ k89: 90,
+ k90: 91,
+ k91: 92,
+ k92: 93,
+ k93: 94,
+ k94: 95,
+ k95: 96,
+ k96: 97,
+ k97: 98,
+ k98: 99,
+ k99: 100
+};
diff --git a/build-system/babel-plugins/babel-plugin-mangle-object-values/test/fixtures/transform/options.json b/build-system/babel-plugins/babel-plugin-mangle-object-values/test/fixtures/transform/options.json
new file mode 100644
index 000000000000..dc8441ad032a
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-mangle-object-values/test/fixtures/transform/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-mangle-object-values/test/index.js b/build-system/babel-plugins/babel-plugin-mangle-object-values/test/index.js
new file mode 100644
index 000000000000..23251129fae9
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-mangle-object-values/test/index.js
@@ -0,0 +1,3 @@
+const runner = require('@babel/helper-plugin-test-runner').default;
+
+runner(__dirname);
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/define-template.js b/build-system/babel-plugins/babel-plugin-nomodule-loader/define-template.js
new file mode 100644
index 000000000000..f38132273411
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/define-template.js
@@ -0,0 +1,60 @@
+// @ts-nocheck
+/* eslint-disable no-var */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+
+/* global __MODULE_NAME__ */
+/* global __HAS_EXPORTS__ */
+/* global __IMPORT_NAMES__ */
+/* global __SINGLE_IMPORT_NO_EXPORTS__ */
+/* global __ONLY_EXPORTS__ */
+
+/**
+ * An async module loader similar to define() in AMD.
+ * Our implementation varies in that it can be compiled down to a minimal form
+ * based on the module's needs, rather than bundling a full implementation.
+ * @param {object} defineCallback
+ */
+(function defineish(defineCallback) {
+ // self.BENTO maps module names to callbacks to execute with their contents.
+ // interface ModuleCallbacks {
+ // [name: string]: ((Object) => void)[],
+ // }
+ var callbacks = (self.BENTO = self.BENTO || {});
+ var exec = __HAS_EXPORTS__
+ ? function (_exports) {
+ defineCallback.apply(null, arguments);
+ var name = __MODULE_NAME__;
+ var awaiting = (callbacks[name] = callbacks[name] || []);
+ while (awaiting.length) {
+ awaiting.pop()(_exports);
+ }
+ awaiting.push = function (callback) {
+ callback(_exports);
+ };
+ }
+ : defineCallback;
+ // The most common cases are ONLY_EXPORTS and SINGLE_IMPORT_NO_EXPORTS.
+ // We provide them with single-purpose implementations whose output is
+ // significantly smaller than the worst case.
+ if (__ONLY_EXPORTS__) {
+ exec({});
+ } else if (__SINGLE_IMPORT_NO_EXPORTS__) {
+ var name = __SINGLE_IMPORT_NO_EXPORTS__;
+ (callbacks[name] = callbacks[name] || []).push(exec);
+ } else {
+ // Fallback general purpose implementation.
+ Promise.all(
+ __IMPORT_NAMES__.map(function (name) {
+ // exports is identified as the number 0
+ if (__HAS_EXPORTS__ && name === 0) {
+ return {};
+ }
+ return new Promise(function (resolve) {
+ (callbacks[name] = callbacks[name] || []).push(resolve);
+ });
+ })
+ ).then(function (modules) {
+ exec.apply(null, modules);
+ });
+ }
+})(function (__CALLBACK_ARGS__) {});
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/index.js b/build-system/babel-plugins/babel-plugin-nomodule-loader/index.js
new file mode 100644
index 000000000000..0e6ecf379d37
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/index.js
@@ -0,0 +1,125 @@
+/**
+ * @fileoverview
+ * Transforms ESM import statements into an async loader meant for `nomodule`
+ * builds.
+ */
+
+const {
+ buildNamespaceInitStatements,
+ ensureStatementsHoisted,
+ hasExports,
+ isModule,
+ rewriteModuleStatementsAndPrepareHeader,
+} = require('@babel/helper-module-transforms');
+const {readFileSync} = require('fs');
+const {join: pathJoin, posix, relative} = require('path');
+
+let wrapperTemplate;
+
+module.exports = function (babel) {
+ const {template, types: t} = babel;
+
+ const pathToModuleName = (filename) =>
+ filename.replace(/^(\.\/)?dist\//, '').replace(/(\.max)?\.m?js$/, '');
+
+ const resolveModuleName = (filename, source) =>
+ pathToModuleName(posix.join(posix.dirname(filename), source));
+
+ /**
+ * @param {object} replacements
+ * @return {babel.types.Statement}
+ */
+ function buildWrapper(replacements) {
+ if (!wrapperTemplate) {
+ const templateSource = readFileSync(
+ pathJoin(__dirname, 'define-template.js'),
+ 'utf8'
+ );
+ wrapperTemplate = template(templateSource, {
+ placeholderPattern: /^__[A-Z0-9_]+__$/,
+ });
+ }
+ return wrapperTemplate(replacements);
+ }
+
+ /**
+ * @param {babel.NodePath} path
+ * @param {babel.types.Statement} wrapper
+ */
+ function injectWrapper(path, wrapper) {
+ const {body, directives} = path.node;
+ path.node.directives = [];
+ path.node.body = [];
+ const wrapperPath = path.pushContainer('body', wrapper)[0];
+ const callback = wrapperPath
+ .get('expression.arguments')
+ // @ts-ignore
+ .filter((arg) => arg.isFunctionExpression())[0]
+ .get('body');
+ callback.pushContainer('directives', directives);
+ callback.pushContainer('body', body);
+ }
+
+ return {
+ name: 'nomodule-loader',
+ visitor: {
+ Program: {
+ enter(path, state) {
+ // We can stop since this should be the last transform step.
+ // See nomodule-loader-config.js
+ path.stop();
+
+ if (!isModule(path)) {
+ throw new Error();
+ }
+ const loose = true;
+ const noInterop = true;
+ const {headers, meta} = rewriteModuleStatementsAndPrepareHeader(
+ path,
+ {loose, noInterop}
+ );
+
+ const filename = relative(process.cwd(), state.filename);
+ const importNames = [];
+ const callbackArgs = [];
+ const metaHasExports = hasExports(meta);
+ if (metaHasExports) {
+ // exports is identified as the number 0
+ importNames.push(t.numericLiteral(0));
+ callbackArgs.push(t.identifier(meta.exportName));
+ }
+ for (const [source, metadata] of meta.source) {
+ importNames.push(
+ t.stringLiteral(resolveModuleName(filename, source))
+ );
+ callbackArgs.push(t.identifier(metadata.name));
+ headers.push(
+ ...buildNamespaceInitStatements(meta, metadata, loose)
+ );
+ }
+ if (importNames.length < 1) {
+ return;
+ }
+ ensureStatementsHoisted(headers);
+ path.unshiftContainer('body', headers);
+ injectWrapper(
+ path,
+ buildWrapper({
+ __MODULE_NAME__: t.stringLiteral(pathToModuleName(filename)),
+ __HAS_EXPORTS__: t.booleanLiteral(metaHasExports),
+ __ONLY_EXPORTS__: t.booleanLiteral(
+ metaHasExports && importNames.length === 1
+ ),
+ __IMPORT_NAMES__: t.arrayExpression(importNames),
+ __SINGLE_IMPORT_NO_EXPORTS__:
+ importNames.length === 1 && !metaHasExports
+ ? t.cloneNode(importNames[0])
+ : t.nullLiteral(),
+ __CALLBACK_ARGS__: callbackArgs,
+ })
+ );
+ },
+ },
+ },
+ };
+};
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-default/input.mjs b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-default/input.mjs
new file mode 100644
index 000000000000..9385f7349188
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-default/input.mjs
@@ -0,0 +1 @@
+export default function fn() {}
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-default/options.json b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-default/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-default/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-default/output.js b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-default/output.js
new file mode 100644
index 000000000000..b93af0d76598
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-default/output.js
@@ -0,0 +1,42 @@
+(function defineish(defineCallback) {
+ var callbacks = self.BENTO = self.BENTO || {};
+ var exec = true ? function (_exports) {
+ defineCallback.apply(null, arguments);
+ var name = "build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-default/input";
+ var awaiting = callbacks[name] = callbacks[name] || [];
+
+ while (awaiting.length) {
+ awaiting.pop()(_exports);
+ }
+
+ awaiting.push = function (callback) {
+ callback(_exports);
+ };
+ } : defineCallback;
+
+ if (true) {
+ exec({});
+ } else if (null) {
+ var name = null;
+ (callbacks[name] = callbacks[name] || []).push(exec);
+ } else {
+ Promise.all([0].map(function (name) {
+ if (true && name === 0) {
+ return {};
+ }
+
+ return new Promise(function (resolve) {
+ (callbacks[name] = callbacks[name] || []).push(resolve);
+ });
+ })).then(function (modules) {
+ exec.apply(null, modules);
+ });
+ }
+})(function (_exports) {
+ "use strict";
+
+ _exports.__esModule = true;
+ _exports.default = fn;
+
+ function fn() {}
+});
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-from/input.mjs b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-from/input.mjs
new file mode 100644
index 000000000000..2f81f2527127
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-from/input.mjs
@@ -0,0 +1 @@
+export {x, y, z} from './abc';
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-from/options.json b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-from/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-from/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-from/output.js b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-from/output.js
new file mode 100644
index 000000000000..94dc3e894dfe
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-from/output.js
@@ -0,0 +1,43 @@
+(function defineish(defineCallback) {
+ var callbacks = self.BENTO = self.BENTO || {};
+ var exec = true ? function (_exports) {
+ defineCallback.apply(null, arguments);
+ var name = "build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-from/input";
+ var awaiting = callbacks[name] = callbacks[name] || [];
+
+ while (awaiting.length) {
+ awaiting.pop()(_exports);
+ }
+
+ awaiting.push = function (callback) {
+ callback(_exports);
+ };
+ } : defineCallback;
+
+ if (false) {
+ exec({});
+ } else if (null) {
+ var name = null;
+ (callbacks[name] = callbacks[name] || []).push(exec);
+ } else {
+ Promise.all([0, "build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/export-from/abc"].map(function (name) {
+ if (true && name === 0) {
+ return {};
+ }
+
+ return new Promise(function (resolve) {
+ (callbacks[name] = callbacks[name] || []).push(resolve);
+ });
+ })).then(function (modules) {
+ exec.apply(null, modules);
+ });
+ }
+})(function (_exports, _abc) {
+ "use strict";
+
+ _exports.__esModule = true;
+ _exports.z = _exports.y = _exports.x = void 0;
+ _exports.x = _abc.x;
+ _exports.y = _abc.y;
+ _exports.z = _abc.z;
+});
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/input.mjs b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/input.mjs
new file mode 100644
index 000000000000..70e7fa2cda07
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/input.mjs
@@ -0,0 +1,2 @@
+import x from 'x';
+console.log(x);
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/options.json b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/output.js b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/output.js
new file mode 100644
index 000000000000..dfbc4e1eb1ac
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/output.js
@@ -0,0 +1,39 @@
+(function defineish(defineCallback) {
+ var callbacks = self.BENTO = self.BENTO || {};
+ var exec = false ? function (_exports) {
+ defineCallback.apply(null, arguments);
+ var name = "build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/input";
+ var awaiting = callbacks[name] = callbacks[name] || [];
+
+ while (awaiting.length) {
+ awaiting.pop()(_exports);
+ }
+
+ awaiting.push = function (callback) {
+ callback(_exports);
+ };
+ } : defineCallback;
+
+ if (false) {
+ exec({});
+ } else if ("build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/x") {
+ var name = "build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/x";
+ (callbacks[name] = callbacks[name] || []).push(exec);
+ } else {
+ Promise.all(["build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/import-default/x"].map(function (name) {
+ if (false && name === 0) {
+ return {};
+ }
+
+ return new Promise(function (resolve) {
+ (callbacks[name] = callbacks[name] || []).push(resolve);
+ });
+ })).then(function (modules) {
+ exec.apply(null, modules);
+ });
+ }
+})(function (_x) {
+ "use strict";
+
+ console.log(_x.default);
+});
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/imports-and-exports/input.mjs b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/imports-and-exports/input.mjs
new file mode 100644
index 000000000000..76861af0119d
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/imports-and-exports/input.mjs
@@ -0,0 +1,3 @@
+import {foo, bar} from './foo';
+
+export const baz = {foo, bar, baz: 'baz'};
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/imports-and-exports/options.json b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/imports-and-exports/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/imports-and-exports/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/imports-and-exports/output.js b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/imports-and-exports/output.js
new file mode 100644
index 000000000000..0a95557176a9
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/imports-and-exports/output.js
@@ -0,0 +1,46 @@
+(function defineish(defineCallback) {
+ var callbacks = self.BENTO = self.BENTO || {};
+ var exec = true ? function (_exports) {
+ defineCallback.apply(null, arguments);
+ var name = "build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/imports-and-exports/input";
+ var awaiting = callbacks[name] = callbacks[name] || [];
+
+ while (awaiting.length) {
+ awaiting.pop()(_exports);
+ }
+
+ awaiting.push = function (callback) {
+ callback(_exports);
+ };
+ } : defineCallback;
+
+ if (false) {
+ exec({});
+ } else if (null) {
+ var name = null;
+ (callbacks[name] = callbacks[name] || []).push(exec);
+ } else {
+ Promise.all([0, "build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/imports-and-exports/foo"].map(function (name) {
+ if (true && name === 0) {
+ return {};
+ }
+
+ return new Promise(function (resolve) {
+ (callbacks[name] = callbacks[name] || []).push(resolve);
+ });
+ })).then(function (modules) {
+ exec.apply(null, modules);
+ });
+ }
+})(function (_exports, _foo) {
+ "use strict";
+
+ _exports.__esModule = true;
+ _exports.baz = void 0;
+ const baz = {
+ foo: _foo.foo,
+ bar: _foo.bar,
+ baz: 'baz'
+ };
+ _exports.baz = baz;
+});
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/no-transform/input.mjs b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/no-transform/input.mjs
new file mode 100644
index 000000000000..2d847b16e7d5
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/no-transform/input.mjs
@@ -0,0 +1 @@
+function x() {}
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/no-transform/options.json b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/no-transform/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/no-transform/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/no-transform/output.js b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/no-transform/output.js
new file mode 100644
index 000000000000..2f817152daa8
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/no-transform/output.js
@@ -0,0 +1,3 @@
+"use strict";
+
+function x() {}
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/only-exports/input.mjs b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/only-exports/input.mjs
new file mode 100644
index 000000000000..eee8cd5a00a7
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/only-exports/input.mjs
@@ -0,0 +1,2 @@
+export const x = 'y';
+export function y() {}
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/only-exports/options.json b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/only-exports/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/only-exports/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/only-exports/output.js b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/only-exports/output.js
new file mode 100644
index 000000000000..05c8140a1004
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/only-exports/output.js
@@ -0,0 +1,45 @@
+(function defineish(defineCallback) {
+ var callbacks = self.BENTO = self.BENTO || {};
+ var exec = true ? function (_exports) {
+ defineCallback.apply(null, arguments);
+ var name = "build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/only-exports/input";
+ var awaiting = callbacks[name] = callbacks[name] || [];
+
+ while (awaiting.length) {
+ awaiting.pop()(_exports);
+ }
+
+ awaiting.push = function (callback) {
+ callback(_exports);
+ };
+ } : defineCallback;
+
+ if (true) {
+ exec({});
+ } else if (null) {
+ var name = null;
+ (callbacks[name] = callbacks[name] || []).push(exec);
+ } else {
+ Promise.all([0].map(function (name) {
+ if (true && name === 0) {
+ return {};
+ }
+
+ return new Promise(function (resolve) {
+ (callbacks[name] = callbacks[name] || []).push(resolve);
+ });
+ })).then(function (modules) {
+ exec.apply(null, modules);
+ });
+ }
+})(function (_exports) {
+ "use strict";
+
+ _exports.__esModule = true;
+ _exports.y = y;
+ _exports.x = void 0;
+ const x = 'y';
+ _exports.x = x;
+
+ function y() {}
+});
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/input.mjs b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/input.mjs
new file mode 100644
index 000000000000..be8d6e914b2c
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/input.mjs
@@ -0,0 +1,3 @@
+import {foo, bar} from './foo';
+
+console.log({foo, bar});
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/options.json b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/options.json
new file mode 100644
index 000000000000..3ebeb6374116
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/options.json
@@ -0,0 +1,5 @@
+{
+ "plugins": [
+ "../../../.."
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/output.js b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/output.js
new file mode 100644
index 000000000000..33ec139133d7
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/output.js
@@ -0,0 +1,42 @@
+(function defineish(defineCallback) {
+ var callbacks = self.BENTO = self.BENTO || {};
+ var exec = false ? function (_exports) {
+ defineCallback.apply(null, arguments);
+ var name = "build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/input";
+ var awaiting = callbacks[name] = callbacks[name] || [];
+
+ while (awaiting.length) {
+ awaiting.pop()(_exports);
+ }
+
+ awaiting.push = function (callback) {
+ callback(_exports);
+ };
+ } : defineCallback;
+
+ if (false) {
+ exec({});
+ } else if ("build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/foo") {
+ var name = "build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/foo";
+ (callbacks[name] = callbacks[name] || []).push(exec);
+ } else {
+ Promise.all(["build-system/babel-plugins/babel-plugin-nomodule-loader/test/fixtures/transform/single-import-name/foo"].map(function (name) {
+ if (false && name === 0) {
+ return {};
+ }
+
+ return new Promise(function (resolve) {
+ (callbacks[name] = callbacks[name] || []).push(resolve);
+ });
+ })).then(function (modules) {
+ exec.apply(null, modules);
+ });
+ }
+})(function (_foo) {
+ "use strict";
+
+ console.log({
+ foo: _foo.foo,
+ bar: _foo.bar
+ });
+});
diff --git a/build-system/babel-plugins/babel-plugin-nomodule-loader/test/index.js b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/index.js
new file mode 100644
index 000000000000..23251129fae9
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-nomodule-loader/test/index.js
@@ -0,0 +1,3 @@
+const runner = require('@babel/helper-plugin-test-runner').default;
+
+runner(__dirname);
diff --git a/build-system/babel-plugins/babel-plugin-react-style-props/index.js b/build-system/babel-plugins/babel-plugin-react-style-props/index.js
new file mode 100644
index 000000000000..1c9a4cfaca85
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-react-style-props/index.js
@@ -0,0 +1,40 @@
+/**
+ * @fileoverview
+ * Transforms Preact-style props ("class") into React-style ("className")
+ */
+const {ATTRIBUTES_PREACT_TO_REACT} = require('../../common/preact-prop-names');
+
+const propNameFn = 'propName';
+
+module.exports = function (babel) {
+ const {types: t} = babel;
+
+ /**
+ * @param {string} name
+ * @return {?string}
+ */
+ function getReactStyle(name) {
+ return ATTRIBUTES_PREACT_TO_REACT[name] ?? name;
+ }
+
+ return {
+ name: 'react-style-props',
+ visitor: {
+ JSXAttribute(path) {
+ const reactStyle = getReactStyle(path.node.name.name);
+ path.node.name.name = reactStyle;
+ },
+ CallExpression(path) {
+ if (!t.isIdentifier(path.node.callee, {name: propNameFn})) {
+ return;
+ }
+ const arg = path.get('arguments.0');
+ if (!arg.isStringLiteral()) {
+ throw arg.buildCodeFrameError('Should be string literal');
+ }
+ const reactStyle = getReactStyle(arg.node.value);
+ path.replaceWith(t.stringLiteral(reactStyle));
+ },
+ },
+ };
+};
diff --git a/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/class/input.js b/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/class/input.js
new file mode 100644
index 000000000000..976ffe9574a4
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/class/input.js
@@ -0,0 +1 @@
+ {}} />;
diff --git a/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/class/options.json b/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/class/options.json
new file mode 100644
index 000000000000..58d05e6c4676
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/class/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../..",
+ "@babel/plugin-transform-react-jsx"
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/class/output.js b/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/class/output.js
new file mode 100644
index 000000000000..308e1d093ab8
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/class/output.js
@@ -0,0 +1,7 @@
+/*#__PURE__*/
+React.createElement("div", {
+ id: "foo",
+ className: "foo",
+ hidden: true,
+ onClick: () => {}
+});
diff --git a/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/function/input.js b/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/function/input.js
new file mode 100644
index 000000000000..217c80371fdb
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/function/input.js
@@ -0,0 +1,2 @@
+propName('class');
+propName('foobarbaz');
diff --git a/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/function/options.json b/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/function/options.json
new file mode 100644
index 000000000000..58d05e6c4676
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/function/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../..",
+ "@babel/plugin-transform-react-jsx"
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/function/output.js b/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/function/output.js
new file mode 100644
index 000000000000..08ea666858eb
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-react-style-props/test/fixtures/transform/function/output.js
@@ -0,0 +1,2 @@
+"className";
+"foobarbaz";
diff --git a/build-system/babel-plugins/babel-plugin-react-style-props/test/index.js b/build-system/babel-plugins/babel-plugin-react-style-props/test/index.js
new file mode 100644
index 000000000000..23251129fae9
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-react-style-props/test/index.js
@@ -0,0 +1,3 @@
+const runner = require('@babel/helper-plugin-test-runner').default;
+
+runner(__dirname);
diff --git a/build-system/babel-plugins/babel-plugin-transform-fix-leading-comments/test/fixtures/transform/basic/input.js b/build-system/babel-plugins/babel-plugin-transform-fix-leading-comments/test/fixtures/transform/basic/input.js
index 74998b529de9..e16787f063e6 100644
--- a/build-system/babel-plugins/babel-plugin-transform-fix-leading-comments/test/fixtures/transform/basic/input.js
+++ b/build-system/babel-plugins/babel-plugin-transform-fix-leading-comments/test/fixtures/transform/basic/input.js
@@ -1,5 +1,5 @@
/**
- * @protected {?Object
}
+ * @protected {?{[key: string]: !ChildDef}}
*/
foo().bar;
diff --git a/build-system/babel-plugins/babel-plugin-transform-fix-leading-comments/test/fixtures/transform/basic/output.js b/build-system/babel-plugins/babel-plugin-transform-fix-leading-comments/test/fixtures/transform/basic/output.js
index 74998b529de9..e16787f063e6 100644
--- a/build-system/babel-plugins/babel-plugin-transform-fix-leading-comments/test/fixtures/transform/basic/output.js
+++ b/build-system/babel-plugins/babel-plugin-transform-fix-leading-comments/test/fixtures/transform/basic/output.js
@@ -1,5 +1,5 @@
/**
- * @protected {?Object}
+ * @protected {?{[key: string]: !ChildDef}}
*/
foo().bar;
diff --git a/build-system/babel-plugins/babel-plugin-transform-inline-isenumvalue/index.js b/build-system/babel-plugins/babel-plugin-transform-inline-isenumvalue/index.js
index 02cdb39c1465..6fe0aa5be473 100644
--- a/build-system/babel-plugins/babel-plugin-transform-inline-isenumvalue/index.js
+++ b/build-system/babel-plugins/babel-plugin-transform-inline-isenumvalue/index.js
@@ -165,14 +165,19 @@ module.exports = function (babel) {
isEnumValueCache.set(evaluated.value, id);
// (x) => x === 1 || x === 2 || x === 3 || ...
- const expression = Object.values(evaluated.value)
- .map((value) =>
- t.binaryExpression('===', t.identifier('x'), t.valueToNode(value))
- )
- .reduce(
- (a, b) => t.logicalExpression('||', a, b),
- t.booleanLiteral(false)
- );
+ const values = Object.values(evaluated.value);
+ const expression =
+ values.length === 0
+ ? t.booleanLiteral(false)
+ : values
+ .map((value) =>
+ t.binaryExpression(
+ '===',
+ t.identifier('x'),
+ t.valueToNode(value)
+ )
+ )
+ .reduce((a, b) => t.logicalExpression('||', a, b));
pushIntoProgramScope(
path,
id,
diff --git a/build-system/babel-plugins/babel-plugin-transform-inline-isenumvalue/test/fixtures/transform-assertions/isenumvalue/output.mjs b/build-system/babel-plugins/babel-plugin-transform-inline-isenumvalue/test/fixtures/transform-assertions/isenumvalue/output.mjs
index 9f125886de8c..5cd7319656f6 100644
--- a/build-system/babel-plugins/babel-plugin-transform-inline-isenumvalue/test/fixtures/transform-assertions/isenumvalue/output.mjs
+++ b/build-system/babel-plugins/babel-plugin-transform-inline-isenumvalue/test/fixtures/transform-assertions/isenumvalue/output.mjs
@@ -1,7 +1,7 @@
-const _isEnumValue_exportedEnum = x => false || x === "A" || x === "B" || x === "C",
- _isEnumValue_enumInFile = x => false || x === 1 || x === 100 || x === 2,
- _isEnumValue_ = x => false || x === "FOO" || x === 100 || x === 2,
- _isEnumValue_2 = x => false || x === "single-item";
+const _isEnumValue_exportedEnum = x => x === "A" || x === "B" || x === "C",
+ _isEnumValue_enumInFile = x => x === 1 || x === 100 || x === 2,
+ _isEnumValue_ = x => x === "FOO" || x === 100 || x === 2,
+ _isEnumValue_2 = x => x === "single-item";
import { exportedEnum } from './exported.mjs';
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/index.js b/build-system/babel-plugins/babel-plugin-transform-json-import/index.js
index 9b6725678a7e..05e4302874d0 100644
--- a/build-system/babel-plugins/babel-plugin-transform-json-import/index.js
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/index.js
@@ -1,5 +1,8 @@
-const {dirname, join, relative, resolve} = require('path');
+const json5 = require('json5');
+const {ajvCompile, transformAjvCode} = require('../../compile/json-schema');
+const {basename, dirname, join, relative, resolve} = require('path');
const {readFileSync} = require('fs');
+const {readJson} = require('../../json-locales');
/**
* Transforms JSON imports into a `JSON.parse` call:
@@ -21,29 +24,59 @@ module.exports = function (babel) {
const {template, types: t} = babel;
/**
- * JSON reviver that converts {"string": "foo", ...} to just "foo".
- * This minifies the format of locale files.
- * @param {string} _
- * @param {*} value
- * @return {*}
+ * @type {{
+ * [type: string]: (
+ * path: babel.NodePath,
+ * jsonPath: string
+ * ) => babel.types.Expression,
+ * }}
*/
- function minifyLocalesJsonReviver(_, value) {
- // Always default to original `value` since this reviver is called for any
- // property pair, including the higher-level containing object.
- return value?.string || value;
- }
+ const typeAssertions = {
+ 'json': (path, jsonPath) => {
+ let json;
+ try {
+ json = readJson(jsonPath);
+ } catch (e) {
+ throw path.buildCodeFrameError(
+ `could not load JSON file at '${jsonPath}'`
+ );
+ }
+ return template.expression.ast`
+ JSON.parse('${JSON.stringify(json)}')
+ `;
+ },
- /**
- * @param {string} filename
- * @return {*}
- */
- function readJson(filename) {
- // Treat files under /_locales/ specially in order to minify their format.
- const reviver = filename.includes('/_locales/')
- ? minifyLocalesJsonReviver
- : undefined;
- return JSON.parse(readFileSync(filename, 'utf8'), reviver);
- }
+ 'json-schema': (path, jsonPath) => {
+ // json5 to allow comments
+ const schema = json5.parse(readFileSync(jsonPath, 'utf8'));
+ const code = ajvCompile(schema);
+
+ const taken = new Set(Object.keys(path.scope.bindings));
+ const {name, result} = transformAjvCode(code, taken, {
+ code: false,
+ ast: true,
+ });
+
+ path.insertBefore(result?.ast?.program.body || []);
+
+ const defaultSchemaName = basename(
+ basename(jsonPath, '.json'),
+ '.schema'
+ );
+ // The generated function returns a boolean, and modifies a property of
+ // itself for errors. We wrap it to instead return an array of errors,
+ // which is empty when the input is valid.
+ return template.expression.ast`
+ (data, schemaName = ${JSON.stringify(defaultSchemaName)}) =>
+ ${name}(data, schemaName) ? [] : ${name}.errors
+ `;
+ },
+ };
+
+ const supportedAssertionsMessage = () =>
+ Object.keys(typeAssertions)
+ .map((type) => `assert {"type": "${type}"}`)
+ .join(', ');
return {
manipulateOptions(_opts, parserOpts) {
@@ -62,10 +95,15 @@ module.exports = function (babel) {
'babel plugin transform-json-import must be called with a filename'
);
}
-
+ const [specifier] = specifiers;
+ if (!t.isImportDefaultSpecifier(specifier)) {
+ throw path.buildCodeFrameError(
+ `must import default from JSON: \`import name from '...'\``
+ );
+ }
if (assertions.length !== 1) {
throw path.buildCodeFrameError(
- 'too many import assertions, we only support `assert { "type": "json" }`'
+ `too many import assertions, we only support \`${supportedAssertionsMessage()}\``
);
}
const assertion = assertions[0];
@@ -74,33 +112,26 @@ module.exports = function (babel) {
!t.isStringLiteral(assertion.key, {value: 'type'})
) {
throw path.buildCodeFrameError(
- 'unknown assertion, we only support `assert { "type": "json" }`'
+ `unknown assertion, we only support \`${supportedAssertionsMessage()}\``
);
}
- if (!t.isStringLiteral(assertion.value, {value: 'json'})) {
+ const type = Object.keys(typeAssertions).find((type) =>
+ t.isStringLiteral(assertion.value, {value: type})
+ );
+ if (!type) {
throw path.buildCodeFrameError(
- 'unknown type assertion, we only support `assert { "type": "json" }`'
+ `unknown type assertion, we only support \`${supportedAssertionsMessage()}\``
);
}
-
- const specifier = specifiers[0].local;
const jsonPath = relative(
join(__dirname, '..', '..', '..'),
resolve(dirname(filename), source.value)
);
- let json;
- try {
- json = readJson(jsonPath);
- } catch (e) {
- throw path.buildCodeFrameError(
- `could not load JSON file at '${jsonPath}'`
- );
- }
-
- path.replaceWith(
- template.statement
- .ast`const ${specifier} = JSON.parse('${JSON.stringify(json)}');`
- );
+ const init = typeAssertions[type](path, jsonPath);
+ const statement = template.statement.ast`
+ const ${specifier.local} = ${init};
+ `;
+ path.replaceWith(statement);
},
},
};
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-not-type-assertion/options.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-not-type-assertion/options.json
index ec2a32dd6f06..36795b3ac6d6 100644
--- a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-not-type-assertion/options.json
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-not-type-assertion/options.json
@@ -3,5 +3,5 @@
"../../../.."
],
"sourceType": "module",
- "throws": "unknown assertion, we only support `assert { \"type\": \"json\" }`"
+ "throws": "unknown assertion, we only support `assert {\"type\": \"json\"}, assert {\"type\": \"json-schema\"}`"
}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-not-type-json-assertion/options.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-not-type-json-assertion/options.json
index 4e7e585dda1a..f276b4454405 100644
--- a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-not-type-json-assertion/options.json
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-not-type-json-assertion/options.json
@@ -3,5 +3,5 @@
"../../../.."
],
"sourceType": "module",
- "throws": "unknown type assertion, we only support `assert { \"type\": \"json\" }`"
+ "throws": "unknown type assertion, we only support `assert {\"type\": \"json\"}, assert {\"type\": \"json-schema\"}`"
}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-schema-format-unsupported/format-unsupported.schema.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-schema-format-unsupported/format-unsupported.schema.json
new file mode 100644
index 000000000000..d06e50408d04
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-schema-format-unsupported/format-unsupported.schema.json
@@ -0,0 +1,3 @@
+{
+ "format": "int64"
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-schema-format-unsupported/input.js b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-schema-format-unsupported/input.js
new file mode 100644
index 000000000000..078a2a652fec
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-schema-format-unsupported/input.js
@@ -0,0 +1 @@
+import validate from './format-unsupported.schema.json' assert {type: 'json-schema'};
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-schema-format-unsupported/options.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-schema-format-unsupported/options.json
new file mode 100644
index 000000000000..ecf396369615
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-schema-format-unsupported/options.json
@@ -0,0 +1,7 @@
+{
+ "plugins": [
+ "../../../.."
+ ],
+ "sourceType": "module",
+ "throws": "unknown format \"int64\" ignored in schema at path \"#\""
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-too-many-assertions/options.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-too-many-assertions/options.json
index 0dd9bb6c51ee..32f56780c08e 100644
--- a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-too-many-assertions/options.json
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/error-too-many-assertions/options.json
@@ -3,5 +3,5 @@
"../../../.."
],
"sourceType": "module",
- "throws": "too many import assertions, we only support `assert { \"type\": \"json\" }`"
+ "throws": "too many import assertions, we only support `assert {\"type\": \"json\"}, assert {\"type\": \"json-schema\"}`"
}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-complex/complex.schema.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-complex/complex.schema.json
new file mode 100644
index 000000000000..8a550d3b4514
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-complex/complex.schema.json
@@ -0,0 +1,288 @@
+{
+ "$id": "my-id",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "items"
+ ],
+ "properties": {
+ "recursive": {
+ "$ref": "#/"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "a",
+ "b",
+ "c",
+ "d",
+ "e",
+ "f",
+ "g",
+ "h",
+ "i"
+ ],
+ "properties": {
+ "recursive": {
+ "$ref": "#/properties/items"
+ },
+ "a": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "number"
+ }
+ ]
+ },
+ "b": {
+ "$ref": "#/properties/items/items/properties/a/oneOf/1"
+ },
+ "c": {
+ "type": "string"
+ },
+ "d": {
+ "type": "string"
+ },
+ "h": {
+ "type": "string"
+ },
+ "e": {
+ "type": "number",
+ "minimum": 0
+ },
+ "f": {
+ "description": "https://en.wikipedia.org/wiki/ISO_4217",
+ "enum": [
+ "AED",
+ "AFN",
+ "ALL",
+ "AMD",
+ "ANG",
+ "AOA",
+ "ARS",
+ "AUD",
+ "AWG",
+ "AZN",
+ "BAM",
+ "BBD",
+ "BDT",
+ "BGN",
+ "BHD",
+ "BIF",
+ "BMD",
+ "BND",
+ "BOB",
+ "BOV",
+ "BRL",
+ "BSD",
+ "BTN",
+ "BWP",
+ "BYN",
+ "BZD",
+ "CAD",
+ "CDF",
+ "CHE",
+ "CHF",
+ "CHW",
+ "CLF",
+ "CLP",
+ "CNY",
+ "COP",
+ "COU",
+ "CRC",
+ "CUC",
+ "CUP",
+ "CVE",
+ "CZK",
+ "DJF",
+ "DKK",
+ "DOP",
+ "DZD",
+ "EGP",
+ "ERN",
+ "ETB",
+ "EUR",
+ "FJD",
+ "FKP",
+ "GBP",
+ "GEL",
+ "GHS",
+ "GIP",
+ "GMD",
+ "GNF",
+ "GTQ",
+ "GYD",
+ "HKD",
+ "HNL",
+ "HRK",
+ "HTG",
+ "HUF",
+ "IDR",
+ "ILS",
+ "INR",
+ "IQD",
+ "IRR",
+ "ISK",
+ "JMD",
+ "JOD",
+ "JPY",
+ "KES",
+ "KGS",
+ "KHR",
+ "KMF",
+ "KPW",
+ "KRW",
+ "KWD",
+ "KYD",
+ "KZT",
+ "LAK",
+ "LBP",
+ "LKR",
+ "LRD",
+ "LSL",
+ "LYD",
+ "MAD",
+ "MDL",
+ "MGA",
+ "MKD",
+ "MMK",
+ "MNT",
+ "MOP",
+ "MRU",
+ "MUR",
+ "MVR",
+ "MWK",
+ "MXN",
+ "MXV",
+ "MYR",
+ "MZN",
+ "NAD",
+ "NGN",
+ "NIO",
+ "NOK",
+ "NPR",
+ "NZD",
+ "OMR",
+ "PAB",
+ "PEN",
+ "PGK",
+ "PHP",
+ "PKR",
+ "PLN",
+ "PYG",
+ "QAR",
+ "RON",
+ "RSD",
+ "RUB",
+ "RWF",
+ "SAR",
+ "SBD",
+ "SCR",
+ "SDG",
+ "SEK",
+ "SGD",
+ "SHP",
+ "SLL",
+ "SOS",
+ "SRD",
+ "SSP",
+ "STN",
+ "SVC",
+ "SYP",
+ "SZL",
+ "THB",
+ "TJS",
+ "TMT",
+ "TND",
+ "TOP",
+ "TRY",
+ "TTD",
+ "TWD",
+ "TZS",
+ "UAH",
+ "UGX",
+ "USD",
+ "USN",
+ "UYI",
+ "UYU",
+ "UYW",
+ "UZS",
+ "VED",
+ "VES",
+ "VND",
+ "VUV",
+ "WST",
+ "XAF",
+ "XAG",
+ "XAU",
+ "XBA",
+ "XBB",
+ "XBC",
+ "XBD",
+ "XCD",
+ "XDR",
+ "XOF",
+ "XPD",
+ "XPF",
+ "XPT",
+ "XSU",
+ "XTS",
+ "XUA",
+ "XXX",
+ "YER",
+ "ZAR",
+ "ZMW",
+ "ZWL"
+ ]
+ },
+ "g": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "url",
+ "altText"
+ ],
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "altText": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "i": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "ratingValue",
+ "ratingCount",
+ "ratingUrl"
+ ],
+ "properties": {
+ "ratingValue": {
+ "type": "number",
+ "minimum": 0
+ },
+ "ratingCount": {
+ "type": "number",
+ "minimum": 0
+ },
+ "ratingUrl": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-complex/input.js b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-complex/input.js
new file mode 100644
index 000000000000..763df625f879
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-complex/input.js
@@ -0,0 +1,3 @@
+import validate from './complex.schema.json' assert {type: 'json-schema'};
+
+console./*OK*/ log(validate({}));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-complex/options.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-complex/options.json
new file mode 100644
index 000000000000..239cccc175ab
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-complex/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../.."
+ ],
+ "sourceType": "module"
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-complex/output.mjs b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-complex/output.mjs
new file mode 100644
index 000000000000..90f88492b9af
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-complex/output.mjs
@@ -0,0 +1,1235 @@
+const _schema = {
+ recursive: 0,
+ a: 0,
+ b: 0,
+ c: 0,
+ d: 0,
+ h: 0,
+ e: 0,
+ f: 0,
+ g: 0,
+ i: 0
+};
+import { isIso4217CurrencyCode } from '#core/json-schema';
+"use strict";
+
+const _validate = validate0;
+const func0 = Object.prototype.hasOwnProperty;
+const wrapper0 = {
+ validate: validate1
+};
+
+function validate2(data, instancePath = "") {
+ let vErrors = null;
+ let errors = 0;
+
+ if (!(typeof data == "number" && isFinite(data))) {
+ const err0 = (instancePath + ' ' + "must be number").trim();
+
+ if (vErrors === null) {
+ vErrors = [err0];
+ } else {
+ vErrors.push(err0);
+ }
+
+ errors++;
+ }
+
+ validate2.errors = vErrors;
+ return errors === 0;
+}
+
+function validate1(data, instancePath = "") {
+ let vErrors = null;
+ let errors = 0;
+
+ if (Array.isArray(data)) {
+ const len0 = data.length;
+
+ for (let i0 = 0; i0 < len0; i0++) {
+ let data0 = data[i0];
+
+ if (data0 && typeof data0 == "object" && !Array.isArray(data0)) {
+ if (data0.a === undefined) {
+ const err0 = (instancePath + "/" + i0 + ' ' + ("must have required property '" + "a" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err0];
+ } else {
+ vErrors.push(err0);
+ }
+
+ errors++;
+ }
+
+ if (data0.b === undefined) {
+ const err1 = (instancePath + "/" + i0 + ' ' + ("must have required property '" + "b" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err1];
+ } else {
+ vErrors.push(err1);
+ }
+
+ errors++;
+ }
+
+ if (data0.c === undefined) {
+ const err2 = (instancePath + "/" + i0 + ' ' + ("must have required property '" + "c" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err2];
+ } else {
+ vErrors.push(err2);
+ }
+
+ errors++;
+ }
+
+ if (data0.d === undefined) {
+ const err3 = (instancePath + "/" + i0 + ' ' + ("must have required property '" + "d" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err3];
+ } else {
+ vErrors.push(err3);
+ }
+
+ errors++;
+ }
+
+ if (data0.e === undefined) {
+ const err4 = (instancePath + "/" + i0 + ' ' + ("must have required property '" + "e" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err4];
+ } else {
+ vErrors.push(err4);
+ }
+
+ errors++;
+ }
+
+ if (data0.f === undefined) {
+ const err5 = (instancePath + "/" + i0 + ' ' + ("must have required property '" + "f" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err5];
+ } else {
+ vErrors.push(err5);
+ }
+
+ errors++;
+ }
+
+ if (data0.g === undefined) {
+ const err6 = (instancePath + "/" + i0 + ' ' + ("must have required property '" + "g" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err6];
+ } else {
+ vErrors.push(err6);
+ }
+
+ errors++;
+ }
+
+ if (data0.h === undefined) {
+ const err7 = (instancePath + "/" + i0 + ' ' + ("must have required property '" + "h" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err7];
+ } else {
+ vErrors.push(err7);
+ }
+
+ errors++;
+ }
+
+ if (data0.i === undefined) {
+ const err8 = (instancePath + "/" + i0 + ' ' + ("must have required property '" + "i" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err8];
+ } else {
+ vErrors.push(err8);
+ }
+
+ errors++;
+ }
+
+ for (const key0 in data0) {
+ if (!func0.call(_schema, key0)) {
+ const err9 = (instancePath + "/" + i0 + ' ' + "must NOT have additional properties").trim();
+
+ if (vErrors === null) {
+ vErrors = [err9];
+ } else {
+ vErrors.push(err9);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data0.recursive !== undefined) {
+ if (!wrapper0.validate(data0.recursive, instancePath + "/" + i0 + "/recursive")) {
+ vErrors = vErrors === null ? wrapper0.validate.errors : vErrors.concat(wrapper0.validate.errors);
+ errors = vErrors.length;
+ }
+ }
+
+ if (data0.a !== undefined) {
+ let data2 = data0.a;
+ const _errs6 = errors;
+ let valid3 = false;
+ let passing0 = null;
+ const _errs7 = errors;
+
+ if (typeof data2 !== "string") {
+ const err10 = (instancePath + "/" + i0 + "/a" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err10];
+ } else {
+ vErrors.push(err10);
+ }
+
+ errors++;
+ }
+
+ var _valid0 = _errs7 === errors;
+
+ if (_valid0) {
+ valid3 = true;
+ passing0 = 0;
+ }
+
+ const _errs9 = errors;
+
+ if (!(typeof data2 == "number" && isFinite(data2))) {
+ const err11 = (instancePath + "/" + i0 + "/a" + ' ' + "must be number").trim();
+
+ if (vErrors === null) {
+ vErrors = [err11];
+ } else {
+ vErrors.push(err11);
+ }
+
+ errors++;
+ }
+
+ var _valid0 = _errs9 === errors;
+
+ if (_valid0 && valid3) {
+ valid3 = false;
+ passing0 = [passing0, 1];
+ } else {
+ if (_valid0) {
+ valid3 = true;
+ passing0 = 1;
+ }
+ }
+
+ if (!valid3) {
+ const err12 = (instancePath + "/" + i0 + "/a" + ' ' + "must match exactly one schema in oneOf").trim();
+
+ if (vErrors === null) {
+ vErrors = [err12];
+ } else {
+ vErrors.push(err12);
+ }
+
+ errors++;
+ } else {
+ errors = _errs6;
+
+ if (vErrors !== null) {
+ if (_errs6) {
+ vErrors.length = _errs6;
+ } else {
+ vErrors = null;
+ }
+ }
+ }
+ }
+
+ if (data0.b !== undefined) {
+ if (!validate2(data0.b, instancePath + "/" + i0 + "/b")) {
+ vErrors = vErrors === null ? validate2.errors : vErrors.concat(validate2.errors);
+ errors = vErrors.length;
+ }
+ }
+
+ if (data0.c !== undefined) {
+ if (typeof data0.c !== "string") {
+ const err13 = (instancePath + "/" + i0 + "/c" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err13];
+ } else {
+ vErrors.push(err13);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data0.d !== undefined) {
+ if (typeof data0.d !== "string") {
+ const err14 = (instancePath + "/" + i0 + "/d" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err14];
+ } else {
+ vErrors.push(err14);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data0.h !== undefined) {
+ if (typeof data0.h !== "string") {
+ const err15 = (instancePath + "/" + i0 + "/h" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err15];
+ } else {
+ vErrors.push(err15);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data0.e !== undefined) {
+ let data7 = data0.e;
+
+ if (typeof data7 == "number" && isFinite(data7)) {
+ if (data7 < 0 || isNaN(data7)) {
+ const err16 = (instancePath + "/" + i0 + "/e" + ' ' + "must be >= 0").trim();
+
+ if (vErrors === null) {
+ vErrors = [err16];
+ } else {
+ vErrors.push(err16);
+ }
+
+ errors++;
+ }
+ } else {
+ const err17 = (instancePath + "/" + i0 + "/e" + ' ' + "must be number").trim();
+
+ if (vErrors === null) {
+ vErrors = [err17];
+ } else {
+ vErrors.push(err17);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data0.f !== undefined) {
+ if (!isIso4217CurrencyCode(data0.f)) {
+ const err18 = (instancePath + "/" + i0 + "/f" + ' ' + "must be a valid ISO 4217 currency code").trim();
+
+ if (vErrors === null) {
+ vErrors = [err18];
+ } else {
+ vErrors.push(err18);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data0.g !== undefined) {
+ let data9 = data0.g;
+
+ if (Array.isArray(data9)) {
+ const len1 = data9.length;
+
+ for (let i1 = 0; i1 < len1; i1++) {
+ let data10 = data9[i1];
+
+ if (data10 && typeof data10 == "object" && !Array.isArray(data10)) {
+ if (data10.url === undefined) {
+ const err19 = (instancePath + "/" + i0 + "/g/" + i1 + ' ' + ("must have required property '" + "url" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err19];
+ } else {
+ vErrors.push(err19);
+ }
+
+ errors++;
+ }
+
+ if (data10.altText === undefined) {
+ const err20 = (instancePath + "/" + i0 + "/g/" + i1 + ' ' + ("must have required property '" + "altText" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err20];
+ } else {
+ vErrors.push(err20);
+ }
+
+ errors++;
+ }
+
+ for (const key1 in data10) {
+ if (!(key1 === "url" || key1 === "altText")) {
+ const err21 = (instancePath + "/" + i0 + "/g/" + i1 + ' ' + "must NOT have additional properties").trim();
+
+ if (vErrors === null) {
+ vErrors = [err21];
+ } else {
+ vErrors.push(err21);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data10.url !== undefined) {
+ if (typeof data10.url !== "string") {
+ const err22 = (instancePath + "/" + i0 + "/g/" + i1 + "/url" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err22];
+ } else {
+ vErrors.push(err22);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data10.altText !== undefined) {
+ if (typeof data10.altText !== "string") {
+ const err23 = (instancePath + "/" + i0 + "/g/" + i1 + "/altText" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err23];
+ } else {
+ vErrors.push(err23);
+ }
+
+ errors++;
+ }
+ }
+ } else {
+ const err24 = (instancePath + "/" + i0 + "/g/" + i1 + ' ' + "must be object").trim();
+
+ if (vErrors === null) {
+ vErrors = [err24];
+ } else {
+ vErrors.push(err24);
+ }
+
+ errors++;
+ }
+ }
+ } else {
+ const err25 = (instancePath + "/" + i0 + "/g" + ' ' + "must be array").trim();
+
+ if (vErrors === null) {
+ vErrors = [err25];
+ } else {
+ vErrors.push(err25);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data0.i !== undefined) {
+ let data13 = data0.i;
+
+ if (data13 && typeof data13 == "object" && !Array.isArray(data13)) {
+ if (data13.ratingValue === undefined) {
+ const err26 = (instancePath + "/" + i0 + "/i" + ' ' + ("must have required property '" + "ratingValue" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err26];
+ } else {
+ vErrors.push(err26);
+ }
+
+ errors++;
+ }
+
+ if (data13.ratingCount === undefined) {
+ const err27 = (instancePath + "/" + i0 + "/i" + ' ' + ("must have required property '" + "ratingCount" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err27];
+ } else {
+ vErrors.push(err27);
+ }
+
+ errors++;
+ }
+
+ if (data13.ratingUrl === undefined) {
+ const err28 = (instancePath + "/" + i0 + "/i" + ' ' + ("must have required property '" + "ratingUrl" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err28];
+ } else {
+ vErrors.push(err28);
+ }
+
+ errors++;
+ }
+
+ for (const key2 in data13) {
+ if (!(key2 === "ratingValue" || key2 === "ratingCount" || key2 === "ratingUrl")) {
+ const err29 = (instancePath + "/" + i0 + "/i" + ' ' + "must NOT have additional properties").trim();
+
+ if (vErrors === null) {
+ vErrors = [err29];
+ } else {
+ vErrors.push(err29);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data13.ratingValue !== undefined) {
+ let data14 = data13.ratingValue;
+
+ if (typeof data14 == "number" && isFinite(data14)) {
+ if (data14 < 0 || isNaN(data14)) {
+ const err30 = (instancePath + "/" + i0 + "/i/ratingValue" + ' ' + "must be >= 0").trim();
+
+ if (vErrors === null) {
+ vErrors = [err30];
+ } else {
+ vErrors.push(err30);
+ }
+
+ errors++;
+ }
+ } else {
+ const err31 = (instancePath + "/" + i0 + "/i/ratingValue" + ' ' + "must be number").trim();
+
+ if (vErrors === null) {
+ vErrors = [err31];
+ } else {
+ vErrors.push(err31);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data13.ratingCount !== undefined) {
+ let data15 = data13.ratingCount;
+
+ if (typeof data15 == "number" && isFinite(data15)) {
+ if (data15 < 0 || isNaN(data15)) {
+ const err32 = (instancePath + "/" + i0 + "/i/ratingCount" + ' ' + "must be >= 0").trim();
+
+ if (vErrors === null) {
+ vErrors = [err32];
+ } else {
+ vErrors.push(err32);
+ }
+
+ errors++;
+ }
+ } else {
+ const err33 = (instancePath + "/" + i0 + "/i/ratingCount" + ' ' + "must be number").trim();
+
+ if (vErrors === null) {
+ vErrors = [err33];
+ } else {
+ vErrors.push(err33);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data13.ratingUrl !== undefined) {
+ if (typeof data13.ratingUrl !== "string") {
+ const err34 = (instancePath + "/" + i0 + "/i/ratingUrl" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err34];
+ } else {
+ vErrors.push(err34);
+ }
+
+ errors++;
+ }
+ }
+ } else {
+ const err35 = (instancePath + "/" + i0 + "/i" + ' ' + "must be object").trim();
+
+ if (vErrors === null) {
+ vErrors = [err35];
+ } else {
+ vErrors.push(err35);
+ }
+
+ errors++;
+ }
+ }
+ } else {
+ const err36 = (instancePath + "/" + i0 + ' ' + "must be object").trim();
+
+ if (vErrors === null) {
+ vErrors = [err36];
+ } else {
+ vErrors.push(err36);
+ }
+
+ errors++;
+ }
+ }
+ } else {
+ const err37 = (instancePath + ' ' + "must be array").trim();
+
+ if (vErrors === null) {
+ vErrors = [err37];
+ } else {
+ vErrors.push(err37);
+ }
+
+ errors++;
+ }
+
+ validate1.errors = vErrors;
+ return errors === 0;
+}
+
+function validate0(data, instancePath = "") {
+ /*# sourceURL="my-id" */
+ ;
+ let vErrors = null;
+ let errors = 0;
+
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ if (data.items === undefined) {
+ const err0 = (instancePath + ' ' + ("must have required property '" + "items" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err0];
+ } else {
+ vErrors.push(err0);
+ }
+
+ errors++;
+ }
+
+ for (const key0 in data) {
+ if (!(key0 === "recursive" || key0 === "items")) {
+ const err1 = (instancePath + ' ' + "must NOT have additional properties").trim();
+
+ if (vErrors === null) {
+ vErrors = [err1];
+ } else {
+ vErrors.push(err1);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data.recursive !== undefined) {
+ if (!validate0(data.recursive, instancePath + "/recursive")) {
+ vErrors = vErrors === null ? validate0.errors : vErrors.concat(validate0.errors);
+ errors = vErrors.length;
+ }
+ }
+
+ if (data.items !== undefined) {
+ let data1 = data.items;
+
+ if (Array.isArray(data1)) {
+ const len0 = data1.length;
+
+ for (let i0 = 0; i0 < len0; i0++) {
+ let data2 = data1[i0];
+
+ if (data2 && typeof data2 == "object" && !Array.isArray(data2)) {
+ if (data2.a === undefined) {
+ const err2 = (instancePath + "/items/" + i0 + ' ' + ("must have required property '" + "a" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err2];
+ } else {
+ vErrors.push(err2);
+ }
+
+ errors++;
+ }
+
+ if (data2.b === undefined) {
+ const err3 = (instancePath + "/items/" + i0 + ' ' + ("must have required property '" + "b" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err3];
+ } else {
+ vErrors.push(err3);
+ }
+
+ errors++;
+ }
+
+ if (data2.c === undefined) {
+ const err4 = (instancePath + "/items/" + i0 + ' ' + ("must have required property '" + "c" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err4];
+ } else {
+ vErrors.push(err4);
+ }
+
+ errors++;
+ }
+
+ if (data2.d === undefined) {
+ const err5 = (instancePath + "/items/" + i0 + ' ' + ("must have required property '" + "d" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err5];
+ } else {
+ vErrors.push(err5);
+ }
+
+ errors++;
+ }
+
+ if (data2.e === undefined) {
+ const err6 = (instancePath + "/items/" + i0 + ' ' + ("must have required property '" + "e" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err6];
+ } else {
+ vErrors.push(err6);
+ }
+
+ errors++;
+ }
+
+ if (data2.f === undefined) {
+ const err7 = (instancePath + "/items/" + i0 + ' ' + ("must have required property '" + "f" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err7];
+ } else {
+ vErrors.push(err7);
+ }
+
+ errors++;
+ }
+
+ if (data2.g === undefined) {
+ const err8 = (instancePath + "/items/" + i0 + ' ' + ("must have required property '" + "g" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err8];
+ } else {
+ vErrors.push(err8);
+ }
+
+ errors++;
+ }
+
+ if (data2.h === undefined) {
+ const err9 = (instancePath + "/items/" + i0 + ' ' + ("must have required property '" + "h" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err9];
+ } else {
+ vErrors.push(err9);
+ }
+
+ errors++;
+ }
+
+ if (data2.i === undefined) {
+ const err10 = (instancePath + "/items/" + i0 + ' ' + ("must have required property '" + "i" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err10];
+ } else {
+ vErrors.push(err10);
+ }
+
+ errors++;
+ }
+
+ for (const key1 in data2) {
+ if (!func0.call(_schema, key1)) {
+ const err11 = (instancePath + "/items/" + i0 + ' ' + "must NOT have additional properties").trim();
+
+ if (vErrors === null) {
+ vErrors = [err11];
+ } else {
+ vErrors.push(err11);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data2.recursive !== undefined) {
+ if (!validate1(data2.recursive, instancePath + "/items/" + i0 + "/recursive")) {
+ vErrors = vErrors === null ? validate1.errors : vErrors.concat(validate1.errors);
+ errors = vErrors.length;
+ }
+ }
+
+ if (data2.a !== undefined) {
+ let data4 = data2.a;
+ const _errs10 = errors;
+ let valid4 = false;
+ let passing0 = null;
+ const _errs11 = errors;
+
+ if (typeof data4 !== "string") {
+ const err12 = (instancePath + "/items/" + i0 + "/a" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err12];
+ } else {
+ vErrors.push(err12);
+ }
+
+ errors++;
+ }
+
+ var _valid0 = _errs11 === errors;
+
+ if (_valid0) {
+ valid4 = true;
+ passing0 = 0;
+ }
+
+ const _errs13 = errors;
+
+ if (!(typeof data4 == "number" && isFinite(data4))) {
+ const err13 = (instancePath + "/items/" + i0 + "/a" + ' ' + "must be number").trim();
+
+ if (vErrors === null) {
+ vErrors = [err13];
+ } else {
+ vErrors.push(err13);
+ }
+
+ errors++;
+ }
+
+ var _valid0 = _errs13 === errors;
+
+ if (_valid0 && valid4) {
+ valid4 = false;
+ passing0 = [passing0, 1];
+ } else {
+ if (_valid0) {
+ valid4 = true;
+ passing0 = 1;
+ }
+ }
+
+ if (!valid4) {
+ const err14 = (instancePath + "/items/" + i0 + "/a" + ' ' + "must match exactly one schema in oneOf").trim();
+
+ if (vErrors === null) {
+ vErrors = [err14];
+ } else {
+ vErrors.push(err14);
+ }
+
+ errors++;
+ } else {
+ errors = _errs10;
+
+ if (vErrors !== null) {
+ if (_errs10) {
+ vErrors.length = _errs10;
+ } else {
+ vErrors = null;
+ }
+ }
+ }
+ }
+
+ if (data2.b !== undefined) {
+ if (!validate2(data2.b, instancePath + "/items/" + i0 + "/b")) {
+ vErrors = vErrors === null ? validate2.errors : vErrors.concat(validate2.errors);
+ errors = vErrors.length;
+ }
+ }
+
+ if (data2.c !== undefined) {
+ if (typeof data2.c !== "string") {
+ const err15 = (instancePath + "/items/" + i0 + "/c" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err15];
+ } else {
+ vErrors.push(err15);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data2.d !== undefined) {
+ if (typeof data2.d !== "string") {
+ const err16 = (instancePath + "/items/" + i0 + "/d" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err16];
+ } else {
+ vErrors.push(err16);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data2.h !== undefined) {
+ if (typeof data2.h !== "string") {
+ const err17 = (instancePath + "/items/" + i0 + "/h" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err17];
+ } else {
+ vErrors.push(err17);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data2.e !== undefined) {
+ let data9 = data2.e;
+
+ if (typeof data9 == "number" && isFinite(data9)) {
+ if (data9 < 0 || isNaN(data9)) {
+ const err18 = (instancePath + "/items/" + i0 + "/e" + ' ' + "must be >= 0").trim();
+
+ if (vErrors === null) {
+ vErrors = [err18];
+ } else {
+ vErrors.push(err18);
+ }
+
+ errors++;
+ }
+ } else {
+ const err19 = (instancePath + "/items/" + i0 + "/e" + ' ' + "must be number").trim();
+
+ if (vErrors === null) {
+ vErrors = [err19];
+ } else {
+ vErrors.push(err19);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data2.f !== undefined) {
+ if (!isIso4217CurrencyCode(data2.f)) {
+ const err20 = (instancePath + "/items/" + i0 + "/f" + ' ' + "must be a valid ISO 4217 currency code").trim();
+
+ if (vErrors === null) {
+ vErrors = [err20];
+ } else {
+ vErrors.push(err20);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data2.g !== undefined) {
+ let data11 = data2.g;
+
+ if (Array.isArray(data11)) {
+ const len1 = data11.length;
+
+ for (let i1 = 0; i1 < len1; i1++) {
+ let data12 = data11[i1];
+
+ if (data12 && typeof data12 == "object" && !Array.isArray(data12)) {
+ if (data12.url === undefined) {
+ const err21 = (instancePath + "/items/" + i0 + "/g/" + i1 + ' ' + ("must have required property '" + "url" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err21];
+ } else {
+ vErrors.push(err21);
+ }
+
+ errors++;
+ }
+
+ if (data12.altText === undefined) {
+ const err22 = (instancePath + "/items/" + i0 + "/g/" + i1 + ' ' + ("must have required property '" + "altText" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err22];
+ } else {
+ vErrors.push(err22);
+ }
+
+ errors++;
+ }
+
+ for (const key2 in data12) {
+ if (!(key2 === "url" || key2 === "altText")) {
+ const err23 = (instancePath + "/items/" + i0 + "/g/" + i1 + ' ' + "must NOT have additional properties").trim();
+
+ if (vErrors === null) {
+ vErrors = [err23];
+ } else {
+ vErrors.push(err23);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data12.url !== undefined) {
+ if (typeof data12.url !== "string") {
+ const err24 = (instancePath + "/items/" + i0 + "/g/" + i1 + "/url" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err24];
+ } else {
+ vErrors.push(err24);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data12.altText !== undefined) {
+ if (typeof data12.altText !== "string") {
+ const err25 = (instancePath + "/items/" + i0 + "/g/" + i1 + "/altText" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err25];
+ } else {
+ vErrors.push(err25);
+ }
+
+ errors++;
+ }
+ }
+ } else {
+ const err26 = (instancePath + "/items/" + i0 + "/g/" + i1 + ' ' + "must be object").trim();
+
+ if (vErrors === null) {
+ vErrors = [err26];
+ } else {
+ vErrors.push(err26);
+ }
+
+ errors++;
+ }
+ }
+ } else {
+ const err27 = (instancePath + "/items/" + i0 + "/g" + ' ' + "must be array").trim();
+
+ if (vErrors === null) {
+ vErrors = [err27];
+ } else {
+ vErrors.push(err27);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data2.i !== undefined) {
+ let data15 = data2.i;
+
+ if (data15 && typeof data15 == "object" && !Array.isArray(data15)) {
+ if (data15.ratingValue === undefined) {
+ const err28 = (instancePath + "/items/" + i0 + "/i" + ' ' + ("must have required property '" + "ratingValue" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err28];
+ } else {
+ vErrors.push(err28);
+ }
+
+ errors++;
+ }
+
+ if (data15.ratingCount === undefined) {
+ const err29 = (instancePath + "/items/" + i0 + "/i" + ' ' + ("must have required property '" + "ratingCount" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err29];
+ } else {
+ vErrors.push(err29);
+ }
+
+ errors++;
+ }
+
+ if (data15.ratingUrl === undefined) {
+ const err30 = (instancePath + "/items/" + i0 + "/i" + ' ' + ("must have required property '" + "ratingUrl" + "'")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err30];
+ } else {
+ vErrors.push(err30);
+ }
+
+ errors++;
+ }
+
+ for (const key3 in data15) {
+ if (!(key3 === "ratingValue" || key3 === "ratingCount" || key3 === "ratingUrl")) {
+ const err31 = (instancePath + "/items/" + i0 + "/i" + ' ' + "must NOT have additional properties").trim();
+
+ if (vErrors === null) {
+ vErrors = [err31];
+ } else {
+ vErrors.push(err31);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data15.ratingValue !== undefined) {
+ let data16 = data15.ratingValue;
+
+ if (typeof data16 == "number" && isFinite(data16)) {
+ if (data16 < 0 || isNaN(data16)) {
+ const err32 = (instancePath + "/items/" + i0 + "/i/ratingValue" + ' ' + "must be >= 0").trim();
+
+ if (vErrors === null) {
+ vErrors = [err32];
+ } else {
+ vErrors.push(err32);
+ }
+
+ errors++;
+ }
+ } else {
+ const err33 = (instancePath + "/items/" + i0 + "/i/ratingValue" + ' ' + "must be number").trim();
+
+ if (vErrors === null) {
+ vErrors = [err33];
+ } else {
+ vErrors.push(err33);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data15.ratingCount !== undefined) {
+ let data17 = data15.ratingCount;
+
+ if (typeof data17 == "number" && isFinite(data17)) {
+ if (data17 < 0 || isNaN(data17)) {
+ const err34 = (instancePath + "/items/" + i0 + "/i/ratingCount" + ' ' + "must be >= 0").trim();
+
+ if (vErrors === null) {
+ vErrors = [err34];
+ } else {
+ vErrors.push(err34);
+ }
+
+ errors++;
+ }
+ } else {
+ const err35 = (instancePath + "/items/" + i0 + "/i/ratingCount" + ' ' + "must be number").trim();
+
+ if (vErrors === null) {
+ vErrors = [err35];
+ } else {
+ vErrors.push(err35);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data15.ratingUrl !== undefined) {
+ if (typeof data15.ratingUrl !== "string") {
+ const err36 = (instancePath + "/items/" + i0 + "/i/ratingUrl" + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err36];
+ } else {
+ vErrors.push(err36);
+ }
+
+ errors++;
+ }
+ }
+ } else {
+ const err37 = (instancePath + "/items/" + i0 + "/i" + ' ' + "must be object").trim();
+
+ if (vErrors === null) {
+ vErrors = [err37];
+ } else {
+ vErrors.push(err37);
+ }
+
+ errors++;
+ }
+ }
+ } else {
+ const err38 = (instancePath + "/items/" + i0 + ' ' + "must be object").trim();
+
+ if (vErrors === null) {
+ vErrors = [err38];
+ } else {
+ vErrors.push(err38);
+ }
+
+ errors++;
+ }
+ }
+ } else {
+ const err39 = (instancePath + "/items" + ' ' + "must be array").trim();
+
+ if (vErrors === null) {
+ vErrors = [err39];
+ } else {
+ vErrors.push(err39);
+ }
+
+ errors++;
+ }
+ }
+ } else {
+ const err40 = (instancePath + ' ' + "must be object").trim();
+
+ if (vErrors === null) {
+ vErrors = [err40];
+ } else {
+ vErrors.push(err40);
+ }
+
+ errors++;
+ }
+
+ validate0.errors = vErrors;
+ return errors === 0;
+}
+
+const validate = (data, schemaName = "complex") => _validate(data, schemaName) ? [] : _validate.errors;
+
+console.
+/*OK*/
+log(validate({}));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-currency-code/currency-code.schema.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-currency-code/currency-code.schema.json
new file mode 100644
index 000000000000..2eebad9c0c92
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-currency-code/currency-code.schema.json
@@ -0,0 +1,185 @@
+{
+ "description": "https://en.wikipedia.org/wiki/ISO_4217",
+ "enum": [
+ "AED",
+ "AFN",
+ "ALL",
+ "AMD",
+ "ANG",
+ "AOA",
+ "ARS",
+ "AUD",
+ "AWG",
+ "AZN",
+ "BAM",
+ "BBD",
+ "BDT",
+ "BGN",
+ "BHD",
+ "BIF",
+ "BMD",
+ "BND",
+ "BOB",
+ "BOV",
+ "BRL",
+ "BSD",
+ "BTN",
+ "BWP",
+ "BYN",
+ "BZD",
+ "CAD",
+ "CDF",
+ "CHE",
+ "CHF",
+ "CHW",
+ "CLF",
+ "CLP",
+ "CNY",
+ "COP",
+ "COU",
+ "CRC",
+ "CUC",
+ "CUP",
+ "CVE",
+ "CZK",
+ "DJF",
+ "DKK",
+ "DOP",
+ "DZD",
+ "EGP",
+ "ERN",
+ "ETB",
+ "EUR",
+ "FJD",
+ "FKP",
+ "GBP",
+ "GEL",
+ "GHS",
+ "GIP",
+ "GMD",
+ "GNF",
+ "GTQ",
+ "GYD",
+ "HKD",
+ "HNL",
+ "HRK",
+ "HTG",
+ "HUF",
+ "IDR",
+ "ILS",
+ "INR",
+ "IQD",
+ "IRR",
+ "ISK",
+ "JMD",
+ "JOD",
+ "JPY",
+ "KES",
+ "KGS",
+ "KHR",
+ "KMF",
+ "KPW",
+ "KRW",
+ "KWD",
+ "KYD",
+ "KZT",
+ "LAK",
+ "LBP",
+ "LKR",
+ "LRD",
+ "LSL",
+ "LYD",
+ "MAD",
+ "MDL",
+ "MGA",
+ "MKD",
+ "MMK",
+ "MNT",
+ "MOP",
+ "MRU",
+ "MUR",
+ "MVR",
+ "MWK",
+ "MXN",
+ "MXV",
+ "MYR",
+ "MZN",
+ "NAD",
+ "NGN",
+ "NIO",
+ "NOK",
+ "NPR",
+ "NZD",
+ "OMR",
+ "PAB",
+ "PEN",
+ "PGK",
+ "PHP",
+ "PKR",
+ "PLN",
+ "PYG",
+ "QAR",
+ "RON",
+ "RSD",
+ "RUB",
+ "RWF",
+ "SAR",
+ "SBD",
+ "SCR",
+ "SDG",
+ "SEK",
+ "SGD",
+ "SHP",
+ "SLL",
+ "SOS",
+ "SRD",
+ "SSP",
+ "STN",
+ "SVC",
+ "SYP",
+ "SZL",
+ "THB",
+ "TJS",
+ "TMT",
+ "TND",
+ "TOP",
+ "TRY",
+ "TTD",
+ "TWD",
+ "TZS",
+ "UAH",
+ "UGX",
+ "USD",
+ "USN",
+ "UYI",
+ "UYU",
+ "UYW",
+ "UZS",
+ "VED",
+ "VES",
+ "VND",
+ "VUV",
+ "WST",
+ "XAF",
+ "XAG",
+ "XAU",
+ "XBA",
+ "XBB",
+ "XBC",
+ "XBD",
+ "XCD",
+ "XDR",
+ "XOF",
+ "XPD",
+ "XPF",
+ "XPT",
+ "XSU",
+ "XTS",
+ "XUA",
+ "XXX",
+ "YER",
+ "ZAR",
+ "ZMW",
+ "ZWL"
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-currency-code/input.js b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-currency-code/input.js
new file mode 100644
index 000000000000..cf8348bc9e5d
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-currency-code/input.js
@@ -0,0 +1,4 @@
+import validateCurrencyCode from './currency-code.schema.json' assert {type: 'json-schema'};
+
+console./*OK*/ log(validateCurrencyCode('MXN'));
+console./*OK*/ log(validateCurrencyCode('INVALID'));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-currency-code/options.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-currency-code/options.json
new file mode 100644
index 000000000000..239cccc175ab
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-currency-code/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../.."
+ ],
+ "sourceType": "module"
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-currency-code/output.mjs b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-currency-code/output.mjs
new file mode 100644
index 000000000000..2652fcf24ff6
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-currency-code/output.mjs
@@ -0,0 +1,33 @@
+import { isIso4217CurrencyCode } from '#core/json-schema';
+"use strict";
+
+const validate = validate0;
+
+function validate0(data, instancePath = "") {
+ let vErrors = null;
+ let errors = 0;
+
+ if (!isIso4217CurrencyCode(data)) {
+ const err0 = (instancePath + ' ' + "must be a valid ISO 4217 currency code").trim();
+
+ if (vErrors === null) {
+ vErrors = [err0];
+ } else {
+ vErrors.push(err0);
+ }
+
+ errors++;
+ }
+
+ validate0.errors = vErrors;
+ return errors === 0;
+}
+
+const validateCurrencyCode = (data, schemaName = "currency-code") => validate(data, schemaName) ? [] : validate.errors;
+
+console.
+/*OK*/
+log(validateCurrencyCode('MXN'));
+console.
+/*OK*/
+log(validateCurrencyCode('INVALID'));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format-date/format-date.schema.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format-date/format-date.schema.json
new file mode 100644
index 000000000000..1a93be55f242
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format-date/format-date.schema.json
@@ -0,0 +1,13 @@
+{
+ "properties": {
+ "my-date": {
+ "format": "date"
+ },
+ "my-date-time": {
+ "format": "date-time"
+ },
+ "my-time": {
+ "format": "time"
+ }
+ }
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format-date/input.js b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format-date/input.js
new file mode 100644
index 000000000000..b7f5cb7fc577
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format-date/input.js
@@ -0,0 +1,4 @@
+import validateFormatDate from './format-date.schema.json' assert {type: 'json-schema'};
+
+console./*OK*/ log(validateFormatDate('invalid'));
+console./*OK*/ log(validateFormatDate('https://example.com'));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format-date/options.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format-date/options.json
new file mode 100644
index 000000000000..239cccc175ab
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format-date/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../.."
+ ],
+ "sourceType": "module"
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format-date/output.mjs b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format-date/output.mjs
new file mode 100644
index 000000000000..bbbefc68bf71
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format-date/output.mjs
@@ -0,0 +1,77 @@
+const validate = validate0;
+const formats0 = /^\d\d\d\d-[0-1]\d-[0-3]\d$/;
+const formats2 = /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i;
+const formats4 = /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i;
+
+function validate0(data, instancePath = "") {
+ let vErrors = null;
+ let errors = 0;
+
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ if (data["my-date"] !== undefined) {
+ let data0 = data["my-date"];
+
+ if (typeof data0 === "string") {
+ if (!formats0.test(data0)) {
+ const err0 = (instancePath + "/my-date" + ' ' + ("must match format \"" + "date" + "\"")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err0];
+ } else {
+ vErrors.push(err0);
+ }
+
+ errors++;
+ }
+ }
+ }
+
+ if (data["my-date-time"] !== undefined) {
+ let data1 = data["my-date-time"];
+
+ if (typeof data1 === "string") {
+ if (!formats2.test(data1)) {
+ const err1 = (instancePath + "/my-date-time" + ' ' + ("must match format \"" + "date-time" + "\"")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err1];
+ } else {
+ vErrors.push(err1);
+ }
+
+ errors++;
+ }
+ }
+ }
+
+ if (data["my-time"] !== undefined) {
+ let data2 = data["my-time"];
+
+ if (typeof data2 === "string") {
+ if (!formats4.test(data2)) {
+ const err2 = (instancePath + "/my-time" + ' ' + ("must match format \"" + "time" + "\"")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err2];
+ } else {
+ vErrors.push(err2);
+ }
+
+ errors++;
+ }
+ }
+ }
+ }
+
+ validate0.errors = vErrors;
+ return errors === 0;
+}
+
+const validateFormatDate = (data, schemaName = "format-date") => validate(data, schemaName) ? [] : validate.errors;
+
+console.
+/*OK*/
+log(validateFormatDate('invalid'));
+console.
+/*OK*/
+log(validateFormatDate('https://example.com'));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format/format.schema.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format/format.schema.json
new file mode 100644
index 000000000000..1868bf4d29e8
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format/format.schema.json
@@ -0,0 +1,10 @@
+{
+ "properties": {
+ "my-uri": {
+ "format": "uri"
+ },
+ "my-email": {
+ "format": "email"
+ }
+ }
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format/input.js b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format/input.js
new file mode 100644
index 000000000000..b86a24137f0e
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format/input.js
@@ -0,0 +1,4 @@
+import validateFormat from './format.schema.json' assert {type: 'json-schema'};
+
+console./*OK*/ log(validateFormat('invalid'));
+console./*OK*/ log(validateFormat('https://example.com'));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format/options.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format/options.json
new file mode 100644
index 000000000000..239cccc175ab
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../.."
+ ],
+ "sourceType": "module"
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format/output.mjs b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format/output.mjs
new file mode 100644
index 000000000000..5c539bad7a7e
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-format/output.mjs
@@ -0,0 +1,58 @@
+const validate = validate0;
+const formats0 = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i;
+const formats2 = /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i;
+
+function validate0(data, instancePath = "") {
+ let vErrors = null;
+ let errors = 0;
+
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ if (data["my-uri"] !== undefined) {
+ let data0 = data["my-uri"];
+
+ if (typeof data0 === "string") {
+ if (!formats0.test(data0)) {
+ const err0 = (instancePath + "/my-uri" + ' ' + ("must match format \"" + "uri" + "\"")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err0];
+ } else {
+ vErrors.push(err0);
+ }
+
+ errors++;
+ }
+ }
+ }
+
+ if (data["my-email"] !== undefined) {
+ let data1 = data["my-email"];
+
+ if (typeof data1 === "string") {
+ if (!formats2.test(data1)) {
+ const err1 = (instancePath + "/my-email" + ' ' + ("must match format \"" + "email" + "\"")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err1];
+ } else {
+ vErrors.push(err1);
+ }
+
+ errors++;
+ }
+ }
+ }
+ }
+
+ validate0.errors = vErrors;
+ return errors === 0;
+}
+
+const validateFormat = (data, schemaName = "format") => validate(data, schemaName) ? [] : validate.errors;
+
+console.
+/*OK*/
+log(validateFormat('invalid'));
+console.
+/*OK*/
+log(validateFormat('https://example.com'));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-name-collision/input.js b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-name-collision/input.js
new file mode 100644
index 000000000000..3c464bd143c4
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-name-collision/input.js
@@ -0,0 +1,14 @@
+const validate0 = `
+ ajv creates a "validate0" identifier in module scope.
+ ajv's should be renamed, and this assignment should be preserved.
+`;
+
+const _schema = '',
+ _schema2 = 'generated value should be _schema3';
+
+import validate from './name-collision.schema.json' assert {type: 'json-schema'};
+
+validate(`
+ "validate" is ajvCompile's default output name.
+ This should not fail transform.
+`);
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-name-collision/name-collision.schema.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-name-collision/name-collision.schema.json
new file mode 100644
index 000000000000..394dbaa0f54c
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-name-collision/name-collision.schema.json
@@ -0,0 +1,9 @@
+{
+ "properties": {
+ "foo": {
+ "const": {
+ "bar": 123
+ }
+ }
+ }
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-name-collision/options.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-name-collision/options.json
new file mode 100644
index 000000000000..239cccc175ab
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-name-collision/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../.."
+ ],
+ "sourceType": "module"
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-name-collision/output.mjs b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-name-collision/output.mjs
new file mode 100644
index 000000000000..b64aad44aa10
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-name-collision/output.mjs
@@ -0,0 +1,43 @@
+const _schema3 = {
+ bar: 123
+};
+const validate0 = `
+ ajv creates a "validate0" identifier in module scope.
+ ajv's should be renamed, and this assignment should be preserved.
+`;
+const _schema = '',
+ _schema2 = 'generated value should be _schema3';
+const _validate = _validate2;
+
+const func0 = require("ajv/dist/runtime/equal").default;
+
+function _validate2(data, instancePath = "") {
+ let vErrors = null;
+ let errors = 0;
+
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ if (data.foo !== undefined) {
+ if (!func0(data.foo, _schema3)) {
+ const err0 = (instancePath + "/foo" + ' ' + "must be equal to constant").trim();
+
+ if (vErrors === null) {
+ vErrors = [err0];
+ } else {
+ vErrors.push(err0);
+ }
+
+ errors++;
+ }
+ }
+ }
+
+ _validate2.errors = vErrors;
+ return errors === 0;
+}
+
+const validate = (data, schemaName = "name-collision") => _validate(data, schemaName) ? [] : _validate.errors;
+
+validate(`
+ "validate" is ajvCompile's default output name.
+ This should not fail transform.
+`);
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-object-enum/input.js b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-object-enum/input.js
new file mode 100644
index 000000000000..8ef0cc5cd0f9
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-object-enum/input.js
@@ -0,0 +1,3 @@
+import validate from './object-enum.schema.json' assert {type: 'json-schema'};
+
+console./*OK*/ log(validate({}));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-object-enum/object-enum.schema.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-object-enum/object-enum.schema.json
new file mode 100644
index 000000000000..b9951d9f5e8a
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-object-enum/object-enum.schema.json
@@ -0,0 +1,94 @@
+{
+ "description": "This description should NOT be included in the schema object",
+ "type": "array",
+ "items": {
+ "properties": {
+ "prop_a": {
+ "oneOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "description": "This description should NOT be included in the schema object",
+ "enum": [
+ 123,
+ 345,
+ {
+ "foo": "This object should be included in the schema object",
+ "bar": {
+ "all keys are included": true
+ }
+ },
+ "this string should NOT be included in the schema object",
+ "this string should also NOT be included in the schema object",
+ {
+ "bar": "This object should also be included in the schema object"
+ }
+ ]
+ }
+ ]
+ },
+ "prop_b": {},
+ "prop_c": {
+ "description": "This description should NOT be included in the schema object",
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "prop_x": {},
+ "prop_y": {},
+ "prop_z": {
+ "properties": {
+ "objectWithoutAditionalPropertiesA": {
+ "additionalProperties": false,
+ "properties": {
+ "prop_a": {},
+ "prop_b": {},
+ "prop_c": {},
+ "prop_d": {},
+ "prop_e": {},
+ "prop_f": {},
+ "prop_g": {},
+ "prop_h": {},
+ "prop_i": {}
+ }
+ },
+ "objectWithoutAditionalPropertiesB": {
+ "additionalProperties": false,
+ "properties": {
+ "prop_z": {},
+ "prop_y": {},
+ "prop_x": {},
+ "prop_w": {
+ "properties": {
+ "prop_xyz": {
+ "properties": {
+ "prop_abc": {
+ "enum": [
+ "this string should NOT be included in the schema object",
+ 123,
+ {
+ "object": true,
+ "bar": {
+ "all keys are included": true
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "prop_v": {},
+ "prop_u": {},
+ "prop_t": {},
+ "prop_s": {},
+ "prop_r": {}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-object-enum/options.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-object-enum/options.json
new file mode 100644
index 000000000000..239cccc175ab
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-object-enum/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../.."
+ ],
+ "sourceType": "module"
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-object-enum/output.mjs b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-object-enum/output.mjs
new file mode 100644
index 000000000000..103551a872df
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-object-enum/output.mjs
@@ -0,0 +1,255 @@
+const _schema = {
+ prop_a: 0,
+ prop_b: 0,
+ prop_c: 0,
+ prop_d: 0,
+ prop_e: 0,
+ prop_f: 0,
+ prop_g: 0,
+ prop_h: 0,
+ prop_i: 0
+},
+ _schema2 = {
+ prop_z: 0,
+ prop_y: 0,
+ prop_x: 0,
+ prop_w: 0,
+ prop_v: 0,
+ prop_u: 0,
+ prop_t: 0,
+ prop_s: 0,
+ prop_r: 0
+},
+ _schema3 = {
+ foo: "This object should be included in the schema object",
+ bar: {
+ "all keys are included": true
+ }
+},
+ _schema4 = {
+ bar: "This object should also be included in the schema object"
+},
+ _schema5 = {
+ object: true,
+ bar: {
+ "all keys are included": true
+ }
+};
+const _validate = validate0;
+
+const func0 = require("ajv/dist/runtime/equal").default;
+
+const func1 = Object.prototype.hasOwnProperty;
+
+function validate0(data, instancePath = "") {
+ let vErrors = null;
+ let errors = 0;
+
+ if (Array.isArray(data)) {
+ const len0 = data.length;
+
+ for (let i0 = 0; i0 < len0; i0++) {
+ let data0 = data[i0];
+
+ if (data0 && typeof data0 == "object" && !Array.isArray(data0)) {
+ if (data0.prop_a !== undefined) {
+ let data1 = data0.prop_a;
+ const _errs3 = errors;
+ let valid3 = false;
+ let passing0 = null;
+ const _errs4 = errors;
+
+ if (typeof data1 !== "boolean") {
+ const err0 = (instancePath + "/" + i0 + "/prop_a" + ' ' + "must be boolean").trim();
+
+ if (vErrors === null) {
+ vErrors = [err0];
+ } else {
+ vErrors.push(err0);
+ }
+
+ errors++;
+ }
+
+ var _valid0 = _errs4 === errors;
+
+ if (_valid0) {
+ valid3 = true;
+ passing0 = 0;
+ }
+
+ const _errs6 = errors;
+
+ if (!(data1 === 123 || data1 === 345 || func0(data1, _schema3) || data1 === "this string should NOT be included in the schema object" || data1 === "this string should also NOT be included in the schema object" || func0(data1, _schema4))) {
+ const err1 = (instancePath + "/" + i0 + "/prop_a" + ' ' + "must be equal to one of the allowed values").trim();
+
+ if (vErrors === null) {
+ vErrors = [err1];
+ } else {
+ vErrors.push(err1);
+ }
+
+ errors++;
+ }
+
+ var _valid0 = _errs6 === errors;
+
+ if (_valid0 && valid3) {
+ valid3 = false;
+ passing0 = [passing0, 1];
+ } else {
+ if (_valid0) {
+ valid3 = true;
+ passing0 = 1;
+ }
+ }
+
+ if (!valid3) {
+ const err2 = (instancePath + "/" + i0 + "/prop_a" + ' ' + "must match exactly one schema in oneOf").trim();
+
+ if (vErrors === null) {
+ vErrors = [err2];
+ } else {
+ vErrors.push(err2);
+ }
+
+ errors++;
+ } else {
+ errors = _errs3;
+
+ if (vErrors !== null) {
+ if (_errs3) {
+ vErrors.length = _errs3;
+ } else {
+ vErrors = null;
+ }
+ }
+ }
+ }
+
+ if (data0.prop_c !== undefined) {
+ let data2 = data0.prop_c;
+
+ if (data2 && typeof data2 == "object" && !Array.isArray(data2)) {
+ for (const key0 in data2) {
+ if (!(key0 === "prop_x" || key0 === "prop_y" || key0 === "prop_z")) {
+ const err3 = (instancePath + "/" + i0 + "/prop_c" + ' ' + "must NOT have additional properties").trim();
+
+ if (vErrors === null) {
+ vErrors = [err3];
+ } else {
+ vErrors.push(err3);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data2.prop_z !== undefined) {
+ let data3 = data2.prop_z;
+
+ if (data3 && typeof data3 == "object" && !Array.isArray(data3)) {
+ if (data3.objectWithoutAditionalPropertiesA !== undefined) {
+ let data4 = data3.objectWithoutAditionalPropertiesA;
+
+ if (data4 && typeof data4 == "object" && !Array.isArray(data4)) {
+ for (const key1 in data4) {
+ if (!func1.call(_schema, key1)) {
+ const err4 = (instancePath + "/" + i0 + "/prop_c/prop_z/objectWithoutAditionalPropertiesA" + ' ' + "must NOT have additional properties").trim();
+
+ if (vErrors === null) {
+ vErrors = [err4];
+ } else {
+ vErrors.push(err4);
+ }
+
+ errors++;
+ }
+ }
+ }
+ }
+
+ if (data3.objectWithoutAditionalPropertiesB !== undefined) {
+ let data5 = data3.objectWithoutAditionalPropertiesB;
+
+ if (data5 && typeof data5 == "object" && !Array.isArray(data5)) {
+ for (const key2 in data5) {
+ if (!func1.call(_schema2, key2)) {
+ const err5 = (instancePath + "/" + i0 + "/prop_c/prop_z/objectWithoutAditionalPropertiesB" + ' ' + "must NOT have additional properties").trim();
+
+ if (vErrors === null) {
+ vErrors = [err5];
+ } else {
+ vErrors.push(err5);
+ }
+
+ errors++;
+ }
+ }
+
+ if (data5.prop_w !== undefined) {
+ let data6 = data5.prop_w;
+
+ if (data6 && typeof data6 == "object" && !Array.isArray(data6)) {
+ if (data6.prop_xyz !== undefined) {
+ let data7 = data6.prop_xyz;
+
+ if (data7 && typeof data7 == "object" && !Array.isArray(data7)) {
+ if (data7.prop_abc !== undefined) {
+ let data8 = data7.prop_abc;
+
+ if (!(data8 === "this string should NOT be included in the schema object" || data8 === 123 || func0(data8, _schema5))) {
+ const err6 = (instancePath + "/" + i0 + "/prop_c/prop_z/objectWithoutAditionalPropertiesB/prop_w/prop_xyz/prop_abc" + ' ' + "must be equal to one of the allowed values").trim();
+
+ if (vErrors === null) {
+ vErrors = [err6];
+ } else {
+ vErrors.push(err6);
+ }
+
+ errors++;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ } else {
+ const err7 = (instancePath + "/" + i0 + "/prop_c" + ' ' + "must be object").trim();
+
+ if (vErrors === null) {
+ vErrors = [err7];
+ } else {
+ vErrors.push(err7);
+ }
+
+ errors++;
+ }
+ }
+ }
+ }
+ } else {
+ const err8 = (instancePath + ' ' + "must be array").trim();
+
+ if (vErrors === null) {
+ vErrors = [err8];
+ } else {
+ vErrors.push(err8);
+ }
+
+ errors++;
+ }
+
+ validate0.errors = vErrors;
+ return errors === 0;
+}
+
+const validate = (data, schemaName = "object-enum") => _validate(data, schemaName) ? [] : _validate.errors;
+
+console.
+/*OK*/
+log(validate({}));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-one-of/input.js b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-one-of/input.js
new file mode 100644
index 000000000000..badf4b8deb9a
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-one-of/input.js
@@ -0,0 +1,6 @@
+import validateOneOf from './one-of.schema.json' assert {type: 'json-schema'};
+
+console./*OK*/ log(validateOneOf('invalid'));
+console./*OK*/ log(validateOneOf(0));
+console./*OK*/ log(validateOneOf(1));
+console./*OK*/ log(validateOneOf(true));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-one-of/one-of.schema.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-one-of/one-of.schema.json
new file mode 100644
index 000000000000..8d53193e33a3
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-one-of/one-of.schema.json
@@ -0,0 +1,10 @@
+{
+ "oneOf": [
+ {
+ "const": 0
+ },
+ {
+ "type": "string"
+ }
+ ]
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-one-of/options.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-one-of/options.json
new file mode 100644
index 000000000000..239cccc175ab
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-one-of/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../.."
+ ],
+ "sourceType": "module"
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-one-of/output.mjs b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-one-of/output.mjs
new file mode 100644
index 000000000000..518afa13b6a1
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-one-of/output.mjs
@@ -0,0 +1,95 @@
+const validate = validate0;
+
+function validate0(data, instancePath = "") {
+ let vErrors = null;
+ let errors = 0;
+ const _errs0 = errors;
+ let valid0 = false;
+ let passing0 = null;
+ const _errs1 = errors;
+
+ if (0 !== data) {
+ const err0 = (instancePath + ' ' + "must be equal to constant").trim();
+
+ if (vErrors === null) {
+ vErrors = [err0];
+ } else {
+ vErrors.push(err0);
+ }
+
+ errors++;
+ }
+
+ var _valid0 = _errs1 === errors;
+
+ if (_valid0) {
+ valid0 = true;
+ passing0 = 0;
+ }
+
+ const _errs2 = errors;
+
+ if (typeof data !== "string") {
+ const err1 = (instancePath + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err1];
+ } else {
+ vErrors.push(err1);
+ }
+
+ errors++;
+ }
+
+ var _valid0 = _errs2 === errors;
+
+ if (_valid0 && valid0) {
+ valid0 = false;
+ passing0 = [passing0, 1];
+ } else {
+ if (_valid0) {
+ valid0 = true;
+ passing0 = 1;
+ }
+ }
+
+ if (!valid0) {
+ const err2 = (instancePath + ' ' + "must match exactly one schema in oneOf").trim();
+
+ if (vErrors === null) {
+ vErrors = [err2];
+ } else {
+ vErrors.push(err2);
+ }
+
+ errors++;
+ } else {
+ errors = _errs0;
+
+ if (vErrors !== null) {
+ if (_errs0) {
+ vErrors.length = _errs0;
+ } else {
+ vErrors = null;
+ }
+ }
+ }
+
+ validate0.errors = vErrors;
+ return errors === 0;
+}
+
+const validateOneOf = (data, schemaName = "one-of") => validate(data, schemaName) ? [] : validate.errors;
+
+console.
+/*OK*/
+log(validateOneOf('invalid'));
+console.
+/*OK*/
+log(validateOneOf(0));
+console.
+/*OK*/
+log(validateOneOf(1));
+console.
+/*OK*/
+log(validateOneOf(true));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-refs/input.js b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-refs/input.js
new file mode 100644
index 000000000000..d2908043276e
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-refs/input.js
@@ -0,0 +1,14 @@
+import validateRefs from './refs.schema.json' assert {type: 'json-schema'};
+
+console./*OK*/ log(
+ validateRefs({
+ foo: 'foo',
+ bar: 'foo',
+ })
+);
+console./*OK*/ log(
+ validateRefs({
+ foo: 'https://foo.com',
+ bar: 'https://bar.org',
+ })
+);
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-refs/options.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-refs/options.json
new file mode 100644
index 000000000000..239cccc175ab
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-refs/options.json
@@ -0,0 +1,6 @@
+{
+ "plugins": [
+ "../../../.."
+ ],
+ "sourceType": "module"
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-refs/output.mjs b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-refs/output.mjs
new file mode 100644
index 000000000000..90952aba3bdc
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-refs/output.mjs
@@ -0,0 +1,86 @@
+const validate = validate0;
+const formats0 = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i;
+const pattern0 = new RegExp("^https://", "u");
+
+function validate1(data, instancePath = "") {
+ let vErrors = null;
+ let errors = 0;
+
+ if (typeof data === "string") {
+ if (!pattern0.test(data)) {
+ const err0 = (instancePath + ' ' + ("must match pattern \"" + "^https://" + "\"")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err0];
+ } else {
+ vErrors.push(err0);
+ }
+
+ errors++;
+ }
+
+ if (!formats0.test(data)) {
+ const err1 = (instancePath + ' ' + ("must match format \"" + "uri" + "\"")).trim();
+
+ if (vErrors === null) {
+ vErrors = [err1];
+ } else {
+ vErrors.push(err1);
+ }
+
+ errors++;
+ }
+ } else {
+ const err2 = (instancePath + ' ' + "must be string").trim();
+
+ if (vErrors === null) {
+ vErrors = [err2];
+ } else {
+ vErrors.push(err2);
+ }
+
+ errors++;
+ }
+
+ validate1.errors = vErrors;
+ return errors === 0;
+}
+
+function validate0(data, instancePath = "") {
+ let vErrors = null;
+ let errors = 0;
+
+ if (data && typeof data == "object" && !Array.isArray(data)) {
+ if (data.foo !== undefined) {
+ if (!validate1(data.foo, instancePath + "/foo")) {
+ vErrors = vErrors === null ? validate1.errors : vErrors.concat(validate1.errors);
+ errors = vErrors.length;
+ }
+ }
+
+ if (data.bar !== undefined) {
+ if (!validate1(data.bar, instancePath + "/bar")) {
+ vErrors = vErrors === null ? validate1.errors : vErrors.concat(validate1.errors);
+ errors = vErrors.length;
+ }
+ }
+ }
+
+ validate0.errors = vErrors;
+ return errors === 0;
+}
+
+const validateRefs = (data, schemaName = "refs") => validate(data, schemaName) ? [] : validate.errors;
+
+console.
+/*OK*/
+log(validateRefs({
+ foo: 'foo',
+ bar: 'foo'
+}));
+console.
+/*OK*/
+log(validateRefs({
+ foo: 'https://foo.com',
+ bar: 'https://bar.org'
+}));
diff --git a/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-refs/refs.schema.json b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-refs/refs.schema.json
new file mode 100644
index 000000000000..93a4efc24da6
--- /dev/null
+++ b/build-system/babel-plugins/babel-plugin-transform-json-import/test/fixtures/transform-assertions/schema-refs/refs.schema.json
@@ -0,0 +1,17 @@
+{
+ "$defs": {
+ "https": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ }
+ },
+ "properties": {
+ "foo": {
+ "$ref": "#/$defs/https"
+ },
+ "bar": {
+ "$ref": "#/$defs/https"
+ }
+ }
+}
diff --git a/build-system/babel-plugins/babel-plugin-transform-rename-privates/index.js b/build-system/babel-plugins/babel-plugin-transform-rename-privates/index.js
index 9cf6414485c1..4cf62b7b599b 100644
--- a/build-system/babel-plugins/babel-plugin-transform-rename-privates/index.js
+++ b/build-system/babel-plugins/babel-plugin-transform-rename-privates/index.js
@@ -28,15 +28,16 @@ module.exports = function (babel) {
return;
}
- const {name} = key.node;
+ const {node} = key;
+ const {name} = node;
if (name.endsWith('_AMP_PRIVATE_')) {
return;
}
- if (!name.endsWith('_')) {
+ if (!name.endsWith('_') || name === '__proto__') {
return;
}
- key.replaceWith(t.identifier(`${name}AMP_PRIVATE_`));
+ key.replaceWith(t.inherits(t.identifier(`${name}AMP_PRIVATE_`), node));
};
}
diff --git a/build-system/babel-plugins/log-module-metadata.js b/build-system/babel-plugins/log-module-metadata.js
index a14161e8c06f..f79cdc239c4f 100644
--- a/build-system/babel-plugins/log-module-metadata.js
+++ b/build-system/babel-plugins/log-module-metadata.js
@@ -17,7 +17,7 @@ const assertAliases = singletonFunctions.map((prefix) => `${prefix}Assert`);
/**
* Known transformable logging methods.
- * @type {!Object}
+ * @type {!{[key: string]: LogMethodMetadataDef}}
*/
const transformableMethods = {
assert: {variadic: true, extractMessages: true, messageArgPos: 1},
diff --git a/build-system/babel-plugins/static-template-metadata.js b/build-system/babel-plugins/static-template-metadata.js
index 2182f293cc69..7a49e7b99697 100644
--- a/build-system/babel-plugins/static-template-metadata.js
+++ b/build-system/babel-plugins/static-template-metadata.js
@@ -2,7 +2,7 @@
/**
* Maps of factory functions to enforced declared tag name.
- * @type {Object}
+ * @type {{[key: string]: string}}
*/
exports.staticTemplateFactories = {
'htmlFor': 'html',
diff --git a/build-system/common/OWNERS b/build-system/common/OWNERS
index 002922bb9cc9..69a88bfe0386 100644
--- a/build-system/common/OWNERS
+++ b/build-system/common/OWNERS
@@ -4,7 +4,7 @@
{
rules: [
{
- owners: [{name: 'ampproject/wg-infra'}, {name: 'rsimha', notify: true}],
+ owners: [{name: 'ampproject/wg-infra'}],
},
],
}
diff --git a/build-system/common/ci.js b/build-system/common/ci.js
index 55cd34a2fabb..0d88c17b8084 100644
--- a/build-system/common/ci.js
+++ b/build-system/common/ci.js
@@ -66,8 +66,8 @@ function isPullRequestBuild() {
return isGithubActions
? env('GITHUB_EVENT_NAME') === 'pull_request'
: isCircleci
- ? !isCircleciPushBranch(env('CIRCLE_BRANCH'))
- : false;
+ ? !isCircleciPushBranch(env('CIRCLE_BRANCH'))
+ : false;
}
/**
@@ -78,8 +78,8 @@ function isPushBuild() {
return isGithubActions
? env('GITHUB_EVENT_NAME') === 'push'
: isCircleci
- ? isCircleciPushBranch(env('CIRCLE_BRANCH'))
- : false;
+ ? isCircleciPushBranch(env('CIRCLE_BRANCH'))
+ : false;
}
/**
@@ -90,8 +90,8 @@ function ciPullRequestBranch() {
return isGithubActions
? env('GITHUB_HEAD_REF')
: isCircleci
- ? env('CIRCLE_BRANCH')
- : '';
+ ? env('CIRCLE_BRANCH')
+ : '';
}
/**
@@ -102,8 +102,8 @@ function ciPullRequestSha() {
return isGithubActions
? require(env('GITHUB_EVENT_PATH')).pull_request.head.sha
: isCircleci
- ? env('CIRCLE_SHA1')
- : '';
+ ? env('CIRCLE_SHA1')
+ : '';
}
/**
@@ -114,8 +114,8 @@ function ciPushBranch() {
return isGithubActions
? env('GITHUB_REF')
: isCircleci
- ? env('CIRCLE_BRANCH')
- : '';
+ ? env('CIRCLE_BRANCH')
+ : '';
}
/**
@@ -126,8 +126,8 @@ function ciCommitSha() {
return isGithubActions
? env('GITHUB_SHA')
: isCircleci
- ? env('CIRCLE_SHA1')
- : '';
+ ? env('CIRCLE_SHA1')
+ : '';
}
/**
@@ -138,8 +138,8 @@ function ciBuildId() {
return isGithubActions
? env('GITHUB_RUN_ID')
: isCircleci
- ? env('CIRCLE_WORKFLOW_ID')
- : '';
+ ? env('CIRCLE_WORKFLOW_ID')
+ : '';
}
/**
@@ -150,8 +150,8 @@ function ciBuildUrl() {
return isGithubActions
? `${env('GITHUB_SERVER_URL')}/${env('GITHUB_REPOSITORY')}/actions/runs/${env('GITHUB_RUN_ID')}` // prettier-ignore
: isCircleci
- ? `https://app.circleci.com/pipelines/workflows/${env('CIRCLE_WORKFLOW_ID')}` // prettier-ignore
- : '';
+ ? `https://app.circleci.com/pipelines/workflows/${env('CIRCLE_WORKFLOW_ID')}` // prettier-ignore
+ : '';
}
/**
@@ -162,21 +162,16 @@ function ciJobId() {
return isGithubActions
? env('GITHUB_RUN_NUMBER')
: isCircleci
- ? env('CIRCLE_JOB')
- : '';
+ ? env('CIRCLE_JOB')
+ : '';
}
/**
* Returns the URL of the current job.
* @return {string}
*/
-function ciJobUrl() {
- return isGithubActions
- ? // TODO(rsimha): Try to reverse engineer the GH Actions job URL from the build URL.
- `${env('GITHUB_SERVER_URL')}/${env('GITHUB_REPOSITORY')}/actions/runs/${env('GITHUB_RUN_ID')}` // prettier-ignore
- : isCircleci
- ? env('CIRCLE_BUILD_URL')
- : '';
+function circleciJobUrl() {
+ return isCircleci ? env('CIRCLE_BUILD_URL') : '';
}
/**
@@ -189,12 +184,34 @@ function circleciPrMergeCommit() {
}
/**
- * Returns an identifier that is unique to each CircleCI job. This is different
- * from the workflow ID, which is common across all jobs in a workflow.
+ * Returns an identifier that is unique to each CircleCI build, discerning for
+ * parallelized builds
+ *
+ * Note that this is different from the workflow ID, which is common across all,
+ * and also different from the build number, which is common across parallelized
+ * builds.
* @return {string}
*/
-function circleciBuildNumber() {
- return isCircleci ? env('CIRCLE_BUILD_NUM') : '';
+function circleciUniqueBuildNumber() {
+ return isCircleci
+ ? `${env('CIRCLE_BUILD_NUM')}.${env('CIRCLE_NODE_INDEX')}`
+ : '';
+}
+
+/**
+ * Returns true for parallelized CircleCI builds.
+ * @return {boolean}
+ */
+function circleciIsParallelized() {
+ return isCircleci && env('CIRCLE_NODE_TOTAL') != '1';
+}
+
+/**
+ * Returns the parallelized build's shard number.
+ * @return {number}
+ */
+function circleciNodeIndex() {
+ return isCircleci ? Number(env('CIRCLE_NODE_INDEX')) : 0;
}
/**
@@ -205,8 +222,8 @@ function ciRepoSlug() {
return isGithubActions
? env('GITHUB_REPOSITORY')
: isCircleci
- ? `${env('CIRCLE_PROJECT_USERNAME')}/${env('CIRCLE_PROJECT_REPONAME')}`
- : '';
+ ? `${env('CIRCLE_PROJECT_USERNAME')}/${env('CIRCLE_PROJECT_REPONAME')}`
+ : '';
}
/**
@@ -223,11 +240,13 @@ module.exports = {
ciBuildUrl,
ciCommitSha,
ciJobId,
- ciJobUrl,
+ circleciJobUrl,
ciPullRequestBranch,
ciPullRequestSha,
ciPushBranch,
- circleciBuildNumber,
+ circleciUniqueBuildNumber,
+ circleciIsParallelized,
+ circleciNodeIndex,
circleciPrMergeCommit,
ciRepoSlug,
isCiBuild,
diff --git a/build-system/common/ctrlcHandler.js b/build-system/common/ctrlcHandler.js
index 2583221a7235..54aa3ab6c743 100644
--- a/build-system/common/ctrlcHandler.js
+++ b/build-system/common/ctrlcHandler.js
@@ -38,9 +38,13 @@ exports.createCtrlcHandler = function (command, pid = process.pid) {
trap 'ctrlcHandler' INT
read _ # Waits until the process is terminated
`;
- return execScriptAsync(listenerCmd, {
+ const {pid: handlerPid} = execScriptAsync(listenerCmd, {
'stdio': [null, process.stdout, process.stderr],
- }).pid;
+ });
+ if (!handlerPid) {
+ throw new Error(`Failed to create ctrlcHandler for ${command}`);
+ }
+ return handlerPid;
};
/**
diff --git a/build-system/common/esbuild-babel.js b/build-system/common/esbuild-babel.js
index 6ef87a44174a..c197301b7931 100644
--- a/build-system/common/esbuild-babel.js
+++ b/build-system/common/esbuild-babel.js
@@ -1,11 +1,26 @@
const babel = require('@babel/core');
+const {createHash} = require('crypto');
const path = require('path');
const {debug} = require('../compile/debug-compilation-lifecycle');
+const {includeSourcesContent} = require('../tasks/sourcemaps');
const {TransformCache, batchedRead, md5} = require('./transform-cache');
+const Remapping = require('@ampproject/remapping');
+
+/** @type {Remapping.default} */
+const remapping = /** @type {*} */ (Remapping);
+
+/**
+ * @typedef {{
+ * filename: string,
+ * code: string,
+ * map: Object,
+ * }}
+ */
+let CacheMessageDef;
/**
* Used to cache babel transforms done by esbuild.
- * @const {TransformCache}
+ * @type {TransformCache}
*/
let transformCache;
@@ -14,27 +29,31 @@ let transformCache;
* caching to speed up transforms.
* @param {string} callerName
* @param {boolean} enableCache
- * @param {function(): void} preSetup
- * @param {function(): void} postLoad
+ * @param {{
+ * preSetup?: () => void,
+ * postLoad?: () => void,
+ * plugins?: null | import('@babel/core').PluginItem[],
+ * }} callbacks
* @return {!Object}
*/
function getEsbuildBabelPlugin(
callerName,
enableCache,
- preSetup = () => {},
- postLoad = () => {}
+ {plugins, postLoad = () => {}, preSetup = () => {}} = {}
) {
+ const babelMaps = new Map();
+
/**
* @param {string} filename
* @param {string} contents
* @param {string} hash
- * @param {Object} babelOptions
- * @return {Promise}
+ * @param {object} babelOptions
+ * @return {!Promise}
*/
async function transformContents(filename, contents, hash, babelOptions) {
if (enableCache) {
if (!transformCache) {
- transformCache = new TransformCache('.babel-cache', '.js');
+ transformCache = new TransformCache('.babel-cache');
}
const cached = transformCache.get(hash);
if (cached) {
@@ -42,20 +61,18 @@ function getEsbuildBabelPlugin(
}
}
- debug('pre-babel', filename, contents);
const promise = babel
.transformAsync(contents, babelOptions)
.then((result) => {
- const {code, map} = result || {};
- debug('post-babel', filename, code, map);
- return code + `\n// ${filename}`;
+ const {code, map} = /** @type {!babel.BabelFileResult} */ (result);
+ return {filename, code: code || '', map};
});
if (enableCache) {
transformCache.set(hash, promise);
}
- return promise.finally(postLoad);
+ return promise;
}
return {
@@ -64,28 +81,142 @@ function getEsbuildBabelPlugin(
async setup(build) {
preSetup();
- const babelOptions =
- babel.loadOptions({caller: {name: callerName}}) || {};
- const optionsHash = md5(
- JSON.stringify({babelOptions, argv: process.argv.slice(2)})
+ const {initialOptions} = build;
+ const {sourcemap} = initialOptions;
+ const inlineSourcemap = sourcemap === 'inline' || sourcemap === 'both';
+ if (inlineSourcemap) {
+ initialOptions.sorucemap = true;
+ }
+
+ build.onLoad(
+ {filter: /\.(cjs|mjs|js|jsx|ts|tsx)$/, namespace: ''},
+ async (file) => {
+ const filename = file.path;
+ const babelOptions = /** @type {*} */ (
+ babel.loadOptions({caller: {name: callerName}, filename}) || {}
+ );
+ babelOptions.sourceMaps = true;
+ if (plugins) {
+ babelOptions.plugins = [...babelOptions.plugins, ...plugins];
+ }
+
+ const {contents, hash} = await batchedRead(filename);
+ const rehash = md5(
+ JSON.stringify({
+ callerName,
+ filename,
+ hash,
+ babelOptions,
+ argv: process.argv.slice(2),
+ })
+ );
+
+ debug('pre-babel', filename, contents);
+ const {code, map} = await transformContents(
+ filename,
+ contents,
+ rehash,
+ getFileBabelOptions(babelOptions, filename)
+ );
+
+ debug('post-babel', filename, code, map);
+ babelMaps.set(filename, map);
+ postLoad?.();
+ return {contents: code};
+ }
);
- build.onLoad({filter: /\.[cm]?js$/, namespace: ''}, async (file) => {
- const filename = file.path;
- const {contents, hash} = await batchedRead(filename, optionsHash);
+ build.onEnd(async (result) => {
+ const {outputFiles} = result;
+ const code = outputFiles.find(({path}) => !path.endsWith('.map'));
+ const map = outputFiles.find(({path}) => path.endsWith('.map'));
- const transformed = await transformContents(
- filename,
- contents,
- hash,
- getFileBabelOptions(babelOptions, filename)
+ if (!map) {
+ debug('post-esbuild', code?.path, code?.text);
+ return;
+ }
+
+ const root = path.dirname(map.path);
+ const nodeMods = path.normalize('/node_modules/');
+ const remapped = remapping(
+ map.text,
+ (f, ctx) => {
+ // The Babel tranformed file and the original file have the same
+ // path, which makes it difficult to distinguish during remapping's
+ // load phase. To prevent an infinite recursion, we check if the
+ // importer is ourselves (which is nonsensical) and early exit.
+ if (f === ctx.importer) {
+ return null;
+ }
+
+ const file = path.join(root, f);
+ const map = babelMaps.get(file);
+ if (!map) {
+ if (file.includes(nodeMods) || file.endsWith('.json')) {
+ // Excuse node_modules and JSON files since they may have been
+ // marked external (and so not processed by babel).
+ return null;
+ }
+ throw new Error(`failed to find sourcemap for babel file "${f}"`);
+ }
+ return map;
+ },
+ !includeSourcesContent()
);
- return {contents: transformed};
+
+ debug('post-esbuild', code.path, code.text, remapped);
+
+ const sourcemapJson = remapped.toString();
+ replaceOutputFile(outputFiles, map, sourcemapJson);
+ if (inlineSourcemap) {
+ const base64 = Buffer.from(sourcemapJson).toString('base64');
+ replaceOutputFile(
+ outputFiles,
+ code,
+ code.text.replace(
+ /sourceMappingURL=.*/,
+ `sourceMappingURL=data:application/json;charset=utf-8;base64,${base64}`
+ )
+ );
+ }
});
},
};
}
+/**
+ * @param {Array} outputFiles
+ * @param {import('esbuild').OutputFile} original
+ * @param {string} text
+ */
+function replaceOutputFile(outputFiles, original, text) {
+ const index = outputFiles.indexOf(original);
+ if (index === -1) {
+ throw new Error(`couldn't find outputFile ${original.path}`);
+ }
+
+ let contents;
+ const generateContents = () =>
+ // eslint-disable-next-line local/no-forbidden-terms
+ (contents ||= new TextEncoder().encode(text));
+
+ let hash;
+ const generateHash = () =>
+ (hash ||= createHash('sha1').update(text).digest('hex'));
+
+ const file = {
+ path: original.path,
+ text,
+ get contents() {
+ return generateContents();
+ },
+ get hash() {
+ return generateHash();
+ },
+ };
+ outputFiles[index] = file;
+}
+
const CJS_TRANSFORMS = new Set([
'transform-modules-commonjs',
'proposal-dynamic-import',
@@ -113,10 +244,12 @@ function getFileBabelOptions(babelOptions, filename) {
// The amp runner automatically sets cwd to the `amphtml` directory.
const root = process.cwd();
+ const filenameRelative = path.relative(root, filename);
+
return {
...babelOptions,
filename,
- filenameRelative: path.relative(root, filename),
+ filenameRelative,
};
}
diff --git a/build-system/common/fs.js b/build-system/common/fs.js
new file mode 100644
index 000000000000..28d35e3e4cd5
--- /dev/null
+++ b/build-system/common/fs.js
@@ -0,0 +1,18 @@
+const glob = require('globby');
+
+/**
+ * @param {string} nameWithoutExtension
+ * @param {?string|void} cwd
+ * @return {Promise}
+ */
+async function findJsSourceFilename(nameWithoutExtension, cwd) {
+ const [filename] = await glob(
+ `${nameWithoutExtension}.{js,ts,tsx}`,
+ cwd ? {cwd} : undefined
+ );
+ return filename;
+}
+
+module.exports = {
+ findJsSourceFilename,
+};
diff --git a/build-system/common/logging.js b/build-system/common/logging.js
index 1f8e39ed2050..5614522dacd0 100644
--- a/build-system/common/logging.js
+++ b/build-system/common/logging.js
@@ -7,7 +7,7 @@ const {isCiBuild} = require('./ci');
* Used by tests to wrap progress dots. Attempts to match the terminal width
* during local development and defaults to 150 if it couldn't be determined.
*/
-const dotWrappingWidth = isCiBuild() ? 150 : process.stdout.columns ?? 150;
+const dotWrappingWidth = isCiBuild() ? 150 : (process.stdout.columns ?? 150);
/**
* Used by CI job scripts to print a prefix before top-level logging lines.
diff --git a/build-system/common/once.js b/build-system/common/once.js
new file mode 100644
index 000000000000..86a857df7b4b
--- /dev/null
+++ b/build-system/common/once.js
@@ -0,0 +1,20 @@
+/**
+ * @param {() => T} fn
+ * @return {() => T}
+ * @template T
+ */
+function once(fn) {
+ let evaluated = false;
+ let value;
+ return () => {
+ if (!evaluated) {
+ evaluated = true;
+ value = fn();
+ }
+ return value;
+ };
+}
+
+module.exports = {
+ once,
+};
diff --git a/build-system/common/preact-prop-names.js b/build-system/common/preact-prop-names.js
new file mode 100644
index 000000000000..f39cf9226f60
--- /dev/null
+++ b/build-system/common/preact-prop-names.js
@@ -0,0 +1,115 @@
+'use strict';
+
+/**
+ * @fileoverview This file contains the mappings between React and Preact style props. For more info,
+ * see https://preactjs.com/guide/v10/differences-to-react/#raw-html-attributeproperty-names.
+ */
+
+/**
+ * @param {object} obj
+ * @return {object}
+ */
+function objectFlip(obj) {
+ const ret = {};
+ Object.keys(obj).forEach((key) => {
+ ret[obj[key]] = key;
+ });
+ return ret;
+}
+
+const DOM_ATTRIBUTES_REACT_TO_PREACT = {
+ className: 'class',
+ tabIndex: 'tabindex',
+};
+
+/**
+ * This list derives all hyphenated attributes from
+ * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute
+ */
+const SVG_ATTRIBUTES_REACT_TO_PREACT = {
+ accentHeight: 'accent-height',
+ alignmentBaseline: 'alignment-baseline',
+ arabicForm: 'arabic-form',
+ baselineShift: 'baseline-shift',
+ capHeight: 'cap-height',
+ clipPath: 'clip-path',
+ clipRule: 'clip-rule',
+ colorInterpolation: 'color-interpolation',
+ colorInterpolationFilters: 'color-interpolation-filters',
+ colorProfile: 'color-profile',
+ colorRendering: 'color-rendering',
+ dominantBaseline: 'dominant-baseline',
+ enableBackground: 'enable-background',
+ fillOpacity: 'fill-opacity',
+ fillRule: 'fill-rule',
+ floodColor: 'flood-color',
+ floodOpacity: 'flood-opacity',
+ fontFamily: 'font-family',
+ fontSize: 'font-size',
+ fontSizeAdjust: 'font-size-adjust',
+ fontStretch: 'font-stretch',
+ fontStyle: 'font-style',
+ fontVariant: 'font-variant',
+ fontWeight: 'font-weight',
+ glyphName: 'glyph-name',
+ glyphOrientationHorizontal: 'glyph-orientation-horizontal',
+ glyphOrientationVertical: 'glyph-orientation-vertical',
+ horizAdvX: 'horiz-adv-x',
+ horizOriginX: 'horiz-origin-x',
+ imageRendering: 'image-rendering',
+ letterSpacing: 'letter-spacing',
+ lightingColor: 'lighting-color',
+ markerEnd: 'marker-end',
+ markerMid: 'marker-mid',
+ markerStart: 'marker-start',
+ overlinePosition: 'overline-position',
+ overlineThickness: 'overline-thickness',
+ paintOrder: 'paint-order',
+ panose1: 'panose-1',
+ pointerEvents: 'pointer-events',
+ renderingIntent: 'rendering-intent',
+ shapeRendering: 'shape-rendering',
+ stopColor: 'stop-color',
+ stopOpacity: 'stop-opacity',
+ strikethroughPosition: 'strikethrough-position',
+ strikethroughThickness: 'strikethrough-thickness',
+ strokeDasharray: 'stroke-dasharray',
+ strokeDashoffset: 'stroke-dashoffset',
+ strokeLinecap: 'stroke-linecap',
+ strokeLinejoin: 'stroke-linejoin',
+ strokeMiterlimit: 'stroke-miterlimit',
+ strokeOpacity: 'stroke-opacity',
+ strokeWidth: 'stroke-width',
+ textAnchor: 'text-anchor',
+ textDecoration: 'text-decoration',
+ textRendering: 'text-rendering',
+ transformOrigin: 'transform-origin',
+ underlinePosition: 'underline-position',
+ underlineThickness: 'underline-thickness',
+ unicodeBidi: 'unicode-bidi',
+ unicodeRange: 'unicode-range',
+ unitsPerEm: 'units-per-em',
+ vAlphabetic: 'v-alphabetic',
+ vHanging: 'v-hanging',
+ vIdeographic: 'v-ideographic',
+ vMathematical: 'v-mathematical',
+ vectorEffect: 'vector-effect',
+ vertAdvY: 'vert-adv-y',
+ vertOriginX: 'vert-origin-x',
+ vertOriginY: 'vert-origin-y',
+ wordSpacing: 'word-spacing',
+ writingMode: 'writing-mode',
+ xHeight: 'x-height',
+};
+
+const ATTRIBUTES_REACT_TO_PREACT = {
+ ...DOM_ATTRIBUTES_REACT_TO_PREACT,
+ ...SVG_ATTRIBUTES_REACT_TO_PREACT,
+};
+
+const ATTRIBUTES_PREACT_TO_REACT = objectFlip(ATTRIBUTES_REACT_TO_PREACT);
+
+module.exports = {
+ ATTRIBUTES_REACT_TO_PREACT,
+ ATTRIBUTES_PREACT_TO_REACT,
+};
diff --git a/build-system/common/transform-cache.js b/build-system/common/transform-cache.js
index d8650a57c23e..4d1f6f20f1b0 100644
--- a/build-system/common/transform-cache.js
+++ b/build-system/common/transform-cache.js
@@ -2,23 +2,25 @@ const crypto = require('crypto');
const fs = require('fs-extra');
const path = require('path');
+/**
+ * Used to bust caches when the TransformCache makes a breaking change to the API.
+ */
+const API_VERSION = 2;
+
/**
* Cache for storing transformed files on both memory and on disk.
+ * @template T
*/
class TransformCache {
/**
* @param {string} cacheName
- * @param {string} fileExtension
*/
- constructor(cacheName, fileExtension) {
- /** @type {string} */
- this.fileExtension = fileExtension;
-
+ constructor(cacheName) {
/** @type {string} */
this.cacheDir = path.resolve(__dirname, '..', '..', cacheName);
fs.ensureDirSync(this.cacheDir);
- /** @type {Map>} */
+ /** @type {Map>} */
this.transformMap = new Map();
/** @type {Set} */
@@ -27,35 +29,45 @@ class TransformCache {
/**
* @param {string} hash
- * @return {null|Promise}
+ * @return {null|Promise}
*/
get(hash) {
const cached = this.transformMap.get(hash);
if (cached) {
return cached;
}
- const filename = hash + this.fileExtension;
+
+ const filename = this.key_(hash);
if (this.fsCache.has(filename)) {
- const transformedPromise = fs.readFile(
- path.join(this.cacheDir, filename)
- );
- this.transformMap.set(hash, transformedPromise);
- return transformedPromise;
+ const persisted = fs.readJson(path.join(this.cacheDir, filename));
+ this.transformMap.set(hash, persisted);
+ return persisted;
}
+
return null;
}
/**
* @param {string} hash
- * @param {Promise} transformPromise
+ * @param {Promise} transformPromise
*/
set(hash, transformPromise) {
if (this.transformMap.has(hash)) {
- throw new Error('Read race: Attempting to transform a file twice.');
+ throw new Error(`Read race: Attempting to transform ${hash} file twice.`);
}
this.transformMap.set(hash, transformPromise);
- const filepath = path.join(this.cacheDir, hash) + this.fileExtension;
- transformPromise.then((contents) => fs.outputFile(filepath, contents));
+
+ const filepath = path.join(this.cacheDir, this.key_(hash));
+ transformPromise.then((contents) => fs.outputJson(filepath, contents));
+ }
+
+ /**
+ * @param {string} hash
+ * @return {string}
+ * @private
+ */
+ key_(hash) {
+ return `${API_VERSION}_${hash}.json`;
}
}
@@ -91,17 +103,16 @@ const readCache = new Map();
* completed, the result will be reused.
*
* @param {string} path
- * @param {string=} optionsHash
* @return {Promise}
*/
-function batchedRead(path, optionsHash) {
+function batchedRead(path) {
let read = readCache.get(path);
if (!read) {
read = fs
.readFile(path)
.then((contents) => ({
contents,
- hash: md5(contents, optionsHash ?? ''),
+ hash: md5(contents),
}))
.finally(() => {
readCache.delete(path);
diff --git a/build-system/common/update-packages.js b/build-system/common/update-packages.js
index 22aefe768d36..f7a1efac61e4 100644
--- a/build-system/common/update-packages.js
+++ b/build-system/common/update-packages.js
@@ -1,7 +1,6 @@
'use strict';
const checkDependencies = require('check-dependencies');
-const del = require('del');
const fs = require('fs-extra');
const path = require('path');
const {cyan, red} = require('kleur/colors');
@@ -45,16 +44,6 @@ function patchWebAnimations() {
}
return 'window.' + a;
});
- // Fix web-animations-js code that violates strict mode.
- // See https://github.com/ampproject/amphtml/issues/18612 and
- // https://github.com/web-animations/web-animations-js/issues/46
- file = file.replace(/b.true=a/g, 'b?b.true=a:true');
-
- // Fix web-animations-js code that attempts to write a read-only property.
- // See https://github.com/ampproject/amphtml/issues/19783 and
- // https://github.com/web-animations/web-animations-js/issues/160
- file = file.replace(/this\._isFinished\s*=\s*\!0,/, '');
-
// Wrap the contents inside the install function.
file =
'export function installWebAnimations(window) {\n' +
@@ -189,27 +178,6 @@ function patchShadowDom() {
writeIfUpdated(patchedName, file);
}
-/**
- * Adds a missing export statement to the preact module.
- */
-function patchPreact() {
- fs.ensureDirSync('node_modules/preact/dom');
- const file = `export { render, hydrate } from 'preact';`;
- writeIfUpdated('node_modules/preact/dom/index.js', file);
-}
-
-/**
- * Deletes the map file for rrule, which breaks closure compiler.
- * TODO(rsimha): Remove this workaround after a fix is merged for
- * https://github.com/google/closure-compiler/issues/3720.
- */
-function removeRruleSourcemap() {
- const rruleMapFile = 'node_modules/rrule/dist/es5/rrule.js.map';
- if (fs.existsSync(rruleMapFile)) {
- del.sync(rruleMapFile);
- logLocalDev('Deleted', cyan(rruleMapFile));
- }
-}
/**
* Checks if all packages are current, and if not, runs `npm install`.
@@ -245,8 +213,6 @@ function updatePackages() {
patchIntersectionObserver();
patchResizeObserver();
patchShadowDom();
- patchPreact();
- removeRruleSourcemap();
if (isCiBuild()) {
runNpmChecks();
}
diff --git a/build-system/common/update-session-issues/index.js b/build-system/common/update-session-issues/index.js
index dc8c7815db42..ef864d2fb01c 100644
--- a/build-system/common/update-session-issues/index.js
+++ b/build-system/common/update-session-issues/index.js
@@ -15,12 +15,12 @@
* ⚠️ Only use standard node modules.
* This file cannot depend on `npm install`.
*/
-const https = require('https');
const {readdir} = require('fs').promises;
+const https = require('https');
const {relative} = require('path');
const {RotationItemDef, TemplateDef} = require('./types');
-/** @return {Promise>} */
+/** @return {Promise<{[key: string]: TemplateDef}>} */
async function getTemplates() {
const dir = relative(process.cwd(), __dirname) + '/template';
const files = (await readdir(dir)).filter((basename) =>
@@ -84,7 +84,7 @@ function parseYyyyMmDd(yyyyMmDd, hours = 0, minutes = 0) {
/**
* @param {string} url
- * @param {Object} options
+ * @param {object} options
* @param {string=} data
* @return {!Promise<{res: *, body: string}>}
*/
@@ -165,7 +165,7 @@ async function postGithub(token, url, data) {
/**
* @param {string} token
* @param {string} repo
- * @param {Object} data
+ * @param {object} data
* @return {Promise}
*/
function postGithubIssue(token, repo, data) {
@@ -299,7 +299,7 @@ const timeZ = (yyyy, mm, dd, hours, minutes) =>
/**
* @param {TemplateDef} template
- * @return {Object}
+ * @return {object}
*/
function getNextIssueData(template) {
const {
@@ -399,7 +399,7 @@ function getSessionDateFromTitle(title) {
}
const [
// @ts-ignore
- unusedFullMatch, // eslint-disable-line no-unused-vars
+ unusedFullMatch, // eslint-disable-line @typescript-eslint/no-unused-vars
day,
time,
] = match;
diff --git a/build-system/common/update-session-issues/template/design-review.js b/build-system/common/update-session-issues/template/design-review.js
index e19a030776e6..7d2afdb082cb 100644
--- a/build-system/common/update-session-issues/template/design-review.js
+++ b/build-system/common/update-session-issues/template/design-review.js
@@ -8,10 +8,9 @@ const sessionDurationHours = 1;
const timeRotationUtc = [
[/* wed */ 3, '16:30', 'Africa/Europe/western Asia'],
[/* wed */ 3, '21:00', 'Americas'],
- [/* thu */ 4, '01:00', 'Asia/Oceania'],
];
-const timeRotationStart = new Date('2021-04-14');
+const timeRotationStart = new Date('2022-03-02');
// All previous weeks have already been handled.
const generateWeeksFromNow = 3;
@@ -36,7 +35,7 @@ If you are interested in bringing your design to design review, read the [design
When attending a design review please read through the designs _before_ the design review starts. This allows us to spend more time on discussion of the design.
-We rotate our design review between times that work better for different parts of the world as described in our [design review documentation](https://github.com/ampproject/amphtml/blob/main/docs/design-reviews.md), but you are welcome to attend any design review. If you cannot make any of the design reviews but have a design to discuss please let mrjoro@ know on [Slack](https://github.com/ampproject/amphtml/blob/main/docs/contributing.md#discussion-channels) and we will find a time that works for you.
+We rotate our design review between times that work better for different parts of the world as described in our [design review documentation](https://github.com/ampproject/amphtml/blob/main/docs/design-reviews.md), but you are welcome to attend any design review. If you cannot make any of the design reviews but have a design to discuss please let us know in the \`#contributing\` channel on [Slack](https://github.com/ampproject/amphtml/blob/main/docs/contributing.md#discussion-channels) and we will find a time that works for you.
`;
module.exports = /** @type {import('../types').TemplateDef} */ ({
diff --git a/build-system/common/utils.js b/build-system/common/utils.js
index 549ee95a24cf..19bf8019dccf 100644
--- a/build-system/common/utils.js
+++ b/build-system/common/utils.js
@@ -36,7 +36,7 @@ function getExperimentConfig(experiment) {
config?.name &&
config?.define_experiment_constant &&
config?.expiration_date_utc &&
- new Number(new Date(config.expiration_date_utc)) >= Date.now();
+ Number(new Date(config.expiration_date_utc)) >= Date.now();
return valid ? config : null;
}
diff --git a/build-system/compile/OWNERS b/build-system/compile/OWNERS
index abf49ba53e51..74713864a778 100644
--- a/build-system/compile/OWNERS
+++ b/build-system/compile/OWNERS
@@ -16,17 +16,12 @@
{
pattern: 'bundles.config.*',
owners: [
- {name: 'ampproject/wg-bento'},
{name: 'ampproject/wg-components'},
{name: 'ampproject/wg-infra'},
{name: 'ampproject/wg-performance'},
{name: 'ampproject/wg-stories'},
],
},
- {
- pattern: '{closure-compile,compile}.js',
- owners: [{name: 'rsimha', notify: true}],
- },
{
pattern: 'internal-version.js',
owners: [{name: 'danielrozenberg', notify: true}],
diff --git a/build-system/compile/build-compiler.js b/build-system/compile/build-compiler.js
index c6a0e55190fb..4d4700fd1c0d 100644
--- a/build-system/compile/build-compiler.js
+++ b/build-system/compile/build-compiler.js
@@ -20,6 +20,7 @@ async function buildCompiler() {
IS_MINIFIED: 'false',
IS_ESM: 'false',
IS_SXG: 'false',
+ IS_SSR_CSS: 'false',
},
});
endBuildStep('Compiled', 'compiler.js', startTime);
diff --git a/build-system/compile/build-constants.js b/build-system/compile/build-constants.js
index d87e8804a048..2812563c6955 100644
--- a/build-system/compile/build-constants.js
+++ b/build-system/compile/build-constants.js
@@ -19,7 +19,7 @@ const isMinified = argv._.includes('dist') || !!argv.minified;
* TODO: move constant replacement to bundlers once either https://github.com/google/closure-compiler/issues/1601
* is resolved, or we switch to using a different bundler.
*
- * @type {Object}
+ * @type {{[key: string]: boolean|string}}
*/
const BUILD_CONSTANTS = {
IS_PROD: isProd,
@@ -32,6 +32,9 @@ const BUILD_CONSTANTS = {
// for conditions only true for SxG.
IS_ESM: !!(argv.esm || argv.sxg),
IS_SXG: !!argv.sxg,
+ // IS_SSR is always false by default and can only be overriden on a per
+ // output file basis in bundles.config.extensions through `options.ssr`.
+ IS_SSR_CSS: false,
};
module.exports = {BUILD_CONSTANTS};
diff --git a/build-system/compile/bundles.config.extensions.json b/build-system/compile/bundles.config.extensions.json
index 147581beb64d..16a2d961b4d4 100644
--- a/build-system/compile/bundles.config.extensions.json
+++ b/build-system/compile/bundles.config.extensions.json
@@ -17,6 +17,14 @@
"hasCss": true
}
},
+ {
+ "name": "amp-access-fewcents",
+ "version": "0.1",
+ "latestVersion": "0.1",
+ "options": {
+ "hasCss": true
+ }
+ },
{
"name": "amp-access-laterpay",
"version": [
@@ -54,9 +62,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -107,11 +113,21 @@
"version": "0.1",
"latestVersion": "0.1"
},
+ {
+ "name": "amp-ad-network-mgid-impl",
+ "version": "0.1",
+ "latestVersion": "0.1"
+ },
{
"name": "amp-ad-network-nws-impl",
"version": "0.1",
"latestVersion": "0.1"
},
+ {
+ "name": "amp-ad-network-smartadserver-impl",
+ "version": "0.1",
+ "latestVersion": "0.1"
+ },
{
"name": "amp-ad-network-valueimpression-impl",
"version": "0.1",
@@ -161,11 +177,24 @@
"hasCss": true
}
},
+ {
+ "name": "amp-app-banner",
+ "version": "1.0",
+ "options": {
+ "hasCss": true
+ }
+ },
{
"name": "amp-audio",
"version": "0.1",
"latestVersion": "0.1"
},
+ {
+ "name": "amp-audio",
+ "version": "1.0",
+ "latestVersion": "0.1",
+ "options": {}
+ },
{
"name": "amp-auto-ads",
"version": "0.1",
@@ -197,9 +226,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -232,9 +259,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -289,6 +314,14 @@
"version": "0.1",
"latestVersion": "0.1"
},
+ {
+ "name": "amp-dailymotion",
+ "version": "1.0",
+ "latestVersion": "0.1",
+ "options": {
+ "hasCss": true
+ }
+ },
{
"name": "amp-date-countdown",
"version": "0.1",
@@ -299,8 +332,6 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "npm": true,
- "bento": true,
"hasCss": true
}
},
@@ -314,8 +345,6 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "npm": true,
- "bento": true,
"hasCss": true
}
},
@@ -327,6 +356,14 @@
"hasCss": true
}
},
+ {
+ "name": "amp-date-picker",
+ "version": "1.0",
+ "latestVersion": "0.1",
+ "options": {
+ "hasCss": true
+ }
+ },
{
"name": "amp-delight-player",
"version": "0.1",
@@ -350,9 +387,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -373,9 +408,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -406,9 +439,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -452,11 +483,22 @@
"version": "0.1",
"latestVersion": "0.1"
},
+ {
+ "name": "amp-gist",
+ "version": "1.0",
+ "options": {
+ "hasCss": true
+ }
+ },
{
"name": "amp-google-document-embed",
"version": "0.1",
"latestVersion": "0.1"
},
+ {
+ "name": "amp-google-read-aloud-player",
+ "version": "0.1"
+ },
{
"name": "amp-gwd-animation",
"version": "0.1",
@@ -480,9 +522,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -511,6 +551,14 @@
"hasCss": true
}
},
+ {
+ "name": "amp-image-slider",
+ "version": "1.0",
+ "latestVersion": "0.1",
+ "options": {
+ "hasCss": true
+ }
+ },
{
"name": "amp-image-viewer",
"version": "0.1",
@@ -529,14 +577,7 @@
"version": "0.1",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "cssBinaries": [
- "amp-inline-gallery",
- "amp-inline-gallery-captions",
- "amp-inline-gallery-pagination",
- "amp-inline-gallery-slide",
- "amp-inline-gallery-thumbnails"
- ]
+ "hasCss": true
}
},
{
@@ -544,12 +585,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "cssBinaries": [
- "amp-inline-gallery-pagination"
- ],
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -570,9 +606,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -600,9 +634,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "bento": true,
- "npm": true
+ "hasCss": true
}
},
{
@@ -623,9 +655,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -641,9 +671,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -659,6 +687,13 @@
"hasCss": true
}
},
+ {
+ "name": "amp-list",
+ "version": "1.0",
+ "options": {
+ "hasCss": false
+ }
+ },
{
"name": "amp-live-list",
"version": "0.1",
@@ -688,9 +723,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "bento": true,
- "npm": true
+ "hasCss": true
}
},
{
@@ -784,6 +817,13 @@
"hasCss": true
}
},
+ {
+ "name": "amp-pan-zoom",
+ "version": "1.0",
+ "options": {
+ "hasCss": true
+ }
+ },
{
"name": "amp-pinterest",
"version": "0.1",
@@ -823,11 +863,6 @@
"hasCss": true
}
},
- {
- "name": "amp-redbull-player",
- "version": "0.1",
- "latestVersion": "0.1"
- },
{
"name": "amp-reddit",
"version": "0.1",
@@ -869,9 +904,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -898,9 +931,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -915,6 +946,11 @@
"version": "0.1",
"latestVersion": "0.1"
},
+ {
+ "name": "amp-slikeplayer",
+ "version": "0.1",
+ "latestVersion": "0.1"
+ },
{
"name": "amp-smartlinks",
"version": "0.1",
@@ -933,9 +969,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -948,9 +982,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -976,20 +1008,17 @@
"version": "1.0",
"latestVersion": "1.0",
"options": {
- "hasCss": true,
- "cssBinaries": [
- "amp-story-consent",
- "amp-story-draggable-drawer-header",
- "amp-story-form",
- "amp-story-hint",
- "amp-story-info-dialog",
- "amp-story-open-page-attachment",
- "amp-story-share",
- "amp-story-share-menu",
- "amp-story-system-layer",
- "amp-story-tooltip",
- "amp-story-unsupported-browser-layer"
- ]
+ "hasCss": true
+ }
+ },
+ {
+ "name": "amp-story",
+ "version": "1.0",
+ "latestVersion": "1.0",
+ "options": {
+ "hasCss": false,
+ "additionalSuffix": "ssr-css",
+ "ssrCss": true
}
},
{
@@ -1000,20 +1029,20 @@
"hasCss": true
}
},
+ {
+ "name": "amp-story-audio-sticker",
+ "version": "0.1",
+ "latestVersion": "0.1",
+ "options": {
+ "hasCss": true
+ }
+ },
{
"name": "amp-story-auto-ads",
"version": "0.1",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "cssBinaries": [
- "amp-story-auto-ads-ad-badge",
- "amp-story-auto-ads-attribution",
- "amp-story-auto-ads-cta-button",
- "amp-story-auto-ads-inabox",
- "amp-story-auto-ads-progress-bar",
- "amp-story-auto-ads-shared"
- ]
+ "hasCss": true
}
},
{
@@ -1050,19 +1079,14 @@
"version": "0.1",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "cssBinaries": [
- "amp-story-interactive-binary-poll",
- "amp-story-interactive-img",
- "amp-story-interactive-img-poll",
- "amp-story-interactive-img-quiz",
- "amp-story-interactive-poll",
- "amp-story-interactive-quiz",
- "amp-story-interactive-results",
- "amp-story-interactive-results-detailed",
- "amp-story-interactive-slider",
- "amp-story-interactive-disclaimer"
- ]
+ "hasCss": true
+ }
+ },
+ {
+ "name": "amp-story-page-attachment",
+ "version": "0.1",
+ "options": {
+ "hasCss": true
}
},
{
@@ -1081,17 +1105,27 @@
"hasCss": true
}
},
+ {
+ "name": "amp-story-share-menu",
+ "version": "0.1",
+ "latestVersion": "0.1",
+ "options": {
+ "hasCss": true
+ }
+ },
{
"name": "amp-story-shopping",
"version": "0.1",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "cssBinaries": [
- "amp-story-shopping",
- "amp-story-shopping-attachment",
- "amp-story-shopping-tag"
- ]
+ "hasCss": true
+ }
+ },
+ {
+ "name": "amp-story-subscriptions",
+ "version": "0.1",
+ "options": {
+ "hasCss": true
}
},
{
@@ -1107,9 +1141,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -1146,9 +1178,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -1156,11 +1186,7 @@
"version": "0.1",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "cssBinaries": [
- "amp-truncate-text",
- "amp-truncate-text-shadow"
- ]
+ "hasCss": true
}
},
{
@@ -1173,9 +1199,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -1196,9 +1220,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -1219,9 +1241,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -1246,9 +1266,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -1284,9 +1302,7 @@
"version": "1.0",
"latestVersion": "1.0",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
},
{
@@ -1304,9 +1320,7 @@
"version": "1.0",
"latestVersion": "0.1",
"options": {
- "hasCss": true,
- "npm": true,
- "bento": true
+ "hasCss": true
}
}
]
diff --git a/build-system/compile/bundles.config.js b/build-system/compile/bundles.config.js
index c59796bdce02..a23d1f5d9e21 100644
--- a/build-system/compile/bundles.config.js
+++ b/build-system/compile/bundles.config.js
@@ -17,7 +17,7 @@ exports.jsBundles = {
minifiedDestDir: './build/',
},
'bento.js': {
- srcDir: './src/',
+ srcDir: './src/bento',
srcFilename: 'bento.js',
destDir: './dist',
minifiedDestDir: './dist',
@@ -119,7 +119,6 @@ exports.jsBundles = {
toName: 'amp-viewer-host.max.js',
minifiedName: 'amp-viewer-host.js',
incudePolyfills: true,
- extraGlobs: ['extensions/amp-viewer-integration/**/*.js'],
skipUnknownDepsCheck: true,
},
},
@@ -194,7 +193,6 @@ exports.jsBundles = {
toName: 'amp-inabox.js',
minifiedName: 'amp4ads-v0.js',
includePolyfills: true,
- extraGlobs: ['src/inabox/*.js', '3p/iframe-messaging-client.js'],
},
},
};
@@ -256,24 +254,5 @@ exports.verifyExtensionBundles = function () {
bundle.name,
bundleString
);
- verifyBundle_(
- 'latestVersion' in bundle,
- 'latestVersion',
- 'is missing from',
- bundle.name,
- bundleString
- );
- const duplicates = exports.extensionBundles.filter(
- (duplicate) => duplicate.name === bundle.name
- );
- verifyBundle_(
- duplicates.every(
- (duplicate) => duplicate.latestVersion === bundle.latestVersion
- ),
- 'latestVersion',
- 'is not the same for all versions of',
- bundle.name,
- JSON.stringify(duplicates, null, 2)
- );
});
};
diff --git a/build-system/compile/bundles.legacy-latest-versions.jsonc b/build-system/compile/bundles.legacy-latest-versions.jsonc
new file mode 100644
index 000000000000..28bb98f70d51
--- /dev/null
+++ b/build-system/compile/bundles.legacy-latest-versions.jsonc
@@ -0,0 +1,165 @@
+/**
+ * Exports an extension-version map for all of the '-latest' binaries that we
+ * should produce. This object should never be modified, as we have
+ * intentionally deprecated the concept of '-latest' binaries.
+ *
+ * See the I2D for full context: https://github.com/ampproject/amphtml/issues/36749
+ */
+{
+ "amp-3d-gltf": "0.1",
+ "amp-3q-player": "0.1",
+ "amp-access-laterpay": "0.2",
+ "amp-access-poool": "0.1",
+ "amp-access-scroll": "0.1",
+ "amp-access": "0.1",
+ "amp-accordion": "0.1",
+ "amp-action-macro": "0.1",
+ "amp-ad-custom": "0.1",
+ "amp-ad-exit": "0.1",
+ "amp-ad-network-adsense-impl": "0.1",
+ "amp-ad-network-adzerk-impl": "0.1",
+ "amp-ad-network-dianomi-impl": "0.1",
+ "amp-ad-network-doubleclick-impl": "0.1",
+ "amp-ad-network-fake-impl": "0.1",
+ "amp-ad-network-nws-impl": "0.1",
+ "amp-ad-network-valueimpression-impl": "0.1",
+ "amp-ad": "0.1",
+ "amp-addthis": "0.1",
+ "amp-analytics": "0.1",
+ "amp-anim": "0.1",
+ "amp-animation-polyfill": "0.1",
+ "amp-animation": "0.1",
+ "amp-apester-media": "0.1",
+ "amp-app-banner": "0.1",
+ "amp-audio": "0.1",
+ "amp-auto-ads": "0.1",
+ "amp-auto-lightbox": "0.1",
+ "amp-autocomplete": "0.1",
+ "amp-base-carousel": "0.1",
+ "amp-beopinion": "0.1",
+ "amp-bind": "0.1",
+ "amp-bodymovin-animation": "0.1",
+ "amp-brid-player": "0.1",
+ "amp-brightcove": "0.1",
+ "amp-byside-content": "0.1",
+ "amp-cache-url": "0.1",
+ "amp-call-tracking": "0.1",
+ "amp-carousel": "0.1",
+ "amp-connatix-player": "0.1",
+ "amp-consent": "0.1",
+ "amp-crypto-polyfill": "0.1",
+ "amp-dailymotion": "0.1",
+ "amp-date-countdown": "0.1",
+ "amp-date-display": "0.1",
+ "amp-date-picker": "0.1",
+ "amp-delight-player": "0.1",
+ "amp-dynamic-css-classes": "0.1",
+ "amp-embedly-card": "0.1",
+ "amp-experiment": "0.1",
+ "amp-facebook-comments": "0.1",
+ "amp-facebook-like": "0.1",
+ "amp-facebook-page": "0.1",
+ "amp-facebook": "0.1",
+ "amp-fit-text": "0.1",
+ "amp-font": "0.1",
+ "amp-form": "0.1",
+ "amp-fx-collection": "0.1",
+ "amp-fx-flying-carpet": "0.1",
+ "amp-geo": "0.1",
+ "amp-gfycat": "0.1",
+ "amp-gist": "0.1",
+ "amp-google-document-embed": "0.1",
+ "amp-gwd-animation": "0.1",
+ "amp-hulu": "0.1",
+ "amp-iframe": "0.1",
+ "amp-iframely": "0.1",
+ "amp-ima-video": "0.1",
+ "amp-image-lightbox": "0.1",
+ "amp-image-slider": "0.1",
+ "amp-image-viewer": "0.1",
+ "amp-imgur": "0.1",
+ "amp-inline-gallery": "0.1",
+ "amp-inputmask": "0.1",
+ "amp-instagram": "0.1",
+ "amp-install-serviceworker": "0.1",
+ "amp-intersection-observer-polyfill": "0.1",
+ "amp-izlesene": "0.1",
+ "amp-jwplayer": "0.1",
+ "amp-kaltura-player": "0.1",
+ "amp-lightbox-gallery": "0.1",
+ "amp-lightbox": "0.1",
+ "amp-link-rewriter": "0.1",
+ "amp-list": "0.1",
+ "amp-live-list": "0.1",
+ "amp-loader": "0.1",
+ "amp-mathml": "0.1",
+ "amp-mega-menu": "0.1",
+ "amp-megaphone": "0.1",
+ "amp-minute-media-player": "0.1",
+ "amp-mowplayer": "0.1",
+ "amp-mraid": "0.1",
+ "amp-mustache": "0.2",
+ "amp-nested-menu": "0.1",
+ "amp-next-page": "1.0",
+ "amp-nexxtv-player": "0.1",
+ "amp-o2-player": "0.1",
+ "amp-onetap-google": "0.1",
+ "amp-ooyala-player": "0.1",
+ "amp-orientation-observer": "0.1",
+ "amp-pan-zoom": "0.1",
+ "amp-pinterest": "0.1",
+ "amp-playbuzz": "0.1",
+ "amp-position-observer": "0.1",
+ "amp-powr-player": "0.1",
+ "amp-reach-player": "0.1",
+ "amp-recaptcha-input": "0.1",
+ "amp-reddit": "0.1",
+ "amp-render": "1.0",
+ "amp-resize-observer-polyfill": "0.1",
+ "amp-riddle-quiz": "0.1",
+ "amp-script": "0.1",
+ "amp-selector": "0.1",
+ "amp-shadow-dom-polyfill": "0.1",
+ "amp-sidebar": "0.1",
+ "amp-skimlinks": "0.1",
+ "amp-slides": "0.1",
+ "amp-slikeplayer": "0.1",
+ "amp-smartlinks": "0.1",
+ "amp-social-share": "0.1",
+ "amp-soundcloud": "0.1",
+ "amp-springboard-player": "0.1",
+ "amp-standalone": "0.1",
+ "amp-sticky-ad": "1.0",
+ "amp-story-360": "0.1",
+ "amp-story-auto-ads": "0.1",
+ "amp-story-auto-analytics": "0.1",
+ "amp-story-captions": "0.1",
+ "amp-story-dev-tools": "0.1",
+ "amp-story-education": "0.1",
+ "amp-story-interactive": "0.1",
+ "amp-story-panning-media": "0.1",
+ "amp-story-player": "0.1",
+ "amp-story-shopping": "0.1",
+ "amp-story": "1.0",
+ "amp-stream-gallery": "0.1",
+ "amp-subscriptions-google": "0.1",
+ "amp-subscriptions": "0.1",
+ "amp-tiktok": "0.1",
+ "amp-timeago": "0.1",
+ "amp-truncate-text": "0.1",
+ "amp-twitter": "0.1",
+ "amp-user-notification": "0.1",
+ "amp-video-docking": "0.1",
+ "amp-video-iframe": "0.1",
+ "amp-video": "0.1",
+ "amp-viewer-integration": "0.1",
+ "amp-vimeo": "0.1",
+ "amp-vine": "0.1",
+ "amp-viqeo-player": "0.1",
+ "amp-vk": "0.1",
+ "amp-web-push": "0.1",
+ "amp-wistia-player": "0.1",
+ "amp-wordpress-embed": "1.0",
+ "amp-yotpo": "0.1",
+ "amp-youtube": "0.1"
+}
diff --git a/build-system/compile/check-for-unknown-deps.js b/build-system/compile/check-for-unknown-deps.js
deleted file mode 100644
index ee573fd76eba..000000000000
--- a/build-system/compile/check-for-unknown-deps.js
+++ /dev/null
@@ -1,38 +0,0 @@
-'use strict';
-
-const argv = require('minimist')(process.argv.slice(2));
-const fs = require('fs-extra');
-const {cyan, red, yellow} = require('kleur/colors');
-const {log} = require('../common/logging');
-
-/**
- * Searches for the identifier "module$", which Closure uses to uniquely
- * reference module imports. If any are found, that means Closure couldn't
- * import the module correctly.
- * @param {string} file
- * @return {Promise}
- */
-async function checkForUnknownDeps(file) {
- const regex = /[\w$]*module\$[\w$]+/;
- const contents = await fs.readFile(file, 'utf-8');
- if (!contents.includes('module$')) {
- // Fast check, since regexes can backtrack like crazy.
- return;
- }
- const match = regex.exec(contents) || [
- `couldn't parse the dep. Look for "module$" in the file`,
- ];
- log(
- red('Error:'),
- `Unknown dependency ${cyan(match[0])} found in ${cyan(file)}`
- );
- if (argv.debug) {
- log(red('Output file contents:'));
- log(yellow(contents));
- }
- throw new Error('Compilation failed due to unknown dependency');
-}
-
-module.exports = {
- checkForUnknownDeps,
-};
diff --git a/build-system/compile/closure-compile.js b/build-system/compile/closure-compile.js
deleted file mode 100644
index f5d103c9660f..000000000000
--- a/build-system/compile/closure-compile.js
+++ /dev/null
@@ -1,95 +0,0 @@
-'use strict';
-
-const compiler = require('@ampproject/google-closure-compiler');
-const vinylFs = require('vinyl-fs');
-const {cyan, red, yellow} = require('kleur/colors');
-const {getBabelOutputDir} = require('./pre-closure-babel');
-const {log, logWithoutTimestamp} = require('../common/logging');
-
-/**
- * Logs a closure compiler error message after syntax highlighting it and then
- * formatting it into a more readable form by dropping the plugin's logging
- * prefix, normalizing paths, and emphasizing errors and warnings.
- * @param {string} message
- */
-function logClosureCompilerError(message) {
- log(red('ERROR:'));
- const babelOutputDir = `${getBabelOutputDir()}/`;
- const loggingPrefix = /^.*?gulp-google-closure-compiler.*?: /;
- const {highlight} = require('cli-highlight'); // Lazy-required to speed up task loading.
- const highlightedMessage = highlight(message, {ignoreIllegals: true});
- const formattedMessage = highlightedMessage
- .replace(loggingPrefix, '')
- .replace(new RegExp(babelOutputDir, 'g'), '')
- .replace(/ ERROR /g, red(' ERROR '))
- .replace(/ WARNING /g, yellow(' WARNING '));
- logWithoutTimestamp(formattedMessage);
-}
-
-/**
- * Handles a closure error during compilation and type checking. Passes through
- * the error except in watch mode, where we want to print a failure message and
- * continue.
- * @param {!compiler.PluginError} err
- * @param {string} outputFilename
- * @param {?Object} options
- * @return {!compiler.PluginError|undefined}
- */
-function handleClosureCompilerError(err, outputFilename, options) {
- if (options.typeCheckOnly) {
- if (!options.logger) {
- log(`${red('ERROR:')} Type checking failed`);
- }
- return err;
- }
- log(`${red('ERROR:')} Could not minify ${cyan(outputFilename)}`);
- if (options.continueOnError) {
- options.errored = true;
- return;
- }
- return err;
-}
-
-/**
- * Initializes closure compiler with the given set of flags. We use the gulp
- * streaming plugin because invoking a command with a long list of --fs flags
- * on Windows exceeds the command line size limit. The stream mode is 'IN'
- * because output files and sourcemaps are written directly to disk.
- * @param {Array} flags
- * @param {!Object} options
- * @return {!Object}
- */
-function initializeClosure(flags, options) {
- const pluginOptions = {
- streamMode: 'IN',
- logger: options.logger || logClosureCompilerError,
- };
- return compiler.gulp()(flags, pluginOptions);
-}
-
-/**
- * Runs closure compiler with the given set of flags.
- * @param {string} outputFilename
- * @param {!Object} options
- * @param {Array} flags
- * @param {Array} srcFiles
- * @return {Promise}
- */
-function runClosure(outputFilename, options, flags, srcFiles) {
- return new Promise((resolve, reject) => {
- vinylFs
- .src(srcFiles, {base: getBabelOutputDir()})
- .pipe(initializeClosure(flags, options))
- .on('error', (err) => {
- const reason = handleClosureCompilerError(err, outputFilename, options);
- reason ? reject(reason) : resolve();
- })
- .on('end', resolve)
- .pipe(vinylFs.dest('.'));
- });
-}
-
-module.exports = {
- logClosureCompilerError,
- runClosure,
-};
diff --git a/build-system/compile/compile-wrappers.js b/build-system/compile/compile-wrappers.js
index e9d6e3c8b684..7ae8bb182903 100644
--- a/build-system/compile/compile-wrappers.js
+++ b/build-system/compile/compile-wrappers.js
@@ -1,5 +1,14 @@
+const fs = require('fs-extra');
+const json5 = require('json5');
const {VERSION} = require('./internal-version');
+const latestVersions = json5.parse(
+ fs.readFileSync(
+ require.resolve('./bundles.legacy-latest-versions.jsonc'),
+ 'utf8'
+ )
+);
+
// If there is a sync JS error during initial load,
// at least try to unhide the body.
// If "AMP" is already an object then that means another runtime has already
@@ -26,19 +35,12 @@ let ExtensionLoadPriorityDef;
* by the main binary
* @param {string} name
* @param {string} version
- * @param {boolean} latest
* @param {boolean=} isModule
* @param {ExtensionLoadPriorityDef=} loadPriority
* @return {string}
*/
-function extension(name, version, latest, isModule, loadPriority) {
- const payload = extensionPayload(
- name,
- version,
- latest,
- isModule,
- loadPriority
- );
+function extension(name, version, isModule, loadPriority) {
+ const payload = extensionPayload(name, version, isModule, loadPriority);
return `(self.AMP=self.AMP||[]).push(${payload});`;
}
@@ -53,12 +55,11 @@ exports.extension = extension;
* @see {@link bento}
* @param {string} name
* @param {string} version
- * @param {boolean} latest
* @param {boolean=} isModule
* @param {ExtensionLoadPriorityDef=} loadPriority
* @return {string}
*/
-function extensionPayload(name, version, latest, isModule, loadPriority) {
+function extensionPayload(name, version, isModule, loadPriority) {
let priority = '';
if (loadPriority) {
if (loadPriority != 'high') {
@@ -68,6 +69,7 @@ function extensionPayload(name, version, latest, isModule, loadPriority) {
}
// Use a numeric value instead of boolean. "m" stands for "module"
const m = isModule ? 1 : 0;
+ const latest = latestVersions[name] === version;
return (
'{' +
`m:${m},` +
@@ -81,6 +83,4 @@ function extensionPayload(name, version, latest, isModule, loadPriority) {
);
}
-exports.bento = '(self.BENTO=self.BENTO||[]).push(function(){<%= contents %>})';
-
exports.none = '<%= contents %>';
diff --git a/build-system/compile/compile.js b/build-system/compile/compile.js
deleted file mode 100644
index 56ae5cf82299..000000000000
--- a/build-system/compile/compile.js
+++ /dev/null
@@ -1,463 +0,0 @@
-'use strict';
-const argv = require('minimist')(process.argv.slice(2));
-const del = require('del');
-const fastGlob = require('fast-glob');
-const fs = require('fs-extra');
-const path = require('path');
-const {checkForUnknownDeps} = require('./check-for-unknown-deps');
-const {CLOSURE_SRC_GLOBS} = require('./sources');
-const {cpus} = require('os');
-const {cyan, green} = require('kleur/colors');
-const {getAmpConfigForFile} = require('../tasks/prepend-global');
-const {log, logLocalDev} = require('../common/logging');
-const {postClosureBabel} = require('./post-closure-babel');
-const {preClosureBabel} = require('./pre-closure-babel');
-const {runClosure} = require('./closure-compile');
-const {sanitize} = require('./sanitize');
-const {VERSION: internalRuntimeVersion} = require('./internal-version');
-const {writeSourcemaps} = require('./helpers');
-
-const queue = [];
-let inProgress = 0;
-
-const MAX_PARALLEL_CLOSURE_INVOCATIONS =
- parseInt(argv.closure_concurrency, 10) || cpus().length;
-
-/**
- * @typedef {{
- * esmPassCompilation?: string,
- * wrapper?: string,
- * extraGlobs?: string,
- * include3pDirectories?: boolean,
- * includePolyfills?: boolean,
- * externs?: string[],
- * compilationLevel?: string,
- * verboseLogging?: boolean,
- * typeCheckOnly?: boolean,
- * skipUnknownDepsCheck?: boolean,
- * warningLevel?: boolean,
- * noAddDeps?: boolean,
- * continueOnError?: boolean,
- * errored?: boolean,
- * }}
- */
-let OptionsDef;
-
-/**
- * Compiles AMP with the closure compiler. This is intended only for
- * production use. During development we intend to continue using
- * babel, as it has much faster incremental compilation.
- *
- * @param {string|string[]} entryModuleFilename
- * @param {string} outputDir
- * @param {string} outputFilename
- * @param {!OptionsDef} options
- * @param {{startTime?: number}=} timeInfo
- * @return {Promise}
- */
-async function closureCompile(
- entryModuleFilename,
- outputDir,
- outputFilename,
- options,
- timeInfo = {}
-) {
- // Rate limit closure compilation to MAX_PARALLEL_CLOSURE_INVOCATIONS
- // concurrent processes.
- return new Promise(function (resolve, reject) {
- /**
- * Kicks off the first closure invocation.
- */
- function start() {
- inProgress++;
- compile(
- entryModuleFilename,
- outputDir,
- outputFilename,
- options,
- timeInfo
- ).then(
- function () {
- inProgress--;
- next();
- resolve();
- },
- (reason) => reject(reason)
- );
- }
-
- /**
- * Keeps track of the invocation count.
- */
- function next() {
- if (!queue.length) {
- return;
- }
- if (inProgress < MAX_PARALLEL_CLOSURE_INVOCATIONS) {
- queue.shift()();
- }
- }
- queue.push(start);
- next();
- });
-}
-
-/**
- * Cleans up the placeholder directories for fake build modules.
- */
-function cleanupBuildDir() {
- del.sync('build/fake-module');
- del.sync('build/patched-module');
- del.sync('build/parsers');
- fs.mkdirsSync('build/fake-module/third_party/babel');
- fs.mkdirsSync('build/fake-module/src/polyfills/');
- fs.mkdirsSync('build/fake-polyfills/src/polyfills');
-}
-
-/**
- * Generates a list of source files based on various factors.
- * TODO(wg-infra, wg-performance): Clean up unnecessary files.
- *
- * @param {string[]} entryModuleFilenames
- * @param {!OptionsDef} options
- * @return {!Array}
- */
-function getSrcs(entryModuleFilenames, options) {
- const unneededFiles = [
- 'build/fake-module/third_party/babel/custom-babel-helpers.js',
- ];
- const srcs = [...CLOSURE_SRC_GLOBS];
- entryModuleFilenames.forEach((filename) => {
- // For extensions, include all JS files in the extension directory.
- // Note: The glob added to srcs must be a posix glob on all platforms.
- if (filename.startsWith('extensions')) {
- srcs.push(
- filename
- .replace(path.basename(filename), path.join('**', '*.js'))
- .split(path.win32.sep)
- .join(path.posix.sep)
- );
- }
- });
- if (options.extraGlobs) {
- srcs.push.apply(srcs, options.extraGlobs);
- }
- if (options.include3pDirectories) {
- srcs.push('3p/**/*.js', 'ads/**/*.js');
- }
- // Many files include the polyfills, but we only want to deliver them
- // once. Since all files automatically wait for the main binary to load
- // this works fine.
- if (options.includePolyfills) {
- srcs.push(
- '!build/fake-module/src/polyfills/index.js',
- '!build/fake-module/src/polyfills/**/*.js',
- '!build/fake-polyfills/**/*.js'
- );
- } else {
- srcs.push('!src/polyfills/index.js', '!build/fake-polyfills/**/*.js');
- unneededFiles.push('build/fake-module/src/polyfills/index.js');
- }
- // Negative globstars must come at the end.
- srcs.push(
- // Don't include rollup configs
- '!**/rollup.config.js',
- // Don't include tests.
- '!**_test.js',
- '!**/test-*.js',
- '!**/test-e2e/*.js',
- // Don't include externs.
- '!**/*.extern.js'
- );
- unneededFiles.forEach(function (fake) {
- if (!fs.existsSync(fake)) {
- fs.writeFileSync(
- fake,
- '// Not needed in closure compiler\nexport function deadCode() {}'
- );
- }
- });
- return srcs;
-}
-
-/**
- * Generates the set of options with which to invoke Closure compiler.
- * TODO(wg-infra,wg-performance): Clean up unnecessary options.
- *
- * @param {string} outputFilename
- * @param {!OptionsDef} options
- * @return {!Promise}
- */
-async function generateCompilerOptions(outputFilename, options) {
- // Determine externs
- let externs = options.externs || [];
- if (!options.noAddDeps) {
- externs = [
- 'third_party/web-animations-externs/web_animations.js',
- 'third_party/react-externs/externs.js',
- 'third_party/moment/moment.extern.js',
- ...fastGlob.sync('src/core{,/**}/*.extern.js'),
- ...fastGlob.sync('build-system/externs/*.extern.js'),
- ...externs,
- ];
- }
-
- const hideWarningsFor = [
- 'third_party/amp-toolbox-cache-url/',
- 'third_party/caja/',
- 'third_party/closure-library/sha384-generated.js',
- 'third_party/d3/',
- 'third_party/inputmask/',
- 'third_party/mustache/',
- 'third_party/react-dates/',
- 'third_party/resize-observer-polyfill/',
- 'third_party/set-dom/',
- 'third_party/subscriptions-project/',
- 'third_party/webcomponentsjs/',
- 'node_modules/',
- 'build/patched-module/',
- ];
- const define = [`VERSION=${internalRuntimeVersion}`, 'AMP_MODE=true'];
- if (argv.pseudo_names) {
- define.push('PSEUDO_NAMES=true');
- }
- const ampConfig = await getAmpConfigForFile(outputFilename, options);
- let wrapper = options.wrapper
- ? options.wrapper.replace('<%= contents %>', '%output%')
- : `(function(){%output%})();`;
- wrapper = `${ampConfig}${wrapper}\n\n//# sourceMappingURL=${outputFilename}.map`;
-
- /**
- * TODO(#28387) write a type for this.
- * @type {Object}
- */
- /* eslint "local/camelcase": 0*/
- const compilerOptions = {
- compilation_level: options.compilationLevel || 'SIMPLE_OPTIMIZATIONS',
- // Turns on more optimizations.
- assume_function_wrapper: true,
- language_in: 'ECMASCRIPT_2020',
- // Do not transpile down to ES5 if running with `--esm`, since we do
- // limited transpilation in Babel.
- language_out: argv.esm || argv.sxg ? 'NO_TRANSPILE' : 'ECMASCRIPT5_STRICT',
- // We do not use the polyfills provided by closure compiler.
- // If you need a polyfill. Manually include them in the
- // respective top level polyfills/*.js files.
- rewrite_polyfills: false,
- externs,
- js_module_root: [
- // Do _not_ include 'node_modules/' in js_module_root with 'NODE'
- // resolution or bad things will happen (#18600).
- 'build/patched-module/',
- 'build/fake-module/',
- 'build/fake-polyfills/',
- ],
- module_resolution: 'NODE',
- package_json_entry_names: 'module,main',
- process_common_js_modules: true,
- // PRUNE strips all files from the input set that aren't explicitly
- // required.
- dependency_mode: options.noAddDeps ? 'SORT_ONLY' : 'PRUNE',
- output_wrapper: wrapper,
- source_map_include_content: !!argv.full_sourcemaps,
- // These arrays are filled in below.
- jscomp_error: [],
- jscomp_warning: [],
- jscomp_off: [],
- define,
- hide_warnings_for: hideWarningsFor,
- // TODO(amphtml): Change 'QUIET' to 'DEFAULT'.
- warning_level: argv.warning_level ?? options.warningLevel ?? 'QUIET',
- extra_annotation_name: ['visibleForTesting', 'restricted'],
- };
- if (argv.pseudo_names) {
- // Some optimizations get turned off when pseudo_names is on.
- // This causes some errors caused by the babel transformations
- // that we apply like unreachable code because we turn a conditional
- // falsey. (ex. is IS_PROD transformation which causes some conditionals
- // to be unreachable/suspicious code since the whole expression is
- // falsey)
- compilerOptions.jscomp_off.push('uselessCode', 'externsValidation');
- }
- if (argv.pretty_print) {
- compilerOptions.formatting = 'PRETTY_PRINT';
- }
-
- // See https://github.com/google/closure-compiler/wiki/Warnings#warnings-categories
- // for a full list of closure's default error / warning levels.
- // NOTE: We do not use jscomp_warning because they are silenced by closure
- // unless there are accompanying errors. Pick a side and use either one of
- // jscomp_error or jscomp_off.
- if (options.typeCheckOnly) {
- compilerOptions.checks_only = true;
- // Note: compilation_level is SIMPLE_OPTIMIZATIONS during type checking.
- // Making it WHITESPACE_ONLY will disable type-checking, so don't do that.
- compilerOptions.define.push('TYPECHECK_ONLY=true');
- // These aren't type-check errors by default, but should be.
- compilerOptions.jscomp_error.push(
- 'accessControls',
- 'checkDebuggerStatement',
- 'conformanceViolations',
- 'checkTypes',
- 'const',
- 'constantProperty',
- 'globalThis',
- 'misplacedTypeAnnotation',
- 'missingProperties',
- 'strictMissingProperties',
- 'visibility'
- );
- // These are type-check errors / warnings by default, but cannot be.
- compilerOptions.jscomp_off.push(
- 'moduleLoad', // Breaks type-only modules: google/closure-compiler#3041
- 'unknownDefines' // Closure complains about VERSION
- );
- compilerOptions.conformance_configs =
- 'build-system/test-configs/conformance-config.textproto';
- } else {
- // These aren't compilation errors by default, but should be.
- compilerOptions.jscomp_error.push(
- 'missingProperties',
- 'strictMissingProperties',
- 'visibility'
- );
- // Thse are compilation errors / warnings by default, but cannot be.
- compilerOptions.jscomp_off.push(
- 'accessControls', // Silences spurious JSC_BAD_PRIVATE_GLOBAL_ACCESS
- 'moduleLoad', // Breaks type-only modules: google/closure-compiler#3041
- 'unknownDefines' // Closure complains about VERSION
- );
- }
-
- if (compilerOptions.define.length == 0) {
- delete compilerOptions.define;
- }
- return compilerOptions;
-}
-
-/**
- * Generates the full set of flags with which to invoke closure compiler.
- *
- * @param {!OptionsDef} options
- * @param {!Object} compilerOptions
- * @param {!Array} entryModuleFilenames
- * @param {string} destFile
- * @param {string} sourcemapFile
- * @return {!Array}
- */
-function generateFlags(
- options,
- compilerOptions,
- entryModuleFilenames,
- destFile,
- sourcemapFile
-) {
- const compilerFlags = [];
- Object.keys(compilerOptions).forEach(function (option) {
- const value = compilerOptions[option];
- if (Array.isArray(value)) {
- value.forEach(function (item) {
- compilerFlags.push('--' + option + '=' + item);
- });
- } else {
- if (value != null) {
- compilerFlags.push('--' + option + '=' + value);
- } else {
- compilerFlags.push('--' + option);
- }
- }
- });
- const entryPointFlags = entryModuleFilenames.map(
- (entryPoint) => `--entry_point=${entryPoint}`
- );
- compilerFlags.push(...entryPointFlags);
- if (!options.typeCheckOnly) {
- const outputFileFlag = `--js_output_file=${destFile}`;
- const sourcemapFlag = `--create_source_map=${sourcemapFile}`;
- compilerFlags.push(outputFileFlag, sourcemapFlag);
- }
- return compilerFlags;
-}
-
-/**
- * @param {string[]|string} entryModuleFilenames
- * @param {string} outputDir
- * @param {string} outputFilename
- * @param {!OptionsDef} options
- * @param {{startTime?: number}} timeInfo
- * @return {Promise}
- */
-async function compile(
- entryModuleFilenames,
- outputDir,
- outputFilename,
- options,
- timeInfo
-) {
- if (timeInfo) {
- timeInfo.startTime = Date.now();
- }
- if (!Array.isArray(entryModuleFilenames)) {
- entryModuleFilenames = [entryModuleFilenames];
- }
- const destFile = `${outputDir}/${outputFilename}`;
- const sourcemapFile = `${destFile}.map`;
- const compilerOptions = await generateCompilerOptions(
- outputFilename,
- options
- );
- const srcs = options.noAddDeps
- ? entryModuleFilenames.concat(options.extraGlobs || [])
- : getSrcs(entryModuleFilenames, options);
- const transformedSrcFiles = await Promise.all(
- fastGlob
- .sync(srcs)
- .map((src) => preClosureBabel(src, outputFilename, options))
- );
- if (options.errored && options.continueOnError) {
- return; // Watch build. Bail on transform errors.
- }
- const flags = generateFlags(
- options,
- compilerOptions,
- entryModuleFilenames,
- destFile,
- sourcemapFile
- );
- await runClosure(outputFilename, options, flags, transformedSrcFiles);
- if (options.errored && options.continueOnError) {
- return; // Watch build. Bail on compilation errors.
- }
- if (!options.typeCheckOnly) {
- if (!argv.pseudo_names && !options.skipUnknownDepsCheck) {
- await checkForUnknownDeps(destFile);
- }
- await postClosureBabel(destFile);
- await sanitize(destFile);
- await writeSourcemaps(sourcemapFile, options);
- }
-}
-
-/**
- * Indicates the current closure concurrency and how to override it.
- */
-function printClosureConcurrency() {
- log(
- green('Using up to'),
- cyan(MAX_PARALLEL_CLOSURE_INVOCATIONS.toString()),
- green('concurrent invocations of closure compiler.')
- );
- if (!argv.closure_concurrency) {
- logLocalDev(
- green('⤷ Use'),
- cyan('--closure_concurrency=N'),
- green('to change this number.')
- );
- }
-}
-
-module.exports = {
- cleanupBuildDir,
- closureCompile,
- printClosureConcurrency,
-};
diff --git a/build-system/compile/debug-compilation-lifecycle.js b/build-system/compile/debug-compilation-lifecycle.js
index dbc133c42759..8c87c9fb52ae 100644
--- a/build-system/compile/debug-compilation-lifecycle.js
+++ b/build-system/compile/debug-compilation-lifecycle.js
@@ -13,15 +13,6 @@ const pad = (value, length) =>
length
);
-const LIFECYCLES = {
- 'pre-babel': 'pre-babel',
- 'post-babel': 'post-babel',
- 'pre-closure': 'pre-closure',
- 'closured-pre-babel': 'closured-pre-babel',
- 'closured-pre-terser': 'closured-pre-terser',
- 'complete': 'complete',
-};
-
/**
* Output debugging information when developing changes in this functionality.
*
@@ -31,7 +22,7 @@ const LIFECYCLES = {
* @param {Object=} sourcemap
*/
function debug(lifecycle, fullpath, content, sourcemap) {
- if (argv.debug && Object.keys(LIFECYCLES).includes(lifecycle)) {
+ if (argv.debug) {
if (!content) {
content = fs.readFileSync(fullpath, 'utf-8');
}
@@ -65,5 +56,4 @@ function displayLifecycleDebugging() {
module.exports = {
displayLifecycleDebugging,
debug,
- CompilationLifecycles: LIFECYCLES,
};
diff --git a/build-system/compile/helpers.js b/build-system/compile/helpers.js
index 3ce08ca6db9a..99fae3070d58 100644
--- a/build-system/compile/helpers.js
+++ b/build-system/compile/helpers.js
@@ -1,16 +1,13 @@
'use strict';
const argv = require('minimist')(process.argv.slice(2));
-const fs = require('fs-extra');
-const path = require('path');
-const {getBabelOutputDir} = require('./pre-closure-babel');
const {VERSION: internalRuntimeVersion} = require('./internal-version');
/**
* Computes the base url for sourcemaps. Custom sourcemap URLs have placeholder
* {version} that should be replaced with the actual version. Also, ensures
* that a trailing slash exists.
- * @param {Object} options
+ * @param {object} options
* @return {string}
*/
function getSourceRoot(options) {
@@ -19,47 +16,10 @@ function getSourceRoot(options) {
.replace(/\{version\}/g, internalRuntimeVersion)
.replace(/([^/])$/, '$1/');
}
- if (options.fortesting) {
+ if (options.fortesting || !argv._.includes('dist')) {
return 'http://localhost:8000/';
}
return `https://raw.githubusercontent.com/ampproject/amphtml/${internalRuntimeVersion}/`;
}
-/**
- * Updates all filepaths in the sourcemap output.
- * @param {Object} sourcemaps
- */
-function updatePaths(sourcemaps) {
- const babelOutputDir = getBabelOutputDir();
- sourcemaps.sources = sourcemaps.sources.map((source) =>
- source.startsWith(babelOutputDir)
- ? path.relative(babelOutputDir, source)
- : source
- );
- if (sourcemaps.file) {
- sourcemaps.file = path.basename(sourcemaps.file);
- }
-}
-
-/**
- * Writes the sourcemap output to disk.
- * @param {string} sourcemapsFile
- * @param {Object} options
- * @return {Promise}
- */
-async function writeSourcemaps(sourcemapsFile, options) {
- const sourcemaps = await fs.readJson(sourcemapsFile);
-
- updatePaths(sourcemaps);
- if (!argv.full_sourcemaps) {
- delete sourcemaps.sourcesContent;
- }
- sourcemaps.sourceRoot = getSourceRoot(options);
-
- await fs.writeJSON(sourcemapsFile, sourcemaps);
-}
-
-module.exports = {
- getSourceRoot,
- writeSourcemaps,
-};
+module.exports = {getSourceRoot};
diff --git a/build-system/compile/json-schema/.eslintrc.js b/build-system/compile/json-schema/.eslintrc.js
new file mode 100644
index 000000000000..035b97b4cc8c
--- /dev/null
+++ b/build-system/compile/json-schema/.eslintrc.js
@@ -0,0 +1,3 @@
+module.exports = {
+ 'ignorePatterns': ['test/output/**/*.js'],
+};
diff --git a/build-system/compile/json-schema/README.md b/build-system/compile/json-schema/README.md
new file mode 100644
index 000000000000..a3908b34e2ce
--- /dev/null
+++ b/build-system/compile/json-schema/README.md
@@ -0,0 +1,76 @@
+# Using JSON Schema to validate input
+
+A file may import a [JSON Schema](https://json-schema.org/) validation function by importing its schema file:
+
+### `product.schema.json`
+
+```json5
+{
+ "properties": {
+ // .schema.json files can have comments
+ "title": {"type": "string"}
+ },
+ "required": ["title"]
+}
+```
+
+### `source.js`
+
+Import a function from a JSON Schema file, using `assert { type: 'json-schema' }`:
+
+```js
+import validateProduct from './product.schema.json' assert { type: 'json-schema' };
+
+validateProduct({foo: "bar"}); // invalid, returns errrors
+```
+
+`validateProduct` can have any name since it's the default exported function. It's generated by [`babel-plugin-transform-json-import`](../../babel-plugins/babel-plugin-transform-json-import).
+
+This function has the following signature:
+
+```typescript
+function validate(data: any, schemaName? string): string[] {}
+```
+
+#### Arguments
+
+- **`data`** is the value to validate.
+- **`schemaName`** is optional, and represents the name of the validated object. This is added to error messages. By default, it's the basename of the imported file.
+
+#### Return value
+
+The function returns an array of strings representing validation errors. It is empty when valid:
+
+```js
+const errors = validateProduct(myProduct);
+if (errors.length) {
+ for (const error of errors) {
+ console.warn(error);
+ }
+}
+```
+
+## Extended Features
+
+We write all JSON schema exactly like the standard spec. However, some schemas can be annotated so that they can be compiled into a special function.
+
+### Currency Codes
+
+Validating a currency code in JSON Schema requires a long [`enum`](http://json-schema.org/understanding-json-schema/reference/generic.html#enumerated-values) of possible values.
+
+In JavaScript [we can instead use `Intl.NumberFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#currency_formatting). This prevents us from including this long list, in order to reduce output size.
+
+By including the string `ISO 4217` (or any that matches `/iso[_- ]?4217/i`) in the `description` field, the `enum` is replaced with a `Intl.NumberFormat` call in the validation code.
+
+You should also include the full ISO 4217 list of currency codes as `enum` to ensure schema portability. If the list is not included, or incomplete, compilation will fail. You may copy this list from [`iso4217.json`](./iso4217.json)
+
+```json
+{
+ "description": "https://en.wikipedia.org/wiki/ISO_4217",
+ "enum": [
+ "AED",
+ "...",
+ "ZWL"
+ ]
+}
+```
diff --git a/build-system/compile/json-schema/index.js b/build-system/compile/json-schema/index.js
new file mode 100644
index 000000000000..a7454d85029d
--- /dev/null
+++ b/build-system/compile/json-schema/index.js
@@ -0,0 +1,445 @@
+/**
+ * @fileoverview
+ * Compiles JSON Schema to a validate() function using ajv.
+ */
+const {_: ajvCode, Name: AjvName, default: Ajv} = require('ajv');
+const {fastFormats: ajvFormats} = require('ajv-formats/dist/formats');
+const {once} = require('../../common/once');
+const {default: AjvStandalone} = require('ajv/dist/standalone');
+const babel = require('@babel/core');
+const iso4217 = require('./iso4217.json');
+
+const iso4217DescriptionRe = /iso[_\- ]*4217/i;
+
+/**
+ * Defines custom validators that we may inject into certain schemas.
+ * @const {{
+ * fn: string,
+ * error?: import('ajv/dist/types').KeywordErrorDefinition,
+ * shouldUse: (import('ajv/dist/types').SchemaObject) => boolean,
+ * }[]}
+ * - `fn` is the name of a validator function exported from `#core/json-schema`
+ * This function must return a boolean value determining whether the data is
+ * valid
+ * - `error` is optional and determines a `KeywordErrorDefinition` for ajv
+ * that's used when validation fails.
+ * - `shouldUse` is a boolean function that tests whether `fn` should be used
+ * for a certain schema.
+ * This function may also modify the schema object in-place. This is
+ * desirable in cases where the validator function should override validators
+ * with an equivalent implementation.
+ */
+const customValidators = [
+ // A schema may include an `enum` with a list of valid currency codes.
+ // When its `description` includes the URL that links to currency codes below,
+ // we remove this enum and instead use `Intl.NumberFormat` to validate them
+ // natively. This prevents the binary from including a long list of currency
+ // codes.
+ {
+ fn: 'isIso4217CurrencyCode',
+ error: {message: 'must be a valid ISO 4217 currency code'},
+ shouldUse(schema) {
+ if (!iso4217DescriptionRe.test(schema.description)) {
+ return false;
+ }
+ if (
+ !Array.isArray(schema.enum) ||
+ JSON.stringify(schema.enum.sort()) !== JSON.stringify(iso4217.sort())
+ ) {
+ throw new Error(
+ 'ISO 4217 schema must contain an `enum` keyword including all valid currency codes.'
+ );
+ }
+ delete schema.enum;
+ return true;
+ },
+ },
+];
+
+/**
+ * Creates a vocabulary keyword for each custom validator.
+ * We name keywords by prefing the validator function name with an underscore:
+ * { "_isIso4217CurrencyCode": true }
+ * This format prevents them from clobbering the standard namespace
+ * @param {Set} used
+ * @return {import('ajv').KeywordDefinition[]}
+ */
+function getCustomValidatorKeywords(used) {
+ return customValidators.map(({error, fn}) => ({
+ keyword: `_${fn}`,
+ error,
+ code(ctx) {
+ used.add(fn);
+ ctx.pass(ajvCode`${new AjvName(fn)}(${ctx.data})`);
+ },
+ }));
+}
+
+/**
+ * @param {*} schema
+ * @return {*}
+ */
+function addCustomValidatorsToSchema(schema) {
+ if (typeof schema !== 'object') {
+ return schema;
+ }
+ if (Array.isArray(schema)) {
+ return schema.map(addCustomValidatorsToSchema);
+ }
+ for (const {fn, shouldUse} of customValidators) {
+ if (shouldUse(schema)) {
+ schema[`_${fn}`] = true;
+ }
+ }
+ for (const k in schema) {
+ schema[k] = addCustomValidatorsToSchema(schema[k]);
+ }
+ return schema;
+}
+
+/**
+ * Remaps `ajv-formats` in order to only use simple formats (true, string, RegExp).
+ * Other types of formats would force bundles to contain *all* format definitions
+ * even when unused.
+ * @return {{[format: string]: import('ajv').Format}}
+ */
+const getFormats = once(() => {
+ const formats = {};
+ for (const k in ajvFormats) {
+ let format = ajvFormats[k];
+ if (typeof format === 'object' && 'validate' in format) {
+ format = format.validate;
+ }
+ if (
+ typeof format === 'string' ||
+ format instanceof RegExp ||
+ format === true
+ ) {
+ formats[k] = format;
+ }
+ }
+ return formats;
+});
+
+/**
+ * @param {any} schema
+ * @return {string}
+ */
+function ajvCompile(schema) {
+ const validatorFns = new Set();
+ const ajv = new Ajv({
+ code: {
+ esm: true,
+ source: true,
+ lines: true,
+ },
+ inlineRefs: false,
+ allErrors: true,
+ validateSchema: false,
+ formats: getFormats(),
+ keywords: getCustomValidatorKeywords(validatorFns),
+ });
+ const ajvResult = ajv.compile(addCustomValidatorsToSchema(schema));
+ const importCode = getImportCode(validatorFns);
+ const ajvCode = AjvStandalone(ajv, ajvResult);
+ return importCode + ajvCode;
+}
+
+/**
+ * @param {Set} validatorFns
+ * @return {string}
+ */
+function getImportCode(validatorFns) {
+ if (!validatorFns.size) {
+ return '';
+ }
+ const specifiers = Array.from(validatorFns).join(', ');
+ return `import {${specifiers}} from '#core/json-schema';\n\n`;
+}
+
+/**
+ * Transforms ajv's generated code to make it usable in a bundle:
+ * - Creates strings for error messages instead of an object.
+ * - Removes exports (it expects to be included inline).
+ * - Rescopes the current code to prevent collisions with taken names.
+ * - Strips down included schemas so that they only contain the referenced
+ * portions.
+ * @param {string} code
+ * @param {Set} taken
+ * @param {babel.TransformOptions=} config
+ * @return {{result: babel.BabelFileResult | null, name: string}}
+ */
+function transformAjvCode(code, taken, config) {
+ const {template, types: t} = babel;
+
+ // ajvCompile's generated name
+ let name = 'validate';
+
+ const isObjectProperty = (node, name) =>
+ (t.isObjectProperty(node) && t.isIdentifier(node.key, {name})) ||
+ t.isStringLiteral(node.key, {value: name});
+
+ const findProperty = (properties, name) =>
+ properties.find((node) => isObjectProperty(node, name));
+
+ /**
+ * @param {babel.NodePath} memberExpression
+ * @return {null | undefined | number | string}
+ */
+ function evaluatePropertyKey(memberExpression) {
+ const property = memberExpression.get('property');
+ if (property.isIdentifier()) {
+ return property.node.name;
+ }
+ if (memberExpression.node.computed) {
+ return property.evaluate().value;
+ }
+ return null;
+ }
+
+ const schemaIdRegexp = /^schema[0-9]*$/;
+
+ /**
+ * @param {babel.NodePath} path
+ * @param {string[]} keys
+ * @return {boolean}
+ */
+ function isMemberExpressionLeftwards(path, keys) {
+ let i = keys.length - 1;
+ while (true) {
+ if (path.isMemberExpression()) {
+ const key = evaluatePropertyKey(path);
+ if (key !== keys[i--]) {
+ return false;
+ }
+ path = path.get('object');
+ } else if (path.isVariableDeclarator()) {
+ const init = path.get('init');
+ if (!init) {
+ break;
+ }
+ path = init;
+ } else if (path.isIdentifier()) {
+ const binding = path.scope.getBinding(path.node.name);
+ if (!binding) {
+ break;
+ }
+ path = binding.path;
+ } else {
+ break;
+ }
+ }
+ return i === 0 && path.isIdentifier({name: keys[i]});
+ }
+
+ /**
+ * @param {babel.NodePath} path
+ * @return {boolean}
+ */
+ function isReferenceToObjectKeyList(path) {
+ const {parentPath} = path;
+ if (parentPath?.isMemberExpression() && path.key === 'object') {
+ return (
+ t.isIdentifier(parentPath.node.property, {name: 'hasOwnProperty'}) &&
+ parentPath.parentPath?.isCallExpression()
+ );
+ }
+ if (
+ parentPath?.isCallExpression() &&
+ parentPath.node.arguments[0] === path.node
+ ) {
+ const callee = parentPath.get('callee');
+ return (
+ isMemberExpressionLeftwards(callee, ['Object', 'keys']) ||
+ isMemberExpressionLeftwards(callee, [
+ 'Object',
+ 'prototype',
+ 'hasOwnProperty',
+ 'call',
+ ])
+ );
+ }
+ return false;
+ }
+
+ /** @type {{[stringified: string]: string}} */
+ const valueReferences = {};
+
+ /**
+ * Resolves static references to object properties as deeply as possible,
+ * and hoists references to those values.
+ * @param {import('@babel/traverse').Binding} binding
+ */
+ function hoistProperties(binding) {
+ const {constant, identifier, path, referencePaths} = binding;
+ if (!constant || !path.isVariableDeclarator()) {
+ return;
+ }
+ const init = path.get('init');
+ if (!init.isObjectExpression()) {
+ return;
+ }
+ const original = init.evaluate().value;
+ if (original == null) {
+ // original is dynamic, deopt
+ return;
+ }
+ /** @type {Map} */
+ const hoisted = new Map();
+ /** @type {[any, babel.NodePath[]][]} */
+ const queue = [[original, referencePaths]];
+ for (const [startValue, referencePaths] of queue) {
+ for (let referencePath of referencePaths) {
+ let value = startValue;
+ let {parentPath} = referencePath;
+ while (parentPath?.isMemberExpression()) {
+ const key = evaluatePropertyKey(parentPath);
+ if (key == null || !value.hasOwnProperty(key)) {
+ break;
+ }
+ value = value[key];
+ referencePath = parentPath;
+ parentPath = referencePath.parentPath;
+ }
+ if (value === original) {
+ // deopt
+ return;
+ }
+ // Follow references to declared variable.
+ if (
+ parentPath?.isVariableDeclarator() &&
+ t.isIdentifier(parentPath.node.id)
+ ) {
+ const {name} = parentPath.node.id;
+ const binding = parentPath.scope.getBinding(name);
+ if (binding?.constant) {
+ const {referencePaths} = binding;
+ queue.push([value, referencePaths]);
+ parentPath.remove();
+ continue;
+ }
+ }
+ const hoistedReferences = hoisted.get(value) ?? [];
+ hoistedReferences.push(referencePath);
+ hoisted.set(value, hoistedReferences);
+ }
+ }
+ for (const [value, referencePaths] of hoisted) {
+ // Override every property value as `0` when we only need a key list.
+ if (referencePaths.every(isReferenceToObjectKeyList)) {
+ for (const k in value) {
+ value[k] = 0;
+ }
+ }
+ // Stringify to de-dupe identical objects.
+ // (This may occur as a result of some uses of $ref)
+ const stringified = JSON.stringify(value);
+ let name = valueReferences[stringified];
+ if (!name) {
+ name = rescope(path, path.scope.generateUid(identifier.name));
+ path.scope.push({
+ kind: 'const',
+ id: t.identifier(name),
+ init: t.valueToNode(value),
+ });
+ valueReferences[stringified] = name;
+ }
+ for (const referencePath of referencePaths) {
+ referencePath.replaceWith(t.identifier(name));
+ }
+ }
+ path.remove();
+ }
+
+ /**
+ * Prevents collisions with outer scope
+ * @param {babel.NodePath} path
+ * @param {string} id
+ * @return {string}
+ */
+ function rescope(path, id) {
+ let renamed = id;
+ while (taken.has(renamed)) {
+ renamed = path.scope.generateUid(id);
+ }
+ if (renamed !== id) {
+ path.scope.rename(id, renamed);
+ if (id === name) {
+ name = renamed;
+ }
+ }
+ return renamed;
+ }
+
+ /** @type {babel.PluginObj} */
+ const plugin = {
+ visitor: {
+ Program: {
+ exit(path) {
+ path.scope.crawl();
+ for (const id in path.scope.bindings) {
+ const binding = path.scope.bindings[id];
+ if (schemaIdRegexp.test(id)) {
+ hoistProperties(binding);
+ }
+ rescope(path, id);
+ }
+ },
+ },
+ ExportDefaultDeclaration(path) {
+ // Remove `export default validate`
+ path.remove();
+ },
+ ExportNamedDeclaration(path) {
+ // Unexport named exports.
+ if (path.node.declaration) {
+ path.replaceWith(path.node.declaration);
+ } else {
+ path.remove();
+ }
+ },
+ ObjectExpression(path) {
+ // Replace objects with {instancePath} with a string corresponding
+ // to the `instancePath`, or `instancePath` and `message` combined.
+ const {properties} = path.node;
+ const instancePath = findProperty(properties, 'instancePath');
+ if (!instancePath) {
+ return;
+ }
+ const message = findProperty(properties, 'message');
+ if (!message) {
+ path.replaceWith(instancePath.value);
+ return;
+ }
+ path.replaceWith(template.expression.ast`
+ (${instancePath.value} + ' ' + ${message.value}).trim()
+ `);
+ },
+ ObjectPattern(path) {
+ // Replace destructuring of arguments with {instancePath} with just
+ // the assignment or id for instancePath
+ const replacedPath = path.parentPath.isAssignmentPattern()
+ ? path.parentPath
+ : path;
+ if (!replacedPath.parentPath.isFunctionDeclaration()) {
+ return;
+ }
+ const {properties} = path.node;
+ const value = findProperty(properties, 'instancePath')?.value;
+ if (t.isIdentifier(value) || t.isAssignmentPattern(value)) {
+ replacedPath.replaceWith(value);
+ }
+ },
+ },
+ };
+ const result = babel.transformSync(code, {
+ ...config,
+ plugins: [...(config?.plugins || []), plugin],
+ });
+ return {result, name};
+}
+
+module.exports = {
+ ajvCompile,
+ transformAjvCode,
+};
diff --git a/build-system/compile/json-schema/iso4217.json b/build-system/compile/json-schema/iso4217.json
new file mode 100644
index 000000000000..520c80422a1d
--- /dev/null
+++ b/build-system/compile/json-schema/iso4217.json
@@ -0,0 +1,182 @@
+[
+ "AED",
+ "AFN",
+ "ALL",
+ "AMD",
+ "ANG",
+ "AOA",
+ "ARS",
+ "AUD",
+ "AWG",
+ "AZN",
+ "BAM",
+ "BBD",
+ "BDT",
+ "BGN",
+ "BHD",
+ "BIF",
+ "BMD",
+ "BND",
+ "BOB",
+ "BOV",
+ "BRL",
+ "BSD",
+ "BTN",
+ "BWP",
+ "BYN",
+ "BZD",
+ "CAD",
+ "CDF",
+ "CHE",
+ "CHF",
+ "CHW",
+ "CLF",
+ "CLP",
+ "CNY",
+ "COP",
+ "COU",
+ "CRC",
+ "CUC",
+ "CUP",
+ "CVE",
+ "CZK",
+ "DJF",
+ "DKK",
+ "DOP",
+ "DZD",
+ "EGP",
+ "ERN",
+ "ETB",
+ "EUR",
+ "FJD",
+ "FKP",
+ "GBP",
+ "GEL",
+ "GHS",
+ "GIP",
+ "GMD",
+ "GNF",
+ "GTQ",
+ "GYD",
+ "HKD",
+ "HNL",
+ "HRK",
+ "HTG",
+ "HUF",
+ "IDR",
+ "ILS",
+ "INR",
+ "IQD",
+ "IRR",
+ "ISK",
+ "JMD",
+ "JOD",
+ "JPY",
+ "KES",
+ "KGS",
+ "KHR",
+ "KMF",
+ "KPW",
+ "KRW",
+ "KWD",
+ "KYD",
+ "KZT",
+ "LAK",
+ "LBP",
+ "LKR",
+ "LRD",
+ "LSL",
+ "LYD",
+ "MAD",
+ "MDL",
+ "MGA",
+ "MKD",
+ "MMK",
+ "MNT",
+ "MOP",
+ "MRU",
+ "MUR",
+ "MVR",
+ "MWK",
+ "MXN",
+ "MXV",
+ "MYR",
+ "MZN",
+ "NAD",
+ "NGN",
+ "NIO",
+ "NOK",
+ "NPR",
+ "NZD",
+ "OMR",
+ "PAB",
+ "PEN",
+ "PGK",
+ "PHP",
+ "PKR",
+ "PLN",
+ "PYG",
+ "QAR",
+ "RON",
+ "RSD",
+ "RUB",
+ "RWF",
+ "SAR",
+ "SBD",
+ "SCR",
+ "SDG",
+ "SEK",
+ "SGD",
+ "SHP",
+ "SLL",
+ "SOS",
+ "SRD",
+ "SSP",
+ "STN",
+ "SVC",
+ "SYP",
+ "SZL",
+ "THB",
+ "TJS",
+ "TMT",
+ "TND",
+ "TOP",
+ "TRY",
+ "TTD",
+ "TWD",
+ "TZS",
+ "UAH",
+ "UGX",
+ "USD",
+ "USN",
+ "UYI",
+ "UYU",
+ "UYW",
+ "UZS",
+ "VED",
+ "VES",
+ "VND",
+ "VUV",
+ "WST",
+ "XAF",
+ "XAG",
+ "XAU",
+ "XBA",
+ "XBB",
+ "XBC",
+ "XBD",
+ "XCD",
+ "XDR",
+ "XOF",
+ "XPD",
+ "XPF",
+ "XPT",
+ "XSU",
+ "XTS",
+ "XUA",
+ "XXX",
+ "YER",
+ "ZAR",
+ "ZMW",
+ "ZWL"
+]
diff --git a/build-system/compile/post-closure-babel.js b/build-system/compile/post-closure-babel.js
deleted file mode 100644
index 09d2fe3016ce..000000000000
--- a/build-system/compile/post-closure-babel.js
+++ /dev/null
@@ -1,84 +0,0 @@
-'use strict';
-const argv = require('minimist')(process.argv.slice(2));
-const babel = require('@babel/core');
-const fs = require('fs-extra');
-const path = require('path');
-const Remapping = require('@ampproject/remapping');
-const terser = require('terser');
-const {CompilationLifecycles, debug} = require('./debug-compilation-lifecycle');
-
-/** @type {Remapping.default} */
-const remapping = /** @type {*} */ (Remapping);
-
-/**
- * Minify passed string.
- *
- * @param {string} code
- * @return {Promise>}
- */
-async function terserMinify(code) {
- const options = {
- mangle: false,
- compress: {
- defaults: false,
- unused: true,
- },
- output: {
- beautify: !!argv.pretty_print,
- comments: /\/*/,
- // eslint-disable-next-line local/camelcase
- keep_quoted_props: true,
- },
- sourceMap: true,
- };
- const minified = await terser.minify(code, options);
-
- return {
- compressed: minified.code,
- terserMap: minified.map,
- };
-}
-
-/**
- * Apply Babel Transforms on output from Closure Compuler, then cleanup added
- * space with Terser.
- * @param {string} file
- * @return {Promise}
- */
-async function postClosureBabel(file) {
- if (path.extname(file) === '.map') {
- debug(CompilationLifecycles['complete'], file);
- return;
- }
-
- debug(CompilationLifecycles['closured-pre-babel'], file);
- /** @type {?babel.TransformOptions} */
- const babelOptions = babel.loadOptions({caller: {name: 'post-closure'}});
- const {code, map: babelMap} =
- (await babel.transformFileAsync(file, babelOptions ?? undefined)) || {};
- if (!code || !babelMap) {
- throw new Error(`Error transforming contents of ${file}`);
- }
-
- debug(CompilationLifecycles['closured-pre-terser'], file, code, babelMap);
- const {compressed, terserMap} = await terserMinify(code);
- await fs.outputFile(file, compressed);
-
- const closureMap = await fs.readJson(`${file}.map`, 'utf8');
- const sourceMap = remapping(
- [terserMap, babelMap, closureMap],
- () => null,
- !argv.full_sourcemaps
- );
- debug(
- CompilationLifecycles['complete'],
- file,
- compressed?.toString(),
- sourceMap
- );
- await fs.writeJson(`${file}.map`, sourceMap);
-}
-
-module.exports = {
- postClosureBabel,
-};
diff --git a/build-system/compile/pre-closure-babel.js b/build-system/compile/pre-closure-babel.js
deleted file mode 100644
index 21cd5d0b6972..000000000000
--- a/build-system/compile/pre-closure-babel.js
+++ /dev/null
@@ -1,147 +0,0 @@
-'use strict';
-
-const babel = require('@babel/core');
-const fastGlob = require('fast-glob');
-const fs = require('fs-extra');
-const path = require('path');
-const tempy = require('tempy');
-const {BABEL_SRC_GLOBS} = require('./sources');
-const {CompilationLifecycles, debug} = require('./debug-compilation-lifecycle');
-const {cyan, red} = require('kleur/colors');
-const {log} = require('../common/logging');
-const {TransformCache, batchedRead, md5} = require('../common/transform-cache');
-
-/**
- * Files on which to run pre-closure babel transforms.
- *
- * @private @const {!Array}
- */
-let filesToTransform;
-
-/**
- * Directory used to output babel transformed files for closure compilation.
- *
- * @private @const {string}
- */
-let outputDir;
-
-/**
- * Used to cache pre-closure babel transforms.
- *
- * @const {TransformCache}
- */
-let transformCache;
-
-/**
- * Returns the name of the babel output directory if it has been created.
- *
- * @return {string}
- */
-function getBabelOutputDir() {
- return outputDir || '';
-}
-
-/**
- * Computes the set of files on which to run pre-closure babel transforms.
- *
- * @return {!Array}
- */
-function getFilesToTransform() {
- return fastGlob.sync([
- ...BABEL_SRC_GLOBS,
- '!node_modules/**',
- '!third_party/**',
- ]);
-}
-
-/**
- * Apply babel transforms prior to closure compiler pass, store the transformed
- * file in an output directory (used by closure compiler), and return the path
- * of the transformed file.
- *
- * When a source file is transformed for the first time, it is written to a
- * persistent transform cache from where it is retrieved every subsequent time
- * without invoking babel. A change to the file contents or to the invocation
- * arguments will invalidate the cached result and re-transform the file.
- *
- * @param {string} file
- * @param {string} outputFilename
- * @param {!Object} options
- * @return {Promise}
- */
-async function preClosureBabel(file, outputFilename, options) {
- if (!outputDir) {
- outputDir = tempy.directory();
- }
- if (!transformCache) {
- transformCache = new TransformCache('.pre-closure-cache', '.js');
- }
- if (!filesToTransform) {
- filesToTransform = getFilesToTransform();
- }
- const transformedFile = path.join(outputDir, file);
- if (!filesToTransform.includes(file)) {
- if (!(await fs.pathExists(transformedFile))) {
- await fs.copy(file, transformedFile);
- }
- return transformedFile;
- }
- try {
- debug(CompilationLifecycles['pre-babel'], file);
- const babelOptions =
- babel.loadOptions({caller: {name: 'pre-closure'}}) || {};
- const optionsHash = md5(
- JSON.stringify({babelOptions, argv: process.argv.slice(2)})
- );
- const {contents, hash} = await batchedRead(file, optionsHash);
- const cachedPromise = transformCache.get(hash);
- if (cachedPromise) {
- if (!(await fs.pathExists(transformedFile))) {
- await fs.outputFile(transformedFile, await cachedPromise);
- }
- } else {
- const transformPromise = babel
- .transformAsync(contents, {
- ...babelOptions,
- filename: file,
- filenameRelative: path.basename(file),
- sourceFileName: path.relative(process.cwd(), file),
- })
- .then((result) => result?.code);
- transformCache.set(hash, transformPromise);
- await fs.outputFile(transformedFile, await transformPromise);
- debug(CompilationLifecycles['pre-closure'], transformedFile);
- }
- } catch (err) {
- const reason = handlePreClosureError(err, outputFilename, options);
- if (reason) {
- throw reason;
- }
- }
- return transformedFile;
-}
-
-/**
- * Handles a pre-closure babel error. Returns an error when transformation fails
- * except except in watch mode, where we want to print a message and continue.
- *
- * @param {Error} err
- * @param {string} outputFilename
- * @param {?Object=} options
- * @return {Error|undefined}
- */
-function handlePreClosureError(err, outputFilename, options) {
- log(red('ERROR:'), err.message, '\n');
- const reasonMessage = `Could not transform ${cyan(outputFilename)}`;
- if (options && options.continueOnError) {
- log(red('ERROR:'), reasonMessage);
- options.errored = true;
- return;
- }
- return new Error(reasonMessage);
-}
-
-module.exports = {
- getBabelOutputDir,
- preClosureBabel,
-};
diff --git a/build-system/compile/sanitize.js b/build-system/compile/sanitize.js
index d34a5b1cbc82..d4dd0ed347ca 100644
--- a/build-system/compile/sanitize.js
+++ b/build-system/compile/sanitize.js
@@ -28,7 +28,7 @@ async function sanitize(file) {
replaced[match] ||
(replaced[match] = `___${String(count++).padStart(6, '0')}___`)
);
- const formatted = prettier.format(presanitize, options);
+ const formatted = await prettier.format(presanitize, options);
const sanitized = formatted.replace(/___\d+___/g, '______');
await fs.outputFile(file, sanitized);
}
diff --git a/build-system/compile/sources.js b/build-system/compile/sources.js
deleted file mode 100644
index 133444030796..000000000000
--- a/build-system/compile/sources.js
+++ /dev/null
@@ -1,160 +0,0 @@
-/**
- * @fileoverview This file contains all the globs required for babel
- * transformation and for closure compilation. Try and maintain the glob
- * for both the babel and closure sources to be as close as possible.
- */
-
-const COMMON_GLOBS = [
- 'third_party/amp-toolbox-cache-url/**/*.js',
- 'third_party/caja/html-sanitizer.js',
- 'third_party/closure-library/sha384-generated.js',
- 'third_party/css-escape/css-escape.js',
- 'third_party/d3/**/*.js',
- 'third_party/fuzzysearch/index.js',
- 'third_party/inputmask/**/*.js',
- 'third_party/mustache/**/*.js',
- 'third_party/react-dates/bundle.js',
- 'third_party/resize-observer-polyfill/ResizeObserver.install.js',
- 'third_party/set-dom/set-dom.js',
- 'third_party/subscriptions-project/*.js',
- 'third_party/timeagojs/**/*.js',
- 'third_party/webcomponentsjs/ShadowCSS.js',
- 'third_party/zuho/**/*.js',
- 'node_modules/dompurify/package.json',
- 'node_modules/dompurify/dist/purify.es.js',
- 'node_modules/intersection-observer/package.json',
- 'node_modules/intersection-observer/intersection-observer.install.js',
- 'node_modules/resize-observer-polyfill/package.json',
- 'node_modules/resize-observer-polyfill/ResizeObserver.install.js',
- 'node_modules/obj-str/package.json',
- 'node_modules/obj-str/dist/obj-str.mjs',
- 'node_modules/rrule/dist/es5/rrule.js',
- 'node_modules/timeago.js/package.json',
- 'node_modules/timeago.js/**/*.js',
- 'node_modules/web-animations-js/package.json',
- 'node_modules/web-animations-js/web-animations.install.js',
- 'node_modules/web-activities/package.json',
- 'node_modules/web-activities/activity-ports.js',
- 'node_modules/@ampproject/animations/package.json',
- 'node_modules/@ampproject/animations/dist/animations.mjs',
- 'node_modules/@ampproject/bento-compiler/package.json',
- 'node_modules/@ampproject/bento-compiler/dist/index.js',
- 'node_modules/@ampproject/toolbox-cache-url/package.json',
- 'node_modules/@ampproject/toolbox-cache-url/dist/amp-toolbox-cache-url.esm.js',
- 'node_modules/@ampproject/viewer-messaging/package.json',
- 'node_modules/@ampproject/viewer-messaging/messaging.js',
- 'node_modules/@ampproject/worker-dom/package.json',
- 'node_modules/@ampproject/worker-dom/dist/amp-production/main.mjs',
- 'node_modules/preact/package.json',
- 'node_modules/preact/dist/*.js',
- 'node_modules/preact/dom/*.js',
- 'node_modules/preact/hooks/package.json',
- 'node_modules/preact/hooks/dist/*.js',
- 'node_modules/preact/compat/package.json',
- 'node_modules/preact/compat/dist/*.js',
- 'node_modules/@babel/runtime/helpers/*.js',
-];
-
-/**
- * NOTE: Keep the globs here in sync with the `CLOSURE_SRC_GLOBS`.
- */
-const BABEL_SRC_GLOBS = [
- 'src/**/*.js',
- 'builtins/**/*.js',
- 'build/**/*.js',
- 'extensions/**/*.js',
- '3p/**/*.js',
- 'ads/**/*.js',
-].concat(COMMON_GLOBS);
-
-/**
- * NOTE: Keep the globs here in sync with the `BABEL_SRC_GLOBS`.
- */
-const CLOSURE_SRC_GLOBS = [
- '3p/3p.js',
- // Ads config files.
- 'ads/_*.js',
- 'ads/alp/**/*.js',
- 'ads/google/**/*.js',
- 'ads/inabox/**/*.js',
- // Files under build/. Should be sparse.
- 'build/*.css.js',
- 'build/fake-module/**/*.js',
- 'build/patched-module/**/*.js',
- 'build/experiments/**/*.js',
- 'build/parsers/**/*.js',
- // A4A has these cross extension deps.
- 'extensions/amp-ad-network*/**/*-config.js',
- 'extensions/amp-ad/**/*.js',
- 'extensions/amp-a4a/**/*.js',
- // TODO(#24080) Remove this when story ads have full ad network support.
- // Needed for amp-story-auto-ads to validate amp-ad-exit config.
- 'extensions/amp-ad-exit/**/*.js',
- // Currently needed for crypto.js and visibility.js.
- // Should consider refactoring.
- 'extensions/amp-analytics/**/*.js',
- // Needed for WebAnimationService
- 'extensions/amp-animation/**/*.js',
- // Needed for amp-carousel 0.2, amp-inline-gallery, amp-stream-gallery
- 'extensions/amp-base-carousel/**/*.js',
- // amp-brightcove 0.1 and 1.0 share this file.
- 'extensions/amp-brightcove/brightcove-api.js',
- // Needed for carousel autolightbox
- 'extensions/amp-lightbox-gallery/1.0/*.js',
- // Needed for amp-lightbox-gallery using amp-lightbox
- 'extensions/amp-lightbox/1.0/*.js',
- // For amp-bind in the web worker (ww.js).
- 'extensions/amp-bind/**/*.js',
- // amp-dailymotion 0.1 and 1.0 share this file.
- 'extensions/amp-dailymotion/dailymotion-api.js',
- // amp-date-display 0.1 and 1.0 share this file.
- 'extensions/amp-date-display/format.js',
- // Needed to access to Variant interface from other extensions
- 'extensions/amp-experiment/**/*.js',
- // Needed to access form impl from other extensions
- 'extensions/amp-form/**/*.js',
- // Needed by amp-facebook-* for the loader logo and base implementations
- 'extensions/amp-facebook/0.1/facebook-loader.js',
- 'extensions/amp-facebook/1.0/facebook-base-element.js',
- 'extensions/amp-facebook/1.0/component.js',
- // Needed to access inputmask impl from other extensions
- 'extensions/amp-inputmask/**/*.js',
- // Needed for AccessService
- 'extensions/amp-access/**/*.js',
- // Needed for AmpStoryVariableService
- 'extensions/amp-story/**/*.js',
- // Needed for story ad inabox
- 'extensions/amp-story-auto-ads/**/*.js',
- // Needed for SubscriptionsService
- 'extensions/amp-subscriptions/**/*.js',
- // Needed to access UserNotificationManager from other extensions
- 'extensions/amp-user-notification/**/*.js',
- // Needed for video components in Bento.
- 'extensions/amp-video/1.0/**/*.js',
- // amp-video-iframe 0.1 and 1.0 share this file.
- 'extensions/amp-video-iframe/amp-video-iframe-api.js',
- // amp-vimeo 0.1 and 1.0 share this file.
- 'extensions/amp-vimeo/vimeo-api.js',
- // Needed to access ConsentPolicyManager from other extensions
- 'extensions/amp-consent/**/*.js',
- // Needed to access AmpGeo type for service locator
- 'extensions/amp-geo/**/*.js',
- // Needed for amp-smartlinks dep on amp-skimlinks
- 'extensions/amp-skimlinks/0.1/**/*.js',
- 'src/*.js',
- 'src/**/*.js',
- '!third_party/babel/custom-babel-helpers.js',
- // Exclude since it's not part of the runtime/extension binaries.
- '!extensions/amp-access/0.1/amp-login-done.js',
- 'builtins/**/*.js',
- // 'node_modules/core-js/modules/**.js',
- // Not sure what these files are, but they seem to duplicate code
- // one level below and confuse the compiler.
- '!node_modules/core-js/modules/library/**.js',
- '!extensions/**/dist/**/*.js',
-].concat(COMMON_GLOBS);
-
-module.exports = {
- BABEL_SRC_GLOBS,
- CLOSURE_SRC_GLOBS,
-};
diff --git a/build-system/eslint-rules/OWNERS b/build-system/eslint-rules/OWNERS
index eeccea4248aa..8bd1335073dc 100644
--- a/build-system/eslint-rules/OWNERS
+++ b/build-system/eslint-rules/OWNERS
@@ -8,7 +8,6 @@
{name: 'ampproject/wg-infra'},
{name: 'ampproject/wg-performance'},
{name: 'erwinmombay', notify: true},
- {name: 'jridgewell', notify: true},
],
},
],
diff --git a/build-system/eslint-rules/camelcase.js b/build-system/eslint-rules/camelcase.js
index dca870357508..cddd7cae3774 100644
--- a/build-system/eslint-rules/camelcase.js
+++ b/build-system/eslint-rules/camelcase.js
@@ -22,7 +22,7 @@ module.exports = function (context) {
name = name.slice('opt_'.length);
}
if (name.endsWith('_Enum')) {
- name = name.slice(0, '_Enum'.length);
+ name = name.slice(0, -'_Enum'.length);
}
if (!name.includes('_')) {
@@ -32,7 +32,7 @@ module.exports = function (context) {
// Excuse membership access, unless we're in the LHS of an assignment.
// This attempts to prevent us from defining new properties with underscores,
// while allowing access to external objects that already have them.
- // This mirros google-camelcase's logic.
+ // This mirrors google-camelcase's logic.
const {parent} = node;
if (parent.type === 'MemberExpression' && parent.property === node) {
const grandParent = parent.parent;
@@ -46,6 +46,16 @@ module.exports = function (context) {
}
}
+ // Permit object destructuring, since that is similar to membership access.
+ // Requires that the key is immediately renamed to a conforming value.
+ if (
+ parent.type === 'Property' &&
+ parent.parent.type === 'ObjectPattern' &&
+ parent.key === node
+ ) {
+ return;
+ }
+
context.report({
node,
message: `"${node.name}" must use camelCaseCapitalization.`,
diff --git a/build-system/eslint-rules/core-dom-jsx.js b/build-system/eslint-rules/core-dom-jsx.js
new file mode 100644
index 000000000000..d568dcc2e553
--- /dev/null
+++ b/build-system/eslint-rules/core-dom-jsx.js
@@ -0,0 +1,174 @@
+/**
+ * @fileoverview Lints JSX features not supported by core/dom/jsx
+ */
+const astUtils = require('../../node_modules/eslint/lib/rules/utils/ast-utils');
+
+module.exports = function (context) {
+ let isCoreDomJsx = false;
+
+ /**
+ * @param {import('eslint').Node} node
+ * @param {boolean} isClass
+ * @return {boolean}
+ */
+ function isValidStyleOrClassValue(node, isClass = false) {
+ if (node?.type === 'ConditionalExpression') {
+ // Both possible outcomes of a ternary must be valid
+ return (
+ isValidStyleOrClassValue(node.consequent, isClass) &&
+ isValidStyleOrClassValue(node.alternate, isClass)
+ );
+ } else if (node?.type === 'BinaryExpression') {
+ // Concatenating anything to a string is valid
+ if (node.operator === '+') {
+ return (
+ isValidStyleOrClassValue(node.left, isClass) ||
+ isValidStyleOrClassValue(node.right, isClass)
+ );
+ }
+ } else if (node?.type === 'LogicalExpression') {
+ if (node.operator === '||' || node.operator === '??') {
+ return (
+ isValidStyleOrClassValue(node.left, isClass) &&
+ isValidStyleOrClassValue(node.right, isClass)
+ );
+ }
+ // Any left falsy is okay
+ if (node.operator === '&&') {
+ return isValidStyleOrClassValue(node.right, isClass);
+ }
+ } else if (node?.type === 'CallExpression') {
+ // Calls to functions that return a string
+ const {name} = node.callee;
+ return name === 'String' || (isClass && name?.toLowerCase() === 'objstr');
+ } else if (node?.type === 'ObjectExpression') {
+ // Style attributes can be objects
+ return !isClass;
+ }
+ return node?.type === 'Literal' || node?.type === 'TemplateLiteral';
+ }
+
+ return {
+ Program() {
+ isCoreDomJsx = false;
+ },
+ ImportNamespaceSpecifier(node) {
+ if (node.parent.source.value.endsWith('core/dom/jsx')) {
+ isCoreDomJsx = true;
+ }
+ },
+ JSXFragment(node) {
+ if (!isCoreDomJsx) {
+ return;
+ }
+ context.report({
+ node,
+ message:
+ 'Fragments are not supported. Change into an array of elements, or wrap in a root element.',
+ });
+ },
+ JSXOpeningElement(node) {
+ if (!isCoreDomJsx) {
+ return;
+ }
+ const {name} = node;
+ if (name.name === 'foreignObject') {
+ context.report({
+ node: node.name,
+ message: `<${node.name.name}> is not supported.`,
+ });
+ }
+
+ if (name.type === 'JSXMemberExpression') {
+ return context.report({
+ node,
+ message: [
+ 'Static JSX Templates are required to use regular DOM nodes or Imported Components',
+ 'This prevents an issue with ` ` accidentally creating a ` element.
-
-# versioning.json
-
-Defines the routing between channels and RTVs (see [Versioning section in amp-framework-hosting.md](../../docs/spec/amp-framework-hosting.md#versioning) for an explanation of AMP versions and RTV numbers).
-
-Currently in testing in preparation for [#36152](https://github.com/ampproject/amphtml/issues/36152).
+This file now resides in the [ampproject/cdn-configuration](https://github.com/ampproject/cdn-configuration/blob/main/configs/client-side-experiments.json) repository.
diff --git a/build-system/global-configs/canary-config.json b/build-system/global-configs/canary-config.json
index 6b15fb82c7b5..17d2cb877b9e 100644
--- a/build-system/global-configs/canary-config.json
+++ b/build-system/global-configs/canary-config.json
@@ -11,14 +11,12 @@
"flexAdSlots": 0.05,
"ios-fixed-no-transfer": 1,
"ads-initialIntersection": 1,
- "amp-cid-backup": 1,
"flexible-bitrate": 0.1,
- "disable-a4a-non-sd": 1,
- "story-ad-auto-advance": 1,
"story-ad-placements": 1,
- "story-load-first-page-only": 1,
"story-load-inactive-outside-viewport": 1,
- "story-disable-animations-first-page": 0,
- "amp-story-page-attachment-ui-v2": 1,
- "amp-sticky-ad-to-amp-ad-v4": 0
-}
+ "story-disable-animations-first-page": 1,
+ "amp-sticky-ad-to-amp-ad-v4": 0,
+ "story-video-cache-apply-audio": 0,
+ "amp-story-subscriptions": 1,
+ "interaction-to-next-paint": 1
+}
\ No newline at end of file
diff --git a/build-system/global-configs/client-side-experiments-config.json b/build-system/global-configs/client-side-experiments-config.json
deleted file mode 100644
index 34e8174bed9e..000000000000
--- a/build-system/global-configs/client-side-experiments-config.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "experiments": [
- {
- "name": "flexible-bitrate",
- "percentage": 0.1
- },
- {
- "name": "amp-story-desktop-one-panel",
- "percentage": 1
- },
- {
- "name": "amp-story-first-page-max-bitrate",
- "percentage": 0.3
- },
- {
- "name": "story-disable-animations-first-page",
- "percentage": 0
- },
- {
- "name": "story-load-first-page-only",
- "percentage": 1
- },
- {
- "name": "story-load-inactive-outside-viewport",
- "percentage": 1
- },
- {
- "name": "story-ad-page-outlink",
- "percentage": 0.02
- },
- {
- "name": "amp-sticky-ad-to-amp-ad-v4",
- "percentage": 0.05
- }
- ]
-}
diff --git a/build-system/global-configs/experiments-config.json b/build-system/global-configs/experiments-config.json
index d89000db8921..f061431de029 100644
--- a/build-system/global-configs/experiments-config.json
+++ b/build-system/global-configs/experiments-config.json
@@ -1,17 +1,5 @@
{
"experimentA": {},
- "experimentB": {
- "name": "amp-img in the deferred mount mode",
- "environment": "AMP",
- "issue": "https://github.com/ampproject/amphtml/issues/31915",
- "expiration_date_utc": "2021-06-30",
- "define_experiment_constant": "R1_IMG_DEFERRED_BUILD"
- },
- "experimentC": {
- "name": "EsbuildCompilation",
- "environment": "AMP",
- "issue": "https://github.com/ampproject/amphtml/issues/35264",
- "expiration_date_utc": "2021-10-30",
- "define_experiment_constant": "ESBUILD_COMPILATION"
- }
+ "experimentB": {},
+ "experimentC": {}
}
diff --git a/build-system/global-configs/experiments-const.json b/build-system/global-configs/experiments-const.json
index 2fba023b6f0b..332a29fe9a9f 100644
--- a/build-system/global-configs/experiments-const.json
+++ b/build-system/global-configs/experiments-const.json
@@ -2,6 +2,5 @@
"INI_LOAD_INOB": true,
"NO_SIGNING_RTV": true,
"R1_IMG_DEFERRED_BUILD": false,
- "WITHIN_VIEWPORT_INOB": false,
- "ESBUILD_COMPILATION": false
+ "WITHIN_VIEWPORT_INOB": false
}
diff --git a/build-system/global-configs/prod-config.json b/build-system/global-configs/prod-config.json
index 7d7bfca24a64..4130d9ce1fb3 100644
--- a/build-system/global-configs/prod-config.json
+++ b/build-system/global-configs/prod-config.json
@@ -10,12 +10,11 @@
"flexAdSlots": 0.05,
"flexible-bitrate": 0.1,
"ios-fixed-no-transfer": 0,
- "disable-a4a-non-sd": 1,
- "amp-cid-backup": 1,
"story-ad-placements": 0.01,
- "story-disable-animations-first-page": 0,
- "story-load-first-page-only": 1,
+ "story-disable-animations-first-page": 1,
"story-load-inactive-outside-viewport": 1,
- "amp-story-page-attachment-ui-v2": 1,
- "amp-sticky-ad-to-amp-ad-v4": 0
-}
+ "amp-sticky-ad-to-amp-ad-v4": 0,
+ "story-video-cache-apply-audio": 0,
+ "amp-story-subscriptions": 1,
+ "interaction-to-next-paint": 1
+}
\ No newline at end of file
diff --git a/build-system/global-configs/versioning.json b/build-system/global-configs/versioning.json
deleted file mode 100644
index defed6a696af..000000000000
--- a/build-system/global-configs/versioning.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "beta-opt-in": "030000000000000",
- "beta-traffic": "030000000000000",
- "control": "020000000000000",
- "experimental-opt-in": "000000000000000",
- "experimental-traffic": "000000000000000",
- "experimentA": null,
- "experimentB": null,
- "experimentC": null,
- "lts": "010000000000000",
- "nightly": "040000000000000",
- "nightly-control": "050000000000000",
- "stable": "010000000000000"
-}
diff --git a/build-system/global.d.ts b/build-system/global.d.ts
index 7a430e9e86d3..4f5a9ec5c5b3 100644
--- a/build-system/global.d.ts
+++ b/build-system/global.d.ts
@@ -56,4 +56,4 @@ declare global {
}
}
-export { }
+export {};
diff --git a/build-system/json-locales/index.js b/build-system/json-locales/index.js
new file mode 100644
index 000000000000..ba281aec26c0
--- /dev/null
+++ b/build-system/json-locales/index.js
@@ -0,0 +1,27 @@
+const {readFileSync} = require('fs');
+/**
+ * JSON reviver that converts {"string": "foo", ...} to just "foo".
+ * This minifies the format of locale files.
+ * @param {string} _
+ * @param {*} value
+ * @return {*}
+ */
+function minifyLocalesJsonReviver(_, value) {
+ // Always default to original `value` since this reviver is called for any
+ // property pair, including the higher-level containing object.
+ return value?.string || value;
+}
+
+/**
+ * @param {string} filename
+ * @return {*}
+ */
+function readJson(filename) {
+ // Treat files under /_locales/ specially in order to minify their format.
+ const reviver = filename.includes('/_locales/')
+ ? minifyLocalesJsonReviver
+ : undefined;
+ return JSON.parse(readFileSync(filename, 'utf8'), reviver);
+}
+
+module.exports = {readJson, minifyLocalesJsonReviver};
diff --git a/build-system/json-schemas/client-side-experiments-config.json b/build-system/json-schemas/client-side-experiments-config.json
deleted file mode 100644
index 6be488e656f8..000000000000
--- a/build-system/json-schemas/client-side-experiments-config.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "description": "Client-side (AMP_EXP) experiment definitions",
- "type": "object",
- "required": [
- "experiments"
- ],
- "properties": {
- "experiments": {
- "type": "array",
- "items": {
- "type": "object",
- "required": [
- "name",
- "percentage"
- ],
- "properties": {
- "name": {
- "type": "string",
- "pattern": "^[A-Za-z][\\w-]*$"
- },
- "percentage": {
- "type": "number",
- "minimum": 0,
- "maximum": 1
- },
- "rtvPrefixes": {
- "type": "array",
- "items": {
- "type": "string",
- "pattern": "^[\\d\\.]+$"
- }
- }
- }
- }
- }
- },
- "additionalProperties": false
-}
diff --git a/build-system/json-schemas/versioning.json b/build-system/json-schemas/versioning.json
deleted file mode 100644
index bfd601dc264b..000000000000
--- a/build-system/json-schemas/versioning.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema#",
- "description": "Versioning (RTV) information",
- "type": "object",
- "required": [
- "beta-opt-in",
- "beta-traffic",
- "control",
- "experimental-opt-in",
- "experimental-traffic",
- "experimentA",
- "experimentB",
- "experimentC",
- "lts",
- "nightly",
- "nightly-control",
- "stable"
- ],
- "properties": {
- "control": {
- "type": "string",
- "pattern": "02\\d{13}"
- },
- "experimentA": {
- "type": [
- "string",
- "null"
- ],
- "pattern": "10\\d{13}"
- },
- "experimentB": {
- "type": [
- "string",
- "null"
- ],
- "pattern": "11\\d{13}"
- },
- "experimentC": {
- "type": [
- "string",
- "null"
- ],
- "pattern": "12\\d{13}"
- },
- "nightly": {
- "type": "string",
- "pattern": "04\\d{13}"
- },
- "nightly-control": {
- "type": "string",
- "pattern": "05\\d{13}"
- }
- },
- "patternProperties": {
- "beta-(opt-in|traffic)": {
- "type": "string",
- "pattern": "03\\d{13}"
- },
- "experimental-(opt-in|traffic)": {
- "type": "string",
- "pattern": "00\\d{13}"
- },
- "(stable|lts)": {
- "type": "string",
- "pattern": "01\\d{13}"
- }
- },
- "additionalProperties": false
-}
diff --git a/build-system/npm-publish/build-npm-binaries.js b/build-system/npm-publish/build-npm-binaries.js
deleted file mode 100644
index 66fc56dec898..000000000000
--- a/build-system/npm-publish/build-npm-binaries.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * @fileoverview
- * Builds npm binaries for specified Bento components.
- */
-
-const [extension] = process.argv.slice(2);
-const {timedExecOrDie} = require('../pr-check/utils');
-const {updatePackages} = require('../common/update-packages');
-
-updatePackages();
-timedExecOrDie(`amp build --extensions=${extension} --core_runtime_only`);
-timedExecOrDie(`amp build --extensions=${extension} --core_runtime_only --esm`);
-timedExecOrDie(`amp dist --extensions=${extension} --core_runtime_only`);
-timedExecOrDie(`amp dist --extensions=${extension} --core_runtime_only --esm`);
diff --git a/build-system/npm-publish/get-extensions.js b/build-system/npm-publish/get-extensions.js
deleted file mode 100644
index 0ed317bc7ab4..000000000000
--- a/build-system/npm-publish/get-extensions.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * @fileoverview
- * Logs Bento components to publish.
- */
-
-const {getExtensions} = require('./utils');
-console /*OK*/
- .log(JSON.stringify(getExtensions()));
diff --git a/build-system/npm-publish/utils.js b/build-system/npm-publish/utils.js
deleted file mode 100644
index 7b622c9318d9..000000000000
--- a/build-system/npm-publish/utils.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Get extensions to be published on npm
- * @return {Array}
- */
-function getExtensions() {
- const bundles = require('../compile/bundles.config.extensions.json');
- const extensions = bundles
- .filter((bundle) => bundle.options?.npm)
- .map((bundle) => ({
- 'extension': bundle.name,
- 'version': bundle.version,
- }));
- return extensions;
-}
-
-/**
- * Get semver from extension version and amp version
- * See build-system/compile/internal-version.js for versioning description
- * @param {string} extensionVersion
- * @param {string} ampVersion
- * @return {string}
- */
-function getSemver(extensionVersion, ampVersion) {
- const major = extensionVersion.split('.', 2)[0];
- const minor = ampVersion.slice(0, 10);
- const patch = Number(ampVersion.slice(-3)); // npm trims leading zeroes in patch number, so mimic this in package.json
- return `${major}.${minor}.${patch}`;
-}
-
-module.exports = {
- getExtensions,
- getSemver,
-};
diff --git a/build-system/npm-publish/write-package-files.js b/build-system/npm-publish/write-package-files.js
deleted file mode 100644
index 01a8631d3ed0..000000000000
--- a/build-system/npm-publish/write-package-files.js
+++ /dev/null
@@ -1,212 +0,0 @@
-/**
- * @fileoverview
- * Creates npm package files for a given component and AMP version.
- */
-
-const [extension, ampVersion, extensionVersion] = process.argv.slice(2);
-const fastGlob = require('fast-glob');
-const marked = require('marked');
-const path = require('path');
-const posthtml = require('posthtml');
-const {getNameWithoutComponentPrefix} = require('../tasks/bento-helpers');
-const {getSemver} = require('./utils');
-const {log} = require('../common/logging');
-const {readFile} = require('fs-extra');
-const {stat, writeFile} = require('fs/promises');
-const {valid} = require('semver');
-
-const packageName = getNameWithoutComponentPrefix(extension);
-const dir = `extensions/${extension}/${extensionVersion}`;
-
-/**
- * Determines whether to skip
- * @return {Promise}
- */
-async function shouldSkip() {
- try {
- await stat(dir);
- return false;
- } catch {
- log(`${extension} ${extensionVersion} : skipping, does not exist`);
- return true;
- }
-}
-
-/**
- * Returns relative paths to all the extension's CSS file
- *
- * @return {Promise}
- */
-async function getStylesheets() {
- const extDir = `${dir}/dist`.split('/').join(path.sep);
- const files = await fastGlob(path.join(extDir, '**', '*.css'));
- return files.map((file) => path.relative(extDir, file));
-}
-
-/**
- * @param {string} html
- * @return {Promise}
- */
-async function getHtmlTextContent(html) {
- const getTextContent = (node, out = []) => {
- if (typeof node === 'string') {
- out.push(node);
- } else if (Array.isArray(node)) {
- for (const child of node) {
- getTextContent(child, out);
- }
- } else if (node?.content) {
- getTextContent(node.content, out);
- }
- return out;
- };
- const result = await posthtml([
- (node) => getTextContent(node).join(''),
- ]).process(html);
- return result.html.trim();
-}
-
-/**
- * @param {string} markdown
- * @param {number} maxLengthChars
- * @return {Promise}
- */
-async function getFirstParagraphOrSentence(markdown, maxLengthChars) {
- const token = marked.lexer(markdown).find(({type}) => type === 'paragraph');
- if (!token) {
- return null;
- }
- const html = marked.parser([token]);
- const paragraph = await getHtmlTextContent(html);
- if (paragraph.length <= maxLengthChars) {
- return paragraph;
- }
- const [sentence] = paragraph.split('.', 1);
- if (sentence.length < maxLengthChars) {
- return `${sentence}.`;
- }
- return null;
-}
-
-/**
- * Get package description from its README.md file, or a generic description
- * if the file does not exist.
- * @return {Promise}
- */
-async function getDescription() {
- let description;
- try {
- const markdown = await readFile(`${dir}/README.md`, 'utf8');
- description = await getFirstParagraphOrSentence(markdown, 200);
- } catch {}
- return description || `Bento ${packageName} Component`;
-}
-
-/**
- * Write package.json
- * @return {Promise}
- */
-async function writePackageJson() {
- const version = getSemver(extensionVersion, ampVersion);
- if (!valid(version) || ampVersion.length != 13) {
- log(
- 'Invalid semver version',
- version,
- 'or AMP version',
- ampVersion,
- 'or extension version',
- extensionVersion
- );
- process.exitCode = 1;
- return;
- }
-
- const exports = {
- '.': {
- import: './dist/web-component.module.js',
- require: './dist/web-component.js',
- },
- './web-component': {
- import: './dist/web-component.module.js',
- require: './dist/web-component.js',
- },
- './preact': {
- import: './dist/component-preact.module.js',
- require: './dist/component-preact.js',
- },
- './react': {
- import: './dist/component-react.module.js',
- require: './dist/component-react.js',
- },
- };
-
- for (const stylesheet of await getStylesheets()) {
- exports[`./${stylesheet}`] = `./dist/${stylesheet}`;
- }
-
- const json = {
- name: `@bentoproject/${packageName}`,
- version,
- description: await getDescription(),
- author: 'Bento Authors',
- license: 'Apache-2.0',
- main: './dist/web-component.js',
- module: './dist/web-component.module.js',
- exports,
- files: ['dist/*', 'react.js'],
- repository: {
- type: 'git',
- url: 'https://github.com/ampproject/amphtml.git',
- directory: `extensions/${extension}/${extensionVersion}`,
- },
- homepage: `https://github.com/ampproject/amphtml/tree/main/extensions/${extension}/${extensionVersion}`,
- peerDependencies: {
- preact: '^10.2.1',
- react: '^17.0.0',
- },
- };
-
- try {
- await writeFile(`${dir}/package.json`, JSON.stringify(json, null, 2));
- log(
- json.name,
- extensionVersion,
- ': created package.json for',
- json.version
- );
- } catch (e) {
- log(e);
- process.exitCode = 1;
- return;
- }
-}
-
-/**
- * Write react.js
- * @return {Promise}
- */
-async function writeReactJs() {
- const content = "module.exports = require('./dist/component-react');";
- try {
- await writeFile(`${dir}/react.js`, content);
- log(packageName, extensionVersion, ': created react.js');
- } catch (e) {
- log(e);
- process.exitCode = 1;
- return;
- }
-}
-
-/**
- * Main
- * @return {Promise}
- */
-async function main() {
- if (await shouldSkip()) {
- return;
- }
- writePackageJson();
- writeReactJs();
-}
-
-main();
diff --git a/build-system/pr-check/OWNERS b/build-system/pr-check/OWNERS
index 002922bb9cc9..69a88bfe0386 100644
--- a/build-system/pr-check/OWNERS
+++ b/build-system/pr-check/OWNERS
@@ -4,7 +4,7 @@
{
rules: [
{
- owners: [{name: 'ampproject/wg-infra'}, {name: 'rsimha', notify: true}],
+ owners: [{name: 'ampproject/wg-infra'}],
},
],
}
diff --git a/build-system/pr-check/browser-tests.js b/build-system/pr-check/browser-tests.js
index 99c455ddc875..3a910741b637 100644
--- a/build-system/pr-check/browser-tests.js
+++ b/build-system/pr-check/browser-tests.js
@@ -4,37 +4,38 @@
* @fileoverview Script that runs tests on Safari / Firefox / Edge during CI.
*/
-const {
- skipDependentJobs,
- timedExecOrDie,
- timedExecOrThrow,
-} = require('./utils');
-const {browser} = require('minimist')(process.argv.slice(2));
+const {skipDependentJobs, timedExecOrThrow} = require('./utils');
const {runCiJob} = require('./ci-job');
const {Targets, buildTargetsInclude} = require('./build-targets');
+const argv = require('minimist')(process.argv.slice(2));
+const {type} = argv;
+const browser = argv.browser.toLowerCase();
+
const jobName = 'browser-tests.js';
+const COMMANDS = {
+ 'Unit': `amp unit --${browser}`,
+ 'Integration': `amp integration --nobuild --minified --${browser}`,
+ 'End-to-End': `amp e2e --nobuild --minified --browsers=${browser}`,
+};
+
+const INDIVIDUAL_TARGET = {
+ 'Unit': Targets.UNIT_TEST,
+ 'Integration': Targets.INTEGRATION_TEST,
+ 'End-to-End': Targets.E2E_TEST,
+};
+
/**
* Steps to run during push builds.
*/
function pushBuildWorkflow() {
try {
- timedExecOrThrow(`amp unit --report --${browser}`, 'Unit tests failed!');
- timedExecOrThrow(
- `amp integration --report --nobuild --minified --${browser}`,
- 'Integration tests failed!'
- );
- timedExecOrThrow(
- `amp e2e --report --nobuild --minified --browsers=${browser}`,
- 'End-to-end tests failed!'
- );
+ timedExecOrThrow(COMMANDS[type], `${type} tests failed!`);
} catch (e) {
if (e.status) {
process.exitCode = e.status;
}
- } finally {
- timedExecOrDie('amp test-report-upload');
}
}
@@ -42,32 +43,15 @@ function pushBuildWorkflow() {
* Steps to run during PR builds.
*/
function prBuildWorkflow() {
- if (
- !buildTargetsInclude(
- Targets.RUNTIME,
- Targets.UNIT_TEST,
- Targets.E2E_TEST,
- Targets.INTEGRATION_TEST
- )
- ) {
+ if (!buildTargetsInclude(Targets.RUNTIME, INDIVIDUAL_TARGET[type])) {
skipDependentJobs(
jobName,
- 'this PR does not affect the runtime, unit tests, integration tests, or end-to-end tests'
+ `this PR does not affect the runtime or ${type} tests`
);
return;
}
- if (buildTargetsInclude(Targets.RUNTIME, Targets.UNIT_TEST)) {
- timedExecOrDie(`amp unit --${browser}`);
- }
- if (buildTargetsInclude(Targets.RUNTIME, Targets.INTEGRATION_TEST)) {
- timedExecOrDie(`amp integration --nobuild --minified --${browser}`);
- }
- if (
- buildTargetsInclude(Targets.RUNTIME, Targets.E2E_TEST) &&
- ['safari', 'firefox'].includes(browser) // E2E tests can't be run on Edge.
- ) {
- timedExecOrDie(`amp e2e --nobuild --minified --browsers=${browser}`);
- }
+
+ pushBuildWorkflow();
}
runCiJob(jobName, pushBuildWorkflow, prBuildWorkflow);
diff --git a/build-system/pr-check/build-targets.js b/build-system/pr-check/build-targets.js
index 7cbb32726f5e..860ee5bdd011 100644
--- a/build-system/pr-check/build-targets.js
+++ b/build-system/pr-check/build-targets.js
@@ -9,7 +9,7 @@ const config = require('../test-configs/config');
const fastGlob = require('fast-glob');
const fs = require('fs');
const json5 = require('json5');
-const minimatch = require('minimatch');
+const {minimatch} = require('minimatch');
const path = require('path');
const {cyan} = require('kleur/colors');
const {getLoggingPrefix, logWithoutTimestamp} = require('../common/logging');
diff --git a/build-system/pr-check/bundle-size-module-build.js b/build-system/pr-check/bundle-size-module-build.js
deleted file mode 100644
index 541a8ac57453..000000000000
--- a/build-system/pr-check/bundle-size-module-build.js
+++ /dev/null
@@ -1,40 +0,0 @@
-'use strict';
-
-/**
- * @fileoverview Script that builds the module AMP runtime for bundle-size during CI.
- */
-
-const {
- skipDependentJobs,
- storeModuleBuildToWorkspace,
- timedExecOrDie,
-} = require('./utils');
-const {runCiJob} = require('./ci-job');
-const {Targets, buildTargetsInclude} = require('./build-targets');
-
-const jobName = 'bundle-size-module-build.js';
-
-/**
- * Steps to run during push builds.
- */
-function pushBuildWorkflow() {
- timedExecOrDie('amp dist --noconfig --esm');
- storeModuleBuildToWorkspace();
-}
-
-/**
- * Steps to run during PR builds.
- */
-function prBuildWorkflow() {
- if (buildTargetsInclude(Targets.RUNTIME)) {
- pushBuildWorkflow();
- } else {
- skipDependentJobs(
- jobName,
- 'this PR does not affect the runtime',
- /* gracefullyHaltNextJobs= */ false
- );
- }
-}
-
-runCiJob(jobName, pushBuildWorkflow, prBuildWorkflow);
diff --git a/build-system/pr-check/bundle-size-nomodule-build.js b/build-system/pr-check/bundle-size-nomodule-build.js
deleted file mode 100644
index 0aec6e19c46c..000000000000
--- a/build-system/pr-check/bundle-size-nomodule-build.js
+++ /dev/null
@@ -1,40 +0,0 @@
-'use strict';
-
-/**
- * @fileoverview Script that builds the nomodule AMP runtime for bundle-size during CI.
- */
-
-const {
- skipDependentJobs,
- storeNomoduleBuildToWorkspace,
- timedExecOrDie,
-} = require('./utils');
-const {runCiJob} = require('./ci-job');
-const {Targets, buildTargetsInclude} = require('./build-targets');
-
-const jobName = 'bundle-size-nomodule-build.js';
-
-/**
- * Steps to run during push builds.
- */
-function pushBuildWorkflow() {
- timedExecOrDie('amp dist --noconfig');
- storeNomoduleBuildToWorkspace();
-}
-
-/**
- * Steps to run during PR builds.
- */
-function prBuildWorkflow() {
- if (buildTargetsInclude(Targets.RUNTIME)) {
- pushBuildWorkflow();
- } else {
- skipDependentJobs(
- jobName,
- 'this PR does not affect the runtime',
- /* gracefullyHaltNextJobs= */ false
- );
- }
-}
-
-runCiJob(jobName, pushBuildWorkflow, prBuildWorkflow);
diff --git a/build-system/pr-check/checks.js b/build-system/pr-check/checks.js
index d8c168927c29..4d6f5bfcb167 100644
--- a/build-system/pr-check/checks.js
+++ b/build-system/pr-check/checks.js
@@ -16,23 +16,21 @@ const jobName = 'checks.js';
function pushBuildWorkflow() {
timedExecOrDie('amp presubmit');
timedExecOrDie('amp check-invalid-whitespaces');
- timedExecOrDie('amp validate-html-fixtures');
timedExecOrDie('amp lint');
timedExecOrDie('amp prettify');
timedExecOrDie('amp check-json-schemas');
timedExecOrDie('amp ava');
timedExecOrDie('amp check-build-system');
timedExecOrDie('amp check-ignore-lists');
+ timedExecOrDie('amp check-links');
timedExecOrDie('amp babel-plugin-tests');
timedExecOrDie('amp check-exact-versions');
timedExecOrDie('amp check-renovate-config');
timedExecOrDie('amp server-tests');
timedExecOrDie('amp make-extension --name=t --test --cleanup');
- timedExecOrDie('amp make-extension --name=t --test --cleanup --bento');
timedExecOrDie('amp dep-check');
timedExecOrDie('amp check-types');
timedExecOrDie('amp check-sourcemaps');
- timedExecOrDie('amp performance-urls');
timedExecOrDie('amp check-analytics-vendors-list');
timedExecOrDie('amp check-video-interface-list');
timedExecOrDie('amp get-zindex');
@@ -55,10 +53,6 @@ function prBuildWorkflow() {
timedExecOrDie(`amp check-ignore-lists`);
}
- if (buildTargetsInclude(Targets.HTML_FIXTURES)) {
- timedExecOrDie('amp validate-html-fixtures');
- }
-
if (buildTargetsInclude(Targets.LINT_RULES)) {
timedExecOrDie('amp lint');
} else if (buildTargetsInclude(Targets.LINT)) {
@@ -108,14 +102,12 @@ function prBuildWorkflow() {
if (buildTargetsInclude(Targets.AVA, Targets.RUNTIME)) {
timedExecOrDie('amp make-extension --name=t --test --cleanup');
- timedExecOrDie('amp make-extension --name=t --test --cleanup --bento');
}
if (buildTargetsInclude(Targets.RUNTIME)) {
timedExecOrDie('amp dep-check');
timedExecOrDie('amp check-types');
timedExecOrDie('amp check-sourcemaps');
- timedExecOrDie('amp performance-urls');
timedExecOrDie('amp check-analytics-vendors-list');
timedExecOrDie('amp check-video-interface-list');
timedExecOrDie('amp get-zindex');
diff --git a/build-system/pr-check/dist.js b/build-system/pr-check/dist.js
new file mode 100644
index 000000000000..b865df7f227e
--- /dev/null
+++ b/build-system/pr-check/dist.js
@@ -0,0 +1,111 @@
+'use strict';
+
+/**
+ * @fileoverview Script that builds the module AMP runtime for bundle-size during CI.
+ */
+
+const {
+ skipDependentJobs,
+ storeBuildOutputToWorkspace,
+ timedExecOrDie,
+} = require('./utils');
+const {runCiJob} = require('./ci-job');
+const {Targets, buildTargetsInclude} = require('./build-targets');
+const {maybeParallelizeCommand} = require('./parallelization');
+
+const {type} = require('minimist')(process.argv.slice(2));
+
+const jobName = 'dist.js';
+
+// Mapping from build type name to the command to execute.
+const COMMANDS = {
+ 'Module Build (Test)': 'amp dist --esm --fortesting',
+ 'Module 3p Build (Test)':
+ 'amp dist --esm --fortesting --core_runtime_only --vendor_configs',
+ 'Nomodule Build (Test)': 'amp dist --fortesting',
+ 'Nomodule 3p Build (Test)':
+ 'amp dist --fortesting --core_runtime_only --vendor_configs',
+ 'Module Build (Bundle Size)':
+ 'amp dist --noconfig --esm --version_override 0000000000000 --nomanglecache',
+ 'Module 3p Build (Bundle Size)':
+ 'amp dist --noconfig --esm --core_runtime_only --vendor_configs --version_override 0000000000000 --nomanglecache',
+ 'Nomodule Build (Bundle Size)':
+ 'amp dist --noconfig --version_override 0000000000000 --nomanglecache',
+ 'Nomodule 3p Build (Bundle Size)':
+ 'amp dist --noconfig --core_runtime_only --vendor_configs --version_override 0000000000000 --nomanglecache',
+};
+
+// Mapping from Build type name to which build targets should trigger this build in pull requests.
+const PR_TARGETS = {
+ 'Module Build (Test)': [
+ Targets.RUNTIME,
+ Targets.INTEGRATION_TEST,
+ Targets.VISUAL_DIFF,
+ ],
+ 'Module 3p Build (Test)': [
+ Targets.RUNTIME,
+ Targets.INTEGRATION_TEST,
+ Targets.VISUAL_DIFF,
+ ],
+ 'Nomodule Build (Test)': [
+ Targets.RUNTIME,
+ Targets.INTEGRATION_TEST,
+ Targets.E2E_TEST,
+ Targets.VISUAL_DIFF,
+ ],
+ 'Nomodule 3p Build (Test)': [
+ Targets.RUNTIME,
+ Targets.INTEGRATION_TEST,
+ Targets.E2E_TEST,
+ Targets.VISUAL_DIFF,
+ ],
+ 'Module Build (Bundle Size)': [Targets.RUNTIME],
+ 'Module 3p Build (Bundle Size)': [Targets.RUNTIME],
+ 'Nomodule Build (Bundle Size)': [Targets.RUNTIME],
+ 'Nomodule 3p Build (Bundle Size)': [Targets.RUNTIME],
+};
+
+// We require a special exception for running an empty visual diff build when skipping module test builds.
+// Run this on the 3p Build since that one is not parallelized!
+const RUN_ON_SKIP = {
+ 'Module 3p Build (Test)': () => {
+ timedExecOrDie('amp visual-diff --empty');
+ },
+};
+
+// We gracefully halt uneffected tests, but want to run the Bundle Size step regardless.
+const gracefullyHaltNextJobs = type.endsWith('(Test)');
+
+/**
+ * Steps to run during push builds.
+ */
+function pushBuildWorkflow() {
+ const command = maybeParallelizeCommand(
+ COMMANDS[type],
+ 'extensions/amp-*',
+ (results) =>
+ `--extensions=${results.replaceAll(/\bextensions\//g, '').replaceAll(' ', ',')}`
+ );
+
+ timedExecOrDie(command);
+ storeBuildOutputToWorkspace();
+}
+
+/**
+ * Steps to run during PR builds.
+ */
+function prBuildWorkflow() {
+ if (buildTargetsInclude(...PR_TARGETS[type])) {
+ pushBuildWorkflow();
+ return;
+ }
+
+ RUN_ON_SKIP[type]?.();
+ skipDependentJobs(
+ jobName,
+ 'this PR does not affect relevant files for this build',
+ gracefullyHaltNextJobs
+ );
+}
+
+runCiJob(jobName, pushBuildWorkflow, prBuildWorkflow);
diff --git a/build-system/pr-check/e2e-tests.js b/build-system/pr-check/e2e-tests.js
index c232d400d033..e8cf58232837 100644
--- a/build-system/pr-check/e2e-tests.js
+++ b/build-system/pr-check/e2e-tests.js
@@ -24,15 +24,13 @@ function pushBuildWorkflow() {
try {
generateCircleCiShardTestFileList(e2eTestPaths);
timedExecOrThrow(
- `amp e2e --nobuild --headless --minified --report --filelist ${FILELIST_PATH}`,
+ `amp e2e --nobuild --headless --minified --filelist ${FILELIST_PATH}`,
'End-to-end tests failed!'
);
} catch (e) {
if (e.status) {
process.exitCode = e.status;
}
- } finally {
- timedExecOrDie('amp test-report-upload');
}
}
diff --git a/build-system/pr-check/experiment-build.js b/build-system/pr-check/experiment-build.js
index 1b0f1c8d34ad..90baa9399d5a 100644
--- a/build-system/pr-check/experiment-build.js
+++ b/build-system/pr-check/experiment-build.js
@@ -5,8 +5,8 @@
*/
const {
- skipDependentJobs: skipDependentJobs,
- storeExperimentBuildToWorkspace,
+ skipDependentJobs,
+ storeBuildOutputToWorkspace,
timedExecOrDie,
} = require('./utils');
const {experiment} = require('minimist')(process.argv.slice(2));
@@ -24,7 +24,7 @@ function pushBuildWorkflow() {
const config = getExperimentConfig(experiment);
const defineFlag = `--define_experiment_constant ${config.define_experiment_constant}`;
timedExecOrDie(`amp dist --fortesting ${defineFlag}`);
- storeExperimentBuildToWorkspace(experiment);
+ storeBuildOutputToWorkspace();
}
/**
diff --git a/build-system/pr-check/experiment-e2e-tests.js b/build-system/pr-check/experiment-e2e-tests.js
index 92b6a2b7c584..267efb8701f0 100644
--- a/build-system/pr-check/experiment-e2e-tests.js
+++ b/build-system/pr-check/experiment-e2e-tests.js
@@ -8,13 +8,11 @@ const {
FILELIST_PATH,
generateCircleCiShardTestFileList,
skipDependentJobs,
- timedExecOrDie,
timedExecOrThrow,
} = require('./utils');
const {e2eTestPaths} = require('../test-configs/config');
const {experiment} = require('minimist')(process.argv.slice(2));
const {getExperimentConfig} = require('../common/utils');
-const {isPushBuild} = require('../common/ci');
const {runCiJob} = require('./ci-job');
const {Targets, buildTargetsInclude} = require('./build-targets');
@@ -28,19 +26,14 @@ function runExperimentTests(config) {
try {
const defineFlag = `--define_experiment_constant ${config.define_experiment_constant}`;
const experimentFlag = `--experiment ${experiment}`;
- const reportFlag = isPushBuild() ? '--report' : '';
generateCircleCiShardTestFileList(e2eTestPaths);
timedExecOrThrow(
- `amp e2e --nobuild --minified --headless ${experimentFlag} ${defineFlag} ${reportFlag} --filelist ${FILELIST_PATH}`
+ `amp e2e --nobuild --minified --headless ${experimentFlag} ${defineFlag} --filelist ${FILELIST_PATH}`
);
} catch (e) {
if (e.status) {
process.exitCode = e.status;
}
- } finally {
- if (isPushBuild()) {
- timedExecOrDie('amp test-report-upload');
- }
}
}
diff --git a/build-system/pr-check/experiment-integration-tests.js b/build-system/pr-check/experiment-integration-tests.js
index 5ddc62cc26a4..65d95a6e318d 100644
--- a/build-system/pr-check/experiment-integration-tests.js
+++ b/build-system/pr-check/experiment-integration-tests.js
@@ -4,14 +4,9 @@
* @fileoverview Script that runs the experiment A/B/C integration tests during CI.
*/
-const {
- skipDependentJobs,
- timedExecOrDie,
- timedExecOrThrow,
-} = require('./utils');
+const {skipDependentJobs, timedExecOrThrow} = require('./utils');
const {experiment} = require('minimist')(process.argv.slice(2));
const {getExperimentConfig} = require('../common/utils');
-const {isPushBuild} = require('../common/ci');
const {runCiJob} = require('./ci-job');
const {Targets, buildTargetsInclude} = require('./build-targets');
@@ -25,18 +20,13 @@ function runExperimentTests(config) {
try {
const defineFlag = `--define_experiment_constant ${config.define_experiment_constant}`;
const experimentFlag = `--experiment ${experiment}`;
- const reportFlag = isPushBuild() ? '--report' : '';
timedExecOrThrow(
- `amp integration --nobuild --minified --headless ${experimentFlag} ${defineFlag} ${reportFlag}`
+ `amp integration --nobuild --minified --headless ${experimentFlag} ${defineFlag}`
);
} catch (e) {
if (e.status) {
process.exitCode = e.status;
}
- } finally {
- if (isPushBuild()) {
- timedExecOrDie('amp test-report-upload');
- }
}
}
diff --git a/build-system/pr-check/module-build.js b/build-system/pr-check/module-build.js
deleted file mode 100644
index a2147be6f4fc..000000000000
--- a/build-system/pr-check/module-build.js
+++ /dev/null
@@ -1,43 +0,0 @@
-'use strict';
-
-/**
- * @fileoverview Script that builds the module AMP runtime during CI.
- */
-
-const {
- skipDependentJobs,
- storeModuleBuildToWorkspace,
- timedExecOrDie,
-} = require('./utils');
-const {runCiJob} = require('./ci-job');
-const {Targets, buildTargetsInclude} = require('./build-targets');
-
-const jobName = 'module-build.js';
-
-/**
- * Steps to run during push builds.
- */
-function pushBuildWorkflow() {
- timedExecOrDie('amp dist --esm --fortesting');
- storeModuleBuildToWorkspace();
-}
-
-/**
- * Steps to run during PR builds.
- */
-function prBuildWorkflow() {
- // TODO(#31102): This list must eventually match the same buildTargets check
- // found in pr-check/nomodule-build.js as we turn on the systems that
- // run against the module build. (ex. visual diffs, e2e, etc.)
- if (buildTargetsInclude(Targets.RUNTIME, Targets.INTEGRATION_TEST)) {
- timedExecOrDie('amp dist --esm --fortesting');
- storeModuleBuildToWorkspace();
- } else {
- skipDependentJobs(
- jobName,
- 'this PR does not affect the runtime or integration tests'
- );
- }
-}
-
-runCiJob(jobName, pushBuildWorkflow, prBuildWorkflow);
diff --git a/build-system/pr-check/nomodule-build.js b/build-system/pr-check/nomodule-build.js
deleted file mode 100644
index e3a9437f6441..000000000000
--- a/build-system/pr-check/nomodule-build.js
+++ /dev/null
@@ -1,65 +0,0 @@
-'use strict';
-
-/**
- * @fileoverview Script that builds the nomodule AMP runtime during CI.
- */
-
-const {
- abortTimedJob,
- skipDependentJobs,
- startTimer,
- storeNomoduleBuildToWorkspace,
- timedExecOrDie,
- timedExecWithError,
-} = require('./utils');
-const {log} = require('../common/logging');
-const {red, yellow} = require('kleur/colors');
-const {runCiJob} = require('./ci-job');
-const {signalPrDeployUpload} = require('../tasks/pr-deploy-bot-utils');
-const {Targets, buildTargetsInclude} = require('./build-targets');
-
-const jobName = 'nomodule-build.js';
-
-/**
- * Steps to run during push builds.
- */
-function pushBuildWorkflow() {
- timedExecOrDie('amp dist --fortesting');
- storeNomoduleBuildToWorkspace();
-}
-
-/**
- * Steps to run during PR builds.
- * @return {Promise}
- */
-async function prBuildWorkflow() {
- const startTime = startTimer(jobName);
- if (
- buildTargetsInclude(
- Targets.RUNTIME,
- Targets.INTEGRATION_TEST,
- Targets.E2E_TEST,
- Targets.VISUAL_DIFF
- )
- ) {
- const process = timedExecWithError('amp dist --fortesting');
- if (process.status !== 0) {
- const message = process?.error
- ? process.error.message
- : 'Unknown error, check logs';
- log(red('ERROR'), yellow(message));
- await signalPrDeployUpload('errored');
- return abortTimedJob(jobName, startTime);
- }
- storeNomoduleBuildToWorkspace();
- } else {
- await signalPrDeployUpload('skipped');
- timedExecOrDie('amp visual-diff --empty');
- skipDependentJobs(
- jobName,
- 'this PR does not affect the runtime, integration tests, end-to-end tests, or visual diff tests'
- );
- }
-}
-
-runCiJob(jobName, pushBuildWorkflow, prBuildWorkflow);
diff --git a/build-system/pr-check/nomodule-tests.js b/build-system/pr-check/nomodule-tests.js
index e54ea23f5d58..d4e7c486677f 100644
--- a/build-system/pr-check/nomodule-tests.js
+++ b/build-system/pr-check/nomodule-tests.js
@@ -35,15 +35,13 @@ function pushBuildWorkflow() {
prependConfig();
try {
timedExecOrThrow(
- `amp integration --nobuild --headless --minified --report --config=${argv.config}`,
+ `amp integration --nobuild --headless --minified --config=${argv.config}`,
'Integration tests failed!'
);
} catch (e) {
if (e.status) {
process.exitCode = e.status;
}
- } finally {
- timedExecOrDie('amp test-report-upload');
}
}
diff --git a/build-system/pr-check/parallelization.js b/build-system/pr-check/parallelization.js
new file mode 100644
index 000000000000..be12f461f616
--- /dev/null
+++ b/build-system/pr-check/parallelization.js
@@ -0,0 +1,44 @@
+/**
+ * @fileoverview helpper functions for parallelizations.
+ */
+
+const fs = require('node:fs');
+const tempy = require('tempy');
+const {circleciIsParallelized} = require('../common/ci');
+const {timedExecOrDie} = require('./utils');
+
+/**
+ * Splits command execution using a glob string on parallelized CircleCI builds.
+ *
+ * If no parallelization is detected, simply returns the command as-is.
+ * If parallelization is detected, uses the glob to add an argument to the
+ * command by passing it through an optional callback function.
+ *
+ * Optional callback: A function that receives a space-delimited list as
+ * determines by CircleCI, and returns the new argument to add as a string.
+ * e.g., `(items) => '--files=' + item.replaceAll(' ', ',')` will add
+ * '--files=x,y,z' to the command.
+ *
+ * Note: the glob returns results with spaces in them this cab get messy.
+ *
+ * @param {string} command a CLI command. e.g., `amp dist --fortesting`
+ * @param {string} glob e.g., `extensions/amp-*`
+ * @param {(results: string) => string} callback optional callback. See
+ * function description.
+ * @return {string} the CLI command that should be executed.
+ */
+function maybeParallelizeCommand(command, glob, callback = (s) => s) {
+ if (!circleciIsParallelized()) {
+ return command;
+ }
+
+ const tempFileName = tempy.file();
+ timedExecOrDie(
+ `circleci tests glob ${glob} | circleci tests run --command=">${tempFileName} xargs echo -n"`
+ );
+ const globAndRunResults = fs.readFileSync(tempFileName, {encoding: 'utf-8'});
+
+ return `${command} ${callback(globAndRunResults)}`;
+}
+
+module.exports = {maybeParallelizeCommand};
diff --git a/build-system/pr-check/pr-deploy.js b/build-system/pr-check/pr-deploy.js
deleted file mode 100644
index 00b151a449eb..000000000000
--- a/build-system/pr-check/pr-deploy.js
+++ /dev/null
@@ -1,43 +0,0 @@
-'use strict';
-
-/**
- * @fileoverview Script that deploys a PR's nomodule and storybook output during CI.
- */
-
-const {
- processAndStoreBuildToArtifacts,
- skipDependentJobs,
- timedExecOrDie,
-} = require('./utils');
-const {runCiJob} = require('./ci-job');
-const {signalPrDeployUpload} = require('../tasks/pr-deploy-bot-utils');
-const {Targets, buildTargetsInclude} = require('./build-targets');
-
-const jobName = 'pr-deploy.js';
-
-/**
- * Steps to run during PR builds.
- * @return {Promise}
- */
-async function prBuildWorkflow() {
- if (
- buildTargetsInclude(
- Targets.RUNTIME,
- Targets.INTEGRATION_TEST,
- Targets.E2E_TEST,
- Targets.VISUAL_DIFF
- )
- ) {
- timedExecOrDie('amp storybook --build');
- await processAndStoreBuildToArtifacts();
- await signalPrDeployUpload('success');
- } else {
- await signalPrDeployUpload('skipped');
- skipDependentJobs(
- jobName,
- 'this PR does not affect the runtime, integration tests, end-to-end tests, or visual diff tests'
- );
- }
-}
-
-runCiJob(jobName, () => {}, prBuildWorkflow);
diff --git a/build-system/pr-check/unit-tests.js b/build-system/pr-check/unit-tests.js
index e1bf2495b9d8..3cc8726380ba 100644
--- a/build-system/pr-check/unit-tests.js
+++ b/build-system/pr-check/unit-tests.js
@@ -24,19 +24,13 @@ function pushBuildWorkflow() {
try {
generateCircleCiShardTestFileList(unitTestPaths);
timedExecOrThrow(
- `amp unit --headless --coverage --report --filelist ${FILELIST_PATH}`,
+ `amp unit --headless --coverage --filelist ${FILELIST_PATH}`,
'Unit tests failed!'
);
- timedExecOrThrow(
- 'amp codecov-upload',
- 'Failed to upload code coverage to Codecov!'
- );
} catch (e) {
if (e.status) {
process.exitCode = e.status;
}
- } finally {
- timedExecOrDie('amp test-report-upload');
}
}
@@ -49,7 +43,6 @@ function prBuildWorkflow() {
timedExecOrDie(
`amp unit --headless --coverage --filelist ${FILELIST_PATH}`
);
- timedExecOrDie('amp codecov-upload');
} else {
skipDependentJobs(
jobName,
diff --git a/build-system/pr-check/unminified-build.js b/build-system/pr-check/unminified-build.js
index dc3c49292e91..fa5198f2cb6a 100644
--- a/build-system/pr-check/unminified-build.js
+++ b/build-system/pr-check/unminified-build.js
@@ -6,7 +6,7 @@
const {
skipDependentJobs,
- storeUnminifiedBuildToWorkspace,
+ storeBuildOutputToWorkspace,
timedExecOrDie,
} = require('./utils');
const {runCiJob} = require('./ci-job');
@@ -19,7 +19,7 @@ const jobName = 'unminified-build.js';
*/
function pushBuildWorkflow() {
timedExecOrDie('amp build --fortesting');
- storeUnminifiedBuildToWorkspace();
+ storeBuildOutputToWorkspace();
}
/**
@@ -28,7 +28,7 @@ function pushBuildWorkflow() {
function prBuildWorkflow() {
if (buildTargetsInclude(Targets.RUNTIME, Targets.INTEGRATION_TEST)) {
timedExecOrDie('amp build --fortesting');
- storeUnminifiedBuildToWorkspace();
+ storeBuildOutputToWorkspace();
} else {
skipDependentJobs(
jobName,
diff --git a/build-system/pr-check/unminified-tests.js b/build-system/pr-check/unminified-tests.js
index 20aac2604ad2..73e63d817f7b 100644
--- a/build-system/pr-check/unminified-tests.js
+++ b/build-system/pr-check/unminified-tests.js
@@ -20,19 +20,13 @@ const jobName = 'unminified-tests.js';
function pushBuildWorkflow() {
try {
timedExecOrThrow(
- 'amp integration --nobuild --headless --coverage --report',
+ 'amp integration --nobuild --headless --coverage',
'Integration tests failed!'
);
- timedExecOrThrow(
- 'amp codecov-upload',
- 'Failed to upload code coverage to Codecov!'
- );
} catch (e) {
if (e.status) {
process.exitCode = e.status;
}
- } finally {
- timedExecOrDie('amp test-report-upload');
}
}
@@ -42,7 +36,6 @@ function pushBuildWorkflow() {
function prBuildWorkflow() {
if (buildTargetsInclude(Targets.RUNTIME, Targets.INTEGRATION_TEST)) {
timedExecOrDie('amp integration --nobuild --headless --coverage');
- timedExecOrDie('amp codecov-upload');
} else {
skipDependentJobs(
jobName,
diff --git a/build-system/pr-check/utils.js b/build-system/pr-check/utils.js
index 27791aab760f..878451fed4ee 100644
--- a/build-system/pr-check/utils.js
+++ b/build-system/pr-check/utils.js
@@ -1,11 +1,9 @@
'use strict';
-const fastGlob = require('fast-glob');
const fs = require('fs-extra');
-const path = require('path');
const {
ciPullRequestSha,
- circleciBuildNumber,
+ circleciUniqueBuildNumber,
isCiBuild,
isCircleciBuild,
} = require('../common/ci');
@@ -22,23 +20,10 @@ const {cyan, green, yellow} = require('kleur/colors');
const {exec, execOrDie, execOrThrow, execWithError} = require('../common/exec');
const {getLoggingPrefix, logWithoutTimestamp} = require('../common/logging');
const {getStdout} = require('../common/process');
-const {replaceUrls} = require('../tasks/pr-deploy-bot-utils');
-const UNMINIFIED_CONTAINER_DIRECTORY = 'unminified';
-const NOMODULE_CONTAINER_DIRECTORY = 'nomodule';
-const MODULE_CONTAINER_DIRECTORY = 'module';
-
-const ARTIFACT_DIRECTORY = '/tmp/artifacts/';
-const ARTIFACT_FILE_NAME = `${ARTIFACT_DIRECTORY}/amp_nomodule_build.tar.gz`;
const FILELIST_PATH = '/tmp/filelist.txt';
const BUILD_OUTPUT_DIRS = ['build', 'dist', 'dist.3p', 'dist.tools'];
-const APP_SERVING_DIRS = [
- ...BUILD_OUTPUT_DIRS,
- 'examples',
- 'test/manual',
- 'test/fixtures/e2e',
-];
const GIT_BRANCH_URL =
'https://github.com/ampproject/amphtml/blob/main/docs/getting-started-e2e.md#create-a-git-branch';
@@ -110,7 +95,7 @@ function printChangeSummary() {
function signalGracefulHalt() {
if (isCircleciBuild()) {
const loggingPrefix = getLoggingPrefix();
- const sentinelFile = `/tmp/workspace/.CI_GRACEFULLY_HALT_${circleciBuildNumber()}`;
+ const sentinelFile = `/tmp/workspace/.CI_GRACEFULLY_HALT_${circleciUniqueBuildNumber()}`;
fs.closeSync(fs.openSync(sentinelFile, 'w'));
logWithoutTimestamp(
`${loggingPrefix} Created ${cyan(sentinelFile)} to signal graceful halt.`
@@ -229,10 +214,9 @@ const timedExecOrThrow = timedExecFn(execOrThrow);
/**
* Stores build files to the CI workspace.
- * @param {string} containerDirectory
- * @private
*/
-function storeBuildToWorkspace_(containerDirectory) {
+function storeBuildOutputToWorkspace() {
+ const containerDirectory = circleciUniqueBuildNumber();
if (isCircleciBuild()) {
fs.ensureDirSync(`/tmp/workspace/builds/${containerDirectory}`);
for (const outputDir of BUILD_OUTPUT_DIRS) {
@@ -244,76 +228,9 @@ function storeBuildToWorkspace_(containerDirectory) {
);
}
}
- // Bento components are compiled inside the extension source file.
- for (const componentFile of fastGlob.sync('extensions/*/?.?/dist/*.js')) {
- fs.ensureDirSync(
- `/tmp/workspace/builds/${containerDirectory}/${path.dirname(
- componentFile
- )}`
- );
- fs.moveSync(
- componentFile,
- `/tmp/workspace/builds/${containerDirectory}/${componentFile}`
- );
- }
}
}
-/**
- * Stores unminified build files to the CI workspace.
- */
-function storeUnminifiedBuildToWorkspace() {
- storeBuildToWorkspace_(UNMINIFIED_CONTAINER_DIRECTORY);
-}
-
-/**
- * Stores nomodule build files to the CI workspace.
- */
-function storeNomoduleBuildToWorkspace() {
- storeBuildToWorkspace_(NOMODULE_CONTAINER_DIRECTORY);
-}
-
-/**
- * Stores module build files to the CI workspace.
- */
-function storeModuleBuildToWorkspace() {
- storeBuildToWorkspace_(MODULE_CONTAINER_DIRECTORY);
-}
-
-/**
- * Stores an experiment's build files to the CI workspace.
- * @param {string} exp one of 'experimentA', 'experimentB', or 'experimentC'.
- */
-function storeExperimentBuildToWorkspace(exp) {
- storeBuildToWorkspace_(exp);
-}
-
-/**
- * Replaces URLS in HTML files, compresses and stores nomodule build in CI artifacts.
- * @return {Promise}
- */
-async function processAndStoreBuildToArtifacts() {
- if (!isCircleciBuild()) {
- return;
- }
-
- await replaceUrls('test/manual');
- await replaceUrls('examples');
-
- const loggingPrefix = getLoggingPrefix();
-
- logWithoutTimestamp(
- `\n${loggingPrefix} Compressing ` +
- cyan(APP_SERVING_DIRS.join(', ')) +
- ' into ' +
- cyan(ARTIFACT_FILE_NAME) +
- '...'
- );
- await fs.ensureDir(ARTIFACT_DIRECTORY);
- execOrDie(`tar -czf ${ARTIFACT_FILE_NAME} ${APP_SERVING_DIRS.join('/ ')}/`);
- execOrDie(`du -sh ${ARTIFACT_FILE_NAME}`);
-}
-
/**
* Generates a file with a comma-separated list of test file paths that CircleCI
* should execute in a parallelized job shard.
@@ -347,10 +264,6 @@ module.exports = {
timedExecOrDie,
timedExecWithError,
timedExecOrThrow,
- storeUnminifiedBuildToWorkspace,
- storeNomoduleBuildToWorkspace,
- storeModuleBuildToWorkspace,
- storeExperimentBuildToWorkspace,
- processAndStoreBuildToArtifacts,
+ storeBuildOutputToWorkspace,
generateCircleCiShardTestFileList,
};
diff --git a/build-system/pr-check/validator-tests.js b/build-system/pr-check/validator-tests.js
index a627bf446db8..dc1964ebdacd 100644
--- a/build-system/pr-check/validator-tests.js
+++ b/build-system/pr-check/validator-tests.js
@@ -14,9 +14,12 @@ const jobName = 'validator-tests.js';
* Steps to run during push builds.
*/
function pushBuildWorkflow() {
- timedExecOrDie('amp validator-webui');
- timedExecOrDie('amp validator');
+ // NOTE: We've removed the amp validator calls as the JS validator and its
+ // tests are no longer needed since we now create a WASM build off of the
+ // the C++ code.
+ // TODO(#38610): fix for bazel 6.0 or use older version
timedExecOrDie('amp validator-cpp');
+ timedExecOrDie('amp validate-html-fixtures');
}
/**
@@ -25,6 +28,7 @@ function pushBuildWorkflow() {
function prBuildWorkflow() {
if (
!buildTargetsInclude(
+ Targets.HTML_FIXTURES,
Targets.RUNTIME,
Targets.VALIDATOR,
Targets.VALIDATOR_WEBUI
@@ -32,17 +36,13 @@ function prBuildWorkflow() {
) {
skipDependentJobs(
jobName,
- 'this PR does not affect the runtime, validator, or validator web UI'
+ 'this PR does not affect the runtime, HTML fixtures, validator, or validator web UI'
);
return;
}
- if (buildTargetsInclude(Targets.VALIDATOR_WEBUI)) {
- timedExecOrDie('amp validator-webui');
- }
-
- if (buildTargetsInclude(Targets.RUNTIME, Targets.VALIDATOR)) {
- timedExecOrDie('amp validator');
+ if (buildTargetsInclude(Targets.HTML_FIXTURES)) {
+ timedExecOrDie('amp validate-html-fixtures');
}
if (buildTargetsInclude(Targets.VALIDATOR)) {
diff --git a/build-system/pr-check/visual-diff-tests.js b/build-system/pr-check/visual-diff-tests.js
index 5b433ade878c..a17780812cf9 100644
--- a/build-system/pr-check/visual-diff-tests.js
+++ b/build-system/pr-check/visual-diff-tests.js
@@ -14,7 +14,7 @@ const jobName = 'visual-diff-tests.js';
* Steps to run during push builds.
*/
function pushBuildWorkflow() {
- timedExecOrDie('amp visual-diff --main');
+ timedExecOrDie('amp visual-diff --esm --minified --main');
}
/**
@@ -22,9 +22,9 @@ function pushBuildWorkflow() {
*/
function prBuildWorkflow() {
if (buildTargetsInclude(Targets.RUNTIME, Targets.VISUAL_DIFF)) {
- timedExecOrDie('amp visual-diff');
+ timedExecOrDie('amp visual-diff --esm --minified');
} else {
- timedExecOrDie('amp visual-diff --empty');
+ timedExecOrDie('amp visual-diff --empty --esm --minified');
skipDependentJobs(
jobName,
'this PR does not affect the runtime or visual diff tests'
diff --git a/build-system/release-tagger/index.js b/build-system/release-tagger/index.js
index 223f92cb1671..451daa49bcfe 100644
--- a/build-system/release-tagger/index.js
+++ b/build-system/release-tagger/index.js
@@ -6,22 +6,19 @@
* 2. head (AMP version)
* 3. base (AMP version)
* 4. channel (beta-percent|stable|lts)
- * 5. time (in UTC, Y-%m-%d %H:%M:%S)
*/
-const dedent = require('dedent');
-const {action, base, channel, head, sha, timeParam} = require('minimist')(
+const {default: dedent} = require('dedent');
+const {action, base, channel, head, sha} = require('minimist')(
process.argv.slice(2),
{
string: ['head', 'base'],
}
);
const {addLabels, removeLabels} = require('./label-pull-requests');
-const {createOrUpdateTracker} = require('./update-issue-tracker');
const {cyan, magenta} = require('kleur/colors');
-const {getRelease} = require('./utils');
const {log} = require('../common/logging');
-const {makeRelease} = require('./make-release');
+const {getRelease, makeRelease} = require('./make-release');
const {publishRelease, rollbackRelease} = require('./update-release');
/**
@@ -29,14 +26,12 @@ const {publishRelease, rollbackRelease} = require('./update-release');
* @return {Promise}
*/
async function _promote() {
- const time = decodeURIComponent(timeParam);
log(
cyan(dedent`Release tagger triggered with inputs:
action: ${magenta(action)}
head: ${magenta(head)}
base: ${magenta(base)}
channel: ${magenta(channel)}
- time: ${magenta(time)}
sha: ${magenta(sha)}`)
);
@@ -54,7 +49,8 @@ async function _promote() {
}
if (['stable', 'lts'].includes(channel)) {
- const {'html_url': url} = await publishRelease(head);
+ const latest = channel == 'stable';
+ const {'html_url': url} = await publishRelease(head, latest);
log('Published release', magenta(head), 'at', cyan(url));
}
@@ -67,14 +63,6 @@ async function _promote() {
magenta(channel)
);
}
-
- await createOrUpdateTracker(head, base, channel, time);
- log(
- 'Updated issue tracker for release',
- magenta(head),
- 'and channel',
- magenta(channel)
- );
}
/**
@@ -112,8 +100,6 @@ async function main() {
log('Action: rollback');
return await _rollback();
}
-
- // TODO(estherkim): add release tracker comment on prs
}
main();
diff --git a/build-system/release-tagger/label-pull-requests.js b/build-system/release-tagger/label-pull-requests.js
index 3016117122c1..2b06306ab5db 100644
--- a/build-system/release-tagger/label-pull-requests.js
+++ b/build-system/release-tagger/label-pull-requests.js
@@ -3,13 +3,7 @@
* Update labels on pull requests for the release tagger.
*/
-const {
- getLabel,
- getPullRequestsBetweenCommits,
- getRelease,
- labelPullRequests,
- unlabelPullRequests,
-} = require('./utils');
+const {GitHubApi} = require('./utils');
const labelConfig = {
'beta-percent': 'PR Use: In Beta / Experimental',
@@ -22,15 +16,16 @@ const labelConfig = {
* @param {string} head
* @param {string} base
* @param {string} channel
+ * @param {object} api
* @return {Promise}
*/
-async function _setup(head, base, channel) {
+async function _setup(head, base, channel, api) {
const [label, headRelease, baseRelease] = await Promise.all([
- await getLabel(labelConfig[channel]),
- await getRelease(head),
- await getRelease(base),
+ await api.getLabel(labelConfig[channel]),
+ await api.getRelease(head),
+ await api.getRelease(base),
]);
- const prs = await getPullRequestsBetweenCommits(
+ const prs = await api.getPullRequestsBetweenCommits(
headRelease['target_commitish'],
baseRelease['target_commitish']
);
@@ -42,11 +37,20 @@ async function _setup(head, base, channel) {
* @param {string} head
* @param {string} base
* @param {string} channel
+ * @param {Object|undefined} octokitRest
+ * @param {Object|undefined} octokitGraphQl
* @return {Promise}
*/
-async function addLabels(head, base, channel) {
- const {labelId, prs} = await _setup(head, base, channel);
- await labelPullRequests(prs, labelId);
+async function addLabels(
+ head,
+ base,
+ channel,
+ octokitRest = undefined,
+ octokitGraphQl = undefined
+) {
+ const api = new GitHubApi(octokitRest, octokitGraphQl);
+ const {labelId, prs} = await _setup(head, base, channel, api);
+ await api.labelPullRequests(prs, labelId);
}
/**
@@ -54,11 +58,20 @@ async function addLabels(head, base, channel) {
* @param {string} head
* @param {string} base
* @param {string} channel
+ * @param {Object|undefined} octokitRest
+ * @param {Object|undefined} octokitGraphQl
* @return {Promise}
*/
-async function removeLabels(head, base, channel) {
- const {labelId, prs} = await _setup(head, base, channel);
- await unlabelPullRequests(prs, labelId);
+async function removeLabels(
+ head,
+ base,
+ channel,
+ octokitRest = undefined,
+ octokitGraphQl = undefined
+) {
+ const api = new GitHubApi(octokitRest, octokitGraphQl);
+ const {labelId, prs} = await _setup(head, base, channel, api);
+ await api.unlabelPullRequests(prs, labelId);
}
module.exports = {addLabels, removeLabels};
diff --git a/build-system/release-tagger/make-release.js b/build-system/release-tagger/make-release.js
index e5bea5a869cc..7f69953e821a 100644
--- a/build-system/release-tagger/make-release.js
+++ b/build-system/release-tagger/make-release.js
@@ -3,15 +3,10 @@
* Make release for the release tagger.
*/
-const dedent = require('dedent');
-const {
- createRelease,
- createTag,
- getPullRequestsBetweenCommits,
- getRef,
-} = require('./utils');
-const {getExtensions, getSemver} = require('../npm-publish/utils');
-const {GraphQlQueryResponseData} = require('@octokit/graphql'); //eslint-disable-line no-unused-vars
+const {default: dedent} = require('dedent');
+const {GitHubApi} = require('./utils');
+
+/** @typedef {import('@octokit/graphql').GraphQlQueryResponseData} GraphQlQueryResponseData */
const prereleaseConfig = {
'beta-opt-in': true,
@@ -42,45 +37,6 @@ function _formatPullRequestLine(pr) {
${abbreviatedOid}
- ${title}`;
}
-/**
- * Organize bento changes into sections
- * @param {Array} prs
- * @return {PackageMetadata}
- */
-function _createPackageSections(prs) {
- const bundles = getExtensions();
- const majors = [...new Set(bundles.map((b) => b.version))];
- /** @type PackageMetadata */
- const metadata = {};
- for (const major of majors) {
- metadata[major] = {
- packages: {},
- unchanged: new Set(),
- };
- bundles
- .filter((b) => b.version == major)
- .map((b) => metadata[major].unchanged.add(b.extension));
- }
-
- for (const pr of prs) {
- for (const node of pr.files.nodes) {
- for (const {extension, version} of bundles) {
- if (node.path.startsWith(`extensions/${extension}/${version}`)) {
- if (!Object.keys(metadata[version].packages).includes(extension)) {
- metadata[version].packages[extension] = new Set();
- metadata[version].unchanged.delete(extension);
- }
- metadata[version].packages[extension].add(
- `${_formatPullRequestLine(pr)} `
- );
- }
- }
- }
- }
-
- return metadata;
-}
-
/**
* Organize pull requests into sections
* @param {Array} prs
@@ -112,12 +68,12 @@ function _createComponentSections(prs) {
// components
for (const node of pr.files.nodes) {
- if (node.path.startsWith('extensions/')) {
- const component = node.path.split('/')[1];
- if (!Object.keys(sections).includes(component)) {
- sections[component] = new Set();
+ const componentName = getComponentNameFromPath(node.path);
+ if (componentName) {
+ if (!sections[componentName]) {
+ sections[componentName] = new Set();
}
- sections[component].add(_formatPullRequestLine(pr));
+ sections[componentName].add(_formatPullRequestLine(pr));
}
}
}
@@ -138,6 +94,22 @@ function _createComponentSections(prs) {
return sectionsMarkdown;
}
+/**
+ * Gets the name of a component from its directory path.
+ * Returns undefined if the path is not a component directory.
+ * @param {string} path
+ * @return {string|undefined}
+ */
+function getComponentNameFromPath(path) {
+ if (path.startsWith('extensions/')) {
+ return path.split('/')[1];
+ }
+
+ if (path.startsWith('src/bento/components/')) {
+ return path.split('/')[3];
+ }
+}
+
/**
* Create body for GitHub release
* @param {string} head
@@ -146,7 +118,6 @@ function _createComponentSections(prs) {
* @return {string}
*/
function _createBody(head, base, prs) {
- const bento = _createPackageSections(prs);
const components = _createComponentSections(prs);
const template = dedent`\
Changelog
@@ -156,25 +127,6 @@ function _createBody(head, base, prs) {
- ${Object.entries(bento)
- .map(
- // eslint-disable-next-line local/no-deep-destructuring
- ([major, {packages, unchanged}]) => dedent`\
- npm packages @ ${getSemver(major, head)}
- ${Object.entries(packages)
- .sort()
- .map(
- ([extension, prs]) =>
- `${extension} \n`
- )
- .join('\n')}
-
- Packages not changed: ${[...unchanged]
- .sort()
- .join(', ')} `
- )
- .join('\n')}
-
Changes by component
${components.sort().join('')}\
`;
@@ -197,20 +149,46 @@ function _createBody(head, base, prs) {
* @param {string} base
* @param {string} channel
* @param {string} sha
+ * @param {Object|undefined} octokitRest
+ * @param {Object|undefined} octokitGraphQl
* @return {Promise}
*/
-async function makeRelease(head, base, channel, sha) {
+async function makeRelease(
+ head,
+ base,
+ channel,
+ sha,
+ octokitRest = undefined,
+ octokitGraphQl = undefined
+) {
+ const api = new GitHubApi(octokitRest, octokitGraphQl);
let headRef;
try {
- headRef = (await getRef(head)).object;
+ headRef = (await api.getRef(head)).object;
} catch (_) {
- headRef = (await createTag(head, sha)).object;
+ headRef = (await api.createTag(head, sha)).object;
}
- const {object: baseRef} = await getRef(base);
- const prs = await getPullRequestsBetweenCommits(headRef.sha, baseRef.sha);
+ const {object: baseRef} = await api.getRef(base);
+ const prs = await api.getPullRequestsBetweenCommits(headRef.sha, baseRef.sha);
const body = _createBody(head, base, prs);
const prerelease = prereleaseConfig[channel];
- return await createRelease(head, headRef.sha, body, prerelease);
+ return await api.createRelease(head, headRef.sha, body, prerelease);
+}
+
+/**
+ * Get a release
+ * @param {string} head
+ * @param {Object|undefined} octokitRest
+ * @param {Object|undefined} octokitGraphQl
+ * @return {Promise}
+ */
+async function getRelease(
+ head,
+ octokitRest = undefined,
+ octokitGraphQl = undefined
+) {
+ const api = new GitHubApi(octokitRest, octokitGraphQl);
+ return await api.getRelease(head);
}
-module.exports = {makeRelease};
+module.exports = {getRelease, makeRelease};
diff --git a/build-system/release-tagger/test/label-pull-requests.test.js b/build-system/release-tagger/test/label-pull-requests.test.js
index 65f334351bb9..282b8ec5625c 100644
--- a/build-system/release-tagger/test/label-pull-requests.test.js
+++ b/build-system/release-tagger/test/label-pull-requests.test.js
@@ -1,245 +1,218 @@
-const nock = require('nock');
const test = require('ava');
+const sinon = require('sinon');
const {addLabels, removeLabels} = require('../label-pull-requests');
-test.before(() => nock.disableNetConnect());
-test.after(() => {
- nock.cleanAll();
- nock.enableNetConnect();
+test.beforeEach((t) => {
+ t.context.octokitRest = {
+ rest: {
+ issues: {
+ getLabel: sinon.stub(),
+ },
+ repos: {
+ compareCommits: sinon.stub(),
+ getReleaseByTag: sinon.stub(),
+ },
+ },
+ hook: {
+ error: sinon.stub(),
+ },
+ };
+
+ t.context.octokitGraphQl = sinon.stub();
});
test('label', async (t) => {
- const rest = nock('https://api.github.com')
- // https://docs.github.com/en/rest/reference/issues#get-a-label
- .get('/repos/ampproject/amphtml/labels/PR%20Use%3A%20In%20Stable')
- .reply(200, {
+ t.context.octokitRest.rest.issues.getLabel.resolves({
+ data: {
'node_id': 1,
+ },
+ });
+ t.context.octokitRest.rest.repos.getReleaseByTag
+ .onFirstCall()
+ .resolves({
+ data: {
+ id: 2,
+ 'target_commitish': '3abcdef',
+ },
})
- // https://docs.github.com/en/rest/reference/repos#get-a-release-by-tag-name
- .get('/repos/ampproject/amphtml/releases/tags/2107280123000')
- .reply(200, {
- id: 2,
- 'target_commitish': '3abcdef',
- })
- // https://docs.github.com/en/rest/reference/repos#get-a-release-by-tag-name
- .get('/repos/ampproject/amphtml/releases/tags/2107210123000')
- .reply(200, {
- id: 1,
- 'target_commitish': '1abcdef',
- })
- // https://docs.github.com/en/rest/reference/repos#compare-two-commits
- .get('/repos/ampproject/amphtml/compare/1abcdef...3abcdef')
- .reply(200, {
- commits: [{sha: '1abcdef'}, {sha: '2abcdef'}, {sha: '3abcdef'}],
+ .onSecondCall()
+ .resolves({
+ data: {
+ id: 1,
+ 'target_commitish': '1abcdef',
+ },
});
+ t.context.octokitRest.rest.repos.compareCommits.resolves({
+ data: {commits: [{sha: '1abcdef'}, {sha: '2abcdef'}, {sha: '3abcdef'}]},
+ });
- const graphql = nock('https://api.github.com/graphql')
- .post(
- '',
- '{"query":"query {' +
- 'pr0: search(query:\\"repo:ampproject/amphtml sha:1abcdef\\", ' +
- 'type:ISSUE first:100){nodes { ... on PullRequest { id title number ' +
- 'url author { login } files(first:100) { nodes { path }} mergeCommit ' +
- '{ commitUrl oid abbreviatedOid }}}} ' +
- 'pr1: search(query:\\"repo:ampproject/amphtml sha:2abcdef\\", ' +
- 'type:ISSUE first:100){nodes { ... on PullRequest { id title number ' +
- 'url author { login } files(first:100) { nodes { path }} mergeCommit ' +
- '{ commitUrl oid abbreviatedOid }}}} ' +
- 'pr2: search(query:\\"repo:ampproject/amphtml sha:3abcdef\\", ' +
- 'type:ISSUE first:100){nodes { ... on PullRequest { id title number ' +
- 'url author { login } files(first:100) { nodes { path }} mergeCommit ' +
- '{ commitUrl oid abbreviatedOid }}}}}"}'
- )
- .reply(200, {
- data: {
- pr0: {
- nodes: [
- {
- id: 'MDEx01',
- title: 'Bunch of changes',
- number: 1,
- url: 'https://github.com/ampproject/amphtml/pull/1',
- author: {login: 'testauthor'},
- mergeCommit: {
- commitUrl:
- 'https://github.com/ampproject/amphtml/commit/1abcdef',
- oid: '1abcdef',
- abbreviatedOid: '1abc',
- },
- },
- ],
+ t.context.octokitGraphQl.resolves({
+ pr0: {
+ nodes: [
+ {
+ id: 'MDEx01',
+ title: 'Bunch of changes',
+ number: 1,
+ url: 'https://github.com/ampproject/amphtml/pull/1',
+ author: {login: 'testauthor'},
+ mergeCommit: {
+ commitUrl: 'https://github.com/ampproject/amphtml/commit/1abcdef',
+ oid: '1abcdef',
+ abbreviatedOid: '1abc',
+ },
},
- pr1: {
- nodes: [
- {
- id: 'MDEx02',
- title: '`README` updates',
- number: 2,
- url: 'https://github.com/ampproject/amphtml/pull/2',
- author: {login: 'testauthor'},
- mergeCommit: {
- commitUrl:
- 'https://github.com/ampproject/amphtml/commit/2abcdef',
- oid: '2abcdef',
- abbreviatedOid: '2abc',
- },
- },
- ],
+ ],
+ },
+ pr1: {
+ nodes: [
+ {
+ id: 'MDEx02',
+ title: '`README` updates',
+ number: 2,
+ url: 'https://github.com/ampproject/amphtml/pull/2',
+ author: {login: 'testauthor'},
+ mergeCommit: {
+ commitUrl: 'https://github.com/ampproject/amphtml/commit/2abcdef',
+ oid: '2abcdef',
+ abbreviatedOid: '2abc',
+ },
},
- pr2: {
- nodes: [
- {
- id: 'MDEx03',
- title: 'Update packages',
- number: 3,
- url: 'https://github.com/ampproject/amphtml/pull/3',
- author: {login: 'renovate-bot'},
- mergeCommit: {
- commitUrl:
- 'https://github.com/ampproject/amphtml/commit/3abcdef',
- oid: '3abcdef',
- abbreviatedOid: '3abc',
- },
- },
- ],
+ ],
+ },
+ pr2: {
+ nodes: [
+ {
+ id: 'MDEx03',
+ title: 'Update packages',
+ number: 3,
+ url: 'https://github.com/ampproject/amphtml/pull/3',
+ author: {login: 'renovate-bot'},
+ mergeCommit: {
+ commitUrl: 'https://github.com/ampproject/amphtml/commit/3abcdef',
+ oid: '3abcdef',
+ abbreviatedOid: '3abc',
+ },
},
- },
- })
- .post(
- '',
- '{"query":"mutation {' +
- 'pr0: addLabelsToLabelable(input:{labelIds:\\"1\\", ' +
- 'labelableId:\\"MDEx01\\", clientMutationId:\\"MDEx01\\"})' +
- '{clientMutationId} ' +
- 'pr1: addLabelsToLabelable(input:{labelIds:\\"1\\", ' +
- 'labelableId:\\"MDEx02\\", clientMutationId:\\"MDEx02\\"})' +
- '{clientMutationId} ' +
- 'pr2: addLabelsToLabelable(input:{labelIds:\\"1\\", ' +
- 'labelableId:\\"MDEx03\\", clientMutationId:\\"MDEx03\\"})' +
- '{clientMutationId}}"}'
- )
- .reply(200, {data: {}});
+ ],
+ },
+ });
+
+ await addLabels(
+ '2107280123000',
+ '2107210123000',
+ 'stable',
+ t.context.octokitRest,
+ t.context.octokitGraphQl
+ );
- await addLabels('2107280123000', '2107210123000', 'stable');
- t.true(rest.isDone());
- t.true(graphql.isDone());
+ t.true(
+ t.context.octokitGraphQl.calledWith({
+ query:
+ 'query {pr0: search(query:"repo:ampproject/amphtml sha:1abcdef", type:ISSUE first:100){nodes { ... on PullRequest { id title number url author { login } files(first:100) { nodes { path }} mergeCommit { commitUrl oid abbreviatedOid }}}} pr1: search(query:"repo:ampproject/amphtml sha:2abcdef", type:ISSUE first:100){nodes { ... on PullRequest { id title number url author { login } files(first:100) { nodes { path }} mergeCommit { commitUrl oid abbreviatedOid }}}} pr2: search(query:"repo:ampproject/amphtml sha:3abcdef", type:ISSUE first:100){nodes { ... on PullRequest { id title number url author { login } files(first:100) { nodes { path }} mergeCommit { commitUrl oid abbreviatedOid }}}}}',
+ })
+ );
+ t.true(
+ t.context.octokitGraphQl.calledWith({
+ query:
+ 'mutation {pr0: addLabelsToLabelable(input:{labelIds:"1", labelableId:"MDEx01", clientMutationId:"MDEx01"}){clientMutationId} pr1: addLabelsToLabelable(input:{labelIds:"1", labelableId:"MDEx02", clientMutationId:"MDEx02"}){clientMutationId} pr2: addLabelsToLabelable(input:{labelIds:"1", labelableId:"MDEx03", clientMutationId:"MDEx03"}){clientMutationId}}',
+ })
+ );
});
test('unlabel', async (t) => {
- const rest = nock('https://api.github.com')
- // https://docs.github.com/en/rest/reference/issues#get-a-label
- .get(
- '/repos/ampproject/amphtml/labels/PR%20Use%3A%20In%20Beta%20%2F%20Experimental'
- )
- .reply(200, {
+ t.context.octokitRest.rest.issues.getLabel.resolves({
+ data: {
'node_id': 1,
+ },
+ });
+ t.context.octokitRest.rest.repos.getReleaseByTag
+ .onFirstCall()
+ .resolves({
+ data: {
+ id: 2,
+ 'target_commitish': '3abcdef',
+ },
})
- // https://docs.github.com/en/rest/reference/repos#get-a-release-by-tag-name
- .get('/repos/ampproject/amphtml/releases/tags/2107280123000')
- .reply(200, {
- id: 2,
- 'target_commitish': '3abcdef',
- })
- // https://docs.github.com/en/rest/reference/repos#get-a-release-by-tag-name
- .get('/repos/ampproject/amphtml/releases/tags/2107210123000')
- .reply(200, {
- id: 1,
- 'target_commitish': '1abcdef',
- })
- // https://docs.github.com/en/rest/reference/repos#compare-two-commits
- .get('/repos/ampproject/amphtml/compare/1abcdef...3abcdef')
- .reply(200, {
- commits: [{sha: '1abcdef'}, {sha: '2abcdef'}, {sha: '3abcdef'}],
+ .onSecondCall()
+ .resolves({
+ data: {
+ id: 1,
+ 'target_commitish': '1abcdef',
+ },
});
+ t.context.octokitRest.rest.repos.compareCommits.resolves({
+ data: {commits: [{sha: '1abcdef'}, {sha: '2abcdef'}, {sha: '3abcdef'}]},
+ });
- const graphql = nock('https://api.github.com/graphql')
- .post(
- '',
- '{"query":"query {' +
- 'pr0: search(query:\\"repo:ampproject/amphtml sha:1abcdef\\", ' +
- 'type:ISSUE first:100){nodes { ... on PullRequest { id title number ' +
- 'url author { login } files(first:100) { nodes { path }} mergeCommit ' +
- '{ commitUrl oid abbreviatedOid }}}} ' +
- 'pr1: search(query:\\"repo:ampproject/amphtml sha:2abcdef\\", ' +
- 'type:ISSUE first:100){nodes { ... on PullRequest { id title number ' +
- 'url author { login } files(first:100) { nodes { path }} mergeCommit ' +
- '{ commitUrl oid abbreviatedOid }}}} ' +
- 'pr2: search(query:\\"repo:ampproject/amphtml sha:3abcdef\\", ' +
- 'type:ISSUE first:100){nodes { ... on PullRequest { id title number ' +
- 'url author { login } files(first:100) { nodes { path }} mergeCommit ' +
- '{ commitUrl oid abbreviatedOid }}}}}"}'
- )
- .reply(200, {
- data: {
- pr0: {
- nodes: [
- {
- id: 'MDEx01',
- title: 'Bunch of changes',
- number: 1,
- url: 'https://github.com/ampproject/amphtml/pull/1',
- author: {login: 'testauthor'},
- mergeCommit: {
- commitUrl:
- 'https://github.com/ampproject/amphtml/commit/1abcdef',
- oid: '1abcdef',
- abbreviatedOid: '1abc',
- },
- },
- ],
+ t.context.octokitGraphQl.resolves({
+ pr0: {
+ nodes: [
+ {
+ id: 'MDEx01',
+ title: 'Bunch of changes',
+ number: 1,
+ url: 'https://github.com/ampproject/amphtml/pull/1',
+ author: {login: 'testauthor'},
+ mergeCommit: {
+ commitUrl: 'https://github.com/ampproject/amphtml/commit/1abcdef',
+ oid: '1abcdef',
+ abbreviatedOid: '1abc',
+ },
},
- pr1: {
- nodes: [
- {
- id: 'MDEx02',
- title: '`README` updates',
- number: 2,
- url: 'https://github.com/ampproject/amphtml/pull/2',
- author: {login: 'testauthor'},
- mergeCommit: {
- commitUrl:
- 'https://github.com/ampproject/amphtml/commit/2abcdef',
- oid: '2abcdef',
- abbreviatedOid: '2abc',
- },
- },
- ],
+ ],
+ },
+ pr1: {
+ nodes: [
+ {
+ id: 'MDEx02',
+ title: '`README` updates',
+ number: 2,
+ url: 'https://github.com/ampproject/amphtml/pull/2',
+ author: {login: 'testauthor'},
+ mergeCommit: {
+ commitUrl: 'https://github.com/ampproject/amphtml/commit/2abcdef',
+ oid: '2abcdef',
+ abbreviatedOid: '2abc',
+ },
},
- pr2: {
- nodes: [
- {
- id: 'MDEx03',
- title: 'Update packages',
- number: 3,
- url: 'https://github.com/ampproject/amphtml/pull/3',
- author: {login: 'renovate-bot'},
- mergeCommit: {
- commitUrl:
- 'https://github.com/ampproject/amphtml/commit/3abcdef',
- oid: '3abcdef',
- abbreviatedOid: '3abc',
- },
- },
- ],
+ ],
+ },
+ pr2: {
+ nodes: [
+ {
+ id: 'MDEx03',
+ title: 'Update packages',
+ number: 3,
+ url: 'https://github.com/ampproject/amphtml/pull/3',
+ author: {login: 'renovate-bot'},
+ mergeCommit: {
+ commitUrl: 'https://github.com/ampproject/amphtml/commit/3abcdef',
+ oid: '3abcdef',
+ abbreviatedOid: '3abc',
+ },
},
- },
- })
- .post(
- '',
- '{"query":"mutation {' +
- 'pr0: removeLabelsFromLabelable(input:{labelIds:\\"1\\", ' +
- 'labelableId:\\"MDEx01\\", clientMutationId:\\"MDEx01\\"})' +
- '{clientMutationId} ' +
- 'pr1: removeLabelsFromLabelable(input:{labelIds:\\"1\\", ' +
- 'labelableId:\\"MDEx02\\", clientMutationId:\\"MDEx02\\"})' +
- '{clientMutationId} ' +
- 'pr2: removeLabelsFromLabelable(input:{labelIds:\\"1\\", ' +
- 'labelableId:\\"MDEx03\\", clientMutationId:\\"MDEx03\\"})' +
- '{clientMutationId}}"}'
- )
- .reply(200, {data: {}});
+ ],
+ },
+ });
- await removeLabels('2107280123000', '2107210123000', 'beta-percent');
- t.true(rest.isDone());
- t.true(graphql.isDone());
+ await removeLabels(
+ '2107280123000',
+ '2107210123000',
+ 'beta-percent',
+ t.context.octokitRest,
+ t.context.octokitGraphQl
+ );
+
+ t.true(
+ t.context.octokitGraphQl.calledWith({
+ query:
+ 'query {pr0: search(query:"repo:ampproject/amphtml sha:1abcdef", type:ISSUE first:100){nodes { ... on PullRequest { id title number url author { login } files(first:100) { nodes { path }} mergeCommit { commitUrl oid abbreviatedOid }}}} pr1: search(query:"repo:ampproject/amphtml sha:2abcdef", type:ISSUE first:100){nodes { ... on PullRequest { id title number url author { login } files(first:100) { nodes { path }} mergeCommit { commitUrl oid abbreviatedOid }}}} pr2: search(query:"repo:ampproject/amphtml sha:3abcdef", type:ISSUE first:100){nodes { ... on PullRequest { id title number url author { login } files(first:100) { nodes { path }} mergeCommit { commitUrl oid abbreviatedOid }}}}}',
+ })
+ );
+ t.true(
+ t.context.octokitGraphQl.calledWith({
+ query:
+ 'mutation {pr0: removeLabelsFromLabelable(input:{labelIds:"1", labelableId:"MDEx01", clientMutationId:"MDEx01"}){clientMutationId} pr1: removeLabelsFromLabelable(input:{labelIds:"1", labelableId:"MDEx02", clientMutationId:"MDEx02"}){clientMutationId} pr2: removeLabelsFromLabelable(input:{labelIds:"1", labelableId:"MDEx03", clientMutationId:"MDEx03"}){clientMutationId}}',
+ })
+ );
});
diff --git a/build-system/release-tagger/test/make-release.test.js b/build-system/release-tagger/test/make-release.test.js
index 716623a4236a..ae7e93e3eda9 100644
--- a/build-system/release-tagger/test/make-release.test.js
+++ b/build-system/release-tagger/test/make-release.test.js
@@ -1,15 +1,140 @@
-const nock = require('nock');
const test = require('ava');
-const {getExtensions} = require('../../npm-publish/utils');
+const sinon = require('sinon');
const {makeRelease} = require('../make-release');
-test.before(() => nock.disableNetConnect());
-test.after(() => {
- nock.cleanAll();
- nock.enableNetConnect();
+test.beforeEach((t) => {
+ t.context.octokitRest = {
+ rest: {
+ git: {
+ createRef: sinon.stub(),
+ createTag: sinon.stub(),
+ getRef: sinon.stub(),
+ },
+ repos: {
+ createRelease: sinon.stub(),
+ compareCommits: sinon.stub(),
+ },
+ },
+ hook: {
+ error: sinon.stub(),
+ },
+ };
+ t.context.octokitGraphQl = sinon.stub();
});
test('create', async (t) => {
+ t.context.octokitRest.rest.git.getRef
+ .onFirstCall()
+ .resolves({
+ data: {
+ id: 2,
+ object: {sha: '3abcdef'},
+ },
+ })
+ .onSecondCall()
+ .resolves({
+ data: {
+ id: 1,
+ object: {sha: '1abcdef'},
+ },
+ });
+ t.context.octokitRest.rest.repos.createRelease.resolves({data: {}});
+ t.context.octokitRest.rest.repos.compareCommits.resolves({
+ data: {
+ commits: [{sha: '1abcdef'}, {sha: '2abcdef'}, {sha: '3abcdef'}],
+ },
+ });
+
+ t.context.octokitGraphQl.resolves({
+ pr0: {
+ nodes: [
+ {
+ id: 'MDExOlB1bGxSZXF1ZXN0Mjk4OTg2MDI4',
+ title: 'Bunch of changes',
+ number: 1,
+ url: 'https://github.com/ampproject/amphtml/pull/1',
+ author: {login: 'testauthor'},
+ files: {
+ nodes: [
+ {
+ 'path': 'ads/readme.md',
+ },
+ {
+ 'path': 'extensions/amp-test1/readme.md',
+ },
+ {
+ 'path': 'src/readme.md',
+ },
+ {
+ 'path': 'third_party/tasks/e2e/readme.md',
+ },
+ {
+ 'path': 'validator/readme.md',
+ },
+ ],
+ },
+ mergeCommit: {
+ commitUrl: 'https://github.com/ampproject/amphtml/commit/1abcdef',
+ oid: '1abcdef',
+ abbreviatedOid: '1abc',
+ },
+ },
+ ],
+ },
+ pr1: {
+ nodes: [
+ {
+ id: 'MDExOlB1bGxSZXF1ZXN0MzAyMTU2MjIy',
+ title: '`README` updates',
+ number: 2,
+ url: 'https://github.com/ampproject/amphtml/pull/2',
+ author: {login: 'testauthor'},
+ files: {
+ nodes: [
+ {
+ 'path': 'build-system/tasks/e2e/readme.md',
+ },
+ {
+ 'path': 'third_party/tasks/e2e/readme.md',
+ },
+ ],
+ },
+ mergeCommit: {
+ commitUrl: 'https://github.com/ampproject/amphtml/commit/2abcdef',
+ oid: '2abcdef',
+ abbreviatedOid: '2abc',
+ },
+ },
+ ],
+ },
+ pr2: {
+ nodes: [
+ {
+ id: 'MDExOlB1bGxSZXF1ZXN0MzAyMTU4NDIw',
+ title: 'Update packages',
+ number: 3,
+ url: 'https://github.com/ampproject/amphtml/pull/3',
+ author: {login: 'renovate-bot'},
+ files: {
+ nodes: [
+ {
+ 'path': 'extensions/amp-test1/readme.md',
+ },
+ {
+ 'path': 'extensions/amp-test2/readme.md',
+ },
+ ],
+ },
+ mergeCommit: {
+ commitUrl: 'https://github.com/ampproject/amphtml/commit/3abcdef',
+ oid: '3abcdef',
+ abbreviatedOid: '3abc',
+ },
+ },
+ ],
+ },
+ });
+
const pr1 =
'' +
'1abc
- Bunch of changes';
@@ -20,28 +145,19 @@ test('create', async (t) => {
'' +
'3abc
- Update packages';
- const packages = getExtensions().map((e) => e.extension);
+ await makeRelease(
+ '2107280123000',
+ '2107210123000',
+ 'beta-percent',
+ '1abcdef',
+ t.context.octokitRest,
+ t.context.octokitGraphQl
+ );
- const rest = nock('https://api.github.com')
- // https://docs.github.com/en/rest/reference/git#get-a-reference
- .get('/repos/ampproject/amphtml/git/ref/tags%2F2107280123000')
- .reply(200, {
- id: 2,
- object: {sha: '3abcdef'},
- })
- // https://docs.github.com/en/rest/reference/git#get-a-reference
- .get('/repos/ampproject/amphtml/git/ref/tags%2F2107210123000')
- .reply(200, {
- id: 1,
- object: {sha: '1abcdef'},
- })
- // https://docs.github.com/en/rest/reference/repos#compare-two-commits
- .get('/repos/ampproject/amphtml/compare/1abcdef...3abcdef')
- .reply(200, {
- commits: [{sha: '1abcdef'}, {sha: '2abcdef'}, {sha: '3abcdef'}],
- })
- // https://docs.github.com/en/rest/reference/repos#create-a-release
- .post('/repos/ampproject/amphtml/releases', {
+ t.true(
+ t.context.octokitRest.rest.repos.createRelease.calledWith({
+ owner: 'ampproject',
+ repo: 'amphtml',
name: '2107280123000',
'tag_name': '2107280123000',
'target_commitish': '3abcdef',
@@ -51,8 +167,6 @@ test('create', async (t) => {
'\n' +
'2107210123000...2107280123000
\n \n\n\n' +
- 'npm packages @ 1.2107280123.0 \n\n\n' +
- `Packages not changed: ${packages.join(', ')} \n\n` +
'Changes by component \n' +
`ads (1) ${pr1} ` +
`amp-test1 (1) ${pr1} ` +
@@ -62,152 +176,75 @@ test('create', async (t) => {
`third_party (2) ${pr1} ${pr2} ` +
`validator (1) ${pr1} `,
})
- .reply(200, {});
+ );
+});
- const graphql = nock('https://api.github.com/graphql')
- .post(
- '',
- '{"query":"query {' +
- 'pr0: search(query:\\"repo:ampproject/amphtml sha:1abcdef\\", ' +
- 'type:ISSUE first:100){nodes { ... on PullRequest { id title number ' +
- 'url author { login } files(first:100) { nodes { path }} mergeCommit ' +
- '{ commitUrl oid abbreviatedOid }}}} ' +
- 'pr1: search(query:\\"repo:ampproject/amphtml sha:2abcdef\\", ' +
- 'type:ISSUE first:100){nodes { ... on PullRequest { id title number ' +
- 'url author { login } files(first:100) { nodes { path }} mergeCommit ' +
- '{ commitUrl oid abbreviatedOid }}}} ' +
- 'pr2: search(query:\\"repo:ampproject/amphtml sha:3abcdef\\", ' +
- 'type:ISSUE first:100){nodes { ... on PullRequest { id title number ' +
- 'url author { login } files(first:100) { nodes { path }} mergeCommit ' +
- '{ commitUrl oid abbreviatedOid }}}}}"}'
- )
- .reply(200, {
+test('cherry-pick', async (t) => {
+ t.context.octokitRest.rest.git.getRef
+ .onFirstCall()
+ .resolves({
data: {
- pr0: {
- nodes: [
- {
- id: 'MDExOlB1bGxSZXF1ZXN0Mjk4OTg2MDI4',
- title: 'Bunch of changes',
- number: 1,
- url: 'https://github.com/ampproject/amphtml/pull/1',
- author: {login: 'testauthor'},
- files: {
- nodes: [
- {
- 'path': 'ads/readme.md',
- },
- {
- 'path': 'extensions/amp-test1/readme.md',
- },
- {
- 'path': 'src/readme.md',
- },
- {
- 'path': 'third_party/tasks/e2e/readme.md',
- },
- {
- 'path': 'validator/readme.md',
- },
- ],
- },
- mergeCommit: {
- commitUrl:
- 'https://github.com/ampproject/amphtml/commit/1abcdef',
- oid: '1abcdef',
- abbreviatedOid: '1abc',
- },
- },
- ],
- },
- pr1: {
- nodes: [
- {
- id: 'MDExOlB1bGxSZXF1ZXN0MzAyMTU2MjIy',
- title: '`README` updates',
- number: 2,
- url: 'https://github.com/ampproject/amphtml/pull/2',
- author: {login: 'testauthor'},
- files: {
- nodes: [
- {
- 'path': 'build-system/tasks/e2e/readme.md',
- },
- {
- 'path': 'third_party/tasks/e2e/readme.md',
- },
- ],
- },
- mergeCommit: {
- commitUrl:
- 'https://github.com/ampproject/amphtml/commit/2abcdef',
- oid: '2abcdef',
- abbreviatedOid: '2abc',
- },
- },
- ],
- },
- pr2: {
- nodes: [
- {
- id: 'MDExOlB1bGxSZXF1ZXN0MzAyMTU4NDIw',
- title: 'Update packages',
- number: 3,
- url: 'https://github.com/ampproject/amphtml/pull/3',
- author: {login: 'renovate-bot'},
- files: {
- nodes: [
- {
- 'path': 'extensions/amp-test1/readme.md',
- },
- {
- 'path': 'extensions/amp-test2/readme.md',
- },
- ],
- },
- mergeCommit: {
- commitUrl:
- 'https://github.com/ampproject/amphtml/commit/3abcdef',
- oid: '3abcdef',
- abbreviatedOid: '3abc',
- },
- },
- ],
- },
+ id: 2,
+ object: {sha: '2abcdef'},
+ },
+ })
+ .onSecondCall()
+ .resolves({
+ data: {
+ id: 1,
+ object: {sha: '1abcdef'},
},
});
+ t.context.octokitRest.rest.repos.createRelease.resolves({data: {}});
+ t.context.octokitRest.rest.repos.compareCommits.resolves({
+ data: {
+ commits: [{sha: '2abcdef'}],
+ },
+ });
- await makeRelease('2107280123000', '2107210123000', 'beta-percent');
- t.true(rest.isDone());
- t.true(graphql.isDone());
-});
+ t.context.octokitGraphQl.resolves({
+ pr0: {
+ nodes: [
+ {
+ id: 'MDExOlB1bGxSZXF1ZXN0Mjk4OTg2MDI4',
+ title: 'Cherry pick fix',
+ number: 2,
+ url: 'https://github.com/ampproject/amphtml/pull/2',
+ author: {login: 'testauthor'},
+ files: {
+ nodes: [
+ {
+ 'path': 'src/readme.md',
+ },
+ ],
+ },
+ mergeCommit: {
+ commitUrl: 'https://github.com/ampproject/amphtml/commit/2abcdef',
+ oid: '2abcdef',
+ abbreviatedOid: '2abc',
+ },
+ },
+ ],
+ },
+ });
-test('cherry-pick', async (t) => {
const pr1 =
'' +
'2abc
- Cherry pick fix';
- const packages = getExtensions().map((e) => e.extension);
+ await makeRelease(
+ '2107280123001',
+ '2107210123000',
+ 'stable',
+ '',
+ t.context.octokitRest,
+ t.context.octokitGraphQl
+ );
- const rest = nock('https://api.github.com')
- // https://docs.github.com/en/rest/reference/git#get-a-reference
- .get('/repos/ampproject/amphtml/git/ref/tags%2F2107280123001')
- .reply(200, {
- id: 2,
- object: {sha: '2abcdef'},
- })
- // https://docs.github.com/en/rest/reference/git#get-a-reference
- .get('/repos/ampproject/amphtml/git/ref/tags%2F2107210123000')
- .reply(200, {
- id: 1,
- object: {sha: '1abcdef'},
- })
- // https://docs.github.com/en/rest/reference/repos#compare-two-commits
- .get('/repos/ampproject/amphtml/compare/1abcdef...2abcdef')
- .reply(200, {
- commits: [{sha: '2abcdef'}],
- })
- // https://docs.github.com/en/rest/reference/repos#create-a-release
- .post('/repos/ampproject/amphtml/releases', {
+ t.true(
+ t.context.octokitRest.rest.repos.createRelease.calledWith({
+ owner: 'ampproject',
+ repo: 'amphtml',
name: '2107280123001',
'tag_name': '2107280123001',
'target_commitish': '2abcdef',
@@ -222,8 +259,6 @@ test('cherry-pick', async (t) => {
'\n' +
'2107210123000...2107280123001
\n \n\n\n' +
- 'npm packages @ 1.2107280123.1 \n\n\n' +
- `Packages not changed: ${packages.join(', ')} \n\n` +
'Changes by component \n' +
'ads (0) ' +
'build-system (0) ' +
@@ -232,47 +267,5 @@ test('cherry-pick', async (t) => {
'third_party (0) ' +
'validator (0) ',
})
- .reply(200, {});
-
- const graphql = nock('https://api.github.com/graphql')
- .post(
- '',
- '{"query":"query {' +
- 'pr0: search(query:\\"repo:ampproject/amphtml sha:2abcdef\\", ' +
- 'type:ISSUE first:100){nodes { ... on PullRequest { id title number ' +
- 'url author { login } files(first:100) { nodes { path }} mergeCommit ' +
- '{ commitUrl oid abbreviatedOid }}}}}"}'
- )
- .reply(200, {
- data: {
- pr0: {
- nodes: [
- {
- id: 'MDExOlB1bGxSZXF1ZXN0Mjk4OTg2MDI4',
- title: 'Cherry pick fix',
- number: 2,
- url: 'https://github.com/ampproject/amphtml/pull/2',
- author: {login: 'testauthor'},
- files: {
- nodes: [
- {
- 'path': 'src/readme.md',
- },
- ],
- },
- mergeCommit: {
- commitUrl:
- 'https://github.com/ampproject/amphtml/commit/2abcdef',
- oid: '2abcdef',
- abbreviatedOid: '2abc',
- },
- },
- ],
- },
- },
- });
-
- await makeRelease('2107280123001', '2107210123000', 'stable');
- t.true(rest.isDone());
- t.true(graphql.isDone());
+ );
});
diff --git a/build-system/release-tagger/test/update-issue-tracker.test.js b/build-system/release-tagger/test/update-issue-tracker.test.js
deleted file mode 100644
index b433e217b773..000000000000
--- a/build-system/release-tagger/test/update-issue-tracker.test.js
+++ /dev/null
@@ -1,229 +0,0 @@
-const nock = require('nock');
-const test = require('ava');
-const {createOrUpdateTracker} = require('../update-issue-tracker');
-
-test.before(() => nock.disableNetConnect());
-test.after(() => {
- nock.cleanAll();
- nock.enableNetConnect();
-});
-
-test('create', async (t) => {
- const graphql = nock('https://api.github.com/graphql')
- .post(
- '',
- '{"query":"query {' +
- 'search(query:\\"repo:ampproject/amphtml ' +
- 'in:title Release 2109080123000\\", type: ISSUE, first: 1) ' +
- '{ nodes { ... on Issue { number title body url }}}}"}'
- )
- .reply(200, {data: {search: {}}});
-
- const rest = nock('https://api.github.com')
- // https://docs.github.com/en/rest/reference/issues#create-an-issue
- .post('/repos/ampproject/amphtml/issues', {
- title: '🚄 Release 2109080123000',
- labels: ['Type: Release'],
- body:
- '### AMP Version\n\n[2109080123000]' +
- '(https://github.com/ampproject/amphtml/releases/tag/2109080123000)\n\n' +
- '### Promotions\n\n' +
- '- [x] ' +
- '2109080123000 promoted to Experimental and Beta (opt-in) channels (9/15/2021, 12:34:56 AM PT)\n' +
- '- [ ] ' +
- '2109080123000 promoted to Experimental and Beta (1% traffic) channels \n' +
- '- [ ] ' +
- '2109080123000 promoted to Stable channel \n' +
- '- [ ] ' +
- '2109080123000 promoted to LTS channel \n\n' +
- '/cc @ampproject/release-on-duty',
- })
- .reply(201);
-
- await createOrUpdateTracker(
- '2109080123000',
- '2109010123000',
- 'beta-opt-in',
- '9/15/2021, 12:34:56 AM PT'
- );
- t.true(graphql.isDone());
- t.true(rest.isDone());
-});
-
-test('mark task complete', async (t) => {
- const graphql = nock('https://api.github.com/graphql')
- .post(
- '',
- '{"query":"query {' +
- 'search(query:\\"repo:ampproject/amphtml ' +
- 'in:title Release 2109080123000\\", type: ISSUE, first: 1) ' +
- '{ nodes { ... on Issue { number title body url }}}}"}'
- )
- .reply(200, {
- data: {
- search: {
- nodes: [
- {
- number: 1,
- title: '🚄 Release 2109080123000',
- body:
- '### AMP Version\n\n[2109080123000]' +
- '(https://github.com/ampproject/amphtml/releases/tag/2109080123000)\n\n' +
- '### Promotions\n\n' +
- '- [x] ' +
- '2109080123000 promoted to Experimental and Beta (opt-in) channels (optintime)\n' +
- '- [x] ' +
- '2109080123000 promoted to Experimental and Beta (1% traffic) channels (percenttime)\n' +
- '- [ ] ' +
- '2109080123000 promoted to Stable channel \n' +
- '- [ ] ' +
- '2109080123000 promoted to LTS channel \n\n' +
- '/cc @ampproject/release-on-duty',
- },
- ],
- },
- },
- })
- .post(
- '',
- '{"query":"query {' +
- 'search(query:\\"repo:ampproject/amphtml ' +
- 'in:title Release 2109010123000\\", type: ISSUE, first: 1) ' +
- '{ nodes { ... on Issue { number title body url }}}}"}'
- )
- .reply(200, {
- data: {
- search: {
- nodes: [
- {
- number: 2,
- title: '🚄 Release 2109010123000',
- body: 'base body',
- },
- ],
- },
- },
- });
-
- const rest = nock('https://api.github.com')
- // https://docs.github.com/en/rest/reference/issues#update-an-issue
- .patch('/repos/ampproject/amphtml/issues/1', {
- title: '🚄 Release 2109080123000',
- body:
- '### AMP Version\n\n[2109080123000]' +
- '(https://github.com/ampproject/amphtml/releases/tag/2109080123000)\n\n' +
- '### Promotions\n\n' +
- '- [x] ' +
- '2109080123000 promoted to Experimental and Beta (opt-in) channels (optintime)\n' +
- '- [x] ' +
- '2109080123000 promoted to Experimental and Beta (1% traffic) channels (percenttime)\n' +
- '- [x] ' +
- '2109080123000 promoted to Stable channel (9/15/2021, 12:34:56 AM PT)\n' +
- '- [ ] ' +
- '2109080123000 promoted to LTS channel \n\n' +
- '/cc @ampproject/release-on-duty',
- state: 'open',
- })
- .reply(200)
- // https://docs.github.com/en/rest/reference/issues#update-an-issue
- .patch('/repos/ampproject/amphtml/issues/2', {
- title: '🚄 Release 2109010123000',
- body: 'base body',
- state: 'closed',
- })
- .reply(200);
-
- await createOrUpdateTracker(
- '2109080123000',
- '2109010123000',
- 'stable',
- '9/15/2021, 12:34:56 AM PT'
- );
- t.true(graphql.isDone());
- t.true(rest.isDone());
-});
-
-test('add cherrypick tasks', async (t) => {
- const graphql = nock('https://api.github.com/graphql')
- .post(
- '',
- '{"query":"query {' +
- 'search(query:\\"repo:ampproject/amphtml ' +
- 'in:title Release 2109080123002\\", type: ISSUE, first: 1) ' +
- '{ nodes { ... on Issue { number title body url }}}}"}'
- )
- .reply(200, {data: {search: {}}})
- .post(
- '',
- '{"query":"query {' +
- 'search(query:\\"repo:ampproject/amphtml ' +
- 'in:title Release 2109080123001\\", type: ISSUE, first: 1) ' +
- '{ nodes { ... on Issue { number title body url }}}}"}'
- )
- .reply(200, {data: {search: {}}})
- .post(
- '',
- '{"query":"query {' +
- 'search(query:\\"repo:ampproject/amphtml ' +
- 'in:title Release 2109080123000\\", type: ISSUE, first: 1) ' +
- '{ nodes { ... on Issue { number title body url }}}}"}'
- )
- .reply(200, {
- data: {
- search: {
- nodes: [
- {
- number: 1,
- title: '🚄 Release 2109080123000',
- body:
- '### AMP Version\n\n[2109080123000]' +
- '(https://github.com/ampproject/amphtml/releases/tag/2109080123000)\n\n' +
- '### Promotions\n\n' +
- '- [x] ' +
- '2109080123000 promoted to Experimental and Beta (opt-in) channels (optintime)\n' +
- '- [x] ' +
- '2109080123000 promoted to Experimental and Beta (1% traffic) channels (percenttime)\n' +
- '- [x] ' +
- '2109080123000 promoted to Stable channel (stabletime)\n' +
- '- [ ] ' +
- '2109080123000 promoted to LTS channel \n\n' +
- '/cc @ampproject/release-on-duty',
- },
- ],
- },
- },
- });
-
- const rest = nock('https://api.github.com')
- // https://docs.github.com/en/rest/reference/issues#update-an-issue
- .patch('/repos/ampproject/amphtml/issues/1', {
- title: '🚄 Release 2109080123002',
- body:
- '### AMP Version\n\n[2109080123002]' +
- '(https://github.com/ampproject/amphtml/releases/tag/2109080123002)\n\n' +
- '### Promotions\n\n' +
- '- [x] ' +
- '2109080123000 promoted to Experimental and Beta (opt-in) channels (optintime)\n' +
- '- [x] ' +
- '2109080123000 promoted to Experimental and Beta (1% traffic) channels (percenttime)\n' +
- '- [x] ' +
- '2109080123000 promoted to Stable channel (stabletime)\n' +
- '🌸 2109080123000 was cherry-picked to create 2109080123002\n' +
- '- [x] ' +
- '2109080123002 promoted to Stable channel (9/15/2021, 12:34:56 AM PT)\n' +
- '- [ ] ' +
- '2109080123002 promoted to LTS channel \n\n' +
- '/cc @ampproject/release-on-duty',
- state: 'open',
- })
- .reply(200);
-
- await createOrUpdateTracker(
- '2109080123002',
- '2109080123000',
- 'stable',
- '9/15/2021, 12:34:56 AM PT'
- );
- t.true(graphql.isDone());
- t.true(rest.isDone());
-});
diff --git a/build-system/release-tagger/test/update-release.test.js b/build-system/release-tagger/test/update-release.test.js
index 78a1bdc0e1c7..e9f7cad2ffb0 100644
--- a/build-system/release-tagger/test/update-release.test.js
+++ b/build-system/release-tagger/test/update-release.test.js
@@ -1,43 +1,65 @@
-const nock = require('nock');
const test = require('ava');
+const sinon = require('sinon');
const {publishRelease, rollbackRelease} = require('../update-release');
-test.before(() => nock.disableNetConnect());
-test.after(() => {
- nock.cleanAll();
- nock.enableNetConnect();
+test.beforeEach((t) => {
+ t.context.octokitRest = {
+ rest: {
+ repos: {
+ getReleaseByTag: sinon.stub(),
+ updateRelease: sinon.stub(),
+ },
+ },
+ hook: {
+ error: sinon.stub(),
+ },
+ };
+
+ t.context.octokitGraphQl = sinon.stub();
});
test('publish', async (t) => {
- const scope = nock('https://api.github.com')
- // https://docs.github.com/en/rest/reference/repos#get-a-release-by-tag-name
- .get('/repos/ampproject/amphtml/releases/tags/2107210123000')
- .reply(200, {id: 1})
-
- // https://docs.github.com/en/rest/reference/repos#update-a-release
- .patch('/repos/ampproject/amphtml/releases/1', {prerelease: false})
- .reply(200, {id: 1});
+ t.context.octokitRest.rest.repos.getReleaseByTag.resolves({data: {id: 1}});
+ t.context.octokitRest.rest.repos.updateRelease.resolves({data: {id: 1}});
- await publishRelease('2107210123000');
- t.true(scope.isDone());
+ await publishRelease(
+ '2107210123000',
+ true,
+ t.context.octokitRest,
+ t.context.octokitGraphQl
+ );
+ t.true(
+ t.context.octokitRest.rest.repos.updateRelease.calledWith({
+ owner: 'ampproject',
+ repo: 'amphtml',
+ 'release_id': 1,
+ prerelease: false,
+ 'make_latest': true,
+ })
+ );
});
test('rollback', async (t) => {
- const scope = nock('https://api.github.com')
- // https://docs.github.com/en/rest/reference/repos#get-a-release-by-tag-name
- .get('/repos/ampproject/amphtml/releases/tags/2107210123000')
- .reply(200, {
+ t.context.octokitRest.rest.repos.getReleaseByTag.resolves({
+ data: {
id: 1,
body: 'This is a test release body',
- })
+ },
+ });
+ t.context.octokitRest.rest.repos.updateRelease.resolves({data: {id: 1}});
- // https://docs.github.com/en/rest/reference/repos#update-a-release
- .patch('/repos/ampproject/amphtml/releases/1', {
+ await rollbackRelease(
+ '2107210123000',
+ t.context.octokitRest,
+ t.context.octokitGraphQl
+ );
+ t.true(
+ t.context.octokitRest.rest.repos.updateRelease.calledOnceWith({
+ owner: 'ampproject',
+ repo: 'amphtml',
+ 'release_id': 1,
prerelease: true,
body: '#### :back: This release was rolled back.\nThis is a test release body',
})
- .reply(200, {id: 1});
-
- await rollbackRelease('2107210123000');
- t.true(scope.isDone());
+ );
});
diff --git a/build-system/release-tagger/update-issue-tracker.js b/build-system/release-tagger/update-issue-tracker.js
deleted file mode 100644
index ade0fbf5e635..000000000000
--- a/build-system/release-tagger/update-issue-tracker.js
+++ /dev/null
@@ -1,168 +0,0 @@
-/**
- * @fileoverview
- * Create or update release issue tracker
- */
-
-const dedent = require('dedent');
-const {createIssue, getIssue, updateIssue} = require('./utils');
-const {cyan, magenta} = require('kleur/colors');
-const {log} = require('../common/logging');
-
-const CHANNEL_NAMES = {
- 'beta-opt-in': 'Experimental and Beta (opt-in) channels',
- 'beta-percent': 'Experimental and Beta (1% traffic) channels',
- 'stable': 'Stable channel',
- 'lts': 'LTS channel',
-};
-
-class IssueTracker {
- footer = '/cc @ampproject/release-on-duty';
- label = 'Type: Release';
- /**
- * @param {string} head
- * @param {string} base
- * @param {string?} body
- * @param {string?} number
- */
- constructor(head, base, body = '', number = '') {
- this.head = head;
- this.base = base;
- this.number = number ? Number(number) : -1;
- this.title = `🚄 Release ${this.head}`;
- this.header = `### AMP Version\n\n\[${this.head}](https://github.com/ampproject/amphtml/releases/tag/${this.head})`;
- if (!body) {
- // create task list
- this.main = dedent`### Promotions\n\n\
- ${Object.keys(CHANNEL_NAMES)
- .map((channel) => this._createTask(channel, this.head))
- .join('\n')}`;
- } else {
- // get existing task list
- this.main = body.substring(
- body.indexOf('### Promotions'),
- body.indexOf('\n\n/cc')
- );
- }
- }
-
- /**
- * @param {string} channel
- * @param {string} tag
- * @return {string}
- */
- _createTask(channel, tag) {
- return `- [ ] ${tag} promoted to ${CHANNEL_NAMES[channel]} `;
- }
-
- /** @param {string} channel */
- addCherrypickTasks(channel) {
- // keep completed tasks
- const lines = this.main.split(/Promotions/)[1].split('\n');
- const keep = [];
- for (const line of lines) {
- if (line.startsWith('- [x]') || line.startsWith('🌸')) {
- keep.push(line);
- }
- }
-
- // add tasks for new release starting with given channel
- const keys = Object.keys(CHANNEL_NAMES);
- const add = [];
- let index = keys.indexOf(channel);
- while (index < keys.length) {
- add.push(this._createTask(keys[index], this.head));
- index++;
- }
-
- // regenerate main section
- this.main = dedent`### Promotions\n\n\
- ${keep.join('\n')}
- 🌸 ${this.base} was cherry-picked to create ${this.head}
- ${add.join('\n')}`;
- }
-
- /**
- * @param {string} channel
- * @param {string} time
- */
- checkTask(channel, time) {
- const task = this._createTask(channel, this.head);
- const [before, after] = this.main.split(task);
- const checked = task
- .replace('[ ]', '[x]')
- .replace('', `(${time})`);
- this.main = `${before}${checked}${after}`;
- }
-}
-
-/**
- * Get issue if it exists and whether it's a cherrypick
- * @param {string} head
- * @return {!Promise}
- */
-async function setup(head) {
- let issue = await getIssue(`Release ${head}`);
- if (issue || head.endsWith('000')) {
- return {isCherrypick: false, issue};
- }
-
- // is cherrypick, so find base issue tracker
- let version = Number(head);
- while (version % 1000 !== 0) {
- version--;
- issue = await getIssue(`Release ${version}`);
- if (issue) {
- break;
- }
- }
- return {isCherrypick: true, issue};
-}
-
-/**
- * Create or update issue tracker
- * @param {string} head
- * @param {string} base
- * @param {string} channel
- * @param {string} time
- * @return {Promise}
- */
-async function createOrUpdateTracker(head, base, channel, time) {
- const {isCherrypick, issue} = await setup(head);
-
- // create new tracker
- if (!issue) {
- const tracker = new IssueTracker(head, base);
- tracker.checkTask(channel, time);
- const {footer, header, label, main, title} = tracker;
- const body = `${header}\n\n${main}\n\n${footer}`;
- const newIssue = await createIssue(body, label, title);
- log(
- 'Created issue tracker',
- magenta(newIssue.title),
- 'at',
- cyan(newIssue['html_url'])
- );
- return;
- }
-
- // check task
- log('Found issue tracker', magenta(issue.title), 'at', cyan(issue.url));
- const tracker = new IssueTracker(head, base, issue.body, issue.number);
- if (isCherrypick) {
- tracker.addCherrypickTasks(channel);
- }
- tracker.checkTask(channel, time);
- const {footer, header, main, number, title} = tracker;
- const body = `${header}\n\n${main}\n\n${footer}`;
- await updateIssue(body, number, title);
-
- // if stable, close last stable's tracker
- if (channel == 'stable' && !isCherrypick) {
- const old = await getIssue(`Release ${base}`);
- if (old) {
- await updateIssue(old.body, old.number, old.title, 'closed');
- }
- }
-}
-
-module.exports = {createOrUpdateTracker};
diff --git a/build-system/release-tagger/update-release.js b/build-system/release-tagger/update-release.js
index 51e3f678876a..32920e228c5c 100644
--- a/build-system/release-tagger/update-release.js
+++ b/build-system/release-tagger/update-release.js
@@ -3,29 +3,45 @@
* Update release for the release tagger.
*/
-const {getRelease, updateRelease} = require('./utils');
+const {GitHubApi} = require('./utils');
/**
* Publish a GitHub release
* @param {string} tag
+ * @param {boolean} latest
+ * @param {Object|undefined} octokitRest
+ * @param {Object|undefined} octokitGraphQl
* @return {Promise}
*/
-async function publishRelease(tag) {
- const release = await getRelease(tag);
- const changes = {prerelease: false};
- return await updateRelease(release.id, changes);
+async function publishRelease(
+ tag,
+ latest,
+ octokitRest = undefined,
+ octokitGraphQl = undefined
+) {
+ const api = new GitHubApi(octokitRest, octokitGraphQl);
+ const release = await api.getRelease(tag);
+ const changes = {prerelease: false, 'make_latest': latest};
+ return await api.updateRelease(release.id, changes);
}
/**
* Roll back a GitHub release
* @param {string} tag
+ * @param {Object|undefined} octokitRest
+ * @param {Object|undefined} octokitGraphQl
* @return {Promise}
*/
-async function rollbackRelease(tag) {
- const release = await getRelease(tag);
+async function rollbackRelease(
+ tag,
+ octokitRest = undefined,
+ octokitGraphQl = undefined
+) {
+ const api = new GitHubApi(octokitRest, octokitGraphQl);
+ const release = await api.getRelease(tag);
const body = '#### :back: This release was rolled back.\n' + release.body;
const changes = {prerelease: true, body};
- return await updateRelease(release.id, changes);
+ return await api.updateRelease(release.id, changes);
}
module.exports = {publishRelease, rollbackRelease};
diff --git a/build-system/release-tagger/utils.js b/build-system/release-tagger/utils.js
index 681e0d3f18c0..c5c86c94bcd9 100644
--- a/build-system/release-tagger/utils.js
+++ b/build-system/release-tagger/utils.js
@@ -3,316 +3,317 @@
* GitHub API util functions.
*/
-const dedent = require('dedent');
-const {GraphQlQueryResponseData, graphql} = require('@octokit/graphql'); //eslint-disable-line no-unused-vars
+const {default: dedent} = require('dedent');
+const {graphql} = require('@octokit/graphql');
const {Octokit} = require('@octokit/rest');
-// setup
-const octokit = new Octokit({
- auth: process.env.GITHUB_TOKEN,
- userAgent: 'amp release tagger',
- timeZone: 'America/Los_Angeles',
-});
-octokit.hook.error('request', (error) => {
- // don't throw an error if resource is not found
- if (error.status === 404) {
- return;
- }
-});
-
-const graphqlWithAuth = graphql.defaults({
- headers: {
- authorization: `token ${process.env.GITHUB_TOKEN}`,
- },
-});
-const owner = 'ampproject';
-const repo = 'amphtml';
-
-const config = {
- singleNodeQueryLimit: 100,
- totalNodeQueryLimit: 500000,
- batchSize: 20,
-};
+/** @typedef {import('@octokit/graphql').GraphQlQueryResponseData} GraphQlQueryResponseData */
/**
- * Queries the GitHub GraphQL API in batches.
- * @param {string} queryType
- * @param {Array} queries
- * @return {Promise>}
+ * GitHub API util functions
*/
-async function _runQueryInBatches(queryType, queries) {
- const responses = [];
- for (let i = 0; i < queries.length; i += config.batchSize) {
- const join = queries
- .slice(i, i + Math.min(queries.length, config.batchSize))
- .join(' ');
- const query = `${queryType} {${join}}`;
- const data = await graphqlWithAuth({query});
- responses.push(...Object.values(data));
+class GitHubApi {
+ /**
+ * @param {object} octokitRest
+ * @param {object} octokitGraphQl
+ */
+ constructor(octokitRest, octokitGraphQl) {
+ this.octokit = octokitRest
+ ? octokitRest
+ : new Octokit({
+ auth: process.env.GITHUB_TOKEN,
+ userAgent: 'amp release tagger',
+ timeZone: 'America/Los_Angeles',
+ });
+ this.octokit.hook.error('request', (error) => {
+ // don't throw an error if resource is not found
+ if (error.status === 404) {
+ return;
+ }
+ });
+
+ this.graphqlWithAuth = octokitGraphQl
+ ? octokitGraphQl
+ : graphql.defaults({
+ headers: {
+ authorization: `token ${process.env.GITHUB_TOKEN}`,
+ },
+ });
+
+ this.info = {owner: 'ampproject', repo: 'amphtml'};
+ this.config = {
+ singleNodeQueryLimit: 100,
+ totalNodeQueryLimit: 500000,
+ batchSize: 5,
+ };
}
- return responses;
-}
-/**
- * Create a GitHub issue
- * @param {string} body
- * @param {string} label
- * @param {string} title
- * @return {Promise}
- */
-async function createIssue(body, label, title) {
- const {data} = await octokit.rest.issues.create({
- owner,
- repo,
- title,
- body,
- labels: [label],
- });
- return data;
-}
+ /**
+ * Queries the GitHub GraphQL API in batches.
+ * @param {string} queryType
+ * @param {Array} queries
+ * @return {Promise>}
+ */
+ async runQueryInBatches(queryType, queries) {
+ const responses = [];
+ for (let i = 0; i < queries.length; i += this.config.batchSize) {
+ const join = queries
+ .slice(i, i + Math.min(queries.length, this.config.batchSize))
+ .join(' ');
+ const query = `${queryType} {${join}}`;
+ const data = await this.graphqlWithAuth({query});
+ responses.push(...Object.values(data));
+ }
+ return responses;
+ }
-/**
- * Create a GitHub release
- * @param {string} tag
- * @param {string} commit
- * @param {string} body
- * @param {boolean} prerelease
- * @return {Promise}
- */
-async function createRelease(tag, commit, body, prerelease) {
- const {data} = await octokit.rest.repos.createRelease({
- owner,
- repo,
- name: tag,
- 'tag_name': tag,
- 'target_commitish': commit,
- body,
- prerelease,
- });
- return data;
-}
+ /**
+ * Create a GitHub issue
+ * @param {string} body
+ * @param {string} label
+ * @param {string} title
+ * @return {Promise}
+ */
+ async createIssue(body, label, title) {
+ const {data} = await this.octokit.rest.issues.create({
+ ...this.info,
+ title,
+ body,
+ labels: [label],
+ });
+ return data;
+ }
-/**
- * Get a GitHub issue by title
- * @param {string} title
- * @return {Promise}
- */
-async function getIssue(title) {
- const search = dedent`\
- search(query:"repo:${owner}/${repo} in:title ${title}", \
- type: ISSUE, first: 1) { nodes { ... on Issue \
- { number title body url }}}`;
- const query = `query {${search}}`;
- const response = await graphqlWithAuth({query});
- if (response.search?.nodes) {
- return response.search.nodes[0];
+ /**
+ * Create a GitHub release
+ * @param {string} tag
+ * @param {string} commit
+ * @param {string} body
+ * @param {boolean} prerelease
+ * @return {Promise}
+ */
+ async createRelease(tag, commit, body, prerelease) {
+ const {data} = await this.octokit.rest.repos.createRelease({
+ ...this.info,
+ name: tag,
+ 'tag_name': tag,
+ 'target_commitish': commit,
+ body,
+ prerelease,
+ });
+ return data;
}
-}
-/**
- * Get a GitHub release by tag name
- * @param {string} tag
- * @return {Promise}
- */
-async function getRelease(tag) {
- const response = await octokit.rest.repos.getReleaseByTag({owner, repo, tag});
- return response?.data;
-}
+ /**
+ * Get a GitHub issue by title
+ * @param {string} title
+ * @return {Promise}
+ */
+ async getIssue(title) {
+ const search = dedent`\
+ search(query:"repo:${this.info.owner}/${this.info.repo} in:title ${title}", \
+ type: ISSUE, first: 1) { nodes { ... on Issue \
+ { number title body url }}}`;
+ const query = `query {${search}}`;
+ const response = await this.graphqlWithAuth({query});
+ if (response.search?.nodes) {
+ return response.search.nodes[0];
+ }
+ }
-/**
- * Update a GitHub issue
- * @param {string} body
- * @param {number} number
- * @param {string} title
- * @param {'open' | 'closed'} state
- * @return {Promise}
- */
-async function updateIssue(body, number, title, state = 'open') {
- const {data} = await octokit.rest.issues.update({
- owner,
- repo,
- 'issue_number': number,
- title,
- body,
- state,
- });
- return data;
-}
+ /**
+ * Get a GitHub release by tag name
+ * @param {string} tag
+ * @return {Promise}
+ */
+ async getRelease(tag) {
+ const response = await this.octokit.rest.repos.getReleaseByTag({
+ ...this.info,
+ tag,
+ });
+ return response?.data;
+ }
-/**
- * Update a GitHub release
- * @param {string} id
- * @param {Object} changes
- * @return {Promise}
- */
-async function updateRelease(id, changes) {
- const {data} = await octokit.rest.repos.updateRelease({
- owner,
- repo,
- 'release_id': id,
- ...changes,
- });
- return data;
-}
+ /**
+ * Update a GitHub issue
+ * @param {string} body
+ * @param {number} number
+ * @param {string} title
+ * @param {'open' | 'closed'} state
+ * @return {Promise}
+ */
+ async updateIssue(body, number, title, state = 'open') {
+ const {data} = await this.octokit.rest.issues.update({
+ ...this.info,
+ 'issue_number': number,
+ title,
+ body,
+ state,
+ });
+ return data;
+ }
-/**
- * Get a list of commits between two commits
- * @param {string} head
- * @param {string} base
- * @return {Promise}
- */
-async function compareCommits(head, base) {
- const response = await octokit.rest.repos.compareCommits({
- owner,
- repo,
- base,
- head,
- });
- return response?.data;
-}
+ /**
+ * Update a GitHub release
+ * @param {string} id
+ * @param {object} changes
+ * @return {Promise}
+ */
+ async updateRelease(id, changes) {
+ const {data} = await this.octokit.rest.repos.updateRelease({
+ ...this.info,
+ 'release_id': id,
+ ...changes,
+ });
+ return data;
+ }
-/**
- * Get pull requests associated with a list of commits
- * @param {Array} shas
- * @return {Promise>}
- */
-async function getPullRequests(shas) {
- const queries = [];
- for (const [i, sha] of shas.entries()) {
- queries.push(
- dedent`\
- pr${i}: search(query:"repo:${owner}/${repo} sha:${sha}", type:ISSUE \
- first:${config.singleNodeQueryLimit}){\
- nodes { ... on PullRequest { id title number url author { login } \
- files(first:${config.singleNodeQueryLimit}) { nodes { path }} \
- mergeCommit { commitUrl oid abbreviatedOid }}}}`
- );
+ /**
+ * Get a list of commits between two commits
+ * @param {string} head
+ * @param {string} base
+ * @return {Promise}
+ */
+ async compareCommits(head, base) {
+ const {data} = await this.octokit.rest.repos.compareCommits({
+ ...this.info,
+ base,
+ head,
+ });
+ return data;
}
- const nodesLists = await _runQueryInBatches('query', queries);
- // Only return pull requests with the merge commit shas
- const prs = [];
- for (const nodesList of nodesLists) {
- for (const node of nodesList.nodes) {
- if (node.mergeCommit && shas.includes(node.mergeCommit.oid)) {
- prs.push(node);
+ /**
+ * Get pull requests associated with a list of commits
+ * @param {Array} shas
+ * @return {Promise>}
+ */
+ async getPullRequests(shas) {
+ const queries = [];
+ for (const [i, sha] of shas.entries()) {
+ queries.push(
+ dedent`\
+ pr${i}: search(query:"repo:${this.info.owner}/${this.info.repo} sha:${sha}", type:ISSUE \
+ first:${this.config.singleNodeQueryLimit}){\
+ nodes { ... on PullRequest { id title number url author { login } \
+ files(first:${this.config.singleNodeQueryLimit}) { nodes { path }} \
+ mergeCommit { commitUrl oid abbreviatedOid }}}}`
+ );
+ }
+ const nodesLists = await this.runQueryInBatches('query', queries);
+
+ // Only return pull requests with the merge commit shas
+ const prs = [];
+ for (const nodesList of nodesLists) {
+ for (const node of nodesList.nodes) {
+ if (node.mergeCommit && shas.includes(node.mergeCommit.oid)) {
+ prs.push(node);
+ }
}
}
+ return prs;
}
- return prs;
-}
-/**
- * Get pull requests between two commits
- * @param {string} head
- * @param {string} base
- * @return {Promise>}
- */
-async function getPullRequestsBetweenCommits(head, base) {
- const {commits} = await compareCommits(head, base);
- const shas = commits.map((commit) => commit.sha);
- return await getPullRequests(shas);
-}
+ /**
+ * Get pull requests between two commits
+ * @param {string} head
+ * @param {string} base
+ * @return {Promise>}
+ */
+ async getPullRequestsBetweenCommits(head, base) {
+ const {commits} = await this.compareCommits(head, base);
+ const shas = commits.map((commit) => commit.sha);
+ return this.getPullRequests(shas);
+ }
-/**
- * Get label
- * @param {string} name
- * @return {Promise}
- */
-async function getLabel(name) {
- const response = await octokit.rest.issues.getLabel({owner, repo, name});
- return response?.data;
-}
+ /**
+ * Get label
+ * @param {string} name
+ * @return {Promise}
+ */
+ async getLabel(name) {
+ const response = await this.octokit.rest.issues.getLabel({
+ ...this.info,
+ name,
+ });
+ return response?.data;
+ }
-/**
- * Label pull requests
- * @param {Array} prs
- * @param {string} labelId
- * @return {Promise>}
- */
-async function labelPullRequests(prs, labelId) {
- const mutations = [];
- for (const [i, pr] of prs.entries()) {
- mutations.push(
- dedent`\
- pr${i}: addLabelsToLabelable(input:{labelIds:"${labelId}", \
- labelableId:"${pr.id}", clientMutationId:"${pr.id}"})\
- {clientMutationId}`
- );
+ /**
+ * Label pull requests
+ * @param {Array} prs
+ * @param {string} labelId
+ * @return {Promise>}
+ */
+ async labelPullRequests(prs, labelId) {
+ const mutations = [];
+ for (const [i, pr] of prs.entries()) {
+ mutations.push(
+ dedent`\
+ pr${i}: addLabelsToLabelable(input:{labelIds:"${labelId}", \
+ labelableId:"${pr.id}", clientMutationId:"${pr.id}"})\
+ {clientMutationId}`
+ );
+ }
+ return await this.runQueryInBatches('mutation', mutations);
}
- return await _runQueryInBatches('mutation', mutations);
-}
-/**
- * Unlabel pull requests
- * @param {Array} prs
- * @param {string} labelId
- * @return {Promise>}
- */
-async function unlabelPullRequests(prs, labelId) {
- const mutations = [];
- for (const [i, pr] of prs.entries()) {
- mutations.push(
- dedent`\
- pr${i}: removeLabelsFromLabelable(input:{labelIds:"${labelId}", \
- labelableId:"${pr.id}", clientMutationId:"${pr.id}"})\
- {clientMutationId}`
- );
+ /**
+ * Unlabel pull requests
+ * @param {Array} prs
+ * @param {string} labelId
+ * @return {Promise>}
+ */
+ async unlabelPullRequests(prs, labelId) {
+ const mutations = [];
+ for (const [i, pr] of prs.entries()) {
+ mutations.push(
+ dedent`\
+ pr${i}: removeLabelsFromLabelable(input:{labelIds:"${labelId}", \
+ labelableId:"${pr.id}", clientMutationId:"${pr.id}"})\
+ {clientMutationId}`
+ );
+ }
+ return await this.runQueryInBatches('mutation', mutations);
}
- return await _runQueryInBatches('mutation', mutations);
-}
-/**
- * Get a git ref
- * @param {string} tag
- * @return {Promise}
- */
-async function getRef(tag) {
- const response = await octokit.rest.git.getRef({
- owner,
- repo,
- ref: `tags/${tag}`,
- });
- return response?.data;
-}
+ /**
+ * Get a git ref
+ * @param {string} tag
+ * @return {Promise}
+ */
+ async getRef(tag) {
+ const response = await this.octokit.rest.git.getRef({
+ ...this.info,
+ ref: `tags/${tag}`,
+ });
-/**
- * Create git tag and ref
- * @param {string} tag
- * @param {string} sha
- * @return {Promise}
- */
-async function createTag(tag, sha) {
- await octokit.rest.git.createTag({
- owner,
- repo,
- tag,
- message: tag,
- object: sha,
- type: 'commit',
- });
+ return response?.data;
+ }
- // once a tag object is created, create a reference
- const response = await octokit.rest.git.createRef({
- owner,
- repo,
- ref: `refs/tags/${tag}`,
- sha,
- });
- return response?.data;
+ /**
+ * Create git tag and ref
+ * @param {string} tag
+ * @param {string} sha
+ * @return {Promise}
+ */
+ async createTag(tag, sha) {
+ await this.octokit.rest.git.createTag({
+ ...this.info,
+ tag,
+ message: tag,
+ object: sha,
+ type: 'commit',
+ });
+
+ // once a tag object is created, create a reference
+ const {data} = await this.octokit.rest.git.createRef({
+ ...this.info,
+ ref: `refs/tags/${tag}`,
+ sha,
+ });
+ return data;
+ }
}
-module.exports = {
- createIssue,
- createRelease,
- createTag,
- getLabel,
- getIssue,
- getPullRequestsBetweenCommits,
- getRelease,
- labelPullRequests,
- unlabelPullRequests,
- updateIssue,
- updateRelease,
- getRef,
-};
+module.exports = {GitHubApi};
diff --git a/build-system/release-workflows/build-release.js b/build-system/release-workflows/build-release.js
index d18b00176a2d..c948cfab93e0 100644
--- a/build-system/release-workflows/build-release.js
+++ b/build-system/release-workflows/build-release.js
@@ -12,6 +12,14 @@ const jobName = 'build-release.js';
runReleaseJob(jobName, async () => {
const {ESM, FLAVOR} = process.env;
+
+ // TODO(danielrozenberg): remove temporary custom-config when ampjs.org
+ // becomes the default runtime CDN.
+ fs.writeJsonSync('build-system/global-configs/custom-config.json', {
+ 'cdnUrl': 'https://ampjs.org',
+ 'cdnProxyRegex': '^https:\\/\\/ampjs\\.org$',
+ });
+
timedExecOrThrow(`amp release --flavor=${FLAVOR} --${ESM} --dedup_v0`);
fs.ensureDirSync(`/tmp/workspace/releases/${FLAVOR}/${ESM}`);
fs.copySync('release/', `/tmp/workspace/releases/${FLAVOR}/${ESM}`);
diff --git a/build-system/release-workflows/cut-nightly.js b/build-system/release-workflows/cut-nightly.js
index ef1bc57d0adc..ab83d421ce31 100644
--- a/build-system/release-workflows/cut-nightly.js
+++ b/build-system/release-workflows/cut-nightly.js
@@ -4,19 +4,43 @@
* @fileoverview Script that cuts a nightly branch.
*/
-const {cyan, green, red} = require('kleur/colors');
+const {cyan, green, red, yellow} = require('kleur/colors');
const {getVersion} = require('../compile/internal-version');
const {log} = require('../common/logging');
const {Octokit} = require('@octokit/rest');
+const {RequestError} = require('@octokit/request-error');
+
const params = {owner: 'ampproject', repo: 'amphtml'};
// Permanent external ID as assigned by the GitHub Actions runner.
const GITHUB_EXTERNAL_ID = 'be30aa50-41df-5bf3-2e88-b5215679ea95';
+const CHECKS_TO_SKIP = [
+ 'Cut Nightly Branch',
+ 'create-issue-on-error',
+ 'status-page',
+];
+
+/**
+ * Get the current nightly branch's commit SHA.
+ *
+ * @param {Octokit} octokit
+ * @return {Promise}
+ */
+async function getCurrentNightly(octokit) {
+ const {data} = await octokit.rest.git.getRef({
+ ...params,
+ ref: 'heads/nightly',
+ });
+ return data.object.sha;
+}
+
/**
- * Get last green commit
+ * Get the SHA of the last green commit from the main branch.
+ *
* @param {Octokit} octokit
- * @return {Promise}
+ * @return {Promise}
+ * @throws {Error} if a green commit was not found in the last 100 main commits.
*/
async function getCommit(octokit) {
const commits = await octokit.rest.repos.listCommits({
@@ -32,17 +56,18 @@ async function getCommit(octokit) {
);
for (const {sha} of commits.data) {
- const {'check_runs': checkRuns} = (
- await octokit.rest.checks.listForRef({
+ const checkRuns = (
+ await octokit.paginate(octokit.rest.checks.listForRef, {
...params,
ref: sha,
+ 'per_page': 100,
})
- ).data;
- if (
- checkRuns
- .filter(({'external_id': id}) => id !== GITHUB_EXTERNAL_ID)
- .some(({status}) => status != 'completed')
- ) {
+ ).filter(
+ ({'external_id': id, name}) =>
+ id !== GITHUB_EXTERNAL_ID && !CHECKS_TO_SKIP.includes(name)
+ );
+
+ if (checkRuns.some(({status}) => status != 'completed')) {
log(
'Not all check runs for commit',
cyan(sha),
@@ -72,99 +97,84 @@ async function getCommit(octokit) {
return sha;
}
+
+ throw new Error(
+ 'Failed to cut nightly. Could not find a green commit in the last 100 commits'
+ );
}
/**
- * Fast forward nightly branch to given sha
+ * Fast forward nightly branch to given SHA.
+ *
* @param {Octokit} octokit
* @param {string} sha
* @return {Promise}
*/
async function updateBranch(octokit, sha) {
- const response = await octokit.rest.git.updateRef({
- ...params,
- ref: 'heads/nightly',
- sha,
- });
-
- // Casting to Number because the return type in Octokit is incorrectly
- // annotated to only ever return 200.
- switch (Number(response.status)) {
- case 201:
- log(
- 'A new',
- cyan('nightly'),
- 'branch was successfully cut at commit',
- cyan(sha)
- );
- break;
- case 200:
- log(
- 'The',
- cyan('nightly'),
- 'branch is already at the latest',
- green('green'),
- 'commit',
- cyan(sha)
- );
- break;
- default:
- log(
- red(
- 'An uncaught status was returned while attempting to fast-forward the'
- ),
- cyan('nightly'),
- red('branch to commit'),
- cyan(sha)
- );
- log('See full response:', response);
+ try {
+ await octokit.rest.git.updateRef({
+ ...params,
+ ref: 'heads/nightly',
+ sha,
+ });
+ log(
+ 'A new',
+ cyan('nightly'),
+ 'branch was successfully cut at commit',
+ cyan(sha)
+ );
+ } catch (e) {
+ log(
+ red(
+ 'An uncaught status was returned while attempting to fast-forward the'
+ ),
+ cyan('nightly'),
+ red('branch to commit'),
+ cyan(sha)
+ );
+ log('See full error:', e);
}
}
/**
- * Create GitHub tag
+ * Create GitHub tag.
+ *
* @param {Octokit} octokit
* @param {string} sha
+ * @param {string} ampVersion
* @return {Promise}
*/
-async function createTag(octokit, sha) {
- const ampVersion = getVersion(sha);
-
- await octokit.rest.git.createTag({
- ...params,
- tag: ampVersion,
- message: ampVersion,
- object: sha,
- type: 'commit',
- });
-
- // once a tag object is created, create a reference
- const response = await octokit.rest.git.createRef({
- ...params,
- ref: `refs/tags/${ampVersion}`,
- sha,
- });
+async function createTag(octokit, sha, ampVersion) {
+ try {
+ await octokit.rest.git.createTag({
+ ...params,
+ tag: ampVersion,
+ message: ampVersion,
+ object: sha,
+ type: 'commit',
+ });
+
+ // once a tag object is created, create a reference.
+ await octokit.rest.git.createRef({
+ ...params,
+ ref: `refs/tags/${ampVersion}`,
+ sha,
+ });
- switch (Number(response.status)) {
- case 201:
- log(
- 'A new tag',
- cyan(ampVersion),
- 'was successfully created at commit',
- cyan(sha)
- );
- break;
- case 422:
+ log(
+ 'A new tag',
+ cyan(ampVersion),
+ 'was successfully created at commit',
+ cyan(sha)
+ );
+ } catch (e) {
+ if (e instanceof RequestError && e.status === 422) {
log('The tag', cyan(ampVersion), 'already exists at', cyan(sha));
- break;
- default:
- log(
- red('An uncaught status was returned while attempting to create a tag'),
- cyan(ampVersion),
- red('for commit'),
- cyan(sha)
+ } else {
+ throw new Error(
+ `An unaught status returned while attempting to create a tag\n${e}`
);
- log('See full response:', response);
+ }
}
}
@@ -184,19 +194,27 @@ async function cutNightlyBranch() {
throw error;
});
- const sha = await getCommit(octokit);
- if (!sha) {
- throw new Error(
- 'Failed to cut nightly. Could not find a green commit in the last 100 commits'
+ const currentSha = await getCurrentNightly(octokit);
+ const newSha = await getCommit(octokit);
+ if (newSha === currentSha) {
+ log(
+ yellow('There are no new'),
+ green('green'),
+ yellow('commits in the'),
+ cyan('main'),
+ yellow('branch to be cut into'),
+ cyan('nightly')
);
+ return;
}
- await Promise.all([
- await updateBranch(octokit, sha),
- await createTag(octokit, sha),
- ]);
+ const ampVersion = getVersion(newSha);
+
+ await updateBranch(octokit, newSha);
+ await createTag(octokit, newSha, ampVersion);
- log('Successfully cut nightly');
+ log(green('Successfully cut the'), cyan('nightly'), green('branch'));
+ log('It was fast-forwarded from', cyan(currentSha), 'to', cyan(newSha));
}
cutNightlyBranch();
diff --git a/build-system/release-workflows/trigger-promote.js b/build-system/release-workflows/trigger-promote.js
new file mode 100644
index 000000000000..79ed1d31967f
--- /dev/null
+++ b/build-system/release-workflows/trigger-promote.js
@@ -0,0 +1,46 @@
+'use strict';
+
+/**
+ * @fileoverview
+ * Triggers the promote workflow on ampproject/cdn-configuration
+ */
+
+const {readFileSync} = require('fs');
+const {Octokit} = require('@octokit/rest');
+const {runReleaseJob} = require('./release-job');
+
+const jobName = 'trigger-promote.js';
+
+const cdnConfigurationParams = {
+ owner: 'ampproject',
+ repo: 'cdn-configuration',
+ 'workflow_id':
+ process.env.CIRCLE_BRANCH == 'nightly'
+ ? 'promote-nightly.yml'
+ : 'promote-cherry-picks.yml',
+ ref: 'main',
+};
+
+/**
+ * Trigger promote workflow
+ * @return {Promise}
+ */
+async function trigger_() {
+ const ampVersion = readFileSync('/tmp/restored-workspace/AMP_VERSION', 'utf8')
+ .toString()
+ .trim();
+
+ const octokit = new Octokit({auth: process.env.GITHUB_TOKEN});
+ const inputs = {
+ 'amp-version': ampVersion,
+ 'auto-merge': 'true',
+ };
+ await octokit.rest.actions.createWorkflowDispatch({
+ ...cdnConfigurationParams,
+ inputs,
+ });
+}
+
+runReleaseJob(jobName, async () => {
+ await trigger_();
+});
diff --git a/build-system/release-workflows/upload-release.js b/build-system/release-workflows/upload-release.js
index 56bca0d59a65..555f6a263ffa 100644
--- a/build-system/release-workflows/upload-release.js
+++ b/build-system/release-workflows/upload-release.js
@@ -4,11 +4,12 @@ const fastGlob = require('fast-glob');
const fs = require('fs-extra');
const klaw = require('klaw');
const path = require('path');
-const {bgWhite, cyan} = require('kleur/colors');
+const {cyan} = require('kleur/colors');
const {log} = require('../common/logging');
const {runReleaseJob} = require('./release-job');
-const {Storage} = require('@google-cloud/storage');
+const {S3} = require('@aws-sdk/client-s3');
const {timedExecOrDie} = require('../pr-check/utils');
+const zlib = require('zlib');
/**
* @fileoverview Script that uploads a release build.
@@ -75,20 +76,20 @@ function mergeFilesTxt_(flavor) {
let printProgressReady = true;
/**
- * Logs file upload progress every 1 second.
+ * Logs file processing progress every 1 second.
*
* @param {number} totalFiles
- * @param {number} uploadedFiles
+ * @param {number} processedFiles
*/
-function logProgress_(totalFiles, uploadedFiles) {
- const percentage = Math.round((uploadedFiles / totalFiles) * PROGRESS_WIDTH);
- if (printProgressReady || uploadedFiles === totalFiles) {
+function logProgress_(totalFiles, processedFiles) {
+ const percentage = Math.round((processedFiles / totalFiles) * PROGRESS_WIDTH);
+ if (printProgressReady || processedFiles === totalFiles) {
log(
'[' +
- bgWhite(' '.repeat(percentage)) +
+ '#'.repeat(percentage) +
'.'.repeat(PROGRESS_WIDTH - percentage) +
']',
- cyan(uploadedFiles),
+ cyan(processedFiles),
'/',
cyan(totalFiles)
);
@@ -101,30 +102,98 @@ function logProgress_(totalFiles, uploadedFiles) {
}
/**
- * Uploads release files to Google Cloud Storage.
+ * Compresses a single file with Brotli and writes it to ${path}.br.
+ * @param {string} path
+ * @param {number} sizeHint
* @return {Promise}
*/
-async function uploadFiles_() {
- const {GCLOUD_SERVICE_KEY} = process.env;
- if (!GCLOUD_SERVICE_KEY) {
- throw new Error(
- 'CircleCI job is missing the GCLOUD_SERVICE_KEY env variable'
- );
+async function brotliCompressFile_(path, sizeHint) {
+ const readStream = fs.createReadStream(path);
+ const writeStream = fs.createWriteStream(`${path}.br`);
+ const brotli = zlib.createBrotliCompress({
+ params: {
+ [zlib.constants.BROTLI_PARAM_QUALITY]: zlib.constants.BROTLI_MAX_QUALITY,
+ [zlib.constants.BROTLI_PARAM_SIZE_HINT]: sizeHint,
+ },
+ });
+
+ return new Promise((resolve, reject) => {
+ readStream
+ .pipe(brotli)
+ .pipe(writeStream)
+ .on('finish', resolve)
+ .on('error', reject);
+ });
+}
+
+/**
+ * Compresses all files with Brotli.
+ * @return {Promise}
+ */
+async function brotliCompressAll_() {
+ let totalFiles = 0;
+ for await (const {stats} of klaw(DEST_DIR)) {
+ if (stats.isFile()) {
+ totalFiles++;
+ }
}
- const credentials = JSON.parse(GCLOUD_SERVICE_KEY);
- if (
- !credentials.client_email ||
- !credentials.private_key ||
- !credentials.project_id
- ) {
- throw new Error(
- 'GCLOUD_SERVICE_KEY is not a Google Cloud JSON service key'
+ log('Brotli compression of', cyan(totalFiles), 'files:');
+ const compressPromises = [];
+ let compressedFiles = 0;
+ for await (const {path, stats} of klaw(DEST_DIR)) {
+ if (!stats.isFile()) {
+ continue;
+ }
+
+ compressPromises.push(
+ brotliCompressFile_(path, stats.size).then(() => {
+ logProgress_(totalFiles, ++compressedFiles);
+ })
);
}
- const storage = new Storage({credentials, projectId: credentials.project_id});
- const bucket = storage.bucket('org-cdn');
+ await Promise.all(compressPromises);
+ log('Finished Brotli compression of all files.');
+}
+
+/**
+ * Ensures the presence of env variables or throws an error.
+ * @param {...string} vars
+ * @return {string[]}
+ */
+function ensureEnvVariable_(...vars) {
+ const ret = [];
+ for (const v of vars) {
+ const value = process.env[v];
+ if (!value) {
+ throw new Error(`CircleCI job is missing the ${v} env variable`);
+ }
+ ret.push(value);
+ }
+ return ret;
+}
+
+/**
+ * Uploads release files to Cloudflare R2.
+ * @return {Promise}
+ */
+async function uploadFiles_() {
+ const [accountId, accessKeyId, secretAccessKey] = ensureEnvVariable_(
+ 'R2_ACCOUNT_ID',
+ 'R2_ACCESS_KEY_ID',
+ 'R2_SECRET_ACCESS_KEY'
+ );
+
+ const s3 = new S3({
+ region: 'auto',
+ endpoint: `https://${accountId}.r2.cloudflarestorage.com`,
+ credentials: {
+ accessKeyId,
+ secretAccessKey,
+ },
+ maxAttempts: 7,
+ });
let totalFiles = 0;
for await (const {stats} of klaw(DEST_DIR)) {
@@ -133,18 +202,22 @@ async function uploadFiles_() {
}
}
- log('Uploading', cyan(totalFiles), 'files to storage:');
+ log('Uploading', cyan(totalFiles), 'files to R2:');
const uploadsPromises = [];
let uploadedFiles = 0;
for await (const {path, stats} of klaw(DEST_DIR)) {
- if (stats.isFile()) {
- const destination = path.slice(DEST_DIR.length + 1);
- uploadsPromises.push(
- bucket.upload(path, {destination, resumable: false}).then(() => {
+ if (!stats.isFile()) {
+ continue;
+ }
+
+ const key = path.slice(DEST_DIR.length + 1);
+ uploadsPromises.push(
+ s3
+ .putObject({Bucket: 'ampjs', Key: key, Body: fs.createReadStream(path)})
+ .then(() => {
logProgress_(totalFiles, ++uploadedFiles);
})
- );
- }
+ );
}
await Promise.all(uploadsPromises);
@@ -159,8 +232,15 @@ runReleaseJob(jobName, async () => {
mergeFilesTxt_(flavor);
}
+ await brotliCompressAll_();
await uploadFiles_();
log('Archiving releases to', cyan(ARTIFACT_FILE_NAME));
timedExecOrDie(`cd ${DEST_DIR} && tar -czf ${ARTIFACT_FILE_NAME} *`);
+
+ log('Persisting AMP version number to workspace');
+ const [versionsFile] = fastGlob.sync(
+ path.join(DEST_DIR, 'org-cdn/rtv/01*/version.txt')
+ );
+ fs.copySync(versionsFile, '/tmp/workspace/AMP_VERSION');
});
diff --git a/build-system/server/OWNERS b/build-system/server/OWNERS
index 1cebb95e96e9..69a88bfe0386 100644
--- a/build-system/server/OWNERS
+++ b/build-system/server/OWNERS
@@ -6,9 +6,5 @@
{
owners: [{name: 'ampproject/wg-infra'}],
},
- {
- pattern: 'lazy-build.js',
- owners: [{name: 'rsimha', notify: true}],
- },
],
}
diff --git a/build-system/server/app-index/amphtml-helpers.js b/build-system/server/app-index/amphtml-helpers.js
index b077099466c3..2da24f848334 100644
--- a/build-system/server/app-index/amphtml-helpers.js
+++ b/build-system/server/app-index/amphtml-helpers.js
@@ -16,14 +16,13 @@ const containsByRegex = (str, re) => str.search(re) > -1;
// TODO(alanorozco): Expand
const formTypes = ['input', 'select', 'form'];
-const ExtensionScript = ({isTemplate, name, version}) =>
- html`
-
- `;
+const ExtensionScript = ({isTemplate, name, version}) => html`
+
+`;
const AmpState = (id, state) => html`
@@ -48,7 +47,7 @@ const ampStateKey = (...keys) => keys.join('.');
const AmpDoc = ({body, canonical, css, head}) => {
assert(canonical);
return html`
-
+
AMP Dev Server
diff --git a/build-system/server/app-index/file-list.js b/build-system/server/app-index/file-list.js
index fb47d5f73af3..d81b03914550 100644
--- a/build-system/server/app-index/file-list.js
+++ b/build-system/server/app-index/file-list.js
@@ -14,18 +14,17 @@ const linksToExample = (shouldContainBasepath, opt_name) =>
* @param {{ name: string, href: string, boundHref?: string|undefined }} config
* @return {string}
*/
-const FileListItem = ({boundHref, href, name}) =>
- html`
-
- `;
+const FileListItem = ({boundHref, href, name}) => html`
+
+`;
const FileListItemBound = ({href, htmlEnvelopePrefix, name}) =>
linksToExample(href)
@@ -53,21 +52,20 @@ const FileListHeading = ({basepath}) => html`
`;
-const FileList = ({basepath, fileSet, htmlEnvelopePrefix}) =>
- html`
-
- ${FileListHeading({basepath})}
-
- ${joinFragments(fileSet, (name) =>
- FileListItemBound({
- name,
- href: maybePrefixExampleDocHref(basepath, name, htmlEnvelopePrefix),
- htmlEnvelopePrefix,
- })
- )}
-
+const FileList = ({basepath, fileSet, htmlEnvelopePrefix}) => html`
+
+ ${FileListHeading({basepath})}
+
+ ${joinFragments(fileSet, (name) =>
+ FileListItemBound({
+ name,
+ href: maybePrefixExampleDocHref(basepath, name, htmlEnvelopePrefix),
+ htmlEnvelopePrefix,
+ })
+ )}
- `;
+
+`;
module.exports = {
FileList,
diff --git a/build-system/server/app-index/settings.js b/build-system/server/app-index/settings.js
index 49bd33dae212..efd94f356e14 100644
--- a/build-system/server/app-index/settings.js
+++ b/build-system/server/app-index/settings.js
@@ -32,22 +32,21 @@ const panelStateKey = 'panel';
const htmlEnvelopePrefixKey = ampStateKey(stateId, htmlEnvelopePrefixStateKey);
const panelKey = ampStateKey(stateId, panelStateKey);
-const PanelSelectorButton = ({expression, type, value}) =>
- html`
-
- ${type} ${value}
-
- `;
+ >
+
${type} ${value}
+
+`;
/**
* @param {{
diff --git a/build-system/server/app-index/template.js b/build-system/server/app-index/template.js
index 35c88550d759..3d3d74f5aa29 100644
--- a/build-system/server/app-index/template.js
+++ b/build-system/server/app-index/template.js
@@ -27,12 +27,11 @@ const ampLogoSvg = html`
`;
-const TopLevelWrap = (content) =>
- html`
-
- `;
+const TopLevelWrap = (content) => html`
+
+`;
const Header = ({htmlEnvelopePrefix, jsMode, links}) => html`
@@ -68,8 +67,8 @@ function renderTemplate(opt_params = {}) {
basepath = '/',
css,
fileSet = [],
- serveMode = 'default',
htmlEnvelopePrefix = '/',
+ serveMode = 'default',
} = opt_params;
const body = joinFragments([
@@ -82,7 +81,7 @@ function renderTemplate(opt_params = {}) {
html`
`,
]);
diff --git a/build-system/server/app-utils.js b/build-system/server/app-utils.js
index ac011eae4d6a..65582bb541fa 100644
--- a/build-system/server/app-utils.js
+++ b/build-system/server/app-utils.js
@@ -72,7 +72,7 @@ const isRtvMode = (serveMode) => {
*/
const getCdnUrlRegExp = (pathPattern = '[^\'">]+') =>
new RegExp(
- `(https://cdn\\.ampproject\\.org)/${pathPattern}(\\.m?js|\\.css)`,
+ `(https://cdn\\.ampproject\\.org)/${pathPattern}(\\.json|\\.m?js|\\.css)`,
'g'
);
@@ -116,8 +116,9 @@ function replaceCdnJsUrls(mode, html, hostName, useMaxNames) {
if (isRtv) {
return CDNURLToRTVURL(url, mode, pathnames, extension).href;
}
- // CSS files are never output as .max.css
- const useMaxNamesForFile = useMaxNames && extension !== '.css';
+ // Only JS files have "max" files. Even mjs files don't have an equivalent
+ // max file during "amp build".
+ const useMaxNamesForFile = useMaxNames && extension === '.js';
const href = getHrefWithoutHost(
replaceCDNURLPath(url, pathnames, extension, useMaxNamesForFile)
);
diff --git a/build-system/server/app.js b/build-system/server/app.js
index 8beb1228152f..6435459ea8de 100644
--- a/build-system/server/app.js
+++ b/build-system/server/app.js
@@ -10,7 +10,6 @@ const bodyParser = require('body-parser');
const cors = require('./amp-cors');
const devDashboard = require('./app-index');
const express = require('express');
-const fetch = require('node-fetch');
const formidable = require('formidable');
const fs = require('fs');
const jsdom = require('jsdom');
@@ -73,10 +72,7 @@ app.use(bodyParser.text());
// Middleware is executed in order, so this must be at the top.
// TODO(#24333): Migrate all server URL handlers to new-server/router and
// deprecate app.js.
-// TODO(erwinmombay, #32865): Make visual diff tests use the new server
-if (!argv._.includes('visual-diff')) {
- app.use(require('./new-server/router'));
-}
+app.use(require('./new-server/router'));
app.use(require('./routes/a4a-envelopes'));
app.use('/amp4test', require('./amp4test').app);
@@ -96,7 +92,7 @@ app.use((req, res, next) => {
if (req.query.csp) {
res.set({
'content-security-policy':
- "default-src * blob: data:; script-src https://cdn.ampproject.org/rtv/ https://cdn.ampproject.org/v0.js https://cdn.ampproject.org/v0/ https://cdn.ampproject.org/viewer/ http://localhost:8000 https://localhost:8000; object-src 'none'; style-src 'unsafe-inline' https://cdn.ampproject.org/rtv/ https://cdn.materialdesignicons.com https://cloud.typography.com https://fast.fonts.net https://fonts.googleapis.com https://maxcdn.bootstrapcdn.com https://p.typekit.net https://use.fontawesome.com https://use.typekit.net; report-uri https://csp-collector.appspot.com/csp/amp",
+ "default-src * blob: data:; script-src https://cdn.ampproject.org/rtv/ https://cdn.ampproject.org/v0.js https://cdn.ampproject.org/v0/ https://cdn.ampproject.org/viewer/ http://localhost:8000 https://localhost:8000; object-src 'none'; style-src 'unsafe-inline' https://cdn.ampproject.org/rtv/ https://cdn.materialdesignicons.com https://cloud.typography.com https://fast.fonts.net https://fonts.googleapis.com https://maxcdn.bootstrapcdn.com https://p.typekit.net https://use.fontawesome.com https://use.typekit.net https://cdnjs.cloudflare.com/ajax/libs/font-awesome/; report-uri https://csp-collector.appspot.com/csp/amp",
});
}
next();
@@ -653,7 +649,7 @@ function liveListInsert(liveList, node) {
*/
const child = /** @type {*} */ (node.cloneNode(true));
child.setAttribute('id', `list-item-${itemCtr++}`);
- child.setAttribute('data-sort-time', Date.now());
+ child.setAttribute('data-sort-time', Date.now().toString());
liveList.querySelector('[items]')?.appendChild(child);
}
}
@@ -1403,6 +1399,19 @@ app.get(
}
);
+/**
+ * Handle amp-story translation file requests with an rtv path.
+ * We need to make sure we only handle the amp-story requests since this
+ * can affect other tests with json requests.
+ */
+app.get('/dist/rtv/*/v0/amp-story*.json', async (req, _res, next) => {
+ const fileName = path.basename(req.path);
+ let filePath = 'https://cdn.ampproject.org/v0/' + fileName;
+ filePath = replaceUrls(SERVE_MODE, filePath);
+ req.url = filePath;
+ next();
+});
+
if (argv.coverage === 'live') {
app.get('/dist/amp.js', async (req, res) => {
const ampJs = await fs.promises.readFile(`${pc.cwd()}${req.path}`);
diff --git a/build-system/server/lazy-build.js b/build-system/server/lazy-build.js
index bad47df25f5b..04eb8706bee6 100644
--- a/build-system/server/lazy-build.js
+++ b/build-system/server/lazy-build.js
@@ -15,20 +15,18 @@ const {jsBundles} = require('../compile/bundles.config');
const {VERSION} = require('../compile/internal-version');
const extensionBundles = {};
-maybeInitializeExtensions(extensionBundles, /* includeLatest */ true);
+maybeInitializeExtensions(extensionBundles);
const vendorBundles = generateBundles();
/**
- * Normalizes bento extension names and gets the unminified name of the bundle
- * if it can be lazily built.
+ * Gets the unminified name of the bundle if it can be lazily built.
*
* @param {!Object} bundles
* @param {string} name
* @return {string}
*/
function maybeGetUnminifiedName(bundles, name) {
- name = name.replace('bento-', 'amp-');
if (argv.minified) {
for (const key of Object.keys(bundles)) {
if (
diff --git a/build-system/server/new-server/router.js b/build-system/server/new-server/router.js
index cf8dfa58c9e7..9ae691b1bf5a 100644
--- a/build-system/server/new-server/router.js
+++ b/build-system/server/new-server/router.js
@@ -2,8 +2,18 @@ const router = require('express').Router();
// @ts-ignore
const {transform} = require('./transforms/dist/transform');
-router.get('/examples/*.html', async (req, res) => {
+router.get('/examples/*.html', async (req, res, next) => {
let transformedHTML;
+
+ // ?transform=0 or ?transform=false will force an opt-out of the
+ // transformation. This can be useful if we want to explicitly test the
+ // nomodule version of the code.
+ const skipTransform =
+ 'transform' in req.query &&
+ (req.query.transform === '0' || req.query.transform === 'false');
+ if (skipTransform) {
+ return next();
+ }
const filePath = `${process.cwd()}${req.path}`;
try {
transformedHTML = await transform(filePath);
diff --git a/build-system/server/new-server/transforms/cdn/cdn-transform.ts b/build-system/server/new-server/transforms/cdn/cdn-transform.ts
index 315512c3114c..8dde6cf7bc09 100644
--- a/build-system/server/new-server/transforms/cdn/cdn-transform.ts
+++ b/build-system/server/new-server/transforms/cdn/cdn-transform.ts
@@ -1,17 +1,19 @@
-
-
+import {parse} from 'path';
import posthtml from 'posthtml';
+
+import {CDNURLToLocalHostRelativeAbsoluteDist} from '../utilities/cdn';
import {
getCdnUrlAttr,
isJsonScript,
isValidOrigin,
tryGetUrl,
} from '../utilities/cdn-tag';
-import {CDNURLToLocalHostRelativeAbsoluteDist} from '../utilities/cdn';
import {OptionSet} from '../utilities/option-set';
-import {parse} from 'path';
-function maybeModifyCdnUrl(node: posthtml.Node, options: OptionSet): posthtml.Node {
+function maybeModifyCdnUrl(
+ node: posthtml.Node,
+ options: OptionSet
+): posthtml.Node {
// Make sure to call `isJsonScript` before `tryGetUrl`. We bail out early if
// the node is of type="application/json" since it wouldn't have a URL.
if (isJsonScript(node)) {
@@ -50,11 +52,9 @@ export default function (
options: OptionSet = {}
): (tree: posthtml.Node) => void {
return function (tree: posthtml.Node) {
- tree.match([
- {tag: 'script'},
- {tag: 'link', attrs: {rel: 'stylesheet'}},
- ], (node) => {
- return maybeModifyCdnUrl(node, options);
- });
+ tree.match(
+ [{tag: 'script'}, {tag: 'link', attrs: {rel: 'stylesheet'}}],
+ (node) => maybeModifyCdnUrl(node, options)
+ );
};
}
diff --git a/build-system/server/new-server/transforms/css/css-transform.ts b/build-system/server/new-server/transforms/css/css-transform.ts
index d76d0b1b5d62..62e40a45f6db 100644
--- a/build-system/server/new-server/transforms/css/css-transform.ts
+++ b/build-system/server/new-server/transforms/css/css-transform.ts
@@ -1,9 +1,8 @@
-
-
+import {readFileSync} from 'fs';
import minimist from 'minimist';
import posthtml from 'posthtml';
-import {readFileSync} from 'fs';
-import {OptionSet} from '../utilities/option-set';
+
+import {Lazy} from '../utilities/lazy';
const argv = minimist(process.argv.slice(2));
const isTestMode: boolean = argv._.includes('server-tests');
@@ -14,24 +13,29 @@ const cwd = process.cwd();
const cssPath = isTestMode
? `${cwd}/${testDir}/css.txt`
: `${cwd}/build/css/v0.css`;
-const versionPath = `${cwd}/${testDir}/version.txt`
+const versionPath = `${cwd}/${testDir}/version.txt`;
-const css = readFileSync(cssPath, 'utf8').toString().trim();
-const version = readFileSync(versionPath, 'utf8').toString().trim();
+const css = new Lazy(() => readFileSync(cssPath, 'utf8').toString().trim());
+const version = new Lazy(() =>
+ readFileSync(versionPath, 'utf8').toString().trim()
+);
interface StyleNode extends posthtml.Node {
- tag: 'style',
+ tag: 'style';
attrs: {
- [key: string]: string | undefined
- 'amp-runtime': string,
- 'i-amphtml-version': string,
- },
- content: string[]
+ [key: string]: string | undefined;
+ 'amp-runtime': string;
+ 'i-amphtml-version': string;
+ };
+ content: string[];
}
function isStyleNode(node: posthtml.Node | string): node is StyleNode {
- return node !== undefined && typeof node !== 'string' &&
- (node as StyleNode).tag === 'style';
+ return (
+ node !== undefined &&
+ typeof node !== 'string' &&
+ (node as StyleNode).tag === 'style'
+ );
}
function prependAmpStyles(head: posthtml.Node): posthtml.Node {
@@ -51,9 +55,9 @@ function prependAmpStyles(head: posthtml.Node): posthtml.Node {
attrs: {
'amp-runtime': '',
// Prefix 01 to simulate stable/prod version RTV prefix.
- 'i-amphtml-version': `01${version}`,
+ 'i-amphtml-version': `01${version.value()}`,
},
- content: [css]
+ content: [css.value()],
};
content.unshift(styleNode);
return {...head, content};
@@ -62,8 +66,17 @@ function prependAmpStyles(head: posthtml.Node): posthtml.Node {
/**
* Replace the src for every stories script tag.
*/
-export default function (_options: OptionSet = {}): (tree: posthtml.Node) => void {
+export default function (): (tree: posthtml.Node) => void {
return function (tree: posthtml.Node) {
- tree.match({tag: 'head'}, prependAmpStyles);
- }
+ let isAmp = false;
+ tree.match({tag: 'html'}, function (html: posthtml.Node): posthtml.Node {
+ if (html.attrs && ('amp' in html.attrs || '⚡' in html.attrs)) {
+ isAmp = true;
+ }
+ return html;
+ });
+ if (isAmp) {
+ tree.match({tag: 'head'}, prependAmpStyles);
+ }
+ };
}
diff --git a/build-system/server/new-server/transforms/css/test/esm-env/input.html b/build-system/server/new-server/transforms/css/test/esm-env/input.html
index 5ebf21c53537..9f20cca42bea 100644
--- a/build-system/server/new-server/transforms/css/test/esm-env/input.html
+++ b/build-system/server/new-server/transforms/css/test/esm-env/input.html
@@ -1,3 +1,5 @@
+
+
diff --git a/build-system/server/new-server/transforms/css/test/esm-env/output.html b/build-system/server/new-server/transforms/css/test/esm-env/output.html
index 81f40c67eaeb..b33b151c7929 100644
--- a/build-system/server/new-server/transforms/css/test/esm-env/output.html
+++ b/build-system/server/new-server/transforms/css/test/esm-env/output.html
@@ -1,3 +1,5 @@
+
+
diff --git a/build-system/server/new-server/transforms/css/test/no-insert/input.html b/build-system/server/new-server/transforms/css/test/no-insert/input.html
index cf1c30befa6d..131f45f7d4c9 100644
--- a/build-system/server/new-server/transforms/css/test/no-insert/input.html
+++ b/build-system/server/new-server/transforms/css/test/no-insert/input.html
@@ -1,4 +1,6 @@
+
+
diff --git a/build-system/server/new-server/transforms/css/test/no-insert/output.html b/build-system/server/new-server/transforms/css/test/no-insert/output.html
index a91d5793addc..256902d93006 100644
--- a/build-system/server/new-server/transforms/css/test/no-insert/output.html
+++ b/build-system/server/new-server/transforms/css/test/no-insert/output.html
@@ -1,4 +1,6 @@
+
+
diff --git a/build-system/server/new-server/transforms/css/test/non-amp/input.html b/build-system/server/new-server/transforms/css/test/non-amp/input.html
new file mode 100644
index 000000000000..7df3b89e3870
--- /dev/null
+++ b/build-system/server/new-server/transforms/css/test/non-amp/input.html
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/build-system/server/new-server/transforms/css/test/non-amp/output.html b/build-system/server/new-server/transforms/css/test/non-amp/output.html
new file mode 100644
index 000000000000..ec49bbf037de
--- /dev/null
+++ b/build-system/server/new-server/transforms/css/test/non-amp/output.html
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/build-system/server/new-server/transforms/modules/modules-transform.ts b/build-system/server/new-server/transforms/modules/modules-transform.ts
index 1db4471e63ee..be9dc9b1696e 100644
--- a/build-system/server/new-server/transforms/modules/modules-transform.ts
+++ b/build-system/server/new-server/transforms/modules/modules-transform.ts
@@ -1,16 +1,24 @@
-
-
import posthtml from 'posthtml';
-import {isJsonScript, isValidScript, toExtension, ScriptNode, tryGetUrl} from '../utilities/cdn-tag';
+
+import {
+ ScriptNode,
+ isJsonScript,
+ isValidScript,
+ toExtension,
+ tryGetUrl,
+} from '../utilities/cdn-tag';
import {OptionSet} from '../utilities/option-set';
-/**
- * @param head
- * @param script
- */
-function appendModuleScript(head: posthtml.Node, nomoduleScript: ScriptNode, options: OptionSet): void {
- const modulePath = toExtension(tryGetUrl(nomoduleScript.attrs.src), '.mjs').toString();
- const moduleScript : ScriptNode = {
+function appendModuleScript(
+ head: posthtml.Node,
+ nomoduleScript: ScriptNode,
+ options: OptionSet
+): void {
+ const modulePath = toExtension(
+ tryGetUrl(nomoduleScript.attrs.src),
+ '.mjs'
+ ).toString();
+ const moduleScript: ScriptNode = {
...nomoduleScript,
attrs: {
...nomoduleScript.attrs,
@@ -37,11 +45,13 @@ function appendModuleScript(head: posthtml.Node, nomoduleScript: ScriptNode, opt
* Returns a function that will transform script node sources into module/nomodule pair.
* @param options
*/
-export default function(options: OptionSet = {}): (tree: posthtml.Node) => void {
- return function(tree: posthtml.Node): void {
+export default function (
+ options: OptionSet = {}
+): (tree: posthtml.Node) => void {
+ return function (tree: posthtml.Node): void {
let head: posthtml.Node | undefined = undefined;
const scripts: Array = [];
- tree.walk(node => {
+ tree.walk((node) => {
if (node.tag === 'head') {
head = node;
}
@@ -64,6 +74,7 @@ export default function(options: OptionSet = {}): (tree: posthtml.Node) => void
});
if (head === undefined) {
+ // eslint-disable-next-line local/no-forbidden-terms
console.log('Could not find a head element in the document');
return;
}
@@ -71,5 +82,5 @@ export default function(options: OptionSet = {}): (tree: posthtml.Node) => void
for (const script of scripts) {
appendModuleScript(head, script, options);
}
- }
+ };
}
diff --git a/build-system/server/new-server/transforms/sxg/sxg-transform.ts b/build-system/server/new-server/transforms/sxg/sxg-transform.ts
index 75be878a2dff..1558c169b803 100644
--- a/build-system/server/new-server/transforms/sxg/sxg-transform.ts
+++ b/build-system/server/new-server/transforms/sxg/sxg-transform.ts
@@ -1,11 +1,13 @@
-
-
import posthtml from 'posthtml';
import {URL} from 'url';
+
import {isJsonScript, isValidScript} from '../utilities/cdn-tag';
import {OptionSet} from '../utilities/option-set';
-function sxgTransform(node: posthtml.Node, options: OptionSet = {}): posthtml.Node {
+function sxgTransform(
+ node: posthtml.Node,
+ options: OptionSet = {}
+): posthtml.Node {
// Make sure that isJsonScript is used before `isValidScript`. We bail out
// early if the ScriptNode is of type="application/json" since it wouldn't
// have any src url to modify.
@@ -18,7 +20,7 @@ function sxgTransform(node: posthtml.Node, options: OptionSet = {}): posthtml.No
}
if (options.minified) {
- const src = node.attrs.src;
+ const {src} = node.attrs;
node.attrs.src = src.replace('.js', '.sxg.js');
} else {
const url = new URL(node.attrs.src);
@@ -33,10 +35,12 @@ function sxgTransform(node: posthtml.Node, options: OptionSet = {}): posthtml.No
* Returns a function that will transform script node sources into their sxg counterparts.
* @param options
*/
-export default function(options: OptionSet = {}): (tree: posthtml.Node) => void {
- return function(tree: posthtml.Node) {
+export default function (
+ options: OptionSet = {}
+): (tree: posthtml.Node) => void {
+ return function (tree: posthtml.Node) {
tree.match({tag: 'script'}, (script) => {
return sxgTransform(script, options);
});
- }
+ };
}
diff --git a/build-system/server/new-server/transforms/transform.ts b/build-system/server/new-server/transforms/transform.ts
index 360ab893508e..a8a903205940 100644
--- a/build-system/server/new-server/transforms/transform.ts
+++ b/build-system/server/new-server/transforms/transform.ts
@@ -1,11 +1,10 @@
-
-
import fs from 'fs';
import minimist from 'minimist';
import posthtml from 'posthtml';
-import transformModules from './modules/modules-transform';
+
import transformCdnSrcs from './cdn/cdn-transform';
import transformCss from './css/css-transform';
+import transformModules from './modules/modules-transform';
const argv = minimist(process.argv.slice(2));
const FOR_TESTING = argv._.includes('integration');
@@ -20,15 +19,10 @@ const defaultTransformConfig = {
useMaxNames: !argv.minified,
};
-const transforms = [
- transformCdnSrcs(defaultTransformConfig),
-];
+const transforms = [transformCdnSrcs(defaultTransformConfig)];
if (ESM) {
- transforms.unshift(
- transformCss(),
- transformModules(defaultTransformConfig),
- );
+ transforms.unshift(transformCss(), transformModules(defaultTransformConfig));
}
export async function transform(fileLocation: string): Promise {
diff --git a/build-system/server/new-server/transforms/tsconfig.json b/build-system/server/new-server/transforms/tsconfig.json
index 2185fda0e0b1..fe231cb4f1d9 100644
--- a/build-system/server/new-server/transforms/tsconfig.json
+++ b/build-system/server/new-server/transforms/tsconfig.json
@@ -8,7 +8,6 @@
"outDir": "dist",
"sourceMap": true,
"moduleResolution": "node",
- "target": "ES2019",
"module": "CommonJS",
"allowJs": false,
"noUnusedLocals": true,
diff --git a/build-system/server/new-server/transforms/utilities/cdn-tag.ts b/build-system/server/new-server/transforms/utilities/cdn-tag.ts
index 11224203624f..51d2533a29d4 100644
--- a/build-system/server/new-server/transforms/utilities/cdn-tag.ts
+++ b/build-system/server/new-server/transforms/utilities/cdn-tag.ts
@@ -1,10 +1,8 @@
-
-
+import {extname, format, parse} from 'path';
import posthtml from 'posthtml';
import {URL} from 'url';
-import {extname} from 'path';
+
import {VALID_CDN_ORIGIN} from './cdn';
-import {parse, format} from 'path';
export interface ScriptNode extends posthtml.Node {
tag: 'script';
@@ -20,7 +18,10 @@ function isValidScriptExtension(url: URL): boolean {
return VALID_SCRIPT_EXTENSIONS.includes(extname(url.pathname));
}
-export function isValidOrigin(url: URL, looseOriginUrlCheck?: boolean): boolean {
+export function isValidOrigin(
+ url: URL,
+ looseOriginUrlCheck?: boolean
+): boolean {
return looseOriginUrlCheck || url.origin === VALID_CDN_ORIGIN;
}
@@ -29,7 +30,7 @@ export function getCdnUrlAttr(node: posthtml.Node): string | null {
return 'src';
}
if (node.tag === 'link') {
- return 'href'
+ return 'href';
}
return null;
}
@@ -38,7 +39,10 @@ export function getCdnUrlAttr(node: posthtml.Node): string | null {
* Determines if a Node is really a ScriptNode.
* @param node
*/
-export function isValidScript(node: posthtml.Node, looseOriginUrlCheck?: boolean): node is ScriptNode {
+export function isValidScript(
+ node: posthtml.Node,
+ looseOriginUrlCheck?: boolean
+): node is ScriptNode {
if (node.tag !== 'script') {
return false;
}
@@ -73,6 +77,10 @@ export function toExtension(url: URL, extension: string): URL {
* This is a temporary measure to allow for a relaxed parsing of our
* fixture files' src urls before they are all fixed accordingly.
*/
-export function tryGetUrl(src: string, host: string = '0.0.0.0', port: number = 8000): URL {
+export function tryGetUrl(
+ src: string,
+ host: string = '0.0.0.0',
+ port: number = 8000
+): URL {
return new URL(src, `http://${host}:${port}`);
}
diff --git a/build-system/server/new-server/transforms/utilities/cdn.ts b/build-system/server/new-server/transforms/utilities/cdn.ts
index 60a20a94eb29..4670c714d410 100644
--- a/build-system/server/new-server/transforms/utilities/cdn.ts
+++ b/build-system/server/new-server/transforms/utilities/cdn.ts
@@ -1,8 +1,7 @@
-
-
+import {basename, format, parse} from 'path';
import {URL} from 'url';
-import {parse, format, basename} from 'path';
+// eslint-disable-next-line local/no-forbidden-terms
export const VALID_CDN_ORIGIN = 'https://cdn.ampproject.org';
export const AMP_MAIN_BINARIES_RENAMES = new Map([
@@ -19,7 +18,8 @@ export const AMP_MAIN_BINARIES_RENAMES = new Map([
]);
/**
- * @param minifiedBasename should be without extension
+ * @param {string} minifiedBasename should be without extension
+ * @return {string}
*/
function getMinifiedName(minifiedBasename: string): string {
const renamedBasename = AMP_MAIN_BINARIES_RENAMES.get(minifiedBasename);
@@ -90,6 +90,10 @@ export function CDNURLToLocalHostRelativeAbsoluteDist(
/**
* Convert an existing URL to one from a specific RTV.
+ * @param url
+ * @param mode
+ * @param pathnames
+ * @param extension
*/
export function CDNURLToRTVURL(
url: URL,
diff --git a/build-system/server/new-server/transforms/utilities/lazy.ts b/build-system/server/new-server/transforms/utilities/lazy.ts
new file mode 100644
index 000000000000..899088dbaf81
--- /dev/null
+++ b/build-system/server/new-server/transforms/utilities/lazy.ts
@@ -0,0 +1,15 @@
+export class Lazy {
+ private declare initializer_: () => T;
+ private declare value_: T | undefined;
+
+ constructor(initializer: () => T) {
+ this.initializer_ = initializer;
+ }
+
+ public value(): T {
+ if (this.value_ == undefined) {
+ this.value_ = this.initializer_();
+ }
+ return this.value_;
+ }
+}
diff --git a/build-system/server/new-server/transforms/utilities/option-set.ts b/build-system/server/new-server/transforms/utilities/option-set.ts
index c30fc4dd08db..d866d40cf1cc 100644
--- a/build-system/server/new-server/transforms/utilities/option-set.ts
+++ b/build-system/server/new-server/transforms/utilities/option-set.ts
@@ -1,6 +1,4 @@
-
-
- /**
+/**
* A list of options to correspond with options.json for testing purposes.
* To add an option, add the corresponding key-value pair into the
* options.json, then add the field to this interface.
diff --git a/build-system/server/routes/a4a-envelopes.js b/build-system/server/routes/a4a-envelopes.js
index 5cf3227ddcae..9770d9afc209 100644
--- a/build-system/server/routes/a4a-envelopes.js
+++ b/build-system/server/routes/a4a-envelopes.js
@@ -1,5 +1,4 @@
const express = require('express');
-const fetch = require('node-fetch');
const fs = require('fs');
const {getServeMode, replaceUrls} = require('../app-utils');
const {log} = require('../../common/logging');
@@ -122,14 +121,14 @@ function getInaboxUrl(req, extraExperiment) {
* If the URL does not return text, returns null.
* @param {string} template
* @param {string} url
- * @param {Object} query
+ * @param {object} query
* @return {!Promise}
*/
async function requestFromUrl(template, url, query) {
const response = await fetch(url);
if (
!response.headers.has('Content-Type') ||
- response.headers.get('Content-Type').startsWith('text/html')
+ response.headers.get('Content-Type')?.startsWith('text/html')
) {
return fillTemplate(template, url, query, await response.text());
}
@@ -140,7 +139,7 @@ async function requestFromUrl(template, url, query) {
* Fill out a template with some common variables.
* @param {string} template
* @param {string} url
- * @param {Object} query
+ * @param {object} query
* @param {string=} body
* @return {string}
*/
diff --git a/build-system/server/shadow-viewer.js b/build-system/server/shadow-viewer.js
index 4cd64d48e446..ebab6a242a03 100644
--- a/build-system/server/shadow-viewer.js
+++ b/build-system/server/shadow-viewer.js
@@ -128,21 +128,20 @@ const SCRIPT = `
};
`;
-const renderShadowViewer = ({baseHref, src}) =>
- html`
-
-
-
-
- Shadow Viewer
-
-
-
-
-
-
- `;
+const renderShadowViewer = ({baseHref, src}) => html`
+
+
+
+
+ Shadow Viewer
+
+
+
+
+
+
+`;
module.exports = {renderShadowViewer};
diff --git a/build-system/server/typescript-compile.js b/build-system/server/typescript-compile.js
index 5d1a67922eb0..a594914e19d7 100644
--- a/build-system/server/typescript-compile.js
+++ b/build-system/server/typescript-compile.js
@@ -4,7 +4,6 @@ const path = require('path');
const {accessSync} = require('fs-extra');
const {cyan, green} = require('kleur/colors');
const {endBuildStep} = require('../tasks/helpers');
-const {exec} = require('../common/exec');
const {log} = require('../common/logging');
const SERVER_TRANSFORM_PATH = 'build-system/server/new-server/transforms';
@@ -40,18 +39,6 @@ async function buildNewServer() {
endBuildStep('Built', 'AMP Server', startTime);
}
-/**
- * Checks all types in the generated output after running server transforms.
- */
-function typecheckNewServer() {
- const cmd = `npx -p typescript tsc --noEmit -p ${CONFIG_PATH}`;
- const result = exec(cmd, {'stdio': ['inherit', 'inherit', 'pipe']});
-
- if (result.status != 0) {
- throw new Error(`Typechecking AMP Server failed.`);
- }
-}
-
/**
* Requires a module output from `./new-server/transforms`.
* If all of `new-server` was built, this simply imports an existing module.
@@ -79,7 +66,6 @@ function requireNewServerModule(modulePath) {
module.exports = {
buildNewServer,
- typecheckNewServer,
requireNewServerModule,
SERVER_TRANSFORM_PATH,
};
diff --git a/build-system/status-page/comment.js b/build-system/status-page/comment.js
index 97c74f52fc96..7b9a557f16da 100644
--- a/build-system/status-page/comment.js
+++ b/build-system/status-page/comment.js
@@ -3,7 +3,6 @@
* Add progress comment for Stable and LTS cherry-picks
*/
-const fetch = require('node-fetch');
const {getChannels, steps} = require('./common');
const {log} = require('../common/logging');
diff --git a/build-system/status-page/incident.js b/build-system/status-page/incident.js
index a94968ea54d1..ad1b743958f0 100644
--- a/build-system/status-page/incident.js
+++ b/build-system/status-page/incident.js
@@ -3,7 +3,6 @@
* Sync status.amp.dev with cherry-pick progress
*/
-const fetch = require('node-fetch');
const {getChannels, getFormats, steps} = require('./common');
const {log} = require('../common/logging');
diff --git a/build-system/task-runner/OWNERS b/build-system/task-runner/OWNERS
index 002922bb9cc9..69a88bfe0386 100644
--- a/build-system/task-runner/OWNERS
+++ b/build-system/task-runner/OWNERS
@@ -4,7 +4,7 @@
{
rules: [
{
- owners: [{name: 'ampproject/wg-infra'}, {name: 'rsimha', notify: true}],
+ owners: [{name: 'ampproject/wg-infra'}],
},
],
}
diff --git a/build-system/task-runner/amp-task-runner.js b/build-system/task-runner/amp-task-runner.js
index e2be437b17cc..db342c1aa31f 100644
--- a/build-system/task-runner/amp-task-runner.js
+++ b/build-system/task-runner/amp-task-runner.js
@@ -4,7 +4,7 @@
*/
const argv = require('minimist')(process.argv.slice(2));
-const commander = require('commander');
+const {program} = require('commander');
const esprima = require('esprima');
const fs = require('fs-extra');
const os = require('os');
@@ -16,6 +16,7 @@ const {
const {cyan, green, magenta, red} = require('kleur/colors');
const {isCiBuild} = require('../common/ci');
const {log} = require('../common/logging');
+const {isCircleciBuild} = require('../common/ci');
/**
* @typedef {Function & {
@@ -44,8 +45,8 @@ function getTime(start) {
return mins !== 0
? `${mins}m ${secs}s`
: secs != 0
- ? `${secs}s`
- : `${msecs}ms`;
+ ? `${secs}s`
+ : `${msecs}ms`;
}
/**
@@ -93,6 +94,13 @@ async function runTask(taskName, taskFunc) {
log(`Starting '${cyan(taskName)}'...`);
await taskFunc();
log('Finished', `'${cyan(taskName)}'`, 'after', magenta(getTime(start)));
+ // For some reason, the `e2e` and `unit` tasks get stuck on CircleCI after
+ // testing is finishing, despite reaching this point in the code. This is a
+ // temporary workaround until we understand exactly why and fix the root
+ // cause. TODO(@ampproject/wg-infra): fix this.
+ if (isCircleciBuild() && ['e2e', 'unit'].includes(taskName)) {
+ process.exit(); // process.exitCode is set in ../tasks/e2e/index.js:171
+ }
} catch (err) {
log(`'${cyan(taskName)}'`, red('errored after'), magenta(getTime(start)));
log(err);
@@ -210,7 +218,7 @@ function createTask(
argv._.length === 0 && taskName == 'default' && !isHelpTask; // `amp`
if (isHelpTask) {
- const task = commander.command(cyan(taskName));
+ const task = program.command(cyan(taskName));
const description = getTaskDescription(taskSourceFileName, taskFuncName);
task.description(description);
}
@@ -218,7 +226,7 @@ function createTask(
startAtRepoRoot();
ensureUpdatedPackages(taskSourceFileName);
const taskFunc = getTaskFunc(taskSourceFileName, taskFuncName);
- const task = commander.command(taskName, {isDefault: isDefaultTask});
+ const task = program.command(taskName, {isDefault: isDefaultTask});
task.description(green(taskFunc.description));
task.allowUnknownOption(); // Fall through to validateUsage()
task.helpOption('--help', 'Print this list of flags');
@@ -235,7 +243,7 @@ function createTask(
/**
* Validates usage by examining task and flag invocation.
- * @param {Object} task
+ * @param {object} task
* @param {string} taskName
* @param {TaskFuncDef} taskFunc
*/
@@ -259,18 +267,18 @@ function validateUsage(task, taskName, taskFunc) {
* was called.
*/
function finalizeRunner() {
- commander.addHelpCommand(false); // We already have `amp --help` and `amp --help`
+ program.addHelpCommand(false); // We already have `amp --help` and `amp --help`
if (isHelpTask) {
- commander.helpOption('--help', 'Print this list of tasks');
- commander.usage(' ');
+ program.helpOption('--help', 'Print this list of tasks');
+ program.usage(' ');
}
- commander.on('command:*', (args) => {
+ program.on('command:*', (args) => {
log(red('ERROR:'), 'Unknown task', cyan(args.join(' ')));
log('⤷ Run', cyan('amp --help'), 'for a full list of tasks.');
log('⤷ Run', cyan('amp --help'), 'for help with a specific task.');
process.exitCode = 1;
});
- commander.parse();
+ program.parse();
}
module.exports = {
diff --git a/build-system/task-runner/install-amp-task-runner.js b/build-system/task-runner/install-amp-task-runner.js
index dbb5c7c52f0f..d61447ecfabd 100644
--- a/build-system/task-runner/install-amp-task-runner.js
+++ b/build-system/task-runner/install-amp-task-runner.js
@@ -20,8 +20,8 @@ const ampCliRunner = 'build-system/task-runner/amp-cli-runner.js';
* @return {Promise}
*/
async function installAmpTaskRunner() {
- const npmBinDir = getStdout('npm bin --global').trim();
- const ampBinary = path.join(npmBinDir, 'amp');
+ const npmBinDir = getStdout('npm prefix --global').trim();
+ const ampBinary = path.join(npmBinDir, 'bin', 'amp');
const ampBinaryExists = await fs.pathExists(ampBinary);
if (ampBinaryExists) {
const ampBinaryIsAScript = !(await fs.lstat(ampBinary)).isSymbolicLink();
diff --git a/build-system/tasks/3p-vendor-helpers.js b/build-system/tasks/3p-vendor-helpers.js
index 6d2f867a357a..695ee56296b3 100644
--- a/build-system/tasks/3p-vendor-helpers.js
+++ b/build-system/tasks/3p-vendor-helpers.js
@@ -7,8 +7,21 @@ const {VERSION} = require('../compile/internal-version');
const {watchDebounceDelay} = require('./helpers');
const {watch} = require('chokidar');
+const argv = require('minimist')(process.argv.slice(2));
+
const SRCPATH = ['3p/vendors/*.js'];
+/**
+ * Returns true when the CLI flags indicate that vendor configs should be built.
+ * @return {boolean}
+ */
+function shouldBuildVendorConfigs() {
+ return (
+ argv.vendor_configs ||
+ (!argv.core_runtime_only && !argv.extensions && !argv.extensions_from)
+ );
+}
+
/**
* Entry point for 'amp ad-vendor-configs'
* Compile all the vendor configs and drop in the dist folder
@@ -77,7 +90,7 @@ async function doBuild3pVendor(jsBundles, name, options) {
/**
* Generate bundles for all 3p vendors to be built.
- * @return {Object}
+ * @return {object}
*/
function generateBundles() {
const bundles = {};
@@ -123,6 +136,7 @@ function listVendors() {
}
module.exports = {
+ shouldBuildVendorConfigs,
buildVendorConfigs,
doBuild3pVendor,
generateBundles,
diff --git a/build-system/tasks/OWNERS b/build-system/tasks/OWNERS
index ac5da24d6dfe..d249c3009d96 100644
--- a/build-system/tasks/OWNERS
+++ b/build-system/tasks/OWNERS
@@ -8,10 +8,7 @@
},
{
pattern: 'check-types.js',
- owners: [
- {name: 'ampproject/wg-performance'},
- {name: 'rcebulko', required: true},
- ],
+ owners: [{name: 'ampproject/wg-performance'}, {name: 'rcebulko'}],
},
],
}
diff --git a/build-system/tasks/ava.js b/build-system/tasks/ava.js
index eec6178a4bf2..cb1663761376 100644
--- a/build-system/tasks/ava.js
+++ b/build-system/tasks/ava.js
@@ -6,14 +6,15 @@ const {execOrDie} = require('../common/exec');
const {sync: globbySync} = require('globby');
const testFiles = [
+ 'build-system/compile/generate/test/*.test.js',
'build-system/release-tagger/test/*test*.js',
'build-system/server/app-index/test/*test*.js',
'build-system/server/test/app-utils.test.js',
- 'build-system/tasks/css/test/bento-css.test.js',
'build-system/tasks/get-zindex/get-zindex.test.js',
'build-system/tasks/make-extension/test/test.js',
'build-system/tasks/markdown-toc/test/test.js',
'build-system/tasks/prepend-global/prepend-global.test.js',
+ 'build-system/tasks/remap-dependencies-plugin/test-remap-dependencies.js',
];
let targetFiles;
diff --git a/build-system/tasks/bento-helpers.js b/build-system/tasks/bento-helpers.js
deleted file mode 100644
index 91af23be6f91..000000000000
--- a/build-system/tasks/bento-helpers.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * @param {string} name
- * @return {string}
- */
-function getBentoName(name) {
- return name.replace(/^amp-/, 'bento-');
-}
-
-/**
- * @param {string} name
- * @return {string} name without `amp-` or `bento-` prefix
- */
-function getNameWithoutComponentPrefix(name) {
- return name.replace(/^(amp|bento)-/, '');
-}
-
-module.exports = {getBentoName, getNameWithoutComponentPrefix};
diff --git a/build-system/tasks/build-story-localization.js b/build-system/tasks/build-story-localization.js
new file mode 100755
index 000000000000..e6dfcd39a4ba
--- /dev/null
+++ b/build-system/tasks/build-story-localization.js
@@ -0,0 +1,107 @@
+const fs = require('fs-extra');
+const fastGlob = require('fast-glob');
+const pathMod = require('path');
+const debounce = require('../common/debounce');
+const {endBuildStep, watchDebounceDelay} = require('./helpers');
+const {watch} = require('chokidar');
+const {readJson} = require('../json-locales');
+
+const dest = 'dist/v0';
+
+const LOCALES_DIR = 'extensions/amp-story/1.0/_locales/*.json';
+
+const FALLBACK_LANGUAGE_CODE = 'en';
+
+const LANGUAGE_CODE_CHUNK_REGEX = /\w+/gi;
+
+/**
+ * Finds fallback language codes for the current language code.
+ * @param {string} languageCode the language code to get fallbacks for
+ * @return {string[]}
+ */
+function getLanguageCodeFallbacks(languageCode) {
+ if (!languageCode) {
+ return [FALLBACK_LANGUAGE_CODE];
+ }
+
+ /** @type {string[]} */
+ const matches = languageCode.match(LANGUAGE_CODE_CHUNK_REGEX) || [];
+ return matches.reduce(
+ (fallbackLanguageCodeList, _, index) => {
+ const fallbackLanguageCode = matches
+ .slice(0, index + 1)
+ .join('-')
+ .toLowerCase();
+ fallbackLanguageCodeList.push(fallbackLanguageCode);
+ return fallbackLanguageCodeList;
+ },
+ [FALLBACK_LANGUAGE_CODE]
+ );
+}
+
+/**
+ * Reads the language files found in amp-story and stores it in a
+ * Object.
+ * @return {Promise}
+ */
+async function getLanguageStrings() {
+ const langs = Object.create(null);
+ const jsonFiles = await fastGlob(LOCALES_DIR);
+ for (const jsonFile of jsonFiles) {
+ const langKey = pathMod.basename(jsonFile, '.json');
+ langs[langKey] = readJson(jsonFile);
+ }
+ return langs;
+}
+
+/**
+ * Retrieves the fallback language codes for each current locale
+ * and merges any strings from the fallback language.
+ * @param {object} languages
+ */
+function mergeFallbacks(languages) {
+ for (const langKey in languages) {
+ languages[langKey] = getLanguageCodeFallbacks(langKey)
+ .map((x) => languages[x])
+ .reduce((prev, cur) => Object.assign(prev, cur), Object.create(null));
+ }
+}
+
+/**
+ * Write the localization files to dist/v0/
+ * @return {Promise}
+ */
+async function writeStoryLocalizationFiles() {
+ const startTime = Date.now();
+ await fs.ensureDir(dest);
+ const languages = await getLanguageStrings();
+ mergeFallbacks(languages);
+ // Write out each individual lang file.
+ for (const langKey in languages) {
+ await fs.writeJson(`${dest}/amp-story.${langKey}.json`, languages[langKey]);
+ }
+ // Write out all the languages into one file.
+ await fs.writeJson(`${dest}/amp-story.all-lang.json`, languages);
+ endBuildStep('Generated Story JSON Localization files into', dest, startTime);
+}
+
+/**
+ * Flattens the structure of the json locale strings and writes them out to the
+ * dist directory.
+ * @param {Object=} options
+ * @return {Promise}
+ */
+async function buildStoryLocalization(options = {}) {
+ if (options.watch) {
+ watch(LOCALES_DIR).on(
+ 'change',
+ debounce(writeStoryLocalizationFiles, watchDebounceDelay)
+ );
+ }
+ await writeStoryLocalizationFiles();
+}
+
+module.exports = {buildStoryLocalization};
+
+buildStoryLocalization.description =
+ 'Flattens the structure of the json locale strings and writes them out to the dist directory';
diff --git a/build-system/tasks/build.js b/build-system/tasks/build.js
index 364b94cdc2b0..43a4609d7e58 100644
--- a/build-system/tasks/build.js
+++ b/build-system/tasks/build.js
@@ -10,9 +10,13 @@ const {
exitCtrlcHandler,
} = require('../common/ctrlcHandler');
const {buildExtensions} = require('./extension-helpers');
-const {buildVendorConfigs} = require('./3p-vendor-helpers');
+const {
+ buildVendorConfigs,
+ shouldBuildVendorConfigs,
+} = require('./3p-vendor-helpers');
const {compileCss} = require('./css');
const {parseExtensionFlags} = require('./extension-helpers');
+const {buildStoryLocalization} = require('./build-story-localization');
const argv = require('minimist')(process.argv.slice(2));
@@ -24,7 +28,11 @@ const argv = require('minimist')(process.argv.slice(2));
* @return {Promise}
*/
async function runPreBuildSteps(options) {
- return Promise.all([compileCss(options), bootstrapThirdPartyFrames(options)]);
+ return Promise.all([
+ buildStoryLocalization(options),
+ compileCss(options),
+ bootstrapThirdPartyFrames(options),
+ ]);
}
/**
@@ -51,7 +59,8 @@ async function build() {
}
await buildExtensions(options);
- if (!argv.core_runtime_only) {
+ // This step is to be run only during a full `amp build`.
+ if (shouldBuildVendorConfigs()) {
await buildVendorConfigs(options);
}
if (!argv.watch) {
@@ -74,6 +83,8 @@ build.flags = {
extensions_from: 'Build only the extensions from the listed AMP(s)',
noextensions: 'Build with no extensions',
core_runtime_only: 'Build only the core runtime',
+ vendor_configs:
+ 'Build 3p party vendor configuration files (defaults to true unless one of --core_runtime_only, --extensions, or --extensions_from is set)',
coverage: 'Add code coverage instrumentation to JS files using istanbul',
version_override: 'Override the version written to AMP_CONFIG',
watch: 'Watch for changes in files, re-builds when detected',
diff --git a/build-system/tasks/bundle-size/index.js b/build-system/tasks/bundle-size/index.js
index 000dcedcde2b..ea23ef144474 100644
--- a/build-system/tasks/bundle-size/index.js
+++ b/build-system/tasks/bundle-size/index.js
@@ -2,7 +2,6 @@
const argv = require('minimist')(process.argv.slice(2));
const fastGlob = require('fast-glob');
-const fetch = require('node-fetch');
const path = require('path');
const url = require('url');
const {
@@ -35,11 +34,11 @@ const replacementExpression = new RegExp(internalRuntimeVersion, 'g');
/**
* Get the brotli bundle sizes of the current build after normalizing the RTV number.
*
- * @return {Promise>} the bundle size in KB rounded to 2 decimal
+ * @return {Promise<{[key: string]: number}>} the bundle size in KB rounded to 2 decimal
* points.
*/
async function getBrotliBundleSizes() {
- /** @type {Object} */
+ /** @type {{[key: string]: number}} */
const bundleSizes = {};
const sizes = await report(
filesizeConfigPath,
diff --git a/build-system/tasks/check-analytics-vendors-list.js b/build-system/tasks/check-analytics-vendors-list.js
index 3b7484d57e5a..15a06b35a5c5 100644
--- a/build-system/tasks/check-analytics-vendors-list.js
+++ b/build-system/tasks/check-analytics-vendors-list.js
@@ -71,7 +71,10 @@ async function checkAnalyticsVendorsList() {
const name = nameMatch
.split(/[,\s]+/)
.shift()
- .replace(/[`"']/g, '');
+ ?.replace(/[`"']/g, '');
+ if (!name) {
+ throw new Error(`Could not locate vendor name in: "${nameMatch}"`);
+ }
if (!vendors.includes(name)) {
tentative = tentative.replace(fullMatch, '');
}
diff --git a/build-system/tasks/check-links.js b/build-system/tasks/check-links.js
index 3c51d188d9a5..917ee205ba10 100644
--- a/build-system/tasks/check-links.js
+++ b/build-system/tasks/check-links.js
@@ -12,6 +12,10 @@ const {log, logLocalDev} = require('../common/logging');
const LARGE_REFACTOR_THRESHOLD = 20;
const GITHUB_BASE_PATH = 'https://github.com/ampproject/amphtml/blob/main/';
+// Certain sites do not like the default user agent string.
+const USER_AGENT =
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36';
+
let filesIntroducedByPr;
/**
@@ -109,12 +113,24 @@ function checkLinksInFile(file) {
{pattern: /localhost/},
// codepen returns a 503 for these link checks
{pattern: /https:\/\/codepen.*/},
+ // developers.google.com links are assumed to exist
+ {pattern: /https:\/\/developers.google.com\/.*/},
+ // anchor links should be ignored
+ {pattern: /^#/},
// GitHub PRs and Issues can be assumed to exist
{pattern: /https:\/\/github.com\/ampproject\/amphtml\/(pull|issue)\/.*/},
// Templated links are merely used to generate other markdown files.
{pattern: /\$\{[a-z]*\}/},
{pattern: /https:.*?__component_name\w*__/},
],
+ httpHeaders: [
+ {
+ urls: ['https://'],
+ headers: {
+ 'User-Agent': USER_AGENT,
+ },
+ },
+ ],
};
return new Promise((resolve, reject) => {
diff --git a/build-system/tasks/check-owners.js b/build-system/tasks/check-owners.js
index 003baf0630d6..0a83aadd6253 100644
--- a/build-system/tasks/check-owners.js
+++ b/build-system/tasks/check-owners.js
@@ -6,7 +6,6 @@
'use strict';
-const fetch = require('node-fetch');
const fs = require('fs-extra');
const JSON5 = require('json5');
const {cyan, green, red} = require('kleur/colors');
diff --git a/build-system/tasks/check-sourcemaps.js b/build-system/tasks/check-sourcemaps.js
index 33789f0291f4..cd3ef7b93a08 100644
--- a/build-system/tasks/check-sourcemaps.js
+++ b/build-system/tasks/check-sourcemaps.js
@@ -3,17 +3,15 @@
const argv = require('minimist')(process.argv.slice(2));
const fs = require('fs');
const {cyan, green, red} = require('kleur/colors');
-const {decode} = require('sourcemap-codec');
+const {decode} = require('@jridgewell/sourcemap-codec');
const {execOrDie} = require('../common/exec');
const {log} = require('../common/logging');
-const {shouldUseClosure} = require('./helpers');
// Compile related constants
-const distWithSourcemapsCmd = 'amp dist --core_runtime_only --full_sourcemaps';
-const v0JsMap = 'dist/v0.js.map';
+const distWithSourcemapsCmd =
+ 'amp dist --core_runtime_only --extensions=amp-audio --full_sourcemaps';
const distEsmWithSourcemapsCmd =
- 'amp dist --core_runtime_only --full_sourcemaps --esm';
-const v0MjsMap = 'dist/v0.mjs.map';
+ 'amp dist --core_runtime_only --extensions=amp-audio --full_sourcemaps --esm';
// Sourcemap URL related constants
const sourcemapUrlMatcher =
@@ -113,15 +111,8 @@ function checkSourcemapMappings(sourcemapJson, map) {
throw new Error('Could not find mappings array');
}
- // In closure builds there is a newline immediately after the AMP_CONFIG.
- // This whole segment has no mapping to the original source.
- // Therefore we must skip the zeroth sub-array, indicated by a ';'.
- // In esbuild builds there is no newline after the config, so the
- // first line is fair game.
- const firstLineIndex = shouldUseClosure() ? 1 : 0;
-
// See https://www.npmjs.com/package/sourcemap-codec#usage.
- const firstLineMapping = decode(sourcemapJson.mappings)[firstLineIndex][0];
+ const firstLineMapping = decode(sourcemapJson.mappings)[1][0];
const [, sourceIndex = 0, sourceCodeLine = 0, sourceCodeColumn] =
firstLineMapping;
@@ -134,7 +125,7 @@ function checkSourcemapMappings(sourcemapJson, map) {
'.';
// Mapping related constants
- let expectedFirstLine = map.includes('mjs')
+ const expectedFirstLine = map.includes('mjs')
? {
file: 'src/polyfills/abort-controller.js',
code: 'class AbortController {',
@@ -144,13 +135,6 @@ function checkSourcemapMappings(sourcemapJson, map) {
code: 'function _defineProperties(target, props) {',
};
- // TODO(samouri): remove branching once we decide for or against closure
- if (shouldUseClosure()) {
- expectedFirstLine = map.includes('mjs')
- ? {file: 'src/core/mode/version.js', code: 'function version() {'}
- : {file: 'src/core/mode/prod.js', code: 'export function isProd() {'};
- }
-
if (firstLineFile != expectedFirstLine.file) {
log(red('ERROR:'), 'Found mapping for incorrect file.');
log('Actual:', cyan(firstLineFile));
@@ -169,12 +153,15 @@ function checkSourcemapMappings(sourcemapJson, map) {
/**
* @param {string} map The map filepath to check
+ * @param {boolean} checkMappings Whether to test a mapping points to a correct source.
*/
-function checkSourceMap(map) {
+function checkSourceMap(map, checkMappings) {
const sourcemapJson = getSourcemapJson(map);
checkSourcemapUrl(sourcemapJson, map);
checkSourcemapSources(sourcemapJson, map);
- checkSourcemapMappings(sourcemapJson, map);
+ if (checkMappings) {
+ checkSourcemapMappings(sourcemapJson, map);
+ }
}
/**
@@ -184,8 +171,12 @@ function checkSourceMap(map) {
*/
async function checkSourcemaps() {
maybeBuild();
- checkSourceMap(v0JsMap);
- checkSourceMap(v0MjsMap);
+ checkSourceMap('dist/v0.js.map', true);
+ checkSourceMap('dist/v0.mjs.map', true);
+
+ checkSourceMap('dist/v0/amp-audio-0.1.js.map', false);
+ checkSourceMap('dist/v0/amp-audio-0.1.mjs.map', false);
+
log(green('SUCCESS:'), 'All sourcemaps checks passed.');
}
diff --git a/build-system/tasks/check-types.js b/build-system/tasks/check-types.js
index 9fb9c49d688a..2c08658e85a0 100644
--- a/build-system/tasks/check-types.js
+++ b/build-system/tasks/check-types.js
@@ -1,203 +1,34 @@
const argv = require('minimist')(process.argv.slice(2));
-const fastGlob = require('fast-glob');
const {
createCtrlcHandler,
exitCtrlcHandler,
} = require('../common/ctrlcHandler');
-const {
- displayLifecycleDebugging,
-} = require('../compile/debug-compilation-lifecycle');
-const {cleanupBuildDir, closureCompile} = require('../compile/compile');
const {compileCss} = require('./css');
const {compileJison} = require('./compile-jison');
-const {cyan, green, red, yellow} = require('kleur/colors');
+const {cyan, green} = require('kleur/colors');
const {execOrThrow} = require('../common/exec');
-const {extensions, maybeInitializeExtensions} = require('./extension-helpers');
-const {logClosureCompilerError} = require('../compile/closure-compile');
const {log} = require('../common/logging');
-const {typecheckNewServer} = require('../server/typescript-compile');
-
-// We provide glob lists for core src/externs since any other targets are
-// allowed to depend on core.
-const CORE_SRCS_GLOBS = [
- 'src/core/**/*.js',
-
- // Needed for CSS escape polyfill
- 'third_party/css-escape/css-escape.js',
-];
-
-/**
- * Generates a list of source file paths for extensions to type-check
- * Must be run after `maybeInitializeExtensions`
- * @function
- * @return {!Array}
- */
-const getExtensionSrcPaths = () =>
- Object.values(extensions)
- .filter((ext) => !ext.noTypeCheck)
- .map(({name, version}) => `extensions/${name}/${version}/${name}.js`)
- .sort();
/**
* Object of targets to check with TypeScript.
*
- * @type {Object}
+ * @type {{[key: string]: string}}
*/
const TSC_TYPECHECK_TARGETS = {
- 'compiler': 'src/compiler',
'carousel': 'extensions/amp-carousel/0.1',
+ 'compiler': 'src/compiler',
+ 'core': 'src/core',
+ 'experiments': 'src/experiments',
+ 'preact': 'src/preact',
+ 'new-server': 'build-system/server/new-server/transforms',
};
-/**
- * The main configuration location to add/edit targets for type checking.
- * Properties besides `entryPoints` are passed on to `closureCompile` as
- * options. * Values may be objects or functions, as some require initialization
- * or filesystem access and shouldn't be run until needed.
- *
- * When updating type-check targets, `srcGlobs` is the primary value you care
- * about. This is a list of source files to include in type-checking. For any
- * glob pattern ending in *.js, externs are picked up following the same pattern
- * but ending in *.extern.js. Note this only applies to *.js globs, and not
- * specific filenames. If just an array of strings is provided instead of an
- * object, it is treated as srcGlobs.
- *
- * @type {Object|Object|function():Object>}
- */
-const CLOSURE_TYPE_CHECK_TARGETS = {
- // Below are targets containing individual directories which are fully passing
- // type-checking. Do not remove or disable anything on this list.
- // Goal: Remove 'QUIET' from all of them.
- // To test a target locally:
- // `amp check-types --target=src-foo-bar --warning_level=verbose`
- 'src-amp-story-player': {
- srcGlobs: ['src/amp-story-player/**/*.js'],
- warningLevel: 'QUIET',
- },
- 'src-core': CORE_SRCS_GLOBS,
- 'src-experiments': ['src/experiments/**/*.js', ...CORE_SRCS_GLOBS],
- 'src-inabox': {
- srcGlobs: ['src/inabox/**/*.js'],
- warningLevel: 'QUIET',
- },
- 'src-polyfills': [
- 'src/polyfills/**/*.js',
- // Exclude fetch its dependencies are cleaned up/extracted to core.
- '!src/polyfills/fetch.js',
- ...CORE_SRCS_GLOBS,
- ],
- 'src-preact': {
- srcGlobs: ['src/preact/**/*.js', ...CORE_SRCS_GLOBS],
- warningLevel: 'QUIET',
- },
- 'src-purifier': {
- srcGlobs: ['src/purifier/**/*.js'],
- warningLevel: 'QUIET',
- },
- 'src-service': {
- srcGlobs: ['src/service/**/*.js'],
- warningLevel: 'QUIET',
- },
- 'src-utils': {
- srcGlobs: ['src/utils/**/*.js'],
- warningLevel: 'QUIET',
- },
- 'src-web-worker': {
- srcGlobs: ['src/web-worker/**/*.js'],
- warningLevel: 'QUIET',
- },
-
- // Ensures that all files in src and extensions pass the specified set of
- // errors.
- 'low-bar': {
- entryPoints: ['src/amp.js'],
- extraGlobs: ['{src,extensions}/**/*.js', ...getLowBarExclusions()],
- onError(msg) {
- const lowBarErrors = [
- 'JSC_BAD_JSDOC_ANNOTATION',
- 'JSC_INVALID_PARAM',
- 'JSC_TYPE_PARSE_ERROR',
- ];
- const lowBarRegex = new RegExp(lowBarErrors.join('|'));
-
- const targetErrors = msg
- .split('\n')
- .filter((s) => lowBarRegex.test(s))
- .join('\n')
- .trim();
-
- if (targetErrors.length) {
- logClosureCompilerError(targetErrors);
- throw new Error(`Type-checking failed for target ${cyan('low-bar')}`);
- }
- },
- },
-
- // TODO(#33631): Targets below this point are not expected to pass.
- // They can possibly be removed?
- 'src': {
- entryPoints: [
- 'src/amp.js',
- 'src/amp-shadow.js',
- 'src/inabox/amp-inabox.js',
- 'ads/alp/install-alp.js',
- 'ads/inabox/inabox-host.js',
- 'src/web-worker/web-worker.js',
- ],
- extraGlobs: ['src/inabox/*.js', '!node_modules/preact/**'],
- warningLevel: 'QUIET',
- },
- 'extensions': () => ({
- entryPoints: getExtensionSrcPaths(),
- extraGlobs: ['src/inabox/*.js', '!node_modules/preact/**'],
- warningLevel: 'QUIET',
- }),
- 'integration': {
- entryPoints: '3p/integration.js',
- externs: ['ads/ads.extern.js'],
- warningLevel: 'QUIET',
- },
- 'ampcontext': {
- entryPoints: '3p/ampcontext-lib.js',
- externs: ['ads/ads.extern.js'],
- warningLevel: 'QUIET',
- },
- 'iframe-transport-client': {
- entryPoints: '3p/iframe-transport-client-lib.js',
- externs: ['ads/ads.extern.js'],
- warningLevel: 'QUIET',
- },
-};
-
-/**
- * Produces a list of extern glob patterns from a list of source glob patterns.
- * ex. ['src/core/** /*.js'] => ['src/core/** /*.extern.js']
- * @param {!Array} srcGlobs
- * @return {!Array}
- */
-function externGlobsFromSrcGlobs(srcGlobs) {
- return srcGlobs
- .filter((glob) => glob.endsWith('*.js'))
- .map((glob) => glob.replace(/\*\.js$/, '*.extern.js'));
-}
-
-/**
- * Typecheck the given target using either tsc or closure.
- *
- * @param {string} targetName
- * @return {Promise}
- */
-async function typeCheck(targetName) {
- return TSC_TYPECHECK_TARGETS[targetName]
- ? tscTypeCheck(targetName)
- : closureTypeCheck(targetName);
-}
-
/**
* Performs tsc type-checking on the target provided.
* @param {string} targetName key in TSC_TYPECHECK_TARGETS
* @return {!Promise}
*/
-async function tscTypeCheck(targetName) {
+async function typeCheck(targetName) {
execOrThrow(
`npx -p typescript tsc --project ${TSC_TYPECHECK_TARGETS[targetName]}/tsconfig.json`,
`Type checking ${targetName} failed`
@@ -206,96 +37,7 @@ async function tscTypeCheck(targetName) {
}
/**
- * Returns the exclusion glob for telling closure to ignore all paths
- * being checked via TS.
- *
- * @return {string[]}
- */
-function getLowBarExclusions() {
- return Object.values(TSC_TYPECHECK_TARGETS).map((dir) => `!${dir}`);
-}
-
-/**
- * Performs closure type-checking on the target provided.
- * @param {string} targetName key in CLOSURE_TYPE_CHECK_TARGETS
- * @return {!Promise}
- */
-async function closureTypeCheck(targetName) {
- let target = CLOSURE_TYPE_CHECK_TARGETS[targetName];
- // Allow targets to be dynamically evaluated
- if (typeof target == 'function') {
- target = target();
- }
- // Allow targets to be specified as just an array of source globs
- if (Array.isArray(target)) {
- target = {srcGlobs: target};
- }
-
- if (!target) {
- log(
- red('ERROR:'),
- 'No type-check configuration defined for target',
- cyan(targetName)
- );
- throw new Error(
- `No type-check configuration defined for target ${targetName}`
- );
- }
-
- const {entryPoints = [], srcGlobs = [], externGlobs = [], ...opts} = target;
- externGlobs.push(...externGlobsFromSrcGlobs(srcGlobs));
-
- // If srcGlobs and externGlobs are defined, determine the externs/extraGlobs
- if (srcGlobs.length || externGlobs.length) {
- opts.externs = externGlobs.flatMap(fastGlob.sync);
-
- // Included globs should explicitly exclude any externs
- const excludedExterns = externGlobs.map((glob) => `!${glob}`);
- opts.extraGlobs = srcGlobs.concat(excludedExterns);
- }
-
- // If no entry point is defined, we want to scan the globs provided without
- // injecting extra dependencies.
- const noAddDeps = !entryPoints.length;
- // If the --warning_level flag is passed explicitly, it takes precedence.
- opts.warningLevel = argv.warning_level || opts.warningLevel || 'VERBOSE';
-
- // For type-checking, QUIET suppresses all warnings and can't affect the
- // resulting status, so there's no point in doing it.
- if (opts.warningLevel == 'QUIET') {
- log(
- yellow('WARNING:'),
- 'Warning level for target',
- cyan(targetName),
- `is set to ${cyan('QUIET')}; skipping`
- );
- return;
- }
-
- let errorMsg;
- if (target.onError) {
- // If an onError handler is defined, steal the output and let onError handle
- // logging
- opts.logger = (m) => (errorMsg = m);
- }
-
- await closureCompile(entryPoints, './dist', `${targetName}-check-types.js`, {
- noAddDeps,
- include3pDirectories: !noAddDeps,
- includePolyfills: !noAddDeps,
- typeCheckOnly: true,
- ...opts,
- }).catch((error) => {
- if (!target.onError) {
- throw error;
- }
- target.onError(errorMsg);
- });
- log(green('SUCCESS:'), 'Type-checking passed for target', cyan(targetName));
-}
-
-/**
- * Runs closure compiler's type checker against all AMP code.
+ * Runs TypeScript Compiler's type checker.
* @return {!Promise}
*/
async function checkTypes() {
@@ -303,18 +45,14 @@ async function checkTypes() {
// Prepare build environment
process.env.NODE_ENV = 'production';
- cleanupBuildDir();
- maybeInitializeExtensions();
- typecheckNewServer();
await Promise.all([compileCss(), compileJison()]);
// Use the list of targets if provided, otherwise check all targets
const targets = argv.targets
? argv.targets.split(/,/)
- : Object.keys({...TSC_TYPECHECK_TARGETS, ...CLOSURE_TYPE_CHECK_TARGETS});
+ : Object.keys(TSC_TYPECHECK_TARGETS);
log(`Checking types for targets: ${targets.map(cyan).join(', ')}`);
- displayLifecycleDebugging();
await Promise.all(targets.map(typeCheck));
exitCtrlcHandler(handlerProcess);
@@ -327,9 +65,5 @@ module.exports = {
/* eslint "local/camelcase": 0 */
checkTypes.description = 'Check source code for JS type errors';
checkTypes.flags = {
- closure_concurrency: 'Set the number of concurrent invocations of closure',
- debug: 'Output the file contents during compilation lifecycles',
targets: 'Comma-delimited list of targets to type-check',
- warning_level:
- "Optionally set closure's warning level to one of [quiet, default, verbose]",
};
diff --git a/build-system/tasks/cherry-pick.js b/build-system/tasks/cherry-pick.js
deleted file mode 100644
index 656ce2b86a85..000000000000
--- a/build-system/tasks/cherry-pick.js
+++ /dev/null
@@ -1,130 +0,0 @@
-'use strict';
-
-const argv = require('minimist')(process.argv.slice(2));
-const {cyan, green, red, yellow} = require('kleur/colors');
-const {execOrThrow} = require('../common/exec');
-const {getOutput} = require('../common/process');
-const {log} = require('../common/logging');
-
-/**
- * Determines the name of the cherry-pick branch.
- *
- * @param {string} version
- * @param {number} numCommits
- * @return {string}
- */
-function cherryPickBranchName(version, numCommits) {
- const timestamp = version.slice(0, -3);
- const suffixNumber = Number(version.slice(-3)) + numCommits;
- const suffix = String(suffixNumber).padStart(3, '0');
- return `amp-release-${timestamp}${suffix}`;
-}
-
-/**
- * Updates tags from the remote and creates a branch at the release commit.
- *
- * @param {string} ref
- * @param {string} branch
- * @param {string} remote
- */
-function prepareBranch(ref, branch, remote) {
- log(green('INFO:'), 'Pulling latest from', cyan(remote));
- execOrThrow(
- `git pull ${remote}`,
- `Failed to pull latest from remote ${cyan(remote)}`
- );
-
- execOrThrow(
- `git checkout -b ${branch} ${ref}`,
- `Failed to checkout new branch at ref ${cyan(ref)}`
- );
-}
-
-/**
- * Cherry-picks a commit into a new branch. When the cherry-pick succeeds,
- * returns `true`. In the event of a merge conflict, the cherry-pick is aborted
- * and an error is thrown.
- *
- * @param {string} sha
- */
-function performCherryPick(sha) {
- try {
- log(green('INFO:'), 'Cherry-picking commit', cyan(sha));
- execOrThrow(
- `git cherry-pick -x ${sha}`,
- `Failed to cherry-pick commit ${cyan(sha)}; aborting`
- );
- } catch (e) {
- log(green('INFO:'), 'Aborting cherry-pick of commit', cyan(sha));
- getOutput(`git cherry-pick --abort`);
- throw e;
- }
-}
-
-/**
- * @return {Promise}
- */
-async function cherryPick() {
- const {push, remote = 'origin'} = argv;
- const commits = (argv.commits || '').split(',').filter(Boolean);
- let onto = String(argv.onto || '');
-
- if (!commits.length) {
- throw new Error('Must provide commit list with --commits');
- }
- if (!onto) {
- throw new Error('Must provide 13-digit AMP version with --onto');
- }
- if (onto.length === 15) {
- log(
- yellow('WARNING:'),
- 'Expected a 13-digit AMP version but got a 15-digit RTV;',
- 'ignoring channel prefix'
- );
- // Be forgiving if someone provides a version instead of a full RTV.
- onto = onto.substr(2);
- }
- if (onto.length !== 13) {
- throw new Error('Expected 13-digit AMP version');
- }
-
- const branch = cherryPickBranchName(onto, commits.length);
- try {
- prepareBranch(onto, branch, remote);
- commits.forEach(performCherryPick);
-
- if (push) {
- log(
- green('INFO:'),
- 'Pushing branch',
- cyan(branch),
- 'to remote',
- cyan(remote)
- );
- execOrThrow(
- `git push --set-upstream ${remote} ${branch}`,
- `Failed to push branch ${cyan(branch)} to remote ${cyan(remote)}`
- );
- }
-
- log(
- green('SUCCESS:'),
- `Cherry-picked ${commits.length} commits onto release ${onto}`
- );
- } catch (e) {
- log(red('ERROR:'), e.message);
- log('Deleting branch', cyan(branch));
- getOutput(`git checkout main && git branch -d ${branch}`);
- throw e;
- }
-}
-
-module.exports = {cherryPick};
-
-cherryPick.description = 'Cherry-pick one or more commits onto a new branch';
-cherryPick.flags = {
- 'commits': 'Comma-delimited list of commit SHAs to cherry-pick',
- 'push': 'If set, push the created branch to the remote',
- 'remote': 'Remote ref to refresh tags from (default: origin)',
- 'onto': '13-digit AMP version to cherry-pick onto',
-};
diff --git a/build-system/tasks/codecov-upload.js b/build-system/tasks/codecov-upload.js
deleted file mode 100644
index 54ff8245663c..000000000000
--- a/build-system/tasks/codecov-upload.js
+++ /dev/null
@@ -1,69 +0,0 @@
-'use strict';
-
-const colors = require('kleur/colors');
-const fs = require('fs-extra');
-const {ciBuildSha, isCiBuild} = require('../common/ci');
-const {getStdout} = require('../common/process');
-const {log} = require('../common/logging');
-const {shortSha} = require('../common/git');
-
-const {cyan, green, yellow} = colors;
-const CODECOV_EXEC = './node_modules/.bin/codecov';
-const COVERAGE_REPORTS = {
- 'unit_tests': 'test/coverage/lcov-unit.info',
- 'integration_tests': 'test/coverage/lcov-integration.info',
- 'e2e_tests': 'test/coverage-e2e/lcov.info',
-};
-
-/**
- * Uploads a single report
- * @param {string} file
- * @param {string} flags
- */
-function uploadReport(file, flags) {
- const codecovCmd = `${CODECOV_EXEC} --file=${file} --flags=${flags}`;
- const output = getStdout(codecovCmd);
- const viewReportPrefix = 'View report at: ';
- const viewReport = output.match(`${viewReportPrefix}.*`);
- if (viewReport && viewReport.length > 0) {
- log(green('INFO:'), 'Uploaded', cyan(file));
- } else {
- log(
- yellow('WARNING:'),
- 'Code coverage report upload may have failed:\n',
- yellow(output)
- );
- }
-}
-
-/**
- * Uploads code coverage reports for unit / integration tests during CI builds.
- * @return {Promise}
- */
-async function codecovUpload() {
- if (!isCiBuild()) {
- log(
- yellow('WARNING:'),
- 'Code coverage reports can only be uploaded by CI builds.'
- );
- return;
- }
-
- const commitSha = shortSha(ciBuildSha());
- log(
- green('INFO:'),
- 'Uploading coverage reports to',
- cyan(`https://codecov.io/gh/ampproject/amphtml/commit/${commitSha}`)
- );
-
- Object.entries(COVERAGE_REPORTS)
- .filter(([, reportFile]) => fs.existsSync(reportFile))
- .forEach(([testType, reportFile]) => uploadReport(reportFile, testType));
-}
-
-module.exports = {
- codecovUpload,
-};
-
-codecovUpload.description =
- 'Upload code coverage reports to codecov.io during CI';
diff --git a/build-system/tasks/create-golden-css/css/main.css b/build-system/tasks/create-golden-css/css/main.css
index 9f8f73f14fb7..c8e612173c76 100644
--- a/build-system/tasks/create-golden-css/css/main.css
+++ b/build-system/tasks/create-golden-css/css/main.css
@@ -535,7 +535,7 @@ amp-pixel {
/**
* Instagram wraps the standard image into a fixed size container.
- * With these offsets, users can simply specify the the size of the
+ * With these offsets, users can simply specify the size of the
* instagram images and things have the right size.
* In particular the effect of adding padding to this container is
* that with responsive layouts the responsiveness is based on the
diff --git a/build-system/tasks/css/bento-css.js b/build-system/tasks/css/bento-css.js
deleted file mode 100644
index 2090990326ca..000000000000
--- a/build-system/tasks/css/bento-css.js
+++ /dev/null
@@ -1,50 +0,0 @@
-const CssSelectorTokenizer = require('css-selector-tokenizer');
-const postcss = require('postcss');
-const {getBentoName} = require('../bento-helpers');
-
-/**
- * @param {string} selector
- * @return {string}
- */
-function renameTagNamesInSelector(selector) {
- const tree = CssSelectorTokenizer.parse(selector);
- const nodes = [tree];
- while (nodes.length > 0) {
- const node = nodes.pop();
- if (!node) {
- continue;
- }
- if (node.type === 'element') {
- node.name = getBentoName(node.name);
- }
- if (Array.isArray(node.nodes)) {
- nodes.push(...node.nodes);
- }
- }
- return CssSelectorTokenizer.stringify(tree);
-}
-
-/**
- * @param {postcss.Root} root
- */
-function renameTagNamesInSelectorPostCssPlugin(root) {
- root.walkRules((rule) => {
- if (rule.selector) {
- rule.selector = renameTagNamesInSelector(rule.selector);
- }
- });
-}
-
-/**
- * Renames element selectors in a CSS file from amp-* to bento-*
- * @param {string} css
- * @return {!Promise} The transformed CSS source
- */
-async function renameSelectorsToBentoTagNames(css) {
- const result = await postcss
- .default([renameTagNamesInSelectorPostCssPlugin])
- .process(css);
- return result.css;
-}
-
-module.exports = {renameSelectorsToBentoTagNames};
diff --git a/build-system/tasks/css/index.js b/build-system/tasks/css/index.js
index 1074eb28848f..86a51299d780 100644
--- a/build-system/tasks/css/index.js
+++ b/build-system/tasks/css/index.js
@@ -77,7 +77,7 @@ async function copyCss() {
for (const {outCss} of cssEntryPoints) {
await fs.copy(`build/css/${outCss}`, `dist/${outCss}`);
}
- const cssFiles = await fastGlob('build/css/amp-*.css');
+ const cssFiles = await fastGlob('build/css/*.css');
await Promise.all(
cssFiles.map((cssFile) => {
return fs.copy(cssFile, `dist/v0/${path.basename(cssFile)}`);
@@ -137,7 +137,8 @@ async function compileCss(options = {}) {
for (const {append, outCss, outJs, path} of cssEntryPoints) {
await writeCssEntryPoint(path, outJs, outCss, append);
}
- await buildExtensions({compileOnlyCss: true});
+ const buildOptions = {compileOnlyCss: true};
+ await buildExtensions(buildOptions);
endBuildStep('Recompiled all CSS files into', 'build/', startTime);
}
diff --git a/build-system/tasks/css/jsify-css-sync.js b/build-system/tasks/css/jsify-css-sync.js
index bca0cb065c38..7e69ade387a2 100644
--- a/build-system/tasks/css/jsify-css-sync.js
+++ b/build-system/tasks/css/jsify-css-sync.js
@@ -11,7 +11,7 @@ let syncTransformer;
* @param {string} cssStr the css text to transform
* @param {!Object=} opt_cssnano cssnano options
* @param {!Object=} opt_filename the filename of the file being transformed. Used for sourcemaps generation.
- * @return {Object} The transformation result
+ * @return {object} The transformation result
*/
function transformCssSync(cssStr, opt_cssnano, opt_filename) {
if (!syncTransformer) {
diff --git a/build-system/tasks/css/jsify-css.js b/build-system/tasks/css/jsify-css.js
index 7a9eeb22cab5..e1a912511111 100644
--- a/build-system/tasks/css/jsify-css.js
+++ b/build-system/tasks/css/jsify-css.js
@@ -41,7 +41,7 @@ const cssNanoDefaultOptions = {
reduceInitial: false,
zindex: false,
svgo: {
- encode: true,
+ encode: false,
},
};
@@ -66,15 +66,15 @@ function getEnvironmentHash() {
}
/**
- * Used to cache css transforms done by postcss.
- * @const {TransformCache}
+ * @typedef {{css: string, warnings: string[]}}:
*/
-let transformCache;
+let CssTransformResultDef;
/**
- * @typedef {{css: string, warnings: string[]}}:
+ * Used to cache css transforms done by postcss.
+ * @type {TransformCache}
*/
-let CssTransformResultDef;
+let transformCache;
/**
* Transform a css string using postcss.
@@ -139,18 +139,15 @@ async function getCssImports(cssFile) {
*/
async function transformCss(contents, hash, opt_filename) {
if (!transformCache) {
- transformCache = new TransformCache('.css-cache', '.css');
+ transformCache = new TransformCache('.css-cache');
}
const cached = transformCache.get(hash);
if (cached) {
- return JSON.parse((await cached).toString());
+ return cached;
}
const transformed = transform(contents, opt_filename);
- transformCache.set(
- hash,
- transformed.then((r) => JSON.stringify(r))
- );
+ transformCache.set(hash, transformed);
return transformed;
}
diff --git a/build-system/tasks/css/test/bento-css.test.js b/build-system/tasks/css/test/bento-css.test.js
deleted file mode 100644
index 4a9e160e0410..000000000000
--- a/build-system/tasks/css/test/bento-css.test.js
+++ /dev/null
@@ -1,101 +0,0 @@
-const test = require('ava');
-const {renameSelectorsToBentoTagNames} = require('../bento-css');
-
-async function renameSelectorsToBentoTagNamesExpected(t, input, expected) {
- const output = await renameSelectorsToBentoTagNames(input);
- t.is(output, expected);
-}
-
-test(
- 'renames amp-* selectors to bento-* (simple)',
- renameSelectorsToBentoTagNamesExpected,
- `amp-foo {
- background: red;
- }`,
- `bento-foo {
- background: red;
- }`
-);
-
-test(
- 'renames amp-* selectors to bento-* (nested)',
- renameSelectorsToBentoTagNamesExpected,
- `@media screen {
- amp-foo {
- background: red;
- }
- }`,
- `@media screen {
- bento-foo {
- background: red;
- }
- }`
-);
-
-test(
- 'renames amp-* selectors to bento-* (multiple)',
- renameSelectorsToBentoTagNamesExpected,
- `amp-foo {
- background: red;
- }
- amp-bar {
- color: blue;
- }
- div {
- transform: translate(100%, 0);
- }
- has-amp-but-does-not-start-with-amp- {
- background: yellow;
- }`,
- `bento-foo {
- background: red;
- }
- bento-bar {
- color: blue;
- }
- div {
- transform: translate(100%, 0);
- }
- has-amp-but-does-not-start-with-amp- {
- background: yellow;
- }`
-);
-
-test(
- 'renames amp-* selectors to bento-* (mixed selector)',
- renameSelectorsToBentoTagNamesExpected,
- `amp-foo > div .amp-bar:not(amp-whatever) {
- background: red;
- }`,
- `bento-foo > div .amp-bar:not(bento-whatever) {
- background: red;
- }`
-);
-
-test(
- 'renames amp-* selectors to bento-* (ignores @rule names)',
- renameSelectorsToBentoTagNamesExpected,
- `@keyframes amp-x {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
- }`,
- `@keyframes amp-x {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
- }`
-);
-
-test(
- 'renames amp-* selectors to bento-* (preserves minification)',
- renameSelectorsToBentoTagNamesExpected,
- `amp-foo>div:not(.amp-classname){background:red}amp-whatever{color:blue}`,
- `bento-foo>div:not(.amp-classname){background:red}bento-whatever{color:blue}`
-);
diff --git a/build-system/tasks/default-task.js b/build-system/tasks/default-task.js
index ad07454578c5..c74fe4c2ae47 100644
--- a/build-system/tasks/default-task.js
+++ b/build-system/tasks/default-task.js
@@ -61,7 +61,6 @@ defaultTask.flags = {
fortesting: 'Compile production binaries for local testing',
noconfig: 'Compile production binaries without applying AMP_CONFIG',
config: 'Set the runtime\'s AMP_CONFIG to one of "prod" or "canary"',
- closure_concurrency: 'Set the number of concurrent invocations of closure',
extensions: 'Pre-build the given extensions, lazily builds the rest.',
extensions_from:
'Pre-build the extensions used by the provided example page.',
diff --git a/build-system/tasks/dep-check.js b/build-system/tasks/dep-check.js
index 2648abbcea68..ce662c5a6b81 100644
--- a/build-system/tasks/dep-check.js
+++ b/build-system/tasks/dep-check.js
@@ -3,7 +3,7 @@
const depCheckConfig = require('../test-configs/dep-check-config');
const esbuild = require('esbuild');
const fs = require('fs-extra');
-const minimatch = require('minimatch');
+const {minimatch} = require('minimatch');
const path = require('path');
const {
createCtrlcHandler,
diff --git a/build-system/tasks/dist.js b/build-system/tasks/dist.js
index f1600b97ce79..f276e3db3c67 100644
--- a/build-system/tasks/dist.js
+++ b/build-system/tasks/dist.js
@@ -12,10 +12,6 @@ const {
printConfigHelp,
printNobuildHelp,
} = require('./helpers');
-const {
- cleanupBuildDir,
- printClosureConcurrency,
-} = require('../compile/compile');
const {
createCtrlcHandler,
exitCtrlcHandler,
@@ -28,12 +24,16 @@ const {
} = require('../compile/internal-version');
const {buildCompiler} = require('../compile/build-compiler');
const {buildExtensions, parseExtensionFlags} = require('./extension-helpers');
-const {buildVendorConfigs} = require('./3p-vendor-helpers');
+const {
+ buildVendorConfigs,
+ shouldBuildVendorConfigs,
+} = require('./3p-vendor-helpers');
const {compileCss, copyCss} = require('./css');
const {compileJison} = require('./compile-jison');
const {formatExtractedMessages} = require('../compile/log-messages');
const {log} = require('../common/logging');
const {VERSION} = require('../compile/internal-version');
+const {buildStoryLocalization} = require('./build-story-localization');
const {cyan, green} = colors;
const argv = require('minimist')(process.argv.slice(2));
@@ -89,13 +89,13 @@ function printDistHelp(options) {
* @return {Promise}
*/
async function runPreDistSteps(options) {
- cleanupBuildDir();
await prebuild();
await compileCss(options);
await copyCss();
await compileJison();
await copyParsers();
await bootstrapThirdPartyFrames(options);
+ await buildStoryLocalization(options);
displayLifecycleDebugging();
}
@@ -111,7 +111,6 @@ async function dist() {
minify: true,
watch: argv.watch,
};
- printClosureConcurrency();
printNobuildHelp();
printDistHelp(options);
await runPreDistSteps(options);
@@ -134,12 +133,7 @@ async function dist() {
await buildExtensions(options);
// This step is to be run only during a full `amp dist`.
- if (
- !argv.core_runtime_only &&
- !argv.extensions &&
- !argv.extensions_from &&
- !argv.noextensions
- ) {
+ if (shouldBuildVendorConfigs()) {
await buildVendorConfigs(options);
}
@@ -206,10 +200,6 @@ function buildLoginDone(version) {
minify: true,
minifiedName,
aliasName,
- extraGlobs: [
- `${buildDir}/amp-login-done-0.1.max.js`,
- `${buildDir}/amp-login-done-dialog.js`,
- ],
});
}
@@ -229,7 +219,6 @@ async function buildWebPushPublisherFiles() {
includePolyfills: true,
minify: true,
minifiedName,
- extraGlobs: [`${tempBuildDir}/*.js`],
});
}
}
@@ -398,25 +387,26 @@ dist.flags = {
'Output code with whitespace (useful while profiling / debugging production code)',
fortesting: 'Compile production binaries for local testing',
noconfig: 'Compile production binaries without applying AMP_CONFIG',
+ nomanglecache:
+ 'Do not share the mangle cache between binaries, useful only in estimating size impacts of code changes.',
config: 'Set the runtime\'s AMP_CONFIG to one of "prod" or "canary"',
coverage: 'Instrument code for collecting coverage information',
extensions: 'Build only the listed extensions',
extensions_from: 'Build only the extensions from the listed AMP(s)',
noextensions: 'Build with no extensions',
core_runtime_only: 'Build only the core runtime',
+ vendor_configs:
+ 'Build 3p party vendor configuration files (defaults to true unless one of --core_runtime_only, --extensions, or --extensions_from is set)',
full_sourcemaps: 'Include source code content in sourcemaps',
sourcemap_url: 'Set a custom sourcemap URL with placeholder {version}',
type: 'Point sourcemap to fetch files from the correct GitHub tag',
esm: 'Do not transpile down to ES5',
version_override: 'Override the version written to AMP_CONFIG',
watch: 'Watch for changes in files, re-compiles when detected',
- closure_concurrency: 'Set the number of concurrent invocations of closure',
debug: 'Output the file contents during compilation lifecycles',
define_experiment_constant:
'Build runtime with the EXPERIMENT constant set to true',
sanitize_vars_for_diff:
'Sanitize the output to diff build results (requires --pseudo_names)',
sxg: 'Output the minified code for the SxG build',
- warning_level:
- "Optionally set closure's warning level to one of [quiet, default, verbose]",
};
diff --git a/build-system/tasks/e2e/.npmrc b/build-system/tasks/e2e/.npmrc
new file mode 100644
index 000000000000..dc7716326768
--- /dev/null
+++ b/build-system/tasks/e2e/.npmrc
@@ -0,0 +1 @@
+chromedriver_skip_download=true
diff --git a/build-system/tasks/e2e/OWNERS b/build-system/tasks/e2e/OWNERS
index d7634080ca7f..7e8e78b7cd46 100644
--- a/build-system/tasks/e2e/OWNERS
+++ b/build-system/tasks/e2e/OWNERS
@@ -6,7 +6,6 @@
{
owners: [
{name: 'ampproject/wg-infra'},
- {name: 'estherkim', notify: true},
],
},
],
diff --git a/build-system/tasks/e2e/amp-driver.js b/build-system/tasks/e2e/amp-driver.js
index 4ddf1dc2954a..c393b28fafee 100644
--- a/build-system/tasks/e2e/amp-driver.js
+++ b/build-system/tasks/e2e/amp-driver.js
@@ -119,7 +119,7 @@ const EnvironmentBehaviorMap = {
/**
* @param {string} url
- * @param {{isEmail: boolean}=} opts
+ * @param {{isEmail: boolean}} opts
* @return {string}
*/
function getViewerUrl(url, {isEmail} = {isEmail: false}) {
diff --git a/build-system/tasks/e2e/controller-promise.js b/build-system/tasks/e2e/controller-promise.js
index 2b695579d42b..8632ff8226cd 100644
--- a/build-system/tasks/e2e/controller-promise.js
+++ b/build-system/tasks/e2e/controller-promise.js
@@ -27,8 +27,7 @@ class ControllerPromise extends Promise {
/**
* Returns a Promise that resolves when the given expected value fulfills
* the given condition.
- * @param {function(TYPE): ?TYPE} condition
- * @return {!Promise}
+ * @type {undefined|function(TYPE,function(TYPE): ?TYPE): Promise}
*/
this.waitForValue = opt_waitForValue;
}
diff --git a/build-system/tasks/e2e/describes-e2e.js b/build-system/tasks/e2e/describes-e2e.js
index f67ecd984073..ce72cfb194d3 100644
--- a/build-system/tasks/e2e/describes-e2e.js
+++ b/build-system/tasks/e2e/describes-e2e.js
@@ -4,9 +4,8 @@ require('geckodriver');
const argv = require('minimist')(process.argv.slice(2));
const chrome = require('selenium-webdriver/chrome');
-const fetch = require('node-fetch');
const firefox = require('selenium-webdriver/firefox');
-const selenium = require('selenium-webdriver');
+const {Builder, logging} = require('selenium-webdriver');
const {
clearLastExpectError,
getLastExpectError,
@@ -20,7 +19,6 @@ const {configureHelpers} = require('../../../testing/helpers');
const {HOST, PORT} = require('../serve');
const {installRepl, uninstallRepl} = require('./repl');
const {isCiBuild} = require('../../common/ci');
-const {Builder, Capabilities, logging} = selenium;
/** Should have something in the name, otherwise nothing is shown. */
const SUB = ' ';
@@ -41,6 +39,9 @@ if (argv.coverage) {
istanbulMiddleware = require('istanbul-middleware/lib/core');
}
+/** @typedef {import('selenium-webdriver').WebDriver} WebDriver */
+/** @typedef {"chrome" | "firefox" | "safari"} BrowserNameDef */
+
/**
* @typedef {{
* browsers: string,
@@ -88,10 +89,10 @@ function getConfig() {
/**
* Configure and launch a Selenium instance
- * @param {string} browserName
+ * @param {BrowserNameDef} browserName
* @param {!SeleniumConfigDef=} args
* @param {string=} deviceName
- * @return {!selenium.WebDriver}
+ * @return {!WebDriver}
*/
function createSelenium(browserName, args = {}, deviceName) {
switch (browserName) {
@@ -101,24 +102,18 @@ function createSelenium(browserName, args = {}, deviceName) {
case 'firefox':
return createDriver(browserName, getFirefoxArgs(args), deviceName);
case 'chrome':
- default:
return createDriver(browserName, getChromeArgs(args), deviceName);
}
}
/**
*
- * @param {string} browserName
+ * @param {BrowserNameDef} browserName
* @param {!string[]} args
* @param {string=} deviceName
- * @return {!selenium.WebDriver}
+ * @return {!WebDriver}
*/
function createDriver(browserName, args, deviceName) {
- const capabilities = Capabilities[browserName]();
-
- const prefs = new logging.Preferences();
- prefs.setLevel(logging.Type.PERFORMANCE, logging.Level.ALL);
- capabilities.setLoggingPrefs(prefs);
switch (browserName) {
case 'firefox':
const firefoxOptions = new firefox.Options();
@@ -131,19 +126,27 @@ function createDriver(browserName, args, deviceName) {
.forBrowser('firefox')
.setFirefoxOptions(firefoxOptions)
.build();
+
case 'chrome':
- const chromeOptions = new chrome.Options(capabilities);
- chromeOptions.addArguments(args);
+ const loggingPrefs = new logging.Preferences();
+ loggingPrefs.setLevel(logging.Type.PERFORMANCE, logging.Level.ALL);
+
+ const chromeOptions = new chrome.Options();
+ chromeOptions.setLoggingPrefs(loggingPrefs);
+ chromeOptions.addArguments(...args);
+ if (process.env.CHROME_BIN) {
+ chromeOptions.setChromeBinaryPath(process.env.CHROME_BIN);
+ }
if (deviceName) {
chromeOptions.setMobileEmulation({deviceName});
}
- const driver = chrome.Driver.createSession(chromeOptions);
- //TODO(estherkim): workaround. `onQuit()` was added in selenium-webdriver v4.0.0-alpha.5
- //which is also when `Server terminated early with status 1` began appearing. Coincidence? Maybe.
- driver.onQuit = null;
- return driver;
+ return new Builder()
+ .forBrowser('chrome')
+ .setChromeOptions(chromeOptions)
+ .build();
+
case 'safari':
- return new Builder().forBrowser(browserName).build();
+ return new Builder().forBrowser('safari').build();
}
}
@@ -279,7 +282,7 @@ envPresets['ampdoc-amp4ads-preset'] = envPresets['ampdoc-preset'].concat(
class ItConfig {
/**
* @param {function} it
- * @param {Object} env
+ * @param {object} env
*/
constructor(it, env) {
this.it = /** @type {Mocha.it} */ (it);
@@ -428,7 +431,7 @@ function describeEnv(factory) {
}
/**
- * @param {string} browserName
+ * @param {BrowserNameDef} browserName
*/
function createVariantDescribe(browserName) {
for (const name in variants) {
@@ -450,8 +453,8 @@ function describeEnv(factory) {
/**
*
* @param {string} _name
- * @param {Object} variant
- * @param {string} browserName
+ * @param {object} variant
+ * @param {BrowserNameDef} browserName
*/
function doTemplate(_name, variant, browserName) {
const env = Object.create(variant);
@@ -565,7 +568,7 @@ class EndToEndFixture {
/**
* @param {!Object} env
- * @param {string} browserName
+ * @param {BrowserNameDef} browserName
* @param {number} retries
* @return {Promise}
*/
@@ -633,9 +636,9 @@ class EndToEndFixture {
/**
* Get the driver for the configured engine.
* @param {!DescribesConfigDef} describesConfig
- * @param {string} browserName
+ * @param {BrowserNameDef} browserName
* @param {string|undefined} deviceName
- * @return {!selenium.WebDriver}
+ * @return {!WebDriver}
*/
function getDriver({headless = false}, browserName, deviceName) {
return createSelenium(browserName, {headless}, deviceName);
@@ -652,7 +655,7 @@ function getDriver({headless = false}, browserName, deviceName) {
*/
async function setUpTest(
{ampDriver, controller, environment},
- {testUrl = '', version, experiments = [], initialRect}
+ {experiments = [], initialRect, testUrl = '', version}
) {
const url = new URL(testUrl);
diff --git a/build-system/tasks/e2e/index.js b/build-system/tasks/e2e/index.js
index 0e6a1b258824..9a937d922d41 100644
--- a/build-system/tasks/e2e/index.js
+++ b/build-system/tasks/e2e/index.js
@@ -1,9 +1,8 @@
'use strict';
const argv = require('minimist')(process.argv.slice(2));
-const ciReporter = require('./mocha-ci-reporter');
+const CiReporter = require('./mocha-ci-reporter');
const config = require('../../test-configs/config');
-const dotsReporter = require('./mocha-dots-reporter');
const fs = require('fs');
const glob = require('glob');
const http = require('http');
@@ -26,8 +25,8 @@ const {log} = require('../../common/logging');
const {maybePrintCoverageMessage} = require('../helpers');
const {watch} = require('chokidar');
-const SLOW_TEST_THRESHOLD_MS = 2500;
-const TEST_RETRIES = isCiBuild() ? 2 : 0;
+const SLOW_TEST_THRESHOLD_MS = isCiBuild() ? 5000 : 2500;
+const TEST_RETRIES = isCiBuild() ? 3 : 0;
const COV_DOWNLOAD_PATH = '/coverage/download';
const COV_OUTPUT_DIR = './test/coverage-e2e';
@@ -63,15 +62,7 @@ async function setUpTesting_() {
* @return {!Mocha}
*/
function createMocha_() {
- let reporter;
- if (argv.testnames || argv.watch) {
- reporter = '';
- } else if (argv.report || isCircleciBuild()) {
- // TODO(#28387) clean up this typing.
- reporter = /** @type {*} */ (ciReporter);
- } else {
- reporter = dotsReporter;
- }
+ const reporter = isCircleciBuild() ? CiReporter : undefined;
return new Mocha({
// e2e tests have a different standard for when a test is too slow,
@@ -79,7 +70,7 @@ function createMocha_() {
slow: SLOW_TEST_THRESHOLD_MS,
reporter,
retries: TEST_RETRIES,
- fullStackTrace: true,
+ fullTrace: true,
reporterOptions: isCiBuild()
? {
mochaFile: 'result-reports/e2e.xml',
@@ -110,7 +101,7 @@ async function fetchCoverage_(outDir) {
// it can be accessed separately.
// Clear out previous coverage data.
- fs.rmdirSync(outDir, {recursive: true});
+ fs.rmSync(outDir, {recursive: true});
fs.mkdirSync(outDir);
const zipFilename = path.join(outDir, 'coverage.zip');
@@ -229,7 +220,6 @@ e2e.flags = {
'watch': 'Watch for changes in files, runs corresponding test(s)',
'headless': 'Run the browser in headless mode',
'debug': 'Print debugging information while running tests',
- 'report': 'Write test result report to a local file',
'coverage': 'Collect coverage data from instrumented code',
'filelist': 'Run tests specified in this comma-separated list of test files',
};
diff --git a/build-system/tasks/e2e/mocha-ci-reporter.js b/build-system/tasks/e2e/mocha-ci-reporter.js
index 726dc2b3e557..65e22248c6cf 100644
--- a/build-system/tasks/e2e/mocha-ci-reporter.js
+++ b/build-system/tasks/e2e/mocha-ci-reporter.js
@@ -1,22 +1,18 @@
+const {reporters} = require('mocha');
const JsonReporter = require('./mocha-custom-json-reporter');
-const mocha = require('mocha');
-const MochaDotsReporter = require('./mocha-dots-reporter');
const MochaJUnitReporter = require('mocha-junit-reporter');
-const {Base} = mocha.reporters;
-/**
- * @param {*} runner
- * @param {*} options
- * @return {MochaDotsReporter}
- */
-function ciReporter(runner, options) {
- Base.call(this, runner, options);
- this._mochaDotsReporter = new MochaDotsReporter(runner);
- this._jsonReporter = new JsonReporter(runner);
- this._mochaJunitReporter = new MochaJUnitReporter(runner, options);
- // TODO(#28387) clean up this typing.
- return /** @type {*} */ (this);
+class CiReporter extends reporters.Base {
+ /**
+ * @param {import('mocha').Runner} runner
+ * @param {import('mocha').MochaOptions} options
+ */
+ constructor(runner, options) {
+ super(runner, options);
+ this._mochaSpecReporter = new reporters.Spec(runner);
+ this._jsonReporter = new JsonReporter(runner);
+ this._mochaJunitReporter = new MochaJUnitReporter(runner, options);
+ }
}
-ciReporter.prototype.__proto__ = Base.prototype;
-module.exports = ciReporter;
+module.exports = CiReporter;
diff --git a/build-system/tasks/e2e/mocha-custom-json-reporter.js b/build-system/tasks/e2e/mocha-custom-json-reporter.js
index a52ff1750cfc..8649fac96f46 100644
--- a/build-system/tasks/e2e/mocha-custom-json-reporter.js
+++ b/build-system/tasks/e2e/mocha-custom-json-reporter.js
@@ -14,7 +14,7 @@ const {
EVENT_TEST_PENDING,
} = mocha.Runner.constants;
/**
- * @param {Object} output
+ * @param {object} output
* @param {string} filename
* @return {Promise}
*/
diff --git a/build-system/tasks/e2e/mocha-dots-reporter.js b/build-system/tasks/e2e/mocha-dots-reporter.js
deleted file mode 100644
index b1c6af7be02e..000000000000
--- a/build-system/tasks/e2e/mocha-dots-reporter.js
+++ /dev/null
@@ -1,63 +0,0 @@
-'use strict';
-
-const Mocha = require('mocha');
-const {log, logWithoutTimestamp} = require('../../common/logging');
-const {
- EVENT_RUN_BEGIN,
- EVENT_RUN_END,
- EVENT_TEST_FAIL,
- EVENT_TEST_PASS,
- EVENT_TEST_PENDING,
-} = Mocha.Runner.constants;
-const {Base} = Mocha.reporters;
-const {green, red, yellow} = require('kleur/colors');
-const {icon, nbDotsPerLine} =
- require('../../test-configs/karma.conf').superDotsReporter;
-
-/**
- * Custom Mocha reporter for CI builds.
- * Mimics the style of the Karma super-dots reporter.
- * @param {*} runner
- */
-class MochaDotsReporter extends Base {
- /**
- * @param {*} runner
- */
- constructor(runner) {
- super(runner);
-
- let wrapCounter = 0;
- const printDot = (dot) => {
- process.stdout.write(dot);
- if (++wrapCounter >= nbDotsPerLine) {
- wrapCounter = 0;
- process.stdout.write('\n');
- }
- };
-
- runner
- .once(EVENT_RUN_BEGIN, () => {
- log('Running tests...');
- })
- .on(EVENT_TEST_PASS, () => {
- printDot(green(icon.success));
- })
- .on(EVENT_TEST_FAIL, () => {
- printDot(red(icon.failure));
- })
- .on(EVENT_TEST_PENDING, () => {
- printDot(yellow(icon.ignore));
- })
- .once(EVENT_RUN_END, () => {
- Base.list(this.failures);
- const {failures, passes, pending, tests} = runner.stats;
- logWithoutTimestamp(
- `Executed ${failures + passes} of ${tests}`,
- `(Skipped ${pending})`,
- failures == 0 ? green('SUCCESS') : red(`${failures} FAILED`)
- );
- });
- }
-}
-
-module.exports = MochaDotsReporter;
diff --git a/build-system/tasks/e2e/network-logger.js b/build-system/tasks/e2e/network-logger.js
index 7f044563a88a..2c618c36af21 100644
--- a/build-system/tasks/e2e/network-logger.js
+++ b/build-system/tasks/e2e/network-logger.js
@@ -32,8 +32,8 @@ export class NetworkLogger {
return entries.filter((entry) => {
const json = JSON.parse(entry.message);
- entry.message = json.message;
- return entry.message.method == networkMethod;
+ entry.message = json?.message;
+ return json.message?.method == networkMethod;
});
}
diff --git a/build-system/tasks/e2e/package-lock.json b/build-system/tasks/e2e/package-lock.json
index 8cd059b37172..66179e497494 100644
--- a/build-system/tasks/e2e/package-lock.json
+++ b/build-system/tasks/e2e/package-lock.json
@@ -8,21 +8,23 @@
"name": "amp-e2e",
"version": "0.1.0",
"devDependencies": {
- "@babel/register": "7.15.3",
+ "@babel/register": "7.25.9",
+ "@types/selenium-webdriver": "4.1.28",
"babel-regenerator-runtime": "6.5.0",
- "chromedriver": "95.0.0",
- "geckodriver": "2.0.4",
- "selenium-webdriver": "4.0.0"
+ "chromedriver": "131.0.5",
+ "geckodriver": "5.0.0",
+ "selenium-webdriver": "4.27.0"
}
},
"node_modules/@babel/code-frame": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
- "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"peer": true,
"dependencies": {
- "@babel/highlight": "^7.14.5"
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
},
"engines": {
"node": ">=6.9.0"
@@ -70,15 +72,16 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz",
- "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+ "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
"peer": true,
"dependencies": {
- "@babel/types": "^7.15.6",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
+ "@babel/types": "^7.23.6",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
},
"engines": {
"node": ">=6.9.0"
@@ -103,42 +106,38 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-function-name": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz",
- "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==",
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true,
"peer": true,
- "dependencies": {
- "@babel/helper-get-function-arity": "^7.15.4",
- "@babel/template": "^7.15.4",
- "@babel/types": "^7.15.4"
- },
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-get-function-arity": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz",
- "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==",
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
"peer": true,
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-hoist-variables": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz",
- "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
"peer": true,
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -233,22 +232,32 @@
}
},
"node_modules/@babel/helper-split-export-declaration": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz",
- "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==",
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
"peer": true,
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.15.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
- "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true,
"peer": true,
"engines": {
@@ -281,14 +290,14 @@
}
},
"node_modules/@babel/highlight": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
- "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
"peer": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.14.5",
- "chalk": "^2.0.0",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
"engines": {
@@ -296,9 +305,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz",
- "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"dev": true,
"peer": true,
"bin": {
@@ -309,15 +318,15 @@
}
},
"node_modules/@babel/register": {
- "version": "7.15.3",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.15.3.tgz",
- "integrity": "sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.9.tgz",
+ "integrity": "sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==",
"dev": true,
"dependencies": {
"clone-deep": "^4.0.1",
"find-cache-dir": "^2.0.0",
"make-dir": "^2.1.0",
- "pirates": "^4.0.0",
+ "pirates": "^4.0.6",
"source-map-support": "^0.5.16"
},
"engines": {
@@ -328,35 +337,36 @@
}
},
"node_modules/@babel/template": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
- "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"peer": true,
"dependencies": {
- "@babel/code-frame": "^7.14.5",
- "@babel/parser": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz",
- "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz",
+ "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==",
"dev": true,
"peer": true,
"dependencies": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.15.4",
- "@babel/helper-function-name": "^7.15.4",
- "@babel/helper-hoist-variables": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
- "@babel/parser": "^7.15.4",
- "@babel/types": "^7.15.4",
- "debug": "^4.1.0",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
@@ -364,121 +374,111 @@
}
},
"node_modules/@babel/types": {
- "version": "7.15.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz",
- "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
"peer": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.14.9",
+ "@babel/helper-string-parser": "^7.23.4",
+ "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "node_modules/@bazel/runfiles": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/@bazel/runfiles/-/runfiles-6.3.1.tgz",
+ "integrity": "sha512-1uLNT5NZsUVIGS4syuHwTzZ8HycMPyr6POA3FCE4GbMtc4rhoJk8aZKtNIRthJYfL+iioppi+rTfH3olMPr9nA==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
- "node": ">= 8"
+ "node": ">=6.0.0"
}
},
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
"dev": true,
+ "peer": true,
"engines": {
- "node": ">= 8"
+ "node": ">=6.0.0"
}
},
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true,
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
+ "peer": true,
"engines": {
- "node": ">= 8"
+ "node": ">=6.0.0"
}
},
- "node_modules/@sindresorhus/is": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz",
- "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==",
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
"dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/is?sponsor=1"
- }
+ "peer": true
},
- "node_modules/@szmarczak/http-timer": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
- "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.21",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz",
+ "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==",
"dev": true,
+ "peer": true,
"dependencies": {
- "defer-to-connect": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@testim/chrome-version": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.0.7.tgz",
- "integrity": "sha512-8UT/J+xqCYfn3fKtOznAibsHpiuDshCb0fwgWxRazTT19Igp9ovoXMPhXyLD6m3CKQGTMHgqoxaFfMWaL40Rnw==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.4.tgz",
+ "integrity": "sha512-kIhULpw9TrGYnHp/8VfdcneIcxKnLixmADtukQRtJUmsVlMg0niMkwV0xZmi8hqa57xqilIHjWFA0GKvEjVU5g==",
"dev": true
},
- "node_modules/@types/cacheable-request": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
- "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==",
- "dev": true,
- "dependencies": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "*",
- "@types/node": "*",
- "@types/responselike": "*"
- }
- },
- "node_modules/@types/http-cache-semantics": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
- "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
+ "node_modules/@tootallnate/quickjs-emscripten": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
+ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
"dev": true
},
- "node_modules/@types/keyv": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz",
- "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/node": {
"version": "16.11.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz",
"integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==",
"dev": true
},
- "node_modules/@types/responselike": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
- "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
+ "node_modules/@types/selenium-webdriver": {
+ "version": "4.1.28",
+ "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.1.28.tgz",
+ "integrity": "sha512-Au7CXegiS7oapbB16zxPToY4Cjzi9UQQMf3W2ZZM8PigMLTGR3iUAHjPUTddyE5g1SBjT/qpmvlsAQLBfNAdKg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "@types/ws": "*"
+ }
+ },
+ "node_modules/@types/ws": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz",
+ "integrity": "sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==",
"dev": true,
"dependencies": {
"@types/node": "*"
@@ -494,38 +494,63 @@
"@types/node": "*"
}
},
- "node_modules/adm-zip": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.5.tgz",
- "integrity": "sha512-IWwXKnCbirdbyXSfUDvCCrmYrOHANRZcc8NcRrvTlIApdl7PwE9oGcsYvNeJPAVY1M+70b4PxXGKIf8AEuiQ6w==",
+ "node_modules/@wdio/logger": {
+ "version": "9.4.4",
+ "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.4.4.tgz",
+ "integrity": "sha512-BXx8RXFUW2M4dcO6t5Le95Hi2ZkTQBRsvBQqLekT2rZ6Xmw8ZKZBPf0FptnoftFGg6dYmwnDidYv/0+4PiHjpQ==",
"dev": true,
+ "dependencies": {
+ "chalk": "^5.1.2",
+ "loglevel": "^1.6.0",
+ "loglevel-plugin-prefix": "^0.8.4",
+ "strip-ansi": "^7.1.0"
+ },
"engines": {
- "node": ">=6.0"
+ "node": ">=18.20.0"
}
},
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "node_modules/@wdio/logger/node_modules/chalk": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz",
+ "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==",
"dev": true,
- "dependencies": {
- "debug": "4"
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
},
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/@zip.js/zip.js": {
+ "version": "2.7.54",
+ "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.54.tgz",
+ "integrity": "sha512-qMrJVg2hoEsZJjMJez9yI2+nZlBUxgYzGV3mqcb2B/6T1ihXp0fWBDYlVHlHquuorgNUQP5a8qSmX6HF5rFJNg==",
+ "dev": true,
+ "engines": {
+ "bun": ">=0.7.0",
+ "deno": ">=1.0.0",
+ "node": ">=16.5.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "dev": true,
"engines": {
- "node": ">= 6.0.0"
+ "node": ">= 14"
}
},
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
"dev": true,
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/ansi-styles": {
@@ -541,62 +566,91 @@
"node": ">=4"
}
},
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "node_modules/ast-types": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
+ "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
"dev": true,
+ "dependencies": {
+ "tslib": "^2.0.1"
+ },
"engines": {
- "node": ">=8"
+ "node": ">=4"
}
},
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true
+ },
"node_modules/axios": {
- "version": "0.21.4",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
- "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+ "version": "1.7.9",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
+ "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
"dev": true,
"dependencies": {
- "follow-redirects": "^1.14.0"
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
}
},
+ "node_modules/b4a": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz",
+ "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==",
+ "dev": true
+ },
"node_modules/babel-regenerator-runtime": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/babel-regenerator-runtime/-/babel-regenerator-runtime-6.5.0.tgz",
"integrity": "sha1-DkHNHJ+ARCRm8BXHSf/4upj44RA=",
"dev": true
},
- "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==",
- "dev": true
- },
- "node_modules/bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
+ "node_modules/bare-events": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz",
+ "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==",
+ "dev": true,
+ "optional": true
},
- "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==",
+ "node_modules/bare-fs": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.1.5.tgz",
+ "integrity": "sha512-5t0nlecX+N2uJqdxe9d18A98cp2u9BETelbjKpiVgQqzzmVNFYWEAjQHqS+2Khgto1vcwhik9cXucaj5ve2WWA==",
"dev": true,
+ "optional": true,
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "bare-events": "^2.0.0",
+ "bare-os": "^2.0.0",
+ "bare-path": "^2.0.0",
+ "streamx": "^2.13.0"
}
},
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "node_modules/bare-os": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.0.tgz",
+ "integrity": "sha512-hD0rOPfYWOMpVirTACt4/nK8mC55La12K5fY1ij8HAdfQakD62M+H4o4tpfKzVGLgRDTuk3vjA4GqGXXCeFbag==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/bare-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.0.tgz",
+ "integrity": "sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==",
"dev": true,
+ "optional": true,
"dependencies": {
- "fill-range": "^7.0.1"
- },
+ "bare-os": "^2.1.0"
+ }
+ },
+ "node_modules/basic-ftp": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz",
+ "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==",
+ "dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=10.0.0"
}
},
"node_modules/browserslist": {
@@ -638,33 +692,6 @@
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
- "node_modules/cacheable-lookup": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
- "dev": true,
- "engines": {
- "node": ">=10.6.0"
- }
- },
- "node_modules/cacheable-request": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
- "dev": true,
- "dependencies": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/caniuse-lite": {
"version": "1.0.30001271",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz",
@@ -691,44 +718,26 @@
"node": ">=4"
}
},
- "node_modules/chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/chromedriver": {
- "version": "95.0.0",
- "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-95.0.0.tgz",
- "integrity": "sha512-HwSg7S0ZZYsHTjULwxFHrrUqEpz1+ljDudJM3eOquvqD5QKnR5pSe/GlBTY9UU2tVFRYz8bEHYC4Y8qxciQiLQ==",
+ "version": "131.0.5",
+ "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-131.0.5.tgz",
+ "integrity": "sha512-OQY4BHUe9JedxH4aAsPZJcf8Y0lMlE7y+3tiCvQSCQ6qDz2b99R0qsqyqzUUSW2DFx0bg4YxmK8CDVMKb9u5kg==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
- "@testim/chrome-version": "^1.0.7",
- "axios": "^0.21.2",
- "del": "^6.0.0",
+ "@testim/chrome-version": "^1.1.4",
+ "axios": "^1.7.4",
+ "compare-versions": "^6.1.0",
"extract-zip": "^2.0.1",
- "https-proxy-agent": "^5.0.0",
+ "proxy-agent": "^6.4.0",
"proxy-from-env": "^1.1.0",
- "tcp-port-used": "^1.0.1"
+ "tcp-port-used": "^1.0.2"
},
"bin": {
"chromedriver": "bin/chromedriver"
},
"engines": {
- "node": ">=10"
- }
- },
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true,
- "engines": {
- "node": ">=6"
+ "node": ">=18"
}
},
"node_modules/clone-deep": {
@@ -745,15 +754,6 @@
"node": ">=6"
}
},
- "node_modules/clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "dev": true,
- "dependencies": {
- "mimic-response": "^1.0.0"
- }
- },
"node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -767,20 +767,32 @@
"node_modules/color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true,
"peer": true
},
+ "node_modules/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,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
"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=",
+ "node_modules/compare-versions": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.0.tgz",
+ "integrity": "sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==",
"dev": true
},
"node_modules/convert-source-map": {
@@ -799,10 +811,19 @@
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"dev": true
},
+ "node_modules/data-uri-to-buffer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "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"
@@ -816,28 +837,13 @@
}
}
},
- "node_modules/decompress-response": {
+ "node_modules/decamelize": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "dev": true,
- "dependencies": {
- "mimic-response": "^3.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decompress-response/node_modules/mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz",
+ "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -849,47 +855,27 @@
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
- "node_modules/defer-to-connect": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
- "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/del": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz",
- "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==",
+ "node_modules/degenerator": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
+ "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
"dev": true,
"dependencies": {
- "globby": "^11.0.1",
- "graceful-fs": "^4.2.4",
- "is-glob": "^4.0.1",
- "is-path-cwd": "^2.2.0",
- "is-path-inside": "^3.0.2",
- "p-map": "^4.0.0",
- "rimraf": "^3.0.2",
- "slash": "^3.0.0"
+ "ast-types": "^0.13.4",
+ "escodegen": "^2.1.0",
+ "esprima": "^4.0.1"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 14"
}
},
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"dev": true,
- "dependencies": {
- "path-type": "^4.0.0"
- },
"engines": {
- "node": ">=8"
+ "node": ">=0.4.0"
}
},
"node_modules/electron-to-chromium": {
@@ -921,13 +907,75 @@
"node_modules/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=",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true,
"peer": true,
"engines": {
"node": ">=0.8.0"
}
},
+ "node_modules/escodegen": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+ "dev": true,
+ "dependencies": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.6.1"
+ }
+ },
+ "node_modules/escodegen/node_modules/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,
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/extract-zip": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
@@ -948,30 +996,11 @@
"@types/yauzl": "^2.9.1"
}
},
- "node_modules/fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
- "dev": true,
- "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"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "dev": true,
- "dependencies": {
- "reusify": "^1.0.4"
- }
+ "node_modules/fast-fifo": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.0.tgz",
+ "integrity": "sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw==",
+ "dev": true
},
"node_modules/fd-slicer": {
"version": "1.1.0",
@@ -982,16 +1011,27 @@
"pend": "~1.2.0"
}
},
- "node_modules/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==",
+ "node_modules/fetch-blob": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
"dependencies": {
- "to-regex-range": "^5.0.1"
+ "node-domexception": "^1.0.0",
+ "web-streams-polyfill": "^3.0.3"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20 || >= 14.13"
}
},
"node_modules/find-cache-dir": {
@@ -1021,9 +1061,9 @@
}
},
"node_modules/follow-redirects": {
- "version": "1.14.4",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz",
- "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==",
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"dev": true,
"funding": [
{
@@ -1031,6 +1071,7 @@
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
+ "license": "MIT",
"engines": {
"node": ">=4.0"
},
@@ -1040,42 +1081,53 @@
}
}
},
- "node_modules/fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"dev": true,
"dependencies": {
- "minipass": "^3.0.0"
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
},
"engines": {
- "node": ">= 8"
+ "node": ">= 6"
+ }
+ },
+ "node_modules/formdata-polyfill": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+ "dev": true,
+ "dependencies": {
+ "fetch-blob": "^3.1.2"
+ },
+ "engines": {
+ "node": ">=12.20.0"
}
},
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
"node_modules/geckodriver": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-2.0.4.tgz",
- "integrity": "sha512-3Fu75v6Ov8h5Vt25+djJU56MJA2gRctgjhvG5xGzLFTQjltPz7nojQdBHbmgWznUt3CHl8VaiDn8MaepY7B0dA==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-5.0.0.tgz",
+ "integrity": "sha512-vn7TtQ3b9VMJtVXsyWtQQl1fyBVFhQy7UvJF96kPuuJ0or5THH496AD3eUyaDD11+EqCxH9t6V+EP9soZQk4YQ==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
- "adm-zip": "0.5.5",
- "bluebird": "3.7.2",
- "got": "11.8.2",
- "https-proxy-agent": "5.0.0",
- "tar": "6.1.9"
+ "@wdio/logger": "^9.1.3",
+ "@zip.js/zip.js": "^2.7.53",
+ "decamelize": "^6.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.5",
+ "node-fetch": "^3.3.2",
+ "tar-fs": "^3.0.6",
+ "which": "^5.0.0"
},
"bin": {
- "geckodriver": "bin/geckodriver"
+ "geckodriver": "bin/geckodriver.js"
},
"engines": {
- "node": ">=12.0.0"
+ "node": ">=18.0.0"
}
},
"node_modules/gensync": {
@@ -1103,36 +1155,27 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "node_modules/get-uri": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz",
+ "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==",
"dev": true,
"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"
+ "basic-ftp": "^5.0.2",
+ "data-uri-to-buffer": "^6.0.2",
+ "debug": "^4.3.4"
},
"engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": ">= 14"
}
},
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "node_modules/get-uri/node_modules/data-uri-to-buffer": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
+ "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
"dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
"engines": {
- "node": ">= 6"
+ "node": ">= 14"
}
},
"node_modules/globals": {
@@ -1145,106 +1188,40 @@
"node": ">=4"
}
},
- "node_modules/globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
- "dev": true,
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/got": {
- "version": "11.8.2",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz",
- "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==",
- "dev": true,
- "dependencies": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.1",
- "decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
- },
- "engines": {
- "node": ">=10.19.0"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/got?sponsor=1"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
- "dev": true
- },
"node_modules/has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
"peer": true,
"engines": {
"node": ">=4"
}
},
- "node_modules/http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
- "dev": true
- },
- "node_modules/http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
"dependencies": {
- "quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
},
"engines": {
- "node": ">=10.19.0"
+ "node": ">= 14"
}
},
"node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"dev": true,
"dependencies": {
- "agent-base": "6",
+ "agent-base": "^7.1.2",
"debug": "4"
},
"engines": {
- "node": ">= 6"
- }
- },
- "node_modules/ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "dev": true,
- "engines": {
- "node": ">= 4"
+ "node": ">= 14"
}
},
"node_modules/immediate": {
@@ -1253,83 +1230,29 @@
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
"dev": true
},
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "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==",
"dev": true
},
- "node_modules/ip-regex": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
- "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "node_modules/ip-address": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+ "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
"dev": true,
"dependencies": {
- "is-extglob": "^2.1.1"
+ "jsbn": "1.1.0",
+ "sprintf-js": "^1.1.3"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-path-cwd": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
+ "node": ">= 12"
}
},
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "node_modules/ip-regex": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
+ "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==",
"dev": true,
"engines": {
"node": ">=8"
@@ -1373,6 +1296,15 @@
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
+ "node_modules/isexe": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=16"
+ }
+ },
"node_modules/isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
@@ -1389,6 +1321,12 @@
"dev": true,
"peer": true
},
+ "node_modules/jsbn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
+ "dev": true
+ },
"node_modules/jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -1402,21 +1340,12 @@
"node": ">=4"
}
},
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
- },
"node_modules/json5": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
- "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"peer": true,
- "dependencies": {
- "minimist": "^1.2.5"
- },
"bin": {
"json5": "lib/cli.js"
},
@@ -1425,24 +1354,15 @@
}
},
"node_modules/jszip": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz",
- "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==",
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"dev": true,
"dependencies": {
"lie": "~3.3.0",
"pako": "~1.0.2",
"readable-stream": "~2.3.6",
- "set-immediate-shim": "~1.0.1"
- }
- },
- "node_modules/keyv": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz",
- "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==",
- "dev": true,
- "dependencies": {
- "json-buffer": "3.0.1"
+ "setimmediate": "^1.0.5"
}
},
"node_modules/kind-of": {
@@ -1476,13 +1396,32 @@
"node": ">=6"
}
},
- "node_modules/lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "node_modules/loglevel": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz",
+ "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">= 0.6.0"
+ },
+ "funding": {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/loglevel"
+ }
+ },
+ "node_modules/loglevel-plugin-prefix": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz",
+ "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/make-dir": {
@@ -1499,114 +1438,85 @@
}
},
"node_modules/make-dir/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
"bin": {
"semver": "bin/semver"
}
},
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true,
"engines": {
- "node": ">= 8"
+ "node": ">= 0.6"
}
},
- "node_modules/micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
"dependencies": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
+ "mime-db": "1.52.0"
},
"engines": {
- "node": ">=8.6"
+ "node": ">= 0.6"
}
},
- "node_modules/mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
+ "node_modules/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
},
- "node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "node_modules/netmask": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
+ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
"dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
"engines": {
- "node": "*"
+ "node": ">= 0.4.0"
}
},
- "node_modules/minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true,
- "peer": true
- },
- "node_modules/minipass": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz",
- "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
+ "node_modules/node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
"dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "github",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
"engines": {
- "node": ">=8"
+ "node": ">=10.5.0"
}
},
- "node_modules/minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "node_modules/node-fetch": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
+ "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
"dev": true,
"dependencies": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
+ "data-uri-to-buffer": "^4.0.0",
+ "fetch-blob": "^3.1.4",
+ "formdata-polyfill": "^4.0.10"
},
"engines": {
- "node": ">= 8"
- }
- },
- "node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/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
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.10.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/node-fetch"
}
},
"node_modules/node-releases": {
@@ -1616,18 +1526,6 @@
"dev": true,
"peer": true
},
- "node_modules/normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -1637,15 +1535,6 @@
"wrappy": "1"
}
},
- "node_modules/p-cancelable": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -1673,28 +1562,45 @@
"node": ">=6"
}
},
- "node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "node_modules/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,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pac-proxy-agent": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.1.0.tgz",
+ "integrity": "sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==",
"dev": true,
"dependencies": {
- "aggregate-error": "^3.0.0"
+ "@tootallnate/quickjs-emscripten": "^0.23.0",
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "get-uri": "^6.0.1",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.6",
+ "pac-resolver": "^7.0.1",
+ "socks-proxy-agent": "^8.0.5"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 14"
}
},
- "node_modules/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==",
+ "node_modules/pac-resolver": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz",
+ "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
"dev": true,
+ "dependencies": {
+ "degenerator": "^5.0.0",
+ "netmask": "^2.0.2"
+ },
"engines": {
- "node": ">=6"
+ "node": ">= 14"
}
},
"node_modules/pako": {
@@ -1712,24 +1618,6 @@
"node": ">=4"
}
},
- "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=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
@@ -1743,18 +1631,6 @@
"dev": true,
"peer": true
},
- "node_modules/picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/pify": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
@@ -1765,13 +1641,10 @@
}
},
"node_modules/pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
"dev": true,
- "dependencies": {
- "node-modules-regexp": "^1.0.0"
- },
"engines": {
"node": ">= 6"
}
@@ -1794,6 +1667,25 @@
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
+ "node_modules/proxy-agent": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz",
+ "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "http-proxy-agent": "^7.0.1",
+ "https-proxy-agent": "^7.0.6",
+ "lru-cache": "^7.14.1",
+ "pac-proxy-agent": "^7.1.0",
+ "proxy-from-env": "^1.1.0",
+ "socks-proxy-agent": "^8.0.5"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -1810,37 +1702,11 @@
"once": "^1.3.1"
}
},
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
+ "node_modules/queue-tick": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
+ "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==",
+ "dev": true
},
"node_modules/readable-stream": {
"version": "2.3.7",
@@ -1857,108 +1723,52 @@
"util-deprecate": "~1.0.1"
}
},
- "node_modules/resolve-alpn": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
- "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
+ "node_modules/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
},
- "node_modules/responselike": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
- "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
- "dev": true,
- "dependencies": {
- "lowercase-keys": "^2.0.0"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "node_modules/selenium-webdriver": {
+ "version": "4.27.0",
+ "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.27.0.tgz",
+ "integrity": "sha512-LkTJrNz5socxpPnWPODQ2bQ65eYx9JK+DQMYNihpTjMCqHwgWGYQnQTCAAche2W3ZP87alA+1zYPvgS8tHNzMQ==",
"dev": true,
"funding": [
{
"type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
+ "url": "https://github.com/sponsors/SeleniumHQ"
},
{
- "type": "consulting",
- "url": "https://feross.org/support"
+ "type": "opencollective",
+ "url": "https://opencollective.com/selenium"
}
],
"dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/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
- },
- "node_modules/selenium-webdriver": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0.tgz",
- "integrity": "sha512-tOlu6FnTjPq2FKpd153pl8o2cB7H40Rvl/ogiD2sapMv4IDjQqpIxbd+swDJe9UDLdszeh5CDis6lgy4e9UG1w==",
- "dev": true,
- "dependencies": {
- "jszip": "^3.6.0",
- "rimraf": "^3.0.2",
- "tmp": "^0.2.1",
- "ws": ">=7.4.6"
+ "@bazel/runfiles": "^6.3.1",
+ "jszip": "^3.10.1",
+ "tmp": "^0.2.3",
+ "ws": "^8.18.0"
},
"engines": {
- "node": ">= 10.15.0"
+ "node": ">= 14.21.0"
}
},
"node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"peer": true,
"bin": {
"semver": "bin/semver.js"
}
},
- "node_modules/set-immediate-shim": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "node_modules/setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
+ "dev": true
},
"node_modules/shallow-clone": {
"version": "3.0.1",
@@ -1972,13 +1782,42 @@
"node": ">=8"
}
},
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
+ "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
+ "dev": true,
+ "dependencies": {
+ "ip-address": "^9.0.5",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks-proxy-agent": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz",
+ "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "socks": "^2.8.3"
+ },
+ "engines": {
+ "node": ">= 14"
}
},
"node_modules/source-map": {
@@ -2010,6 +1849,22 @@
"node": ">=0.10.0"
}
},
+ "node_modules/sprintf-js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
+ "dev": true
+ },
+ "node_modules/streamx": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.0.tgz",
+ "integrity": "sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg==",
+ "dev": true,
+ "dependencies": {
+ "fast-fifo": "^1.1.0",
+ "queue-tick": "^1.0.1"
+ }
+ },
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -2019,6 +1874,21 @@
"safe-buffer": "~5.1.0"
}
},
+ "node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
"node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -2032,21 +1902,29 @@
"node": ">=4"
}
},
- "node_modules/tar": {
- "version": "6.1.9",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.9.tgz",
- "integrity": "sha512-XjLaMNl76o07zqZC/aW4lwegdY07baOH1T8w3AEfrHAdyg/oYO4ctjzEBq9Gy9fEP9oHqLIgvx6zuGDGe+bc8Q==",
+ "node_modules/tar-fs": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz",
+ "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==",
"dev": true,
"dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
+ "pump": "^3.0.0",
+ "tar-stream": "^3.1.5"
},
- "engines": {
- "node": ">= 10"
+ "optionalDependencies": {
+ "bare-fs": "^2.1.1",
+ "bare-path": "^2.1.0"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz",
+ "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==",
+ "dev": true,
+ "dependencies": {
+ "b4a": "^1.6.4",
+ "fast-fifo": "^1.2.0",
+ "streamx": "^2.15.0"
}
},
"node_modules/tcp-port-used": {
@@ -2077,15 +1955,12 @@
}
},
"node_modules/tmp": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
- "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+ "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
"dev": true,
- "dependencies": {
- "rimraf": "^3.0.0"
- },
"engines": {
- "node": ">=8.17.0"
+ "node": ">=14.14"
}
},
"node_modules/to-fast-properties": {
@@ -2098,17 +1973,11 @@
"node": ">=4"
}
},
- "node_modules/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,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true
},
"node_modules/util-deprecate": {
"version": "1.0.2",
@@ -2116,6 +1985,30 @@
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
+ "node_modules/web-streams-polyfill": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
+ "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
+ "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^3.1.1"
+ },
+ "bin": {
+ "node-which": "bin/which.js"
+ },
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ }
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -2123,16 +2016,16 @@
"dev": true
},
"node_modules/ws": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
- "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
"dev": true,
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
+ "utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
@@ -2143,12 +2036,6 @@
}
}
},
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/yauzl": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
@@ -2162,13 +2049,14 @@
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
- "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"peer": true,
"requires": {
- "@babel/highlight": "^7.14.5"
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
}
},
"@babel/compat-data": {
@@ -2203,15 +2091,16 @@
}
},
"@babel/generator": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz",
- "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+ "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
"peer": true,
"requires": {
- "@babel/types": "^7.15.6",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
+ "@babel/types": "^7.23.6",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
}
},
"@babel/helper-compilation-targets": {
@@ -2227,36 +2116,32 @@
"semver": "^6.3.0"
}
},
- "@babel/helper-function-name": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz",
- "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==",
+ "@babel/helper-environment-visitor": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true,
- "peer": true,
- "requires": {
- "@babel/helper-get-function-arity": "^7.15.4",
- "@babel/template": "^7.15.4",
- "@babel/types": "^7.15.4"
- }
+ "peer": true
},
- "@babel/helper-get-function-arity": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz",
- "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==",
+ "@babel/helper-function-name": {
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
"peer": true,
"requires": {
- "@babel/types": "^7.15.4"
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
}
},
"@babel/helper-hoist-variables": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz",
- "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
+ "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
"peer": true,
"requires": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-member-expression-to-functions": {
@@ -2330,19 +2215,26 @@
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz",
- "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==",
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
"peer": true,
"requires": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.22.5"
}
},
+ "@babel/helper-string-parser": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+ "dev": true,
+ "peer": true
+ },
"@babel/helper-validator-identifier": {
- "version": "7.15.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
- "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true,
"peer": true
},
@@ -2366,151 +2258,141 @@
}
},
"@babel/highlight": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
- "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
"peer": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.14.5",
- "chalk": "^2.0.0",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz",
- "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"dev": true,
"peer": true
},
"@babel/register": {
- "version": "7.15.3",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.15.3.tgz",
- "integrity": "sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.9.tgz",
+ "integrity": "sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==",
"dev": true,
"requires": {
"clone-deep": "^4.0.1",
"find-cache-dir": "^2.0.0",
"make-dir": "^2.1.0",
- "pirates": "^4.0.0",
+ "pirates": "^4.0.6",
"source-map-support": "^0.5.16"
}
},
"@babel/template": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
- "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"peer": true,
"requires": {
- "@babel/code-frame": "^7.14.5",
- "@babel/parser": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
}
},
"@babel/traverse": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz",
- "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==",
+ "version": "7.23.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz",
+ "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==",
"dev": true,
"peer": true,
"requires": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.15.4",
- "@babel/helper-function-name": "^7.15.4",
- "@babel/helper-hoist-variables": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
- "@babel/parser": "^7.15.4",
- "@babel/types": "^7.15.4",
- "debug": "^4.1.0",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.15.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz",
- "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
"peer": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.14.9",
+ "@babel/helper-string-parser": "^7.23.4",
+ "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
}
},
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "@bazel/runfiles": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/@bazel/runfiles/-/runfiles-6.3.1.tgz",
+ "integrity": "sha512-1uLNT5NZsUVIGS4syuHwTzZ8HycMPyr6POA3FCE4GbMtc4rhoJk8aZKtNIRthJYfL+iioppi+rTfH3olMPr9nA==",
"dev": true
},
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dev": true,
+ "peer": true,
"requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
}
},
- "@sindresorhus/is": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz",
- "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==",
- "dev": true
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "dev": true,
+ "peer": true
},
- "@szmarczak/http-timer": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
- "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
+ "@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true,
- "requires": {
- "defer-to-connect": "^2.0.0"
- }
+ "peer": true
},
- "@testim/chrome-version": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.0.7.tgz",
- "integrity": "sha512-8UT/J+xqCYfn3fKtOznAibsHpiuDshCb0fwgWxRazTT19Igp9ovoXMPhXyLD6m3CKQGTMHgqoxaFfMWaL40Rnw==",
- "dev": true
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true,
+ "peer": true
},
- "@types/cacheable-request": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz",
- "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==",
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.21",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz",
+ "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==",
"dev": true,
+ "peer": true,
"requires": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "*",
- "@types/node": "*",
- "@types/responselike": "*"
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "@types/http-cache-semantics": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz",
- "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==",
+ "@testim/chrome-version": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.4.tgz",
+ "integrity": "sha512-kIhULpw9TrGYnHp/8VfdcneIcxKnLixmADtukQRtJUmsVlMg0niMkwV0xZmi8hqa57xqilIHjWFA0GKvEjVU5g==",
"dev": true
},
- "@types/keyv": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz",
- "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
+ "@tootallnate/quickjs-emscripten": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
+ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
+ "dev": true
},
"@types/node": {
"version": "16.11.6",
@@ -2518,10 +2400,20 @@
"integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==",
"dev": true
},
- "@types/responselike": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
- "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
+ "@types/selenium-webdriver": {
+ "version": "4.1.28",
+ "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.1.28.tgz",
+ "integrity": "sha512-Au7CXegiS7oapbB16zxPToY4Cjzi9UQQMf3W2ZZM8PigMLTGR3iUAHjPUTddyE5g1SBjT/qpmvlsAQLBfNAdKg==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*",
+ "@types/ws": "*"
+ }
+ },
+ "@types/ws": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz",
+ "integrity": "sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==",
"dev": true,
"requires": {
"@types/node": "*"
@@ -2537,30 +2429,43 @@
"@types/node": "*"
}
},
- "adm-zip": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.5.tgz",
- "integrity": "sha512-IWwXKnCbirdbyXSfUDvCCrmYrOHANRZcc8NcRrvTlIApdl7PwE9oGcsYvNeJPAVY1M+70b4PxXGKIf8AEuiQ6w==",
- "dev": true
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "@wdio/logger": {
+ "version": "9.4.4",
+ "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.4.4.tgz",
+ "integrity": "sha512-BXx8RXFUW2M4dcO6t5Le95Hi2ZkTQBRsvBQqLekT2rZ6Xmw8ZKZBPf0FptnoftFGg6dYmwnDidYv/0+4PiHjpQ==",
"dev": true,
"requires": {
- "debug": "4"
+ "chalk": "^5.1.2",
+ "loglevel": "^1.6.0",
+ "loglevel-plugin-prefix": "^0.8.4",
+ "strip-ansi": "^7.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz",
+ "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==",
+ "dev": true
+ }
}
},
- "aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "requires": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- }
+ "@zip.js/zip.js": {
+ "version": "2.7.54",
+ "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.54.tgz",
+ "integrity": "sha512-qMrJVg2hoEsZJjMJez9yI2+nZlBUxgYzGV3mqcb2B/6T1ihXp0fWBDYlVHlHquuorgNUQP5a8qSmX6HF5rFJNg==",
+ "dev": true
+ },
+ "agent-base": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
+ "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "dev": true
},
"ansi-styles": {
"version": "3.2.1",
@@ -2572,58 +2477,87 @@
"color-convert": "^1.9.0"
}
},
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "ast-types": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
+ "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.0.1"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"dev": true
},
"axios": {
- "version": "0.21.4",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
- "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
+ "version": "1.7.9",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
+ "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
"dev": true,
"requires": {
- "follow-redirects": "^1.14.0"
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
}
},
+ "b4a": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz",
+ "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==",
+ "dev": true
+ },
"babel-regenerator-runtime": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/babel-regenerator-runtime/-/babel-regenerator-runtime-6.5.0.tgz",
"integrity": "sha1-DkHNHJ+ARCRm8BXHSf/4upj44RA=",
"dev": true
},
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
+ "bare-events": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz",
+ "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==",
+ "dev": true,
+ "optional": true
},
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "bare-fs": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.1.5.tgz",
+ "integrity": "sha512-5t0nlecX+N2uJqdxe9d18A98cp2u9BETelbjKpiVgQqzzmVNFYWEAjQHqS+2Khgto1vcwhik9cXucaj5ve2WWA==",
"dev": true,
+ "optional": true,
"requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "bare-events": "^2.0.0",
+ "bare-os": "^2.0.0",
+ "bare-path": "^2.0.0",
+ "streamx": "^2.13.0"
}
},
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "bare-os": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.2.0.tgz",
+ "integrity": "sha512-hD0rOPfYWOMpVirTACt4/nK8mC55La12K5fY1ij8HAdfQakD62M+H4o4tpfKzVGLgRDTuk3vjA4GqGXXCeFbag==",
+ "dev": true,
+ "optional": true
+ },
+ "bare-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.0.tgz",
+ "integrity": "sha512-DIIg7ts8bdRKwJRJrUMy/PICEaQZaPGZ26lsSx9MJSwIhSrcdHn7/C8W+XmnG/rKi6BaRcz+JO00CjZteybDtw==",
"dev": true,
+ "optional": true,
"requires": {
- "fill-range": "^7.0.1"
+ "bare-os": "^2.1.0"
}
},
+ "basic-ftp": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz",
+ "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==",
+ "dev": true
+ },
"browserslist": {
"version": "4.17.5",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz",
@@ -2650,27 +2584,6 @@
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
- "cacheable-lookup": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
- "dev": true
- },
- "cacheable-request": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
- "dev": true,
- "requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
- }
- },
"caniuse-lite": {
"version": "1.0.30001271",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz",
@@ -2690,33 +2603,21 @@
"supports-color": "^5.3.0"
}
},
- "chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "dev": true
- },
"chromedriver": {
- "version": "95.0.0",
- "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-95.0.0.tgz",
- "integrity": "sha512-HwSg7S0ZZYsHTjULwxFHrrUqEpz1+ljDudJM3eOquvqD5QKnR5pSe/GlBTY9UU2tVFRYz8bEHYC4Y8qxciQiLQ==",
+ "version": "131.0.5",
+ "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-131.0.5.tgz",
+ "integrity": "sha512-OQY4BHUe9JedxH4aAsPZJcf8Y0lMlE7y+3tiCvQSCQ6qDz2b99R0qsqyqzUUSW2DFx0bg4YxmK8CDVMKb9u5kg==",
"dev": true,
"requires": {
- "@testim/chrome-version": "^1.0.7",
- "axios": "^0.21.2",
- "del": "^6.0.0",
+ "@testim/chrome-version": "^1.1.4",
+ "axios": "^1.7.4",
+ "compare-versions": "^6.1.0",
"extract-zip": "^2.0.1",
- "https-proxy-agent": "^5.0.0",
+ "proxy-agent": "^6.4.0",
"proxy-from-env": "^1.1.0",
- "tcp-port-used": "^1.0.1"
+ "tcp-port-used": "^1.0.2"
}
},
- "clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true
- },
"clone-deep": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
@@ -2728,15 +2629,6 @@
"shallow-clone": "^3.0.0"
}
},
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "dev": true,
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -2750,20 +2642,29 @@
"color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true,
"peer": 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"
+ }
+ },
"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=",
+ "compare-versions": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.0.tgz",
+ "integrity": "sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==",
"dev": true
},
"convert-source-map": {
@@ -2782,69 +2683,50 @@
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"dev": true
},
+ "data-uri-to-buffer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
+ "dev": true
+ },
"debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+ "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"
}
},
- "decompress-response": {
+ "decamelize": {
"version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "dev": true,
- "requires": {
- "mimic-response": "^3.1.0"
- },
- "dependencies": {
- "mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
- "dev": true
- }
- }
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz",
+ "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==",
+ "dev": true
},
"deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "dev": true
- },
- "defer-to-connect": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
- "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
- "dev": true
- },
- "del": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz",
- "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==",
- "dev": true,
- "requires": {
- "globby": "^11.0.1",
- "graceful-fs": "^4.2.4",
- "is-glob": "^4.0.1",
- "is-path-cwd": "^2.2.0",
- "is-path-inside": "^3.0.2",
- "p-map": "^4.0.0",
- "rimraf": "^3.0.2",
- "slash": "^3.0.0"
- }
+ "dev": true
},
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "degenerator": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
+ "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
"dev": true,
"requires": {
- "path-type": "^4.0.0"
+ "ast-types": "^0.13.4",
+ "escodegen": "^2.1.0",
+ "esprima": "^4.0.1"
}
},
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true
+ },
"electron-to-chromium": {
"version": "1.3.879",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.879.tgz",
@@ -2871,10 +2753,49 @@
"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=",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true,
"peer": true
},
+ "escodegen": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+ "dev": true,
+ "requires": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "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,
+ "optional": 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
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "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
+ },
"extract-zip": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
@@ -2887,27 +2808,11 @@
"yauzl": "^2.10.0"
}
},
- "fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
- "dev": true,
- "requires": {
- "@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"
- }
- },
- "fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "dev": true,
- "requires": {
- "reusify": "^1.0.4"
- }
+ "fast-fifo": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.0.tgz",
+ "integrity": "sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw==",
+ "dev": true
},
"fd-slicer": {
"version": "1.1.0",
@@ -2918,13 +2823,14 @@
"pend": "~1.2.0"
}
},
- "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==",
+ "fetch-blob": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
"dev": true,
"requires": {
- "to-regex-range": "^5.0.1"
+ "node-domexception": "^1.0.0",
+ "web-streams-polyfill": "^3.0.3"
}
},
"find-cache-dir": {
@@ -2948,37 +2854,45 @@
}
},
"follow-redirects": {
- "version": "1.14.4",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz",
- "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==",
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"dev": true
},
- "fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
"dev": true,
"requires": {
- "minipass": "^3.0.0"
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
}
},
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
+ "formdata-polyfill": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+ "dev": true,
+ "requires": {
+ "fetch-blob": "^3.1.2"
+ }
},
"geckodriver": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-2.0.4.tgz",
- "integrity": "sha512-3Fu75v6Ov8h5Vt25+djJU56MJA2gRctgjhvG5xGzLFTQjltPz7nojQdBHbmgWznUt3CHl8VaiDn8MaepY7B0dA==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-5.0.0.tgz",
+ "integrity": "sha512-vn7TtQ3b9VMJtVXsyWtQQl1fyBVFhQy7UvJF96kPuuJ0or5THH496AD3eUyaDD11+EqCxH9t6V+EP9soZQk4YQ==",
"dev": true,
"requires": {
- "adm-zip": "0.5.5",
- "bluebird": "3.7.2",
- "got": "11.8.2",
- "https-proxy-agent": "5.0.0",
- "tar": "6.1.9"
+ "@wdio/logger": "^9.1.3",
+ "@zip.js/zip.js": "^2.7.53",
+ "decamelize": "^6.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.5",
+ "node-fetch": "^3.3.2",
+ "tar-fs": "^3.0.6",
+ "which": "^5.0.0"
}
},
"gensync": {
@@ -2997,27 +2911,23 @@
"pump": "^3.0.0"
}
},
- "glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "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.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "get-uri": {
+ "version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz",
+ "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==",
"dev": true,
"requires": {
- "is-glob": "^4.0.1"
+ "basic-ftp": "^5.0.2",
+ "data-uri-to-buffer": "^6.0.2",
+ "debug": "^4.3.4"
+ },
+ "dependencies": {
+ "data-uri-to-buffer": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz",
+ "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==",
+ "dev": true
+ }
}
},
"globals": {
@@ -3027,149 +2937,59 @@
"dev": true,
"peer": true
},
- "globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- }
- },
- "got": {
- "version": "11.8.2",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz",
- "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==",
- "dev": true,
- "requires": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.1",
- "decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
- "dev": true
- },
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
"peer": true
},
- "http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
- "dev": true
- },
- "http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
+ "http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
"requires": {
- "quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
}
},
"https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"dev": true,
"requires": {
- "agent-base": "6",
+ "agent-base": "^7.1.2",
"debug": "4"
}
},
- "ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "dev": true
- },
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
"dev": true
},
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "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
},
- "ip-regex": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
- "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==",
- "dev": true
- },
- "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-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "ip-address": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+ "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
"dev": true,
"requires": {
- "is-extglob": "^2.1.1"
+ "jsbn": "1.1.0",
+ "sprintf-js": "^1.1.3"
}
},
- "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-path-cwd": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
- "dev": true
- },
- "is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "ip-regex": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
+ "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==",
"dev": true
},
"is-plain-object": {
@@ -3204,6 +3024,12 @@
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
+ "isexe": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+ "dev": true
+ },
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
@@ -3217,6 +3043,12 @@
"dev": true,
"peer": true
},
+ "jsbn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
+ "dev": true
+ },
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -3224,41 +3056,23 @@
"dev": true,
"peer": true
},
- "json-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
- "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
- "dev": true
- },
"json5": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
- "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
- "peer": true,
- "requires": {
- "minimist": "^1.2.5"
- }
+ "peer": true
},
"jszip": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz",
- "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==",
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"dev": true,
"requires": {
"lie": "~3.3.0",
"pako": "~1.0.2",
"readable-stream": "~2.3.6",
- "set-immediate-shim": "~1.0.1"
- }
- },
- "keyv": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz",
- "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==",
- "dev": true,
- "requires": {
- "json-buffer": "3.0.1"
+ "setimmediate": "^1.0.5"
}
},
"kind-of": {
@@ -3286,10 +3100,22 @@
"path-exists": "^3.0.0"
}
},
- "lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "loglevel": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz",
+ "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==",
+ "dev": true
+ },
+ "loglevel-plugin-prefix": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz",
+ "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
"dev": true
},
"make-dir": {
@@ -3303,88 +3129,57 @@
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true
}
}
},
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- }
- },
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true
},
- "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.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true,
- "peer": true
- },
- "minipass": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz",
- "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"dev": true,
"requires": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
+ "mime-db": "1.52.0"
}
},
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "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
},
- "node-modules-regexp": {
+ "netmask": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
+ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
+ "dev": true
+ },
+ "node-domexception": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
"dev": true
},
+ "node-fetch": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
+ "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
+ "dev": true,
+ "requires": {
+ "data-uri-to-buffer": "^4.0.0",
+ "fetch-blob": "^3.1.4",
+ "formdata-polyfill": "^4.0.10"
+ }
+ },
"node-releases": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
@@ -3392,12 +3187,6 @@
"dev": true,
"peer": true
},
- "normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
- "dev": true
- },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -3407,12 +3196,6 @@
"wrappy": "1"
}
},
- "p-cancelable": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
- "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==",
- "dev": true
- },
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -3431,21 +3214,38 @@
"p-limit": "^2.0.0"
}
},
- "p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "requires": {
- "aggregate-error": "^3.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
},
+ "pac-proxy-agent": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.1.0.tgz",
+ "integrity": "sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==",
+ "dev": true,
+ "requires": {
+ "@tootallnate/quickjs-emscripten": "^0.23.0",
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "get-uri": "^6.0.1",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.6",
+ "pac-resolver": "^7.0.1",
+ "socks-proxy-agent": "^8.0.5"
+ }
+ },
+ "pac-resolver": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz",
+ "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
+ "dev": true,
+ "requires": {
+ "degenerator": "^5.0.0",
+ "netmask": "^2.0.2"
+ }
+ },
"pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
@@ -3458,18 +3258,6 @@
"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-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
- },
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
@@ -3483,12 +3271,6 @@
"dev": true,
"peer": true
},
- "picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
- "dev": true
- },
"pify": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
@@ -3496,13 +3278,10 @@
"dev": true
},
"pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
- "dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
- }
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "dev": true
},
"pkg-dir": {
"version": "3.0.0",
@@ -3519,6 +3298,22 @@
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
+ "proxy-agent": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz",
+ "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==",
+ "dev": true,
+ "requires": {
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "http-proxy-agent": "^7.0.1",
+ "https-proxy-agent": "^7.0.6",
+ "lru-cache": "^7.14.1",
+ "pac-proxy-agent": "^7.1.0",
+ "proxy-from-env": "^1.1.0",
+ "socks-proxy-agent": "^8.0.5"
+ }
+ },
"proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -3535,16 +3330,10 @@
"once": "^1.3.1"
}
},
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
- },
- "quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "queue-tick": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
+ "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==",
"dev": true
},
"readable-stream": {
@@ -3562,45 +3351,6 @@
"util-deprecate": "~1.0.1"
}
},
- "resolve-alpn": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
- "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
- "dev": true
- },
- "responselike": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
- "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
- "dev": true,
- "requires": {
- "lowercase-keys": "^2.0.0"
- }
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -3608,28 +3358,28 @@
"dev": true
},
"selenium-webdriver": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0.tgz",
- "integrity": "sha512-tOlu6FnTjPq2FKpd153pl8o2cB7H40Rvl/ogiD2sapMv4IDjQqpIxbd+swDJe9UDLdszeh5CDis6lgy4e9UG1w==",
+ "version": "4.27.0",
+ "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.27.0.tgz",
+ "integrity": "sha512-LkTJrNz5socxpPnWPODQ2bQ65eYx9JK+DQMYNihpTjMCqHwgWGYQnQTCAAche2W3ZP87alA+1zYPvgS8tHNzMQ==",
"dev": true,
"requires": {
- "jszip": "^3.6.0",
- "rimraf": "^3.0.2",
- "tmp": "^0.2.1",
- "ws": ">=7.4.6"
+ "@bazel/runfiles": "^6.3.1",
+ "jszip": "^3.10.1",
+ "tmp": "^0.2.3",
+ "ws": "^8.18.0"
}
},
"semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"peer": true
},
- "set-immediate-shim": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
- "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
+ "setimmediate": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
"dev": true
},
"shallow-clone": {
@@ -3641,12 +3391,33 @@
"kind-of": "^6.0.2"
}
},
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
"dev": true
},
+ "socks": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
+ "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
+ "dev": true,
+ "requires": {
+ "ip-address": "^9.0.5",
+ "smart-buffer": "^4.2.0"
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz",
+ "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==",
+ "dev": true,
+ "requires": {
+ "agent-base": "^7.1.2",
+ "debug": "^4.3.4",
+ "socks": "^2.8.3"
+ }
+ },
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -3672,6 +3443,22 @@
}
}
},
+ "sprintf-js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
+ "dev": true
+ },
+ "streamx": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.0.tgz",
+ "integrity": "sha512-HcxY6ncGjjklGs1xsP1aR71INYcsXFJet5CU1CHqihQ2J5nOsbd4OjgjHO42w/4QNv9gZb3BueV+Vxok5pLEXg==",
+ "dev": true,
+ "requires": {
+ "fast-fifo": "^1.1.0",
+ "queue-tick": "^1.0.1"
+ }
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -3681,6 +3468,15 @@
"safe-buffer": "~5.1.0"
}
},
+ "strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^6.0.1"
+ }
+ },
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -3691,18 +3487,27 @@
"has-flag": "^3.0.0"
}
},
- "tar": {
- "version": "6.1.9",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.9.tgz",
- "integrity": "sha512-XjLaMNl76o07zqZC/aW4lwegdY07baOH1T8w3AEfrHAdyg/oYO4ctjzEBq9Gy9fEP9oHqLIgvx6zuGDGe+bc8Q==",
+ "tar-fs": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz",
+ "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==",
+ "dev": true,
+ "requires": {
+ "bare-fs": "^2.1.1",
+ "bare-path": "^2.1.0",
+ "pump": "^3.0.0",
+ "tar-stream": "^3.1.5"
+ }
+ },
+ "tar-stream": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz",
+ "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==",
"dev": true,
"requires": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
+ "b4a": "^1.6.4",
+ "fast-fifo": "^1.2.0",
+ "streamx": "^2.15.0"
}
},
"tcp-port-used": {
@@ -3727,13 +3532,10 @@
}
},
"tmp": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
- "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
- "dev": true,
- "requires": {
- "rimraf": "^3.0.0"
- }
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+ "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
+ "dev": true
},
"to-fast-properties": {
"version": "2.0.0",
@@ -3742,14 +3544,11 @@
"dev": true,
"peer": 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"
- }
+ "tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true
},
"util-deprecate": {
"version": "1.0.2",
@@ -3757,6 +3556,21 @@
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
+ "web-streams-polyfill": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
+ "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==",
+ "dev": true
+ },
+ "which": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz",
+ "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^3.1.1"
+ }
+ },
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -3764,18 +3578,12 @@
"dev": true
},
"ws": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
- "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
"dev": true,
"requires": {}
},
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"yauzl": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
diff --git a/build-system/tasks/e2e/package.json b/build-system/tasks/e2e/package.json
index de70ba7fce64..2db1f4b1f424 100644
--- a/build-system/tasks/e2e/package.json
+++ b/build-system/tasks/e2e/package.json
@@ -4,10 +4,11 @@
"version": "0.1.0",
"description": "amp e2e",
"devDependencies": {
- "@babel/register": "7.15.3",
+ "@babel/register": "7.25.9",
+ "@types/selenium-webdriver": "4.1.28",
"babel-regenerator-runtime": "6.5.0",
- "chromedriver": "95.0.0",
- "geckodriver": "2.0.4",
- "selenium-webdriver": "4.0.0"
+ "chromedriver": "131.0.5",
+ "geckodriver": "5.0.0",
+ "selenium-webdriver": "4.27.0"
}
}
diff --git a/build-system/tasks/e2e/selenium-webdriver-controller.js b/build-system/tasks/e2e/selenium-webdriver-controller.js
index 0e884a86c8bc..e6ca1a5aaa62 100644
--- a/build-system/tasks/e2e/selenium-webdriver-controller.js
+++ b/build-system/tasks/e2e/selenium-webdriver-controller.js
@@ -1,5 +1,5 @@
const fs = require('fs');
-const selenium = require('selenium-webdriver');
+const {By, Condition, Key: SeleniumKey, error} = require('selenium-webdriver');
const {
DOMRectDef,
ElementHandle,
@@ -10,12 +10,14 @@ const {ControllerPromise} = require('./controller-promise');
const {expect} = require('chai');
const {NetworkLogger} = require('./network-logger');
-const {By, Condition, Key: SeleniumKey, error} = selenium;
-
const {NoSuchElementError} = error;
const ELEMENT_WAIT_TIMEOUT = 5000;
+/** @typedef {import('selenium-webdriver').ISize} ISize */
+/** @typedef {import('selenium-webdriver').WebDriver} WebDriver */
+/** @typedef {import('selenium-webdriver').WebElement} WebElement */
+
/** @enum {string} */
const KeyToSeleniumMap = {
[Key.ArrowDown]: SeleniumKey.ARROW_DOWN,
@@ -48,7 +50,7 @@ function expectCondition(valueFn, condition, opt_mutate) {
/**
* Make the test runner wait until the value returned by the valueFn matches
* the given condition.
- * @param {!selenium.WebDriver} driver
+ * @param {!WebDriver} driver
* @param {function(): !Promise} valueFn
* @param {function(T2): ?T1} condition
* @param {function(T1): T2} opt_mutate
@@ -63,30 +65,31 @@ async function waitFor(driver, valueFn, condition, opt_mutate) {
return Boolean(condition(value));
};
+ /* TODO: fix incorrect typing. */
+ /** @type {any} */
const result = await driver.wait(
expectCondition(valueFn, conditionValue, opt_mutate)
);
- return result.value; // Unbox the value.
+ return result;
}
class SeleniumWebDriverController {
/**
- * @param {!selenium.WebDriver} driver
+ * @param {!WebDriver} driver
*/
constructor(driver) {
this.driver = driver;
this.networkLogger = new NetworkLogger(driver);
- /** @private {?selenium.WebElement} */
+ /** @private {?WebElement} */
this.shadowRoot_ = null;
/** @private {boolean} */
this.isXpathInstalled_ = false;
}
- // * @return {function(T1,T1): !Promise}
/**
* Return a wait function. When called, the function will cause the test
* runner to wait until the given value matches the expected value.
@@ -107,7 +110,7 @@ class SeleniumWebDriverController {
* {@link https://github.com/SeleniumHQ/selenium/blob/6a717f20/javascript/node/selenium-webdriver/lib/until.js#L237}
* @param {string} selector
* @param {number=} timeout
- * @return {!Promise>}
+ * @return {!Promise>}
*/
async findElement(selector, timeout = ELEMENT_WAIT_TIMEOUT) {
const bySelector = By.css(selector);
@@ -137,7 +140,7 @@ class SeleniumWebDriverController {
* until.js#elementsLocated
* {@link https://github.com/SeleniumHQ/selenium/blob/6a717f20/javascript/node/selenium-webdriver/lib/until.js#L258} *
* @param {string} selector
- * @return {!Promise>>}
+ * @return {!Promise>>}
*/
async findElements(selector) {
const bySelector = By.css(selector);
@@ -155,13 +158,17 @@ class SeleniumWebDriverController {
throw e;
}
});
- const webElements = await this.driver.wait(condition, ELEMENT_WAIT_TIMEOUT);
+ /* TODO: fix incorrect typing. */
+ /** @type {WebElement[]} */
+ const webElements = /** @type {?} */ (
+ await this.driver.wait(condition, ELEMENT_WAIT_TIMEOUT)
+ );
return webElements.map((webElement) => new ElementHandle(webElement));
}
/**
* @param {string} xpath
- * @return {!Promise>}
+ * @return {!Promise>}
*/
async findElementXPath(xpath) {
await this.maybeInstallXpath_();
@@ -186,24 +193,28 @@ class SeleniumWebDriverController {
/**
* @param {string} xpath
- * @return {!Promise>>}
+ * @return {!Promise>>}
*/
async findElementsXPath(xpath) {
await this.maybeInstallXpath_();
const label = 'for at least one element to be located ' + xpath;
- const webElements = await this.driver.wait(
- new Condition(label, async () => {
- const root = await this.getRoot_();
- const results = await this.evaluate(
- (xpath, root) => {
- return window.queryXpath(xpath, root);
- },
- xpath,
- root
- );
- return results;
- }),
- ELEMENT_WAIT_TIMEOUT
+ /* TODO: fix incorrect typing. */
+ /** @type {WebElement[]} */
+ const webElements = /** @type {?} */ (
+ await this.driver.wait(
+ new Condition(label, async () => {
+ const root = await this.getRoot_();
+ const results = await this.evaluate(
+ (xpath, root) => {
+ return window.queryXpath(xpath, root);
+ },
+ xpath,
+ root
+ );
+ return results;
+ }),
+ ELEMENT_WAIT_TIMEOUT
+ )
);
return webElements.map((webElement) => new ElementHandle(webElement));
}
@@ -229,7 +240,7 @@ class SeleniumWebDriverController {
}
/**
- * @return {!Promise>}
+ * @return {!Promise>}
*/
async getActiveElement() {
const root = await this.getRoot_();
@@ -240,7 +251,7 @@ class SeleniumWebDriverController {
}
/**
- * @return {!Promise>}
+ * @return {!Promise>}
*/
async getDocumentElement() {
const root = await this.getRoot_();
@@ -253,10 +264,8 @@ class SeleniumWebDriverController {
* @return {!ControllerPromise}
*/
getCurrentUrl() {
- return new ControllerPromise(
- this.driver.getCurrentUrl(),
- this.getWaitFn_(() => this.driver.getCurrentUrl())
- );
+ const waitForFn = this.getWaitFn_(() => this.driver.getCurrentUrl());
+ return new ControllerPromise(this.driver.getCurrentUrl(), waitForFn);
}
/**
@@ -268,7 +277,7 @@ class SeleniumWebDriverController {
}
/**
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @param {string|Key} keys
* @return {!Promise}
*/
@@ -296,7 +305,7 @@ class SeleniumWebDriverController {
*/
pasteFromClipboard() {
return this.driver
- .actions()
+ .actions({async: false, bridge: undefined})
.keyDown(SeleniumKey.SHIFT)
.keyDown(SeleniumKey.INSERT)
.keyUp(SeleniumKey.SHIFT)
@@ -305,19 +314,17 @@ class SeleniumWebDriverController {
}
/**
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @return {!Promise}
*/
getElementText(handle) {
const webElement = handle.getElement();
- return new ControllerPromise(
- webElement.getText(),
- this.getWaitFn_(() => webElement.getText())
- );
+ const waitForFn = this.getWaitFn_(() => webElement.getText());
+ return new ControllerPromise(webElement.getText(), waitForFn);
}
/**
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @return {!Promise}
*/
getElementTagName(handle) {
@@ -326,7 +333,7 @@ class SeleniumWebDriverController {
}
/**
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @param {string} attribute
* @return {!Promise}
*/
@@ -342,7 +349,7 @@ class SeleniumWebDriverController {
/**
* Gets the element property. Note that this is different
* than getElementAttribute()
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @param {string} property
* @return {!Promise}
*/
@@ -359,7 +366,7 @@ class SeleniumWebDriverController {
}
/**
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @return {!Promise}
*/
getElementRect(handle) {
@@ -442,9 +449,21 @@ class SeleniumWebDriverController {
);
}
+ /**
+ * Get width/height of the browser area.
+ * @return {!Promise<[number, number]>}
+ */
+ async getWindowRect() {
+ const htmlElement = this.driver.findElement(By.css('html'));
+ return await Promise.all([
+ htmlElement.getAttribute('clientWidth').then(Number),
+ htmlElement.getAttribute('clientHeight').then(Number),
+ ]);
+ }
+
/**
* Sets width/height of the browser area.
- * @param {!selenium.WindowRectDef} rect
+ * @param {!ISize} rect
* @return {!Promise}
*/
async setWindowRect(rect) {
@@ -524,7 +543,7 @@ class SeleniumWebDriverController {
/**
*
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @return {!Promise}
*/
async click(handle) {
@@ -532,7 +551,7 @@ class SeleniumWebDriverController {
}
/**
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @param {!ScrollToOptionsDef=} opt_scrollToOptions
* @return {!Promise}
*/
@@ -546,7 +565,7 @@ class SeleniumWebDriverController {
}
/**
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @param {!ScrollToOptionsDef=} opt_scrollToOptions
* @return {!Promise}
*/
@@ -600,7 +619,7 @@ class SeleniumWebDriverController {
}
/**
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @return {!Promise}
*/
async switchToFrame(handle) {
@@ -623,7 +642,7 @@ class SeleniumWebDriverController {
/**
* Switch controller to shadowRoot body hosted by given element.
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @return {!Promise}
*/
async switchToShadow(handle) {
@@ -633,7 +652,7 @@ class SeleniumWebDriverController {
/**
* Switch controller to shadowRoot hosted by given element.
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @return {!Promise}
*/
async switchToShadowRoot(handle) {
@@ -642,7 +661,7 @@ class SeleniumWebDriverController {
}
/**.
- * @param {!ElementHandle} handle
+ * @param {!ElementHandle} handle
* @param {function(): any} getter
* @return {!Promise}
*/
@@ -661,7 +680,7 @@ class SeleniumWebDriverController {
/**
* Get the current root
- * @return {!Promise}
+ * @return {!Promise}
*/
getRoot_() {
if (this.shadowRoot_) {
@@ -673,9 +692,9 @@ class SeleniumWebDriverController {
/**
* Shutdown the driver.
- * @return {void}
+ * @return {Promise}
*/
- dispose() {
+ async dispose() {
return this.driver.quit();
}
}
diff --git a/build-system/tasks/extension-helpers.js b/build-system/tasks/extension-helpers.js
index 88f5581dfd83..f30310687270 100644
--- a/build-system/tasks/extension-helpers.js
+++ b/build-system/tasks/extension-helpers.js
@@ -1,9 +1,8 @@
const argv = require('minimist')(process.argv.slice(2));
-const babel = require('@babel/core');
const debounce = require('../common/debounce');
-const dedent = require('dedent');
const fastGlob = require('fast-glob');
const fs = require('fs-extra');
+const json5 = require('json5');
const path = require('path');
const wrappers = require('../compile/compile-wrappers');
const {
@@ -12,8 +11,6 @@ const {
endBuildStep,
esbuildCompile,
maybeToEsmName,
- maybeToNpmEsmName,
- mkdirSync,
watchDebounceDelay,
} = require('./helpers');
const {
@@ -28,15 +25,19 @@ const {
const {analyticsVendorConfigs} = require('./analytics-vendor-configs');
const {compileJison} = require('./compile-jison');
const {cyan, green, red} = require('kleur/colors');
-const {getBentoName} = require('./bento-helpers');
const {isCiBuild} = require('../common/ci');
const {jsifyCssAsync} = require('./css/jsify-css');
-const {jssOptions} = require('../babel-config/jss-config');
const {log} = require('../common/logging');
const {parse: pathParse} = require('path');
-const {renameSelectorsToBentoTagNames} = require('./css/bento-css');
-const {TransformCache, batchedRead} = require('../common/transform-cache');
const {watch} = require('chokidar');
+const {findJsSourceFilename} = require('../common/fs');
+
+const legacyLatestVersions = json5.parse(
+ fs.readFileSync(
+ require.resolve('../compile/bundles.legacy-latest-versions.jsonc'),
+ 'utf8'
+ )
+);
/**
* Extensions to build when `--extensions=inabox`.
@@ -80,11 +81,10 @@ const DEFAULT_EXTENSION_SET = ['amp-loader', 'amp-auto-lightbox'];
* version?: string,
* hasCss?: boolean,
* loadPriority?: string,
- * cssBinaries?: Array,
- * extraGlobs?: Array,
* binaries?: Array,
- * npm?: boolean,
* wrapper?: string,
+ * ssrCss?: boolean,
+ * additionalSuffix?: string
* }}
*/
const ExtensionOptionDef = {};
@@ -96,12 +96,13 @@ const ExtensionOptionDef = {};
* external?: Array
* remap?: Record
* wrapper?: string,
+ * babelCaller?: string,
* }}
*/
const ExtensionBinaryDef = {};
// All declared extensions.
-const extensions = {};
+const EXTENSIONS = {};
// All extensions to build
let extensionsToBuild = null;
@@ -112,32 +113,25 @@ const adVendors = [];
/**
* @param {string} name
* @param {string|!Array} version E.g. 0.1 or [0.1, 0.2]
- * @param {string} latestVersion E.g. 0.1
* @param {!ExtensionOptionDef|undefined} options extension options object.
* @param {!Object} extensionsObject
- * @param {boolean} includeLatest
*/
-function declareExtension(
- name,
- version,
- latestVersion,
- options,
- extensionsObject,
- includeLatest
-) {
- const defaultOptions = {hasCss: false, npm: undefined};
+function declareExtension(name, version, options, extensionsObject) {
+ const defaultOptions = {hasCss: false};
const versions = Array.isArray(version) ? version : [version];
+ const suffix = options?.additionalSuffix ?? '';
versions.forEach((v) => {
- extensionsObject[`${name}-${v}`] = {
+ // If `additionalSuffix` is given, make it as a part of the key as it is
+ // most likely needed to make the entry unique for instances where
+ // multiple entries share the same "entryPoint/name" but have different
+ // destination name. This allows for a 1 to many relationship between
+ // entryPoint and output (1 -> *).
+ extensionsObject[`${name}-${v}${suffix}`] = {
name,
version: v,
- latestVersion,
...defaultOptions,
...options,
};
- if (includeLatest && v == latestVersion) {
- extensionsObject[`${name}-latest`] = extensionsObject[`${name}-${v}`];
- }
});
if (name.startsWith('amp-ad-network-')) {
// Get the ad network name. All ad network extensions are named
@@ -150,24 +144,13 @@ function declareExtension(
/**
* Initializes all extensions from build-system/compile/bundles.config.extensions.json
* if not already done and populates the given extensions object.
- * @param {?Object} extensionsObject
- * @param {boolean=} includeLatest
+ * @param {object} extensionsObject
*/
-function maybeInitializeExtensions(
- extensionsObject = extensions,
- includeLatest = false
-) {
+function maybeInitializeExtensions(extensionsObject) {
if (Object.keys(extensionsObject).length === 0) {
verifyExtensionBundles();
extensionBundles.forEach((c) => {
- declareExtension(
- c.name,
- c.version,
- c.latestVersion,
- c.options,
- extensionsObject,
- includeLatest
- );
+ declareExtension(c.name, c.version, c.options, extensionsObject);
});
}
}
@@ -216,8 +199,8 @@ function getExtensionsToBuild(preBuild = false) {
!argv.core_runtime_only
) {
const allExtensions = [];
- for (const extension in extensions) {
- allExtensions.push(extensions[extension].name);
+ for (const extension in EXTENSIONS) {
+ allExtensions.push(EXTENSIONS[extension].name);
}
extensionsToBuild = dedupe(extensionsToBuild.concat(allExtensions));
}
@@ -346,15 +329,15 @@ function dedupe(arr) {
*/
async function buildExtensions(options) {
const startTime = Date.now();
- maybeInitializeExtensions(extensions, /* includeLatest */ false);
+ maybeInitializeExtensions(EXTENSIONS);
const extensionsToBuild = getExtensionsToBuild();
const results = [];
- for (const extension in extensions) {
+ for (const extension in EXTENSIONS) {
if (
options.compileOnlyCss ||
- extensionsToBuild.includes(extensions[extension].name)
+ extensionsToBuild.includes(EXTENSIONS[extension].name)
) {
- results.push(doBuildExtension(extensions, extension, options));
+ results.push(doBuildExtension(EXTENSIONS, extension, options));
}
}
await Promise.all(results);
@@ -378,14 +361,7 @@ async function doBuildExtension(extensions, extension, options) {
const e = extensions[extension];
let o = {...options};
o = Object.assign(o, e);
- await buildExtension(
- e.name,
- e.version,
- e.latestVersion,
- e.hasCss,
- o,
- e.extraGlobs
- );
+ await buildExtension(e.name, e.version, e.hasCss, o);
}
/**
@@ -395,24 +371,16 @@ async function doBuildExtension(extensions, extension, options) {
* @param {string} extDir
* @param {string} name
* @param {string} version
- * @param {string} latestVersion
* @param {boolean} hasCss
* @param {?Object} options
* @return {Promise}
*/
-async function watchExtension(
- extDir,
- name,
- version,
- latestVersion,
- hasCss,
- options
-) {
+async function watchExtension(extDir, name, version, hasCss, options) {
/**
* Steps to run when a watched file is modified.
*/
function watchFunc() {
- buildExtension(name, version, latestVersion, hasCss, {
+ buildExtension(name, version, hasCss, {
...options,
continueOnError: true,
isRebuild: true,
@@ -443,22 +411,12 @@ async function watchExtension(
* the extensions directory and the name of the JS and optional CSS file.
* @param {string} version Version of the extension. Must be identical to
* the sub directory inside the extension directory
- * @param {string} latestVersion Latest version of the extension.
* @param {boolean} hasCss Whether there is a CSS file for this extension.
* @param {?Object} options
- * @param {!Array=} extraGlobs
* @return {!Promise}
*/
-async function buildExtension(
- name,
- version,
- latestVersion,
- hasCss,
- options,
- extraGlobs
-) {
+async function buildExtension(name, version, hasCss, options) {
options = options || {};
- options.extraGlobs = extraGlobs;
if (options.compileOnlyCss && !hasCss) {
return;
}
@@ -467,13 +425,11 @@ async function buildExtension(
// Use a separate watcher for css and jison compilation.
// The watcher within compileJs recompiles the JS.
if (options.watch) {
- await watchExtension(extDir, name, version, latestVersion, hasCss, options);
+ await watchExtension(extDir, name, version, hasCss, options);
}
if (hasCss) {
- mkdirSync('build');
- mkdirSync('build/css');
- await buildExtensionCss(extDir, name, version, options);
+ await buildExtensionCss(extDir, name, version);
if (options.compileOnlyCss) {
return;
}
@@ -483,10 +439,6 @@ async function buildExtension(
if (name === 'amp-bind') {
await doBuildJs(jsBundles, 'ww.max.js', options);
}
- if (options.npm) {
- await buildNpmBinaries(extDir, name, options);
- await buildNpmCss(extDir, options);
- }
if (options.binaries) {
await buildBinaries(extDir, options.binaries, options);
}
@@ -498,183 +450,57 @@ async function buildExtension(
return;
}
- if (options.bento) {
- await buildBentoExtensionJs(extDir, name, options);
- }
- await buildExtensionJs(extDir, name, options);
-}
-
-/**
- * Writes an extensions's CSS to its npm dist folder.
- *
- * @param {string} extDir
- * @param {Object} options
- * @return {Promise}
- */
-async function buildNpmCss(extDir, options) {
- const startCssTime = Date.now();
- const filenames = await fastGlob(path.join(extDir, '**', '*.jss.js'));
- if (!filenames.length) {
- return;
- }
-
- const css = (await Promise.all(filenames.map(getCssForJssFile))).join('');
- const outfile = path.join(extDir, 'dist', 'styles.css');
- await fs.writeFile(outfile, css);
- endBuildStep('Wrote CSS', `${options.name} → styles.css`, startCssTime);
-}
-
-/** @type {TransformCache} */
-let jssCache;
-
-/**
- * Returns the minified CSS for a .jss.js file.
- *
- * @param {string} jssFile
- * @return {Promise}
- */
-async function getCssForJssFile(jssFile) {
- // Lazily instantiate the TransformCache
- if (!jssCache) {
- jssCache = new TransformCache('.jss-cache', '.css');
- }
-
- const {contents, hash} = await batchedRead(jssFile);
- const fileCss = await jssCache.get(hash);
- if (fileCss) {
- return fileCss;
- }
-
- const babelOptions = babel.loadOptions({caller: {name: 'jss'}});
- if (!babelOptions) {
- throw new Error('Could not find babel config for jss');
- }
- babelOptions['filename'] = jssFile;
-
- await babel.transform(contents, babelOptions);
- jssCache.set(hash, Promise.resolve(jssOptions.css));
- return jssOptions.css;
+ await buildExtensionJs(extDir, name, {...options, bento: false});
}
/**
* @param {string} extDir
* @param {string} name
* @param {string} version
- * @param {!Object} options
* @return {!Promise}
*/
-async function buildExtensionCss(extDir, name, version, options) {
- /**
- * Writes CSS binaries
- *
- * @param {string} name
- * @param {string} css
- */
- function writeCssBinaries(name, css) {
- const jsCss = 'export const CSS = ' + JSON.stringify(css) + ';\n';
- const jsName = `build/${name}.js`;
- const cssName = `build/css/${name}`;
- fs.writeFileSync(jsName, jsCss, 'utf-8');
- fs.writeFileSync(cssName, css, 'utf-8');
- }
-
+async function buildExtensionCss(extDir, name, version) {
const aliasBundle = extensionAliasBundles[name];
- const isAliased = aliasBundle && aliasBundle.version == version;
-
- const mainCssPromise = jsifyCssAsync(`${extDir}/${name}.css`);
-
- const mainCssBinaryPromise = mainCssPromise.then((mainCss) => {
- writeCssBinaries(`${name}-${version}.css`, mainCss);
- if (isAliased) {
- writeCssBinaries(`${name}-${aliasBundle.aliasedVersion}.css`, mainCss);
- }
- });
+ const aliasedVersion =
+ aliasBundle?.version == version ? aliasBundle.aliasedVersion : null;
- const parallel = [mainCssBinaryPromise];
+ const versions = [version, aliasedVersion].filter(Boolean);
- if (options.bento) {
- const bentoCssPromise = mainCssPromise.then((mainCss) =>
- buildBentoCss(name, version, mainCss)
- );
- parallel.push(bentoCssPromise);
- }
+ const bundles = await fastGlob(`${extDir}/*.css`);
- if (Array.isArray(options.cssBinaries)) {
- parallel.push(
- ...options.cssBinaries.map((name) => {
- return jsifyCssAsync(`${extDir}/${name}.css`).then((css) => {
- writeCssBinaries(`${name}-${version}.css`, css);
- if (isAliased) {
- writeCssBinaries(`${name}-${aliasBundle.aliasedVersion}.css`, css);
- }
- });
- })
- );
- }
-
- await Promise.all(parallel);
+ await Promise.all(
+ bundles.map(async (filename) => {
+ const name = path.basename(filename, '.css');
+ const css = await jsifyCssAsync(filename);
+ await writeCssBinaries(name, versions, css);
+ })
+ );
}
/**
- * Build bento-*.css using the compiled amp-* result as source.
- * It replaces all selectors for elements with .
- * As a result of taking already minified code as source, this function is
- * fairly fast and not cached.
* @param {string} name
- * @param {string} version
- * @param {string} minifiedAmpCss
+ * @param {string[]} versions
+ * @param {string} css
* @return {!Promise}
*/
-async function buildBentoCss(name, version, minifiedAmpCss) {
- const bentoName = getBentoName(name);
- const renamedCss = await renameSelectorsToBentoTagNames(minifiedAmpCss);
- await fs.outputFile(`build/${bentoName}-${version}.css`, renamedCss);
- await fs.outputFile(`dist/v0/${bentoName}-${version}.css`, renamedCss);
+async function writeCssBinaries(name, versions, css) {
+ const jsCss = 'export const CSS = ' + JSON.stringify(css) + ';\n';
+ await writeVersions(`build/${name}`, 'css.js', versions, jsCss);
+ await writeVersions(`build/css/${name}`, 'css', versions, css);
}
/**
- * @param {string} extDir
- * @param {string} name
- * @param {!Object} options
- * @return {!Promise}
+ * @param {string} prefix
+ * @param {string} fileExtension
+ * @param {string[]} versions
+ * @param {string} content
+ * @return {!Promise}
*/
-async function buildNpmBinaries(extDir, name, options) {
- let {npm} = options;
- if (npm === true) {
- npm = {
- preact: {
- entryPoint: 'component.js',
- outfile: 'component-preact.js',
- external: ['preact', 'preact/dom', 'preact/compat', 'preact/hooks'],
- remap: {'preact/dom': 'preact'},
- wrapper: '',
- },
- react: {
- entryPoint: 'component.js',
- outfile: 'component-react.js',
- external: ['react', 'react-dom'],
- remap: {
- 'preact': 'react',
- 'preact/compat': 'react',
- 'preact/hooks': 'react',
- 'preact/dom': 'react-dom',
- },
- wrapper: '',
- },
- bento: {
- entryPoint: await getBentoBuildFilename(
- extDir,
- getBentoName(name),
- 'web-component',
- options
- ),
- outfile: 'web-component.js',
- wrapper: '',
- },
- };
+async function writeVersions(prefix, fileExtension, versions, content) {
+ for (const version of versions) {
+ const outfile = `${prefix}-${version}.${fileExtension}`;
+ await fs.outputFile(outfile, content);
}
- const binaries = Object.values(npm);
- return buildBinaries(extDir, binaries, options);
}
/**
@@ -684,122 +510,32 @@ async function buildNpmBinaries(extDir, name, options) {
* @return {!Promise}
*/
function buildBinaries(extDir, binaries, options) {
- mkdirSync(`${extDir}/dist`);
+ // If outputPath is not defined, then use extDir
+ const {outputPath = extDir} = options;
const promises = binaries.map((binary) => {
- const {entryPoint, external, outfile, remap, wrapper} = binary;
+ const {babelCaller, entryPoint, external, outfile, remap, wrapper} = binary;
const {name} = pathParse(outfile);
const esm = argv.esm || argv.sxg || false;
- return esbuildCompile(extDir + '/', entryPoint, `${extDir}/dist`, {
+ return esbuildCompile(extDir + '/', entryPoint, `${outputPath}/dist`, {
...options,
- toName: maybeToNpmEsmName(`${name}.max.js`),
- minifiedName: maybeToNpmEsmName(`${name}.js`),
+ toName: maybeToEsmName(`${name}.max.js`),
+ minifiedName: maybeToEsmName(`${name}.js`),
aliasName: '',
outputFormat: esm ? 'esm' : 'cjs',
externalDependencies: external,
remapDependencies: remap,
wrapper: wrapper ?? options.wrapper,
+ babelCaller: babelCaller ?? options.babelCaller,
});
});
return Promise.all(promises);
}
-/**
- * @param {string} dir
- * @param {string} name
- * @param {!Object} options
- * @return {!Promise}
- */
-async function buildBentoExtensionJs(dir, name, options) {
- const bentoName = getBentoName(name);
- return buildExtensionJs(dir, bentoName, {
- ...options,
- wrapper: 'bento',
- filename: await getBentoBuildFilename(
- dir,
- bentoName,
- 'standalone',
- options
- ),
- // Include extension directory since our entrypoint may be elsewhere.
- extraGlobs: [...(options.extraGlobs || []), `${dir}/**/*.js`],
- });
-}
-
-/**
- * Bento extensions may specify their own bento-*.js file to specify custom
- * install logic. Otherwise, we generate an install script with the default
- * configuration.
- * @param {string} dir
- * @param {string} name
- * @param {string} mode
- * @param {Object} options
- * @return {Promise}
- */
-async function getBentoBuildFilename(dir, name, mode, options) {
- const modes = {
- 'standalone': {
- filename: `${name}.js`,
- toExport: false,
- },
- 'web-component': {
- filename: 'web-component.js',
- toExport: true,
- },
- };
- const {filename, toExport} = modes[mode];
- if (!filename) {
- throw new Error(
- `Unknown bento mode "${mode}" (${name}:${options.version})\n` +
- `Expected one of: ${Object.keys(modes).join(', ')}`
- );
- }
-
- if (await fs.pathExists(`${dir}/${filename}`)) {
- return filename;
- }
- const generatedSource = await generateBentoEntryPointSource(
- name,
- toExport,
- options
- );
- const generatedFilename = `build/${filename}`;
- await fs.outputFile(`${dir}/${generatedFilename}`, generatedSource);
- return generatedFilename;
-}
-
-/**
- * @param {string} name
- * @param {string} toExport
- * @param {Object} options
- * @return {Promise}
- */
-async function generateBentoEntryPointSource(name, toExport, options) {
- const css = options.hasCss
- ? await fs.readFile(`build/${name}-${options.version}.css`, 'utf8')
- : null;
-
- return dedent(`
- import {BaseElement} from '../base-element';
-
- function defineElement() {
- const css = __css__;
- if (css) {
- const style = document.createElement('style');
- style.textContent = css;
- document.head.appendChild(style);
- }
- customElements.define(
- __name__,
- BaseElement.CustomElement(BaseElement)
- );
- }
-
- ${toExport ? 'export {defineElement};' : 'defineElement();'}
- `)
- .replace('__css__', JSON.stringify(css))
- .replace('__name__', JSON.stringify(name));
-}
+/** @type {import('@babel/core').PluginItem[]} */
+const extensionBabelPlugins = [
+ './build-system/babel-plugins/babel-plugin-amp-config-urls',
+];
/**
* Build the JavaScript for the extension specified
@@ -811,15 +547,13 @@ async function generateBentoEntryPointSource(name, toExport, options) {
* @return {!Promise}
*/
async function buildExtensionJs(dir, name, options) {
+ const isLatest = legacyLatestVersions[options.name] === options.version;
const {
- latestVersion,
+ filename = await findJsSourceFilename(name, dir),
version,
- filename = `${name}.js`,
wrapper = 'extension',
} = options;
- const isLatest = version === latestVersion;
-
const wrapperOrFn = wrappers[wrapper];
if (!wrapperOrFn) {
throw new Error(
@@ -829,15 +563,19 @@ async function buildExtensionJs(dir, name, options) {
}
const resolvedWrapper =
typeof wrapperOrFn === 'function'
- ? wrapperOrFn(name, version, isLatest, argv.esm, options.loadPriority)
+ ? wrapperOrFn(name, version, argv.esm, options.loadPriority)
: wrapperOrFn;
+ const additionalSuffix = options.additionalSuffix
+ ? `.${options.additionalSuffix}`
+ : '';
await compileJs(`${dir}/`, filename, './dist/v0', {
...options,
- toName: `${name}-${version}.max.js`,
- minifiedName: `${name}-${version}.js`,
- aliasName: isLatest ? `${name}-latest.js` : '',
+ toName: `${name}-${version}.max${additionalSuffix}.js`,
+ minifiedName: `${name}-${version}${additionalSuffix}.js`,
+ aliasName: isLatest ? `${name}-latest${additionalSuffix}.js` : '',
wrapper: resolvedWrapper,
+ babelPlugins: wrapper === 'extension' ? extensionBabelPlugins : null,
});
// If an incremental watch build fails, simply return.
@@ -851,10 +589,12 @@ async function buildExtensionJs(dir, name, options) {
if (isAliased) {
const {aliasedVersion} = aliasBundle;
const src = maybeToEsmName(
- `${name}-${version}${options.minify ? '' : '.max'}.js`
+ `${name}-${version}${options.minify ? '' : '.max'}${additionalSuffix}.js`
);
const dest = maybeToEsmName(
- `${name}-${aliasedVersion}${options.minify ? '' : '.max'}.js`
+ `${name}-${aliasedVersion}${
+ options.minify ? '' : '.max'
+ }${additionalSuffix}.js`
);
fs.copySync(`dist/v0/${src}`, `dist/v0/${dest}`);
fs.copySync(`dist/v0/${src}.map`, `dist/v0/${dest}.map`);
@@ -961,11 +701,18 @@ async function copyWorkerDomResources(version) {
}
module.exports = {
+ buildBinaries,
+ buildExtensionCss,
+ buildExtensionJs,
buildExtensions,
+ declareExtension,
+ dedupe,
doBuildExtension,
- extensions,
+ EXTENSIONS,
+ getExtensionsFromArg,
getExtensionsToBuild,
maybeInitializeExtensions,
parseExtensionFlags,
setExtensionsToBuildFromDocuments,
+ INABOX_EXTENSION_SET,
};
diff --git a/build-system/tasks/get-zindex/index.js b/build-system/tasks/get-zindex/index.js
index 4382349d29ea..a3814ba29577 100644
--- a/build-system/tasks/get-zindex/index.js
+++ b/build-system/tasks/get-zindex/index.js
@@ -5,12 +5,7 @@ const fs = require('fs');
const path = require('path');
const Postcss = require('postcss');
const prettier = require('prettier');
-const textTable = require('text-table');
-const {
- getJscodeshiftReport,
- jscodeshiftAsync,
-} = require('../../test-configs/jscodeshift');
-const {getStdout} = require('../../common/process');
+const {getZindexJs} = require('./js');
const {gray, magenta} = require('kleur/colors');
const {logLocalDev, logOnSameLineLocalDev} = require('../../common/logging');
const {writeDiffOrFail} = require('../../common/diff');
@@ -18,15 +13,7 @@ const {writeDiffOrFail} = require('../../common/diff');
/** @type {Postcss.default} */
const postcss = /** @type {*} */ (Postcss);
-const tableHeaders = [
- ['context', 'z-index', 'file'],
- ['---', '---', '---'],
-];
-
-const tableOptions = {
- align: ['l', 'l', 'l'],
- hsep: ' | ',
-};
+const tableHeaders = ['context', 'z-index', 'file'];
const preamble = `
**Run \`amp get-zindex --fix\` to generate this file.**
@@ -40,7 +27,7 @@ const logChecking = (filename) =>
const sortedByEntryKey = (a, b) => a[0].localeCompare(b[0]);
/**
- * @param {!Object} acc accumulator object for selectors
+ * @param {!{[key: string]: string}} acc accumulator object for selectors
* @param {!Postcss.Rule} css post css rules object
*/
function zIndexCollector(acc, css) {
@@ -62,7 +49,7 @@ function zIndexCollector(acc, css) {
}
/**
- * @param {!Object>>} filesData
+ * @param {!{[key: string]: !{[key: string]: !Array}}} filesData
* accumulation of files and the rules and z index values.
* @return {!Array>}
*/
@@ -129,65 +116,25 @@ async function getZindexSelectors(glob, cwd = '.') {
* @param {string=} cwd
* @return {!Promise}
*/
-function getZindexChainsInJs(glob, cwd = '.') {
- return new Promise((resolve) => {
- const files = fastGlob
- .sync(glob, {cwd})
- .map((file) => path.join(cwd, file));
-
- const filesIncludingString = getStdout(
- ['grep -irl "z-*index"', ...files].join(' ')
- )
- .trim()
- .split('\n');
-
- const result = {};
-
- let resultCountInverse = filesIncludingString.length;
-
- if (resultCountInverse === 0) {
- // We don't expect this fileset to be empty since it's unlikely that we
- // never change the z-index from JS, but we add this just in case to
- // prevent hanging infinitely.
- resolve(result);
- return;
- }
-
- const process = jscodeshiftAsync([
- '--dry',
- '--no-babel',
- `--transform=${__dirname}/jscodeshift/collect-zindex.js`,
- ...filesIncludingString,
- ]);
- const {stderr, stdout} = process;
-
- stderr.on('data', (data) => {
- throw new Error(data.toString());
- });
-
- stdout.on('data', (data) => {
- const reportLine = getJscodeshiftReport(data.toString());
-
- if (!reportLine) {
- return;
- }
-
- const [filename, report] = reportLine;
- const relative = path.relative(cwd, filename);
+async function getZindexChainsInJs(glob, cwd = '.') {
+ const files = (await fastGlob(glob, {cwd})).map((file) =>
+ path.join(cwd, file)
+ );
+ const resultEntries = await Promise.all(
+ files.map(async (filename) => {
logChecking(filename);
+ const relative = path.relative(cwd, filename);
+ const found = await getZindexJs(filename);
+ return [relative, found];
+ })
+ );
- try {
- const reportParsed = JSON.parse(report);
- if (reportParsed.length) {
- result[relative] = reportParsed.sort(sortedByEntryKey);
- }
- if (--resultCountInverse === 0) {
- resolve(result);
- }
- } catch (_) {}
- });
- });
+ return Object.fromEntries(
+ resultEntries
+ // eslint-disable-next-line local/no-deep-destructuring
+ .filter(([, {length}]) => length)
+ );
}
/**
@@ -219,8 +166,12 @@ async function getZindex() {
);
const filename = 'css/Z_INDEX.md';
- const rows = [...tableHeaders, ...createTable(filesData)];
- const table = textTable(rows, tableOptions);
+ const rows = [
+ tableHeaders,
+ tableHeaders.map(() => '-'),
+ ...createTable(filesData),
+ ];
+ const table = rows.map((row) => row.join(' | ')).join('\n');
const output = await prettierFormat(filename, `${preamble}\n\n${table}`);
await writeDiffOrFail(
diff --git a/build-system/tasks/get-zindex/js.js b/build-system/tasks/get-zindex/js.js
new file mode 100644
index 000000000000..a5fc418c21f3
--- /dev/null
+++ b/build-system/tasks/get-zindex/js.js
@@ -0,0 +1,146 @@
+const types = require('@babel/types');
+const {parse} = require('@babel/parser');
+const {readFile} = require('fs-extra');
+
+const zIndexRegExp = /^z-?index$/i;
+
+/**
+ * @param {types.CallExpression} node
+ * @return {string|number|undefined}
+ */
+function getCallExpressionZIndexValue(node) {
+ for (let i = 1; i < node.arguments.length; i++) {
+ const argument = node.arguments[i];
+ const previous = node.arguments[i - 1];
+ if (
+ (types.isStringLiteral(argument) || types.isNumericLiteral(argument)) &&
+ argument.value !== '' &&
+ types.isStringLiteral(previous) &&
+ zIndexRegExp.test(previous.value)
+ ) {
+ return argument.value;
+ }
+ }
+}
+
+/**
+ * @param {string} source
+ * @param {types.Node} node
+ * @return {string}
+ */
+function getNodeSource(source, node) {
+ const {end, start} = node;
+ if (end == null || start == null) {
+ return '';
+ }
+ return source.substr(start, end - start);
+}
+
+/**
+ * @param {string} source
+ * @param {types.TraversalAncestors} ancestors
+ * @return {string}
+ */
+function getPropertyChain(source, ancestors) {
+ let propertyChain = '';
+
+ const path = ancestors.map(({node}) => node);
+ let at = path.pop();
+
+ while (at && types.isObjectProperty(at)) {
+ const part = getNodeSource(source, at.key);
+ if (types.isIdentifier(at.key)) {
+ propertyChain = `.${part}` + propertyChain;
+ } else {
+ propertyChain = `[${part}]` + propertyChain;
+ }
+ at = path.pop();
+ }
+
+ while (
+ at &&
+ !types.isCallExpression(at) &&
+ !types.isVariableDeclarator(at) &&
+ !types.isAssignmentExpression(at) &&
+ !types.isJSXAttribute(at) &&
+ !types.isProgram(at)
+ ) {
+ at = path.pop();
+ }
+
+ if (types.isCallExpression(at)) {
+ return getNodeSource(source, at.callee);
+ }
+
+ if (types.isJSXAttribute(at)) {
+ const parent = path.pop();
+ if (types.isJSXOpeningElement(parent)) {
+ const name = getNodeSource(source, parent.name);
+ return `<${name} />`;
+ }
+ }
+
+ if (types.isAssignmentExpression(at)) {
+ return getNodeSource(source, at.left) + propertyChain;
+ }
+
+ if (types.isVariableDeclarator(at)) {
+ return getNodeSource(source, at.id) + propertyChain;
+ }
+
+ return '(unknown)';
+}
+
+/**
+ * @param {string} filename
+ * @return {Promise<[string, string][]>}
+ */
+async function getZindexJs(filename) {
+ const report = [];
+ const source = await readFile(filename, 'utf8');
+
+ // Prevent parsing if there's no chance of encountering string
+ if (!/z-*index/i.test(source)) {
+ return report;
+ }
+
+ const tree = parse(source, {
+ sourceType: 'module',
+ plugins: ['jsx'],
+ });
+
+ types.traverse(tree, (node, ancestors) => {
+ if (types.isObjectProperty(node)) {
+ const {value} = node;
+ if (!types.isStringLiteral(value) && !types.isNumericLiteral(value)) {
+ return;
+ }
+
+ const {key} = node;
+ const name = types.isStringLiteral(key)
+ ? key.value
+ : types.isIdentifier(key)
+ ? key.name
+ : null;
+ if (!name) {
+ return;
+ }
+
+ if (zIndexRegExp.test(name) && value.value !== '') {
+ ancestors.pop();
+ if (ancestors.length) {
+ report.push([getPropertyChain(source, ancestors), value.value]);
+ }
+ }
+ } else if (types.isCallExpression(node)) {
+ const value = getCallExpressionZIndexValue(node);
+ if (value != null) {
+ report.push([getNodeSource(source, node.callee), value]);
+ }
+ }
+ });
+
+ return report.sort(([a], [b]) => a.localeCompare(b));
+}
+
+module.exports = {getZindexJs};
diff --git a/build-system/tasks/get-zindex/jscodeshift/collect-zindex.js b/build-system/tasks/get-zindex/jscodeshift/collect-zindex.js
deleted file mode 100644
index df47fcb0b4f1..000000000000
--- a/build-system/tasks/get-zindex/jscodeshift/collect-zindex.js
+++ /dev/null
@@ -1,115 +0,0 @@
-const zIndexRegExp = /^z-?index$/i;
-
-/**
- * @param {*} node
- * @return {string|undefined}
- */
-function getCallExpressionZIndexValue(node) {
- for (let i = 1; i < node.arguments.length; i++) {
- const argument = node.arguments[i];
- const previous = node.arguments[i - 1];
- if (
- argument.type.endsWith('Literal') &&
- argument.value !== '' &&
- zIndexRegExp.test(previous.value)
- ) {
- return argument.value;
- }
- }
-}
-
-/**
- * @param {*} file
- * @param {*} node
- * @return {string}
- */
-function source(file, node) {
- const {end, start} = node;
- return file.source.substr(start, end - start);
-}
-
-/**
- * @param {*} file
- * @param {*} path
- * @return {string}
- */
-function chainId(file, path) {
- let propertyChain = '';
- let at = path;
-
- while (at && at.value && at.value.type.endsWith('Property')) {
- const part = source(file, at.value.key);
- if (at.value.key.type === 'Identifier') {
- propertyChain = `.${part}` + propertyChain;
- } else {
- propertyChain = `[${part}]` + propertyChain;
- }
- at = at.parent && at.parent.parent;
- }
-
- while (
- at &&
- at.parent &&
- at.value.type !== 'CallExpression' &&
- at.value.type !== 'VariableDeclarator' &&
- at.value.type !== 'AssignmentExpression' &&
- at.value.type !== 'JSXAttribute' &&
- at.value.type !== 'Program'
- ) {
- at = at.parent;
- }
-
- if (at.value.type === 'JSXAttribute') {
- const openingElement = source(file, at.parent.value.name);
- return `<${openingElement} />`;
- }
-
- if (at.value.type === 'CallExpression') {
- return source(file, at.value.callee);
- }
-
- if (at.value.type === 'AssignmentExpression') {
- return source(file, at.value.left) + propertyChain;
- }
-
- if (at.value.type === 'VariableDeclarator') {
- return source(file, at.value.id) + propertyChain;
- }
-
- return '(unknown)';
-}
-
-module.exports = function (file, api) {
- const j = api.jscodeshift;
-
- const report = [];
-
- j(file.source)
- .find(
- j.ObjectProperty,
- (node) =>
- node.key &&
- node.value.type.endsWith('Literal') &&
- node.value.value !== '' &&
- zIndexRegExp.test(node.key.value || node.key.name)
- )
- .forEach((path) => {
- report.push([chainId(file, path.parent.parent), path.value.value.value]);
- });
-
- j(file.source)
- .find(
- j.CallExpression,
- (node) => getCallExpressionZIndexValue(node) != null
- )
- .forEach((path) => {
- report.push([
- chainId(file, path),
- getCallExpressionZIndexValue(path.value),
- ]);
- });
-
- api.report(JSON.stringify(report));
-
- return file.source;
-};
diff --git a/build-system/tasks/helpers.js b/build-system/tasks/helpers.js
index 91a180afae1c..38b583a86691 100644
--- a/build-system/tasks/helpers.js
+++ b/build-system/tasks/helpers.js
@@ -1,34 +1,31 @@
const argv = require('minimist')(process.argv.slice(2));
const debounce = require('../common/debounce');
const esbuild = require('esbuild');
-/** @type {Object} */
-const experimentDefines = require('../global-configs/experiments-const.json');
+/** @type {object} */
+const experimentDefinesJson = require('../global-configs/experiments-const.json');
const fs = require('fs-extra');
-const magicstring = require('magic-string');
const open = require('open');
const path = require('path');
-const Remapping = require('@ampproject/remapping');
const terser = require('terser');
const wrappers = require('../compile/compile-wrappers');
const {
VERSION: internalRuntimeVersion,
} = require('../compile/internal-version');
-const {closureCompile} = require('../compile/compile');
const {cyan, green, red} = require('kleur/colors');
const {getAmpConfigForFile} = require('./prepend-global');
const {getEsbuildBabelPlugin} = require('../common/esbuild-babel');
-const {getSourceRoot} = require('../compile/helpers');
+const {includeSourcesContent, massageSourcemaps} = require('./sourcemaps');
const {isCiBuild} = require('../common/ci');
const {jsBundles} = require('../compile/bundles.config');
const {log, logLocalDev} = require('../common/logging');
const {thirdPartyFrames} = require('../test-configs/config');
const {watch} = require('chokidar');
-
-/** @type {Remapping.default} */
-const remapping = /** @type {*} */ (Remapping);
-
-/** @type {magicstring.default} */
-const MagicString = /** @type {*} */ (magicstring);
+const {debug} = require('../compile/debug-compilation-lifecycle');
+const babel = require('@babel/core');
+const {
+ ampResolve,
+ remapDependenciesPlugin,
+} = require('./remap-dependencies-plugin/remap-dependencies');
/**
* Tasks that should print the `--nobuild` help text.
@@ -36,11 +33,6 @@ const MagicString = /** @type {*} */ (magicstring);
*/
const NOBUILD_HELP_TASKS = new Set(['e2e', 'integration', 'visual-diff']);
-/**
- * Used during minification to concatenate modules
- */
-const MODULE_SEPARATOR = ';';
-
/**
* Used during minification to concatenate extension bundles
*/
@@ -68,10 +60,21 @@ const watchDebounceDelay = 1000;
*/
const watchedTargets = new Map();
+/**
+ * Converts defines to their JSON representation.
+ * See https://esbuild.github.io/api/#define.
+ */
+const experimentDefines = Object.fromEntries(
+ Object.entries(experimentDefinesJson).map(([key, value]) => [
+ key,
+ JSON.stringify(value),
+ ])
+);
+
/**
* @param {!Object} jsBundles
* @param {string} name
- * @param {?Object} extraOptions
+ * @param {!Object} extraOptions
* @return {!Promise}
*/
function doBuildJs(jsBundles, name, extraOptions) {
@@ -140,15 +143,11 @@ async function compileCoreRuntime(options) {
*/
async function compileAllJs(options) {
const {minify} = options;
- if (minify) {
- log('Minifying multi-pass JS with', cyan('closure-compiler') + '...');
- } else {
- log('Compiling JS with', cyan('esbuild'), 'and', cyan('babel') + '...');
- }
+ log(`Compiling ${cyan(minify ? 'minified' : 'unminified')} JS...`);
+
const startTime = Date.now();
await Promise.all([
minify ? Promise.resolve() : doBuildJs(jsBundles, 'polyfills.js', options),
- doBuildJs(jsBundles, 'bento.js', options),
doBuildJs(jsBundles, 'alp.max.js', options),
doBuildJs(jsBundles, 'integration.js', options),
doBuildJs(jsBundles, 'ampcontext-lib.js', options),
@@ -187,82 +186,6 @@ async function getCompiledFile(srcFilename) {
return filesContents.join('\n');
}
-/**
- * Allows pending inside the compile wrapper to the already minified JS file.
- * @param {string} srcFilename Name of the JS source file
- * @param {string} destFilePath File path to the minified JS file
- * @param {?Object} options
- */
-function combineWithCompiledFile(srcFilename, destFilePath, options) {
- const bundleFiles = EXTENSION_BUNDLE_MAP[srcFilename];
- if (!bundleFiles) {
- return;
- }
- const bundle = new MagicString.Bundle({
- separator: '\n',
- });
- // We need to inject the code _inside_ the extension wrapper
- const destFileName = path.basename(destFilePath);
- /**
- * TODO (rileyajones) This should be import('magic-string').MagicStringOptions but
- * is invalid until https://github.com/Rich-Harris/magic-string/pull/183
- * is merged.
- * @type {Object}
- */
- const mapMagicStringOptions = {filename: destFileName};
- const contents = new MagicString(
- fs.readFileSync(destFilePath, 'utf8'),
- mapMagicStringOptions
- );
- const map = JSON.parse(fs.readFileSync(`${destFilePath}.map`, 'utf8'));
- const {sourceRoot} = map;
- map.sourceRoot = undefined;
-
- // The wrapper may have been minified further. Search backwards from the
- // expected <%=contents%> location to find the start of the `{` in the
- // wrapping function.
- const wrapperIndex = options.wrapper.indexOf('<%= contents %>');
- const index = contents.original.lastIndexOf('{', wrapperIndex) + 1;
-
- const wrapperOpen = contents.snip(0, index);
- const remainingContents = contents.snip(index, contents.length());
-
- bundle.addSource(wrapperOpen);
- for (const bundleFile of bundleFiles) {
- const contents = fs.readFileSync(bundleFile, 'utf8');
- /**
- * TODO (rileyajones) This should be import('magic-string').MagicStringOptions but
- * is invalid until https://github.com/Rich-Harris/magic-string/pull/183
- * is merged.
- * @type {Object}
- */
- const bundleMagicStringOptions = {filename: bundleFile};
- bundle.addSource(new MagicString(contents, bundleMagicStringOptions));
- bundle.append(MODULE_SEPARATOR);
- }
- bundle.addSource(remainingContents);
-
- const bundledMap = bundle.generateDecodedMap({
- file: destFileName,
- hires: true,
- });
-
- const remapped = remapping(
- bundledMap,
- (file) => {
- if (file === destFileName) {
- return map;
- }
- return null;
- },
- !argv.full_sourcemaps
- );
- remapped.sourceRoot = sourceRoot;
-
- fs.writeFileSync(destFilePath, bundle.toString(), 'utf8');
- fs.writeFileSync(`${destFilePath}.map`, remapped.toString(), 'utf8');
-}
-
/**
* @param {string} name
* @return {string}
@@ -276,57 +199,9 @@ function toEsmName(name) {
* @return {string}
*/
function maybeToEsmName(name) {
- // Npm esm names occur at an earlier stage.
- if (name.includes('.module')) {
- return name;
- }
return argv.esm ? toEsmName(name) : name;
}
-/**
- * @param {string} name
- * @return {string}
- */
-function maybeToNpmEsmName(name) {
- return argv.esm ? name.replace(/\.js$/, '.module.js') : name;
-}
-
-/**
- * Minifies a given JavaScript file entry point.
- * @param {string} srcDir
- * @param {string} srcFilename
- * @param {string} destDir
- * @param {?Object} options
- * @return {!Promise}
- */
-async function compileMinifiedJs(srcDir, srcFilename, destDir, options) {
- const timeInfo = {};
- const entryPoint = path.join(srcDir, srcFilename);
- const minifiedName = maybeToEsmName(options.minifiedName);
-
- options.errored = false;
- await closureCompile(entryPoint, destDir, minifiedName, options, timeInfo);
- // If an incremental watch build fails, simply return.
- if (options.watch && options.errored) {
- return;
- }
-
- const destPath = path.join(destDir, minifiedName);
- combineWithCompiledFile(srcFilename, destPath, options);
- if (options.aliasName) {
- fs.copySync(
- destPath,
- path.join(destDir, maybeToEsmName(options.aliasName))
- );
- }
-
- let name = minifiedName;
- if (options.aliasName) {
- name += ` → ${maybeToEsmName(options.aliasName)}`;
- }
- endBuildStep('Minified', name, timeInfo.startTime);
-}
-
/**
* Handles a bundling error
* @param {Error} err
@@ -334,11 +209,7 @@ async function compileMinifiedJs(srcDir, srcFilename, destDir, options) {
* @param {string} destFilename
*/
function handleBundleError(err, continueOnError, destFilename) {
- let message = err.toString();
- if (err.stack) {
- // Drop the node_modules call stack, which begins with ' at'.
- message = err.stack.replace(/ at[^]*/, '').trim();
- }
+ const message = err.stack || err.toString();
log(red('ERROR:'), message, '\n');
const reasonMessage = `Could not compile ${cyan(destFilename)}`;
if (continueOnError) {
@@ -371,11 +242,7 @@ async function finishBundle(destDir, destFilename, options, startTime) {
);
endBuildStep(logPrefix, `${destFilename} → ${aliasName}`, startTime);
} else {
- const loggingName =
- options.npm && !destFilename.startsWith('amp-')
- ? `${options.name} → ${destFilename}`
- : destFilename;
- endBuildStep(logPrefix, loggingName, startTime);
+ endBuildStep(logPrefix, destFilename, startTime);
}
}
@@ -386,7 +253,7 @@ async function finishBundle(destDir, destFilename, options, startTime) {
* @param {string} srcDir
* @param {string} srcFilename
* @param {string} destDir
- * @param {?Object} options
+ * @param {!Object} options
* @return {!Promise}
*/
async function esbuildCompile(srcDir, srcFilename, destDir, options) {
@@ -394,7 +261,11 @@ async function esbuildCompile(srcDir, srcFilename, destDir, options) {
const entryPoint = path.join(srcDir, srcFilename);
const filename = options.minify
? options.minifiedName
- : options.toName ?? srcFilename;
+ : (options.toName ?? srcFilename);
+ // This guards against someone passing `minify: true` but no `minifiedName`.
+ if (!filename) {
+ throw new Error('No minifiedName provided for ' + srcFilename);
+ }
const destFilename = maybeToEsmName(filename);
const destFile = path.join(destDir, destFilename);
@@ -404,7 +275,7 @@ async function esbuildCompile(srcDir, srcFilename, destDir, options) {
/**
* Splits up the wrapper to compute the banner and footer
- * @return {Object}
+ * @return {object}
*/
function splitWrapper() {
const wrapper = options.wrapper ?? wrappers.none;
@@ -420,100 +291,151 @@ async function esbuildCompile(srcDir, srcFilename, destDir, options) {
const compiledFile = await getCompiledFile(srcFilename);
banner.js = config + banner.js + compiledFile;
+ let babelCaller =
+ options.babelCaller ?? (options.minify ? 'minified' : 'unminified');
+
+ // We read from the current binary configuration options if it is an
+ // no css binary output. (removes CSS installation)
+ if (options.ssrCss) {
+ babelCaller += '-ssr-css';
+ }
+
const babelPlugin = getEsbuildBabelPlugin(
- options.minify ? 'minified' : 'unminified',
- /* enableCache */ true
+ babelCaller,
+ /* enableCache */ true,
+ {plugins: options.babelPlugins}
);
const plugins = [babelPlugin];
if (options.remapDependencies) {
- plugins.unshift(remapDependenciesPlugin());
+ const {externalDependencies: externals, remapDependencies: remaps} =
+ options;
+
+ plugins.unshift(
+ remapDependenciesPlugin({externals, remaps, resolve: ampResolve})
+ );
}
- let result = null;
+ /** @type {?esbuild.BuildContext} */
+ let esbuildContext = null;
/**
* @param {number} startTime
* @return {Promise}
*/
async function build(startTime) {
- if (!result) {
- result = await esbuild.build({
+ if (!esbuildContext) {
+ esbuildContext = await esbuild.context({
entryPoints: [entryPoint],
bundle: true,
- sourcemap: true,
+ sourcemap: 'external',
+ sourcesContent: includeSourcesContent(),
outfile: destFile,
define: experimentDefines,
plugins,
- format: options.outputFormat,
+ // When using `nomodule-loader` we build as ESM in order to preserve
+ // import statements. These are transformed in a post-build Babel step.
+ format:
+ options.outputFormat === 'nomodule-loader'
+ ? 'esm'
+ : options.outputFormat,
banner,
footer,
// For es5 builds, ensure esbuild-injected code is transpiled.
target: argv.esm ? 'es6' : 'es5',
- incremental: !!options.watch,
logLevel: 'silent',
external: options.externalDependencies,
+ mainFields: ['module', 'browser', 'main'],
write: false,
});
- } else {
- result = await result.rebuild();
}
- let code = result.outputFiles.find(({path}) => !path.endsWith('.map')).text;
- let map = result.outputFiles.find(({path}) => path.endsWith('.map')).text;
+
+ const {outputFiles} = await esbuildContext.rebuild();
+ if (outputFiles === undefined) {
+ throw new Error(`No output files for ${destFilename}`);
+ }
+
+ const codeFile = outputFiles.find(({path}) => !path.endsWith('.map'));
+ const mapFile = outputFiles.find(({path}) => path.endsWith('.map'));
+
+ if (!codeFile || !mapFile) {
+ throw new Error(
+ `Expected code and map file for ${destFilename}; got ${outputFiles.map(
+ ({path}) => path
+ )}`
+ );
+ }
+
+ let {text: code} = codeFile;
+ const mapChain = [JSON.parse(mapFile.text)];
+
+ if (options.outputFormat === 'nomodule-loader') {
+ const result = await babel.transformAsync(code, {
+ caller: {name: 'nomodule-loader'},
+ filename: destFile,
+ sourceRoot: path.dirname(destFile),
+ sourceMaps: true,
+ });
+ if (!result?.code) {
+ throw new Error('failed to babel');
+ }
+ code = result.code;
+ mapChain.unshift(result.map);
+ }
if (options.minify) {
- ({code, map} = await minify(code, map));
- map = await massageSourcemaps(map, options);
+ const result = await minify(code, {
+ // toplevel clobbers the global namespace when with nomodule-loader
+ toplevel: options.outputFormat !== 'nomodule-loader',
+ });
+ code = result.code;
+ mapChain.unshift(result.map);
+ debug(
+ 'post-terser',
+ path.join(process.cwd(), destFile),
+ code,
+ result.map
+ );
}
await Promise.all([
- fs.outputFile(destFile, code),
- fs.outputFile(`${destFile}.map`, map),
+ fs.outputFile(
+ destFile,
+ `${code}\n//# sourceMappingURL=${destFilename}.map`
+ ),
+ fs.outputJson(
+ `${destFile}.map`,
+ massageSourcemaps(mapChain, destFile, options)
+ ),
]);
await finishBundle(destDir, destFilename, options, startTime);
- }
- /**
- * Generates a plugin to remap the dependencies of a JS bundle.
- * @return {Object}
- */
- function remapDependenciesPlugin() {
- const remapDependencies = {__proto__: null, ...options.remapDependencies};
- const external = options.externalDependencies;
- return {
- name: 'remap-dependencies',
- setup(build) {
- build.onResolve({filter: /.*/}, (args) => {
- const dep = args.path;
- const remap = remapDependencies[dep];
- if (remap) {
- const isExternal = external.includes(remap);
- return {
- path: isExternal ? remap : require.resolve(remap),
- external: isExternal,
- };
- }
- });
- },
- };
+ if (!options.watch) {
+ await esbuildContext.dispose();
+ esbuildContext = null;
+ }
}
- await build(startTime).catch((err) =>
- handleBundleError(err, !!options.watch, destFilename)
- );
+ try {
+ await build(startTime);
+ } catch (err) {
+ handleBundleError(err, !!options.watch, destFilename);
+ }
if (options.watch) {
watchedTargets.set(entryPoint, {
rebuild: async () => {
const startTime = Date.now();
- const buildPromise = build(startTime).catch((err) =>
- handleBundleError(err, !!options.watch, destFilename)
- );
- if (options.onWatchBuild) {
- options.onWatchBuild(buildPromise);
+ try {
+ const buildPromise = build(startTime);
+ if (options.onWatchBuild) {
+ options.onWatchBuild(buildPromise);
+ }
+ await buildPromise;
+ } catch (err) {
+ handleBundleError(err, !!options.watch, destFilename);
}
- await buildPromise;
},
});
}
@@ -524,20 +446,42 @@ async function esbuildCompile(srcDir, srcFilename, destDir, options) {
*/
const nameCache = {};
+/**
+ * Implements a stable identifier mangler, based only on the input order.
+ *
+ * Terser uses a char-frequency mangler by default, which isn't stable and
+ * causes wild fluctuations in bundle size.
+ */
+const mangleIdentifier = {
+ get(num) {
+ const charset =
+ 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789';
+ let base = 54;
+ let id = '';
+ do {
+ id = charset[num % base] + id;
+ num = Math.floor(num / base);
+ base = 64;
+ } while (num > 0);
+ return id;
+ },
+};
+
/**
* Minify the code with Terser. Only used by the ESBuild.
*
* @param {string} code
- * @param {string} map
+ * @param {terser.MinifyOptions} options
* @return {!Promise<{code: string, map: *, error?: Error}>}
*/
-async function minify(code, map) {
+async function minify(code, options = {}) {
+ /* eslint-disable local/camelcase */
+ /** @type {terser.MinifyOptions} */
const terserOptions = {
mangle: {
properties: {
regex: '_AMP_PRIVATE_$',
- // eslint-disable-next-line local/camelcase
- keep_quoted: /** @type {'strict'} */ ('strict'),
+ keep_quoted: 'strict',
},
},
compress: {
@@ -547,17 +491,24 @@ async function minify(code, map) {
},
output: {
beautify: !!argv.pretty_print,
- // eslint-disable-next-line local/camelcase
keep_quoted_props: true,
+ // The AMP Cache will prepend content on the first line during serving
+ // (for AMP_CONFIG and AMP_EXP). In order for these to not affect
+ // the sourcemap, we must ensure there is no other content on the first
+ // line. If you remove this you will annoy Justin. Don't do it.
+ preamble: ';',
},
- sourceMap: {content: map},
+ sourceMap: true,
toplevel: true,
module: !!argv.esm,
- nameCache,
+ nameCache: argv.nomanglecache ? undefined : nameCache,
+ ...options,
};
+ /* eslint-enable local/camelcase */
+
// Remove the local variable name cache which should not be reused between binaries.
// See https://github.com/ampproject/amphtml/issues/36476
- /** @type {any}*/ (nameCache).vars = {};
+ nameCache.vars = undefined;
const minified = await terser.minify(code, terserOptions);
return {code: minified.code ?? '', map: minified.map};
@@ -596,14 +547,11 @@ async function compileJs(srcDir, srcFilename, destDir, options) {
/**
* Actually performs the steps to compile the entry point.
- * @param {Object} options
+ * @param {object} options
* @return {Promise}
*/
async function doCompileJs(options) {
- const buildResult =
- options.minify && shouldUseClosure()
- ? compileMinifiedJs(srcDir, srcFilename, destDir, options)
- : esbuildCompile(srcDir, srcFilename, destDir, options);
+ const buildResult = esbuildCompile(srcDir, srcFilename, destDir, options);
if (options.onWatchBuild) {
options.onWatchBuild(buildResult);
}
@@ -729,21 +677,6 @@ async function thirdPartyBootstrap(input, outputName, options) {
fs.symlinkSync('./' + internalRuntimeVersion, aliasToLatestBuild, 'dir');
}
-/**
- *Creates directory in sync manner
- *
- * @param {string} path
- */
-function mkdirSync(path) {
- try {
- fs.mkdirSync(path);
- } catch (e) {
- if (e.code != 'EEXIST') {
- throw e;
- }
- }
-}
-
/**
* Returns the list of dependencies for a given JS entrypoint by having esbuild
* generate a metafile for it. Uses the set of babel plugins that would've been
@@ -754,7 +687,12 @@ function mkdirSync(path) {
* @return {Promise>}
*/
async function getDependencies(entryPoint, options) {
- const caller = options.minify ? 'minified' : 'unminified';
+ let caller = options.minify ? 'minified' : 'unminified';
+ // We read from the current binary configuration options if it is an
+ // no css binary output. (removes CSS installation)
+ if (options.ssrCss) {
+ caller += '-ssr-css';
+ }
const babelPlugin = getEsbuildBabelPlugin(caller, /* enableCache */ true);
const result = await esbuild.build({
entryPoints: [entryPoint],
@@ -766,42 +704,6 @@ async function getDependencies(entryPoint, options) {
return Object.keys(result.metafile?.inputs ?? {});
}
-/**
- * @param {*} sourcemapsFile
- * @param {*} options
- * @return {*}
- */
-function massageSourcemaps(sourcemapsFile, options) {
- const sourcemaps = JSON.parse(sourcemapsFile);
- sourcemaps.sources = sourcemaps.sources.map((source) => {
- if (source.startsWith('../')) {
- return source.slice('../'.length);
- }
- return source;
- });
- sourcemaps.sourceRoot = getSourceRoot(options);
- if (sourcemaps.file) {
- sourcemaps.file = path.basename(sourcemaps.file);
- }
- if (!argv.full_sourcemaps) {
- delete sourcemaps.sourcesContent;
- }
-
- return JSON.stringify(sourcemaps);
-}
-
-/**
- * Returns whether or not we should compile with Closure Compiler.
- * @return {boolean}
- */
-function shouldUseClosure() {
- // Normally setting this server-side experiment flag would be handled by
- // the release process automatically. Since this experiment is actually on the build system
- // itself instead of runtime, it is never run through babel (where the replacements usually happen).
- // Therefore we must compute this one by hand.
- return argv.define_experiment_constant !== 'ESBUILD_COMPILATION';
-}
-
module.exports = {
bootstrapThirdPartyFrames,
compileAllJs,
@@ -812,10 +714,8 @@ module.exports = {
endBuildStep,
maybePrintCoverageMessage,
maybeToEsmName,
- maybeToNpmEsmName,
- mkdirSync,
printConfigHelp,
printNobuildHelp,
watchDebounceDelay,
- shouldUseClosure,
+ mangleIdentifier,
};
diff --git a/build-system/tasks/integration.js b/build-system/tasks/integration.js
index cbe9358be651..a6ca17f154a5 100644
--- a/build-system/tasks/integration.js
+++ b/build-system/tasks/integration.js
@@ -64,7 +64,6 @@ integration.flags = {
'headless': 'Run tests in a headless Chrome window',
'nobuild': 'Skip build step',
'nohelp': 'Silence help messages that are printed prior to test run',
- 'report': 'Write test result report to a local file',
'safari': 'Run tests on Safari',
'testnames': 'List the name of each test being run',
'verbose': 'With logging enabled',
diff --git a/build-system/tasks/lint.js b/build-system/tasks/lint.js
index 49c6c247fc14..e45f099272ad 100644
--- a/build-system/tasks/lint.js
+++ b/build-system/tasks/lint.js
@@ -42,8 +42,7 @@ async function runLinter(filesToLint) {
results.errorCount += result.errorCount;
results.warningCount += result.warningCount;
const formatter = await eslint.loadFormatter('stylish');
- const resultText = formatter
- .format(lintResult)
+ const resultText = (await formatter.format(lintResult))
.replace(`${process.cwd()}/`, '')
.trim();
if (resultText.length) {
@@ -65,8 +64,8 @@ async function runLinter(filesToLint) {
/**
* Summarize the results of linting all files.
- * @param {Object} results
- * @param {Object} fixedFiles
+ * @param {object} results
+ * @param {object} fixedFiles
*/
function summarizeResults(results, fixedFiles) {
const {errorCount, warningCount} = results;
diff --git a/build-system/tasks/make-extension/OWNERS b/build-system/tasks/make-extension/OWNERS
index 5b93a992998a..a26af6946677 100644
--- a/build-system/tasks/make-extension/OWNERS
+++ b/build-system/tasks/make-extension/OWNERS
@@ -8,10 +8,9 @@
// Outreach group maintains extension boilerplate/template.
{name: 'ampproject/wg-outreach'},
- // Most new extensions are reviewed by these groups. It's in their
+ // Most new extensions are reviewed by this group. It's in their
// interest to maintain the extension generator.
{name: 'ampproject/wg-components'},
- {name: 'ampproject/wg-bento'},
],
},
],
diff --git a/build-system/tasks/make-extension/format.js b/build-system/tasks/make-extension/format.js
index e001b5b5329b..419ede1286d4 100644
--- a/build-system/tasks/make-extension/format.js
+++ b/build-system/tasks/make-extension/format.js
@@ -2,7 +2,7 @@ const {getOutput} = require('../../common/process');
/**
* @param {Array} files
- * @return {Object}
+ * @return {object}
*/
function format(files) {
return getOutput(`npx prettier --ignore-unknown --write ${files.join(' ')}`);
diff --git a/build-system/tasks/make-extension/index.js b/build-system/tasks/make-extension/index.js
index 0901f4f521af..3b2d4acc3959 100644
--- a/build-system/tasks/make-extension/index.js
+++ b/build-system/tasks/make-extension/index.js
@@ -27,7 +27,6 @@ let MakeExtensionResultDef;
/**
* @typedef {{
* version?: (string|undefined),
- * bento?: (boolean|undefined),
* name?: (string|undefined),
* nocss?: (string|undefined),
* nojss?: (string|undefined),
@@ -39,7 +38,6 @@ let ArgsDef;
* @typedef {{
* name: string,
* version: string,
- * latestVersion?: (string|undefined)
* options?: ({hasCss?: boolean, wrapper?: string}|undefined)
* }}
*/
@@ -57,7 +55,7 @@ function dashToPascalCase(name) {
/**
* Replaces from a map of keys/values.
* @param {string} inputText
- * @param {Object} replacements
+ * @param {{[key: string]: string}} replacements
* @return {string}
*/
const replace = (inputText, replacements) =>
@@ -89,7 +87,7 @@ const getTemplateDir = (template) =>
/**
* @param {string} templateDir
- * @param {Object} replacements
+ * @param {{[key: string]: string}} replacements
* @param {string=} destinationDir
* @return {Promise>}
*/
@@ -145,18 +143,11 @@ async function insertExtensionBundlesConfig(
destination = extensionBundlesJson
) {
const extensionBundles = fs.readJsonSync(destination, {throws: false}) ?? [];
- const existingOrNull = extensionBundles.find(
- ({name}) => name === bundle.name
- );
- const {latestVersion, name, version, ...rest} = bundle;
+ const {name, version, ...rest} = bundle;
extensionBundles.push({
name,
version,
- latestVersion:
- (existingOrNull && existingOrNull.latestVersion) ||
- latestVersion ||
- version,
...rest,
});
@@ -194,9 +185,7 @@ async function makeExtensionFromTemplates(
destinationDir = '.',
options = argv
) {
- const version = (
- options.version || (options.bento ? '1.0' : '0.1')
- ).toString();
+ const version = (options.version || '0.1').toString();
const name = (options.name || '').replace(/^amp-/, '');
if (!name) {
log(red('ERROR:'), 'Must specify component name with', cyan('--name'));
@@ -211,13 +200,6 @@ async function makeExtensionFromTemplates(
'__component_name_hyphenated__': name,
'__component_name_hyphenated_capitalized__': name.toUpperCase(),
'__component_name_pascalcase__': namePascalCase,
- // TODO(alanorozco): Remove __storybook_experiments...__ once we stop
- // requiring the bento experiment.
- '__storybook_experiments_do_not_add_trailing_comma__':
- // Don't add a trailing comma in the template, instead we add it here.
- // This is because the property added is optional, and a double comma would
- // cause a syntax error.
- options.bento ? "experiments: ['bento']," : '',
...(!options.nocss
? {
'__css_import__': `import {CSS} from '../../../build/amp-${name}-${version}.css'`,
@@ -237,6 +219,7 @@ async function makeExtensionFromTemplates(
'__jss_styles_use_styles__': 'const styles = useStyles()',
'__jss_styles_example_or_placeholder__':
'`${styles.exampleContentHidden}`',
+ '__jss_import_storybook__': `import '../component.jss'`,
}
: {
'__jss_import_component_css_': '',
@@ -244,6 +227,7 @@ async function makeExtensionFromTemplates(
'__jss_import_use_styles__': '',
'__jss_styles_use_styles__': '',
'__jss_styles_example_or_placeholder__': `'my-classname'`,
+ '__jss_import_storybook__': '',
}),
// eslint-disable-next-line local/no-forbidden-terms
// This allows generated code to contain "DO NOT SUBMIT", which will cause
@@ -278,9 +262,6 @@ async function makeExtensionFromTemplates(
if (!options.nocss) {
bundleConfig.options = {...bundleConfig.options, hasCss: true};
}
- if (options.bento) {
- bundleConfig.options = {...bundleConfig.options, bento: true};
- }
await insertExtensionBundlesConfig(
bundleConfig,
@@ -372,15 +353,14 @@ async function runExtensionTests(name) {
async function makeExtension() {
let testError;
- const {bento, nocss, nojss} = argv;
+ const {nocss, nojss} = argv;
// @ts-ignore
const templateDirs = objstr({
shared: true,
- bento,
- classic: !bento,
+ classic: true,
css: !nocss,
- jss: bento && !nojss,
+ jss: !nojss,
})
.split(/\s+/)
.map((name) => getTemplateDir(name));
@@ -428,12 +408,10 @@ makeExtension.description = 'Create the skeleton for a new extension';
makeExtension.flags = {
name: 'Name of the extension (the amp-* prefix is added if necessary)',
cleanup: 'Undo file changes before exiting (useful with --test)',
- bento: 'Generate a Bento component',
- nocss:
- 'Exclude extension-specific CSS (JSS is generated for --bento unless combined with --nojss)',
- nojss: 'Exclude extension-specific JSS (used with --bento)',
+ nocss: 'Exclude extension-specific CSS',
+ nojss: 'Exclude extension-specific JSS',
test: 'Build and test the generated extension',
- version: 'Set the version number (default: 0.1; or 1.0 with --bento)',
+ version: 'Set the version number (default: 0.1)',
overwrite:
'Overwrite existing files at the destination if present, otherwise skip',
};
diff --git a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/OWNERS b/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/OWNERS
deleted file mode 100644
index ddba9cfadb4b..000000000000
--- a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/OWNERS
+++ /dev/null
@@ -1,10 +0,0 @@
-// For an explanation of the OWNERS rules and syntax, see:
-// https://github.com/ampproject/amp-github-apps/blob/main/owners/OWNERS.example
-
-{
- rules: [
- {
- owners: [{name: 'ampproject/wg-bento'}],
- },
- ],
-}
diff --git a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/amp-__component_name_hyphenated__.js b/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/amp-__component_name_hyphenated__.js
deleted file mode 100644
index 7030827c03ac..000000000000
--- a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/amp-__component_name_hyphenated__.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import {BaseElement} from './base-element';
-__css_import__;
-import {dict} from '#core/types/object';
-import {isExperimentOn} from '#experiments';
-import {userAssert} from '#utils/log';
-
-/** @const {string} */
-const TAG = 'amp-__component_name_hyphenated__';
-
-class Amp__component_name_pascalcase__ extends BaseElement {
- /** @override */
- init() {
- // __do_not_submit__: This is example code only.
- this.registerApiAction('exampleToggle', (api) => api./*OK*/exampleToggle());
-
- return dict({
- // Extra props passed by wrapper AMP component
- 'exampleTagNameProp': this.element.tagName,
- });
- }
-
- /** @override */
- isLayoutSupported(layout) {
- userAssert(
- isExperimentOn(this.win, 'bento') ||
- isExperimentOn(this.win, 'bento-__component_name_hyphenated__'),
- 'expected global "bento" or specific "bento-__component_name_hyphenated__" experiment to be enabled'
- );
- return super.isLayoutSupported(layout);
- }
-}
-
-AMP.extension(TAG, '__component_version__', (AMP) => {
- AMP.registerElement(__register_element_args__);
-});
diff --git a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/base-element.js b/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/base-element.js
deleted file mode 100644
index 5318c1fd1a4e..000000000000
--- a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/base-element.js
+++ /dev/null
@@ -1,28 +0,0 @@
-__jss_import_component_css__;
-import {Bento__component_name_pascalcase__} from './component';
-import {PreactBaseElement} from '#preact/base-element';
-
-export class BaseElement extends PreactBaseElement {}
-
-/** @override */
-BaseElement['Component'] = Bento__component_name_pascalcase__;
-
-/** @override */
-BaseElement['props'] = {
- 'children': {passthrough: true},
- // 'children': {passthroughNonEmpty: true},
- // 'children': {selector: '...'},
-};
-
-/** @override */
-BaseElement['layoutSizeDefined'] = true;
-
-/** @override */
-BaseElement['usesShadowDom'] = true;
-
-// __do_not_submit__: If BaseElement['shadowCss'] is set to `null`, remove the
-// following declaration.
-// Otherwise, keep it when defined to an actual value like `COMPONENT_CSS`.
-// Once addressed, remove this set of comments.
-/** @override */
-BaseElement['shadowCss'] = __jss_component_css__;
diff --git a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/component.js b/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/component.js
deleted file mode 100644
index 5334e37df5e0..000000000000
--- a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/component.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import * as Preact from '#preact';
-import {ContainWrapper} from '#preact/component';
-import {
- useCallback,
- useEffect,
- useLayoutEffect,
- useMemo,
- useRef,
- useState,
-} from '#preact';
-__jss_import_use_styles__;
-
-/**
- * @param {!Bento__component_name_pascalcase__.Props} props
- * @return {PreactDef.Renderable}
- */
-export function Bento__component_name_pascalcase__({exampleTagNameProp, ...rest}) {
- // Examples of state and hooks
- // __do_not_submit__: This is example code only.
- const [exampleValue, setExampleValue] = useState(0);
- const exampleRef = useRef(null);
- __jss_styles_use_styles__;
-
- useCallback(() => {/* Do things */}, [])
- useEffect(() => {/* Do things */}, [])
- useLayoutEffect(() => {/* Do things */}, [])
- useMemo(() => {/* Do things */}, [])
-
- return (
-
- {exampleTagNameProp}
-
- This is hidden
-
-
- );
-}
diff --git a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/component.type.js b/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/component.type.js
deleted file mode 100644
index 1274bcc47119..000000000000
--- a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/component.type.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/** @externs */
-
-/** @const */
-var Bento__component_name_pascalcase__Def = {};
-
-/**
- * @typedef {{
- * exampleProperty: (string|undefined), (__do_not_submit__)
- * }}
- */
-Bento__component_name_pascalcase__Def.Props;
-
-/** @interface */
-Bento__component_name_pascalcase__Def.Bento__component_name_pascalcase__Api = class {
- /** Example: API method to toggle the component */
- exampleToggle() {} // __do_not_submit__
-};
diff --git a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/storybook/Basic.js b/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/storybook/Basic.js
deleted file mode 100644
index e0a39bea9db4..000000000000
--- a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/storybook/Basic.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import * as Preact from '#preact';
-import {Bento__component_name_pascalcase__} from '../component'
-
-export default {
- title: '__component_name_pascalcase__',
- component: Bento__component_name_pascalcase__,
- args: {
- 'exampleProperty': 'example string property argument'
- }
-};
-
-// __do_not_submit__: This is example code only.
-export const _default = (args) => {
- return (
-
- This text is inside.
-
- );
-};
diff --git a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/test/test-amp-__component_name_hyphenated__.js b/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/test/test-amp-__component_name_hyphenated__.js
deleted file mode 100644
index b233d6b03704..000000000000
--- a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/test/test-amp-__component_name_hyphenated__.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import '../amp-__component_name_hyphenated__';
-import {htmlFor} from '#core/dom/static-template';
-import {toggleExperiment} from '#experiments';
-import {waitFor} from '#testing/helpers/service';
-
-describes.realWin(
- 'amp-__component_name_hyphenated__-v__component_version__',
- {
- amp: {
- extensions: ['amp-__component_name_hyphenated__:__component_version__'],
- },
- },
- (env) => {
- let win;
- let doc;
- let html;
-
- beforeEach(async () => {
- win = env.win;
- doc = win.document;
- html = htmlFor(doc);
- toggleExperiment(win, 'bento-__component_name_hyphenated__', true, true);
- });
-
- // __do_not_submit__: This is example code only.
- it('example test renders', async () => {
- const element = html`
-
- `;
- doc.body.appendChild(element);
- await waitFor(() => element.isConnected, 'element connected');
- expect(element.parentNode).to.equal(doc.body);
- });
- }
-);
diff --git a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/test/test-component.js b/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/test/test-component.js
deleted file mode 100644
index 5020c9597f3e..000000000000
--- a/build-system/tasks/make-extension/template/bento/extensions/amp-__component_name_hyphenated__/__component_version__/test/test-component.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import * as Preact from '#preact';
-import {Bento__component_name_pascalcase__} from '../component';
-import {mount} from 'enzyme';
-
-describes.sandboxed('Bento__component_name_pascalcase__ preact component v1.0', {}, (env) => {
- // __do_not_submit__: This is example code only.
- it('should render', () => {
- const wrapper = mount(
-
- );
-
- const component = wrapper.find(Bento__component_name_pascalcase__.name);
- expect(component).to.have.lengthOf(1);
- expect(component.prop('testProp')).to.be.true;
- });
-});
diff --git a/build-system/tasks/make-extension/template/classic/extensions/amp-__component_name_hyphenated__/__component_version__/amp-__component_name_hyphenated__.js b/build-system/tasks/make-extension/template/classic/extensions/amp-__component_name_hyphenated__/__component_version__/amp-__component_name_hyphenated__.js
index b6be9402608a..e27a6b126415 100644
--- a/build-system/tasks/make-extension/template/classic/extensions/amp-__component_name_hyphenated__/__component_version__/amp-__component_name_hyphenated__.js
+++ b/build-system/tasks/make-extension/template/classic/extensions/amp-__component_name_hyphenated__/__component_version__/amp-__component_name_hyphenated__.js
@@ -1,5 +1,5 @@
__css_import__;
-import {Layout, applyFillContent} from '#core/dom/layout';
+import {Layout_Enum, applyFillContent} from '#core/dom/layout';
const TAG = 'amp-__component_name_hyphenated__';
@@ -26,7 +26,7 @@ export class Amp__component_name_pascalcase__ extends AMP.BaseElement {
/** @override */
isLayoutSupported(layout) {
- return layout == Layout.RESPONSIVE;
+ return layout == Layout_Enum.RESPONSIVE;
}
}
diff --git a/build-system/tasks/make-extension/template/shared/extensions/amp-__component_name_hyphenated__/amp-__component_name_hyphenated__.md b/build-system/tasks/make-extension/template/shared/extensions/amp-__component_name_hyphenated__/amp-__component_name_hyphenated__.md
index 09fe8d9d9d52..0ddf31b00d5a 100644
--- a/build-system/tasks/make-extension/template/shared/extensions/amp-__component_name_hyphenated__/amp-__component_name_hyphenated__.md
+++ b/build-system/tasks/make-extension/template/shared/extensions/amp-__component_name_hyphenated__/amp-__component_name_hyphenated__.md
@@ -59,12 +59,6 @@ Below is an example for ads.
[/example][/filter]
-### Standalone use outside valid AMP documents (optional)
-
-
-
-Bento AMP allows you to use AMP components in non-AMP pages without needing to commit to fully valid AMP. You can take these components and place them in implementations with frameworks and CMSs that don't support AMP. Read more in our guide [Use AMP components in non-AMP pages](https://amp.dev/documentation/guides-and-tutorials/start/bento_guide/).
-
#### Example
The example below demonstrates `amp-__component_name_hyphenated__` component in standalone use.
@@ -92,8 +86,6 @@ The example below demonstrates `amp-__component_name_hyphenated__` component in
#### Interactivity and API usage
-Bento enabled components in standalone use are highly interactive through their API. In Bento standalone use, the element's API replaces AMP Actions and events and [`amp-bind`](https://amp.dev/documentation/components/amp-bind/?format=websites).
-
The `amp-__component_name_hyphenated__` component API is accessible by including the following script tag in your document:
```
@@ -126,13 +118,7 @@ example
#### Layout and style
-Each Bento component has a small CSS library you must include to guarantee proper loading without [content shifts](https://web.dev/cls/). Because of order-based specificity, you must manually ensure that stylesheets are included before any custom styles.
-
-```
-
-```
-
-Fully valid AMP pages use the AMP layout system to infer sizing of elements to create a page structure before downloading any remote resources. However, Bento use imports components into less controlled environments and AMP's layout system is inaccessible.
+Fully valid AMP pages use the AMP layout system to infer sizing of elements to create a page structure before downloading any remote resources.
**Container type**
@@ -218,14 +204,6 @@ Syntax and argument details for use in fully valid AMP pages.
[/example]
-#### Bento mode
-
-Syntax and argument details for use in Bento mode.
-
-```
-Bento example
-```
-
## Styling (optional)
Explain how to style the element.
diff --git a/build-system/tasks/make-extension/test/test.js b/build-system/tasks/make-extension/test/test.js
index 06b670021ccf..4ef26b107976 100644
--- a/build-system/tasks/make-extension/test/test.js
+++ b/build-system/tasks/make-extension/test/test.js
@@ -114,21 +114,6 @@ test('makeExtensionFromTemplates does not print unit test blurb if a test file i
);
}));
-test('makeExtensionFromTemplates prints unit test blurb if a test file is created', (t) =>
- tempy.directory.task(async (dir) => {
- const {makeExtensionFromTemplates} = require('..');
- await makeExtensionFromTemplates(
- [path.join(__dirname, '../template/bento')],
- dir,
- {name: 'my-extension-name'}
- );
- t.true(
- !!stubbedCalls.logLocalDev.find((args) =>
- args.find((arg) => arg.includes('amp unit --files'))
- )
- );
- }));
-
test('makeExtensionFromTemplates does not print Storybook blurb if a Storybook file is not created', (t) =>
tempy.directory.task(async (dir) => {
const {makeExtensionFromTemplates} = require('..');
@@ -144,21 +129,6 @@ test('makeExtensionFromTemplates does not print Storybook blurb if a Storybook f
);
}));
-test('makeExtensionFromTemplates prints Storybook blurb if a Storybook file is created', (t) =>
- tempy.directory.task(async (dir) => {
- const {makeExtensionFromTemplates} = require('..');
- await makeExtensionFromTemplates(
- [path.join(__dirname, '../template/bento')],
- dir,
- {name: 'my-extension-name'}
- );
- t.true(
- !!stubbedCalls.logLocalDev.find((args) =>
- args.find((arg) => arg.includes('amp storybook'))
- )
- );
- }));
-
test('makeExtensionFromTemplates does not print validator blurb if a validator-*.html file is not created', (t) =>
tempy.directory.task(async (dir) => {
const {makeExtensionFromTemplates} = require('..');
@@ -220,7 +190,6 @@ test('insertExtensionBundlesConfig inserts new entry', (t) =>
{
name: 'a',
version: 'x',
- latestVersion: 'x',
options: {hasCss: true},
},
{
@@ -229,117 +198,7 @@ test('insertExtensionBundlesConfig inserts new entry', (t) =>
]);
// expected order of keys
- t.deepEqual(Object.keys(items[1]), [
- 'name',
- 'version',
- 'latestVersion',
- 'options',
- ]);
- },
- {extension: 'json'}
- ));
-
-test('insertExtensionBundlesConfig uses existing latestVersion', (t) =>
- tempy.file.task(
- async (destination) => {
- const {insertExtensionBundlesConfig} = require('..');
- await writeJson(destination, [
- {
- name: 'foo',
- version: 'existing version',
- latestVersion: 'existing version',
- },
- ]);
-
- await insertExtensionBundlesConfig(
- {
- name: 'foo',
- version: 'new version',
- },
- destination
- );
-
- t.deepEqual(await readJson(destination), [
- {
- name: 'foo',
- version: 'existing version',
- latestVersion: 'existing version',
- },
- {
- name: 'foo',
- version: 'new version',
- latestVersion: 'existing version',
- },
- ]);
- },
- {extension: 'json'}
- ));
-
-test('insertExtensionBundlesConfig uses passed latestVersion', (t) =>
- tempy.file.task(
- async (destination) => {
- const {insertExtensionBundlesConfig} = require('..');
- await writeJson(destination, [
- {
- name: 'foo',
- version: '_',
- },
- ]);
-
- await insertExtensionBundlesConfig(
- {
- name: 'foo',
- version: 'new version',
- latestVersion: 'new version',
- },
- destination
- );
-
- t.deepEqual(await readJson(destination), [
- {
- name: 'foo',
- version: '_',
- },
- {
- name: 'foo',
- version: 'new version',
- latestVersion: 'new version',
- },
- ]);
- },
- {extension: 'json'}
- ));
-
-test('insertExtensionBundlesConfig uses version as latestVersion', (t) =>
- tempy.file.task(
- async (destination) => {
- const {insertExtensionBundlesConfig} = require('..');
- await writeJson(destination, [
- {
- name: 'foo',
- version: '_',
- },
- ]);
-
- await insertExtensionBundlesConfig(
- {
- name: 'foo',
- version: 'new version',
- },
- destination
- );
-
- t.deepEqual(await readJson(destination), [
- {
- name: 'foo',
- version: '_',
- },
- {
- name: 'foo',
- version: 'new version',
- latestVersion: 'new version',
- },
- ]);
+ t.deepEqual(Object.keys(items[1]), ['name', 'version', 'options']);
},
{extension: 'json'}
));
diff --git a/build-system/tasks/markdown-toc/index.js b/build-system/tasks/markdown-toc/index.js
index 5579eebff9d4..e5a9ec5b5544 100644
--- a/build-system/tasks/markdown-toc/index.js
+++ b/build-system/tasks/markdown-toc/index.js
@@ -118,7 +118,7 @@ async function overrideToc(content) {
/**
* @param {string} cwd
- * @return {Promise>}
+ * @return {Promise<{[key: string]: ?string}>}
*/
async function overrideTocGlob(cwd) {
const glob = [
@@ -134,7 +134,7 @@ async function overrideTocGlob(cwd) {
.trim()
.split('\n');
- /** @type {Object} */
+ /** @type {{[key: string]: ?string}} */
const result = {};
for (const filename of filesIncludingString) {
diff --git a/build-system/tasks/performance-urls.js b/build-system/tasks/performance-urls.js
deleted file mode 100644
index 82e9bf1a6b3c..000000000000
--- a/build-system/tasks/performance-urls.js
+++ /dev/null
@@ -1,45 +0,0 @@
-const fs = require('fs');
-const path = require('path');
-const {cyan, green, red} = require('kleur/colors');
-const {log} = require('../common/logging');
-
-const CONFIG_PATH = './performance/config.json';
-const LOCAL_HOST_URL = 'http://localhost:8000/';
-
-/**
- * Entry point for 'amp performance-urls'
- * Check if all localhost urls in performance/config.json exist
- * @return {Promise}
- */
-async function performanceUrls() {
- let jsonContent;
- try {
- jsonContent = require(CONFIG_PATH);
- } catch (e) {
- log(red('ERROR:'), 'Could not parse', cyan(CONFIG_PATH));
- process.exitCode = 1;
- return;
- }
- /** @type {string[]} */
- const filepaths = jsonContent.handlers.flatMap((handler) =>
- handler.urls
- .filter((url) => url.startsWith(LOCAL_HOST_URL))
- .map((url) =>
- path.join(__dirname, '../../', url.split(LOCAL_HOST_URL)[1])
- )
- );
- for (const filepath of filepaths) {
- if (!fs.existsSync(filepath)) {
- log(red('ERROR:'), cyan(filepath), 'does not exist');
- process.exitCode = 1;
- return;
- }
- }
- log(green('SUCCESS:'), 'All local performance task urls are valid.');
-}
-
-module.exports = {
- performanceUrls,
-};
-
-performanceUrls.description = 'Validite config urls for the performance task';
diff --git a/build-system/tasks/performance/README.md b/build-system/tasks/performance/README.md
deleted file mode 100644
index 35dac7674114..000000000000
--- a/build-system/tasks/performance/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Performance test
-
-Use `amp performance` to run this test. It measures performance for the current branch compared to the current release. By default, the command first needs to compile minified runtime and components from the current branch by executing the `amp dist` task. To skip this step, use the `--nobuild` flag, but the task will throw an error if the dist files are missing. Only the runtime and components used by documents from the configured URLs are compiled.
-
-The `config.json` file contains settings. The default value for `runs` is 50, which takes ~10 minutes to run, and generates results with ~5% margin of error. Differences larger than this should be investigated. The `defaultHandler` within the `handlers` list measures the basic pageview metrics. The other handlers within the list can track different metrics (analytics request time, amount of analytics requests failed, etc...). Each handler within the handlers list must have a `handlerName` as well as a `urls` array (can be empty).
-
-This test measures the Core Web Vitals metrics: `largest contentful paint`, `max first input delay`, and `cumulative layout shift`. For ads, the test also measures `analytics request delay` and `failed percentage of analytics requests`.
diff --git a/build-system/tasks/performance/ads-handler.js b/build-system/tasks/performance/ads-handler.js
deleted file mode 100644
index 85b6ddd0d914..000000000000
--- a/build-system/tasks/performance/ads-handler.js
+++ /dev/null
@@ -1,34 +0,0 @@
-const fs = require('fs');
-const {urlToCachePath} = require('./helpers');
-
-const AD_SERVER_DOMAIN = 'securepubads.g.doubleclick.net';
-const EXAMPLE_AD_URL =
- 'http://localhost:8000/test/fixtures/performance/amp-ad/amphtml-ad.html';
-
-/**
- * Handler that will intercept ads requests and return a locally cached ad
- * instead.
- * @param {!Array} handlersList
- * @param {string} version
- */
-function setupAdRequestHandler(handlersList, version) {
- handlersList.push((interceptedRequest) => {
- const url = interceptedRequest.url();
- // TODO(ccordry): allow dynamic ad response.
- if (url.includes(AD_SERVER_DOMAIN)) {
- const path = urlToCachePath(EXAMPLE_AD_URL, version);
- const body = fs.readFileSync(path);
- interceptedRequest.respond({
- status: 200,
- contentType: 'text/html; charset=UTF-8',
- body,
- });
- return true;
- }
- return false;
- });
-}
-
-module.exports = {
- setupAdRequestHandler,
-};
diff --git a/build-system/tasks/performance/analytics-handler.js b/build-system/tasks/performance/analytics-handler.js
deleted file mode 100644
index 479b31ac7aa1..000000000000
--- a/build-system/tasks/performance/analytics-handler.js
+++ /dev/null
@@ -1,127 +0,0 @@
-const puppeteer = require('puppeteer'); // eslint-disable-line no-unused-vars
-
-/**
- *
- * @param {!Array} handlersList
- * @param {?Object} handlerOptions
- * @param {!function} resolve
- */
-function setupAnalyticsHandler(handlersList, handlerOptions, resolve) {
- const {extraUrlParam} = handlerOptions;
- const analyticsParam = Object.keys(extraUrlParam)
- .map((key) => `${key}=${extraUrlParam[key]}`)
- .join('&');
-
- handlerOptions['startTime'] = Date.now();
- handlerOptions['requests'] = [];
- let requestsSeen = 0;
-
- handlersList.push((interceptedRequest) =>
- maybeHandleAnalyticsRequest(
- interceptedRequest,
- analyticsParam,
- // This cb function is called iff the intercepted request has the magic
- // analytics param. Optionally analytics requests can contain a
- // `requestName` and `totalRequests` param if we want to measure more
- // than one request per page.
- (time, optRequestName, optExpectedRequests) => {
- requestsSeen++;
-
- // Store the first request delay. May be the only metric we have on
- // live pages.
- if (!handlerOptions['firstRequestTime']) {
- handlerOptions['firstRequestTime'] = time;
- }
-
- // Sample pages can indicate the total number of expected requests.
- // Will not be on real pages.
- if (
- optExpectedRequests &&
- !isNaN(parseInt(optExpectedRequests, 10)) &&
- !handlerOptions['expectedRequests']
- ) {
- handlerOptions['expectedRequests'] = parseInt(
- optExpectedRequests,
- 10
- );
- }
-
- // Named request in sample page. Will not be named on real pages.
- const requestName = optRequestName || `request${requestsSeen}`;
- handlerOptions.requests.push({requestName, time});
-
- if (
- !handlerOptions['expectedRequests'] ||
- requestsSeen >= handlerOptions['expectedRequests']
- ) {
- // Resolve and short circuit setTimeout
- resolve();
- }
- }
- )
- );
-}
-
-/**
- * Matches intercepted request with special analytics parameter
- * and records first outgoing analytics request, using callback.
- * Abort all requests, to not ping real servers.
- * @param {puppeteer.HTTPRequest} interceptedRequest
- * @param {string} analyticsParam
- * @param {!Function} requestCallback
- * @return {!Promise}
- */
-async function maybeHandleAnalyticsRequest(
- interceptedRequest,
- analyticsParam,
- requestCallback
-) {
- const interceptedUrl = interceptedRequest.url();
- if (interceptedUrl.includes(analyticsParam)) {
- const {searchParams} = new URL(interceptedUrl);
- // Magic parameter name to name request.
- const requestName = searchParams.get('requestName');
- // Magic parameter name to indicate total requests expected.
- const expectedRequests = searchParams.get('expectedRequests');
-
- requestCallback(Date.now(), requestName, expectedRequests);
-
- interceptedRequest.abort();
- return true;
- }
- return false;
-}
-
-/**
- * If request didn't fire, don't include any value for
- * analyticsRequest.
- *
- * @param {?Object} analyticsHandlerOptions
- * @return {!Object}
- */
-function getAnalyticsMetrics(analyticsHandlerOptions) {
- const {expectedRequests, firstRequestTime, requests, startTime} =
- analyticsHandlerOptions;
- const analyticsMetrics = {};
- // If there is no firstRequestTime, that means that request didn't fire.
- // `percentRequestsFailed` because we take the mean rather than sum
- analyticsMetrics['percentRequestsFailed'] = firstRequestTime ? 0 : 1;
-
- // We only optionally track more than one request.
- if (!expectedRequests) {
- analyticsMetrics['firstRequestTime'] = firstRequestTime - startTime;
- return analyticsMetrics;
- }
-
- // Page has opted into tracking more than 1 request.
- requests.forEach(
- ({requestName, time}) => (analyticsMetrics[requestName] = time - startTime)
- );
-
- return analyticsMetrics;
-}
-
-module.exports = {
- getAnalyticsMetrics,
- setupAnalyticsHandler,
-};
diff --git a/build-system/tasks/performance/cache-documents.js b/build-system/tasks/performance/cache-documents.js
deleted file mode 100644
index fbda35a049c4..000000000000
--- a/build-system/tasks/performance/cache-documents.js
+++ /dev/null
@@ -1,27 +0,0 @@
-const {CONTROL, EXPERIMENT, downloadToDisk} = require('./helpers');
-const {startServer, stopServer} = require('../serve');
-const HOST = 'localhost';
-const PORT = 8000;
-
-/**
- * Download sites specified in config in order to serve them
- * from the file system (to avoid measuring inconsistent
- * node server performance)
- *
- * @return {!Promise}
- * @param {!Array} urls
- */
-async function cacheDocuments(urls) {
- await startServer({host: HOST, port: PORT}, {quiet: true}, {minified: true});
-
- await Promise.all(
- urls.flatMap((url) => [
- downloadToDisk(url, CONTROL),
- downloadToDisk(url, EXPERIMENT),
- ])
- );
-
- await stopServer();
-}
-
-module.exports = cacheDocuments;
diff --git a/build-system/tasks/performance/compile-scripts.js b/build-system/tasks/performance/compile-scripts.js
deleted file mode 100644
index 716e2fa5730b..000000000000
--- a/build-system/tasks/performance/compile-scripts.js
+++ /dev/null
@@ -1,20 +0,0 @@
-const argv = require('minimist')(process.argv.slice(2));
-const {buildRuntime} = require('../../common/utils');
-const {EXPERIMENT, urlToCachePath} = require('./helpers');
-const {setExtensionsToBuildFromDocuments} = require('../extension-helpers');
-
-/**
- * Compiles and minifies AMP runtime and components required by the urls
- * argument, unless the --nobuild flag is passed.
- * @param {Array} urls
- * @return {Promise}
- */
-async function compileScripts(urls) {
- if (!argv.nobuild) {
- const examples = urls.map((url) => urlToCachePath(url, EXPERIMENT));
- setExtensionsToBuildFromDocuments(examples);
- await buildRuntime(/* opt_compiled */ true);
- }
-}
-
-module.exports = compileScripts;
diff --git a/build-system/tasks/performance/config.json b/build-system/tasks/performance/config.json
deleted file mode 100644
index 011e5730cfc8..000000000000
--- a/build-system/tasks/performance/config.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "runs": 50,
- "handlers": [
- {
- "handlerName": "defaultHandler",
- "urls": [
- "http://localhost:8000/examples/bind/basic.amp.html"
- ]
- },
- {
- "handlerName": "analyticsHandler",
- "urls": [
- "http://localhost:8000/test/manual/amp-analytics/performance-test-pages/visible-basic.html",
- "http://localhost:8000/test/manual/amp-analytics/performance-test-pages/visible-multiple.html"
- ],
- "timeout": 2000,
- "extraUrlParam": {
- "analytics": "amp-analytics-performance-param"
- }
- },
- {
- "handlerName": "adsHandler",
- "urls": [
- "http://localhost:8000/test/fixtures/performance/amp-ad/hostile-inabox-env.html"
- ],
- "adsUrls": [
- "http://localhost:8000/test/fixtures/performance/amp-ad/amphtml-ad.html"
- ],
- "timeout": 5000,
- "extraUrlParam": {
- "intercept": true
- }
- },
- {
- "handlerName": "runtimeHandler",
- "urls": [
- "http://localhost:8000/examples/runtime/article.html",
- "http://localhost:8000/examples/runtime/images.html",
- "http://localhost:8000/examples/runtime/list-always.html"
- ]
- }
- ]
-}
diff --git a/build-system/tasks/performance/copy-images.js b/build-system/tasks/performance/copy-images.js
deleted file mode 100644
index aaeb75059f74..000000000000
--- a/build-system/tasks/performance/copy-images.js
+++ /dev/null
@@ -1,73 +0,0 @@
-const fs = require('fs');
-const {CONTROL, maybeCopyImageToCache, urlToCachePath} = require('./helpers');
-const {JSDOM} = require('jsdom');
-
-/**
- * Lookup URL from cache. Inspect tags that could use images.
- *
- * @param {string} url
- * @return {Promise}
- */
-async function copyImagesFromTags(url) {
- const cachePath = urlToCachePath(url, CONTROL);
- const document = fs.readFileSync(cachePath);
- const dom = new JSDOM(document);
-
- copyImagesFromAmpImg(url, dom);
- copyImagesFromAmpVideo(url, dom);
-}
-
-/**
- * Copy locally stored images found in the amp-img tags
- * from src and srcset to cache.
- *
- * @param {string} url
- * @param {JSDOM} dom
- */
-function copyImagesFromAmpImg(url, dom) {
- const imageTags = Array.from(dom.window.document.querySelectorAll('amp-img'));
-
- for (const imageTag of imageTags) {
- const src = imageTag.getAttribute('src');
- const srcset = imageTag.getAttribute('srcset');
- if (src) {
- maybeCopyImageToCache(url, src);
- }
- if (srcset) {
- // Get each source path, strip out responsive (1x, 2x..) found at the end
- const sources = srcset.split(',').map((s) => s.trim().split(' ')[0]);
- sources.forEach((srcPath) => maybeCopyImageToCache(url, srcPath));
- }
- }
-}
-
-/**
- * Copy locally stored images found in the amp-video tags
- * from artwork to cache.
- *
- * @param {string} url
- * @param {JSDOM} dom
- */
-function copyImagesFromAmpVideo(url, dom) {
- const videoTags = Array.from(
- dom.window.document.querySelectorAll('amp-video')
- );
- for (const videoTag of videoTags) {
- const artwork = videoTag.getAttribute('artwork');
- if (artwork) {
- maybeCopyImageToCache(url, artwork);
- }
- }
-}
-
-/**
- * Copy locally stored images found in the markup to cache.
- *
- * @param {!Array} urls
- * @return {Promise}
- */
-async function copyLocalImages(urls) {
- await Promise.all(urls.map(copyImagesFromTags));
-}
-
-module.exports = copyLocalImages;
diff --git a/build-system/tasks/performance/helpers.js b/build-system/tasks/performance/helpers.js
deleted file mode 100644
index fe8971989f79..000000000000
--- a/build-system/tasks/performance/helpers.js
+++ /dev/null
@@ -1,205 +0,0 @@
-const fetch = require('node-fetch');
-const fs = require('fs');
-const path = require('path');
-
-const CDN_URL = 'https://cdn.ampproject.org/';
-const V0_PATH = '/dist/v0.js';
-const INABOX_PATH = '/dist/amp4ads-v0.js';
-const LOCAL_PATH_REGEXP = /dist\/(v0\/amp-[A-Za-z\-0-9\.]+.js)/;
-const ANALYTICS_VENDORS_PATH = '../../../dist/v0/analytics-vendors/';
-const CONTROL = 'control';
-const EXPERIMENT = 'experiment';
-const CACHE_PATH = path.join(__dirname, './cache');
-const CONTROL_CACHE_PATH = path.join(CACHE_PATH, `./${CONTROL}`);
-const EXPERIMENT_CACHE_PATH = path.join(CACHE_PATH, `./${EXPERIMENT}`);
-const IMG_CACHE_PATH = path.join(CACHE_PATH, './img');
-const RESULTS_PATH = path.join(__dirname, './results.json');
-const DEFAULT_EXTENSIONS = ['amp-auto-lightbox-0.1.js', 'amp-loader-0.1.js'];
-
-/**
- * Makes cache directories if they do not exist
- */
-function touchDirs() {
- [
- CACHE_PATH,
- IMG_CACHE_PATH,
- CONTROL_CACHE_PATH,
- path.join(CONTROL_CACHE_PATH, 'v0'),
- EXPERIMENT_CACHE_PATH,
- path.join(EXPERIMENT_CACHE_PATH, 'v0'),
- ].forEach((dirPath) => {
- if (!fs.existsSync(dirPath)) {
- fs.mkdirSync(dirPath);
- }
- });
-}
-
-/**
- * Takes a URL string and sanitizes it for use as a filename.
- * Appends `.html` if no extension is present because otherwise
- * Chrome will not open the file as a webpage.
- *
- * @param {string} url
- * @param {string} version Experiment or Control
- * @return {string}
- */
-function urlToCachePath(url, version = CONTROL) {
- const directory =
- version === CONTROL ? CONTROL_CACHE_PATH : EXPERIMENT_CACHE_PATH;
- let sanitized = url.replace(/:/g, '').replace(/\//g, '_');
- sanitized = /\.js|\.html/.test(sanitized) ? sanitized : `${sanitized}.html`;
- return path.join(directory, sanitized);
-}
-
-/**
- * @param {string} file
- * @param {string} version Experiment or Control
- * @return {string}
- */
-function localFileToCachePath(file, version = EXPERIMENT) {
- const directory =
- version === CONTROL ? CONTROL_CACHE_PATH : EXPERIMENT_CACHE_PATH;
- return path.join(directory, file);
-}
-
-/**
- * @param {string} extension
- * @return {string}
- */
-function getLocalPathFromExtension(extension) {
- return `v0/` + extension;
-}
-
-/**
- * Download a file to cache by url
- *
- * @param {string} url
- * @param {string} version
- * @return {!Promise} Resolves with relative path to file
- */
-async function downloadToDisk(url, version = CONTROL) {
- touchDirs();
-
- const response = await fetch(url);
- const document = await response.text();
- const filepath = urlToCachePath(url, version);
- fs.writeFileSync(filepath, document);
-
- return filepath.split(`performance/cache/${version}/`)[1];
-}
-
-/**
- * Copy a script file from /dist to cache from filePath
- *
- * @param {string} filePath
- * @param {string} version
- * @return {!Promise} Resolves with relative path to file
- */
-async function copyToCache(filePath, version = EXPERIMENT) {
- touchDirs();
-
- const fromPath = path.join(__dirname, '../../../dist/', filePath);
- const destDir =
- version === CONTROL ? CONTROL_CACHE_PATH : EXPERIMENT_CACHE_PATH;
- const destPath = path.join(destDir, filePath);
-
- fs.copyFileSync(fromPath, destPath);
-
- return filePath;
-}
-
-/**
- * Copy an image from absoluteImgPath to cache/img if not present.
- * To be used by both control and experiment
- *
- * @param {string} configUrl
- * @param {string} src
- */
-function maybeCopyImageToCache(configUrl, src) {
- // Remove `?...` that may be used at the end of the src for uniqueness
- src = src.split('?')[0];
- const absoluteFromImgPath = getAbsolutePathFromRelativePath(configUrl, src);
-
- if (src.startsWith('http') || !fs.existsSync(absoluteFromImgPath)) {
- return;
- }
-
- touchDirs();
-
- const filename = src.split('/').pop() ?? '';
- const destPath = path.join(IMG_CACHE_PATH, filename);
-
- if (!fs.existsSync(destPath)) {
- fs.copyFileSync(absoluteFromImgPath, destPath);
- }
-}
-
-/**
- * Returns absolute path to vendor config.
- *
- * @param {string} vendor
- * @return {!Promise} Resolves with relative path to file
- */
-function getLocalVendorConfig(vendor) {
- const filepath = path.join(
- __dirname,
- ANALYTICS_VENDORS_PATH,
- vendor + '.json'
- );
- return getFileFromAbsolutePath(filepath);
-}
-
-/**
- * Return file contents from absolute filepath.
- *
- * @param {string} filePath
- * @return {!Promise} Resolves with relative path to file
- */
-async function getFileFromAbsolutePath(filePath) {
- return fs.readFileSync(filePath, 'utf-8');
-}
-
-/**
- * Strip localhost:8000 from url and remove the filename
- *
- * @param {string} testPageUrl
- * @return {string}
- */
-function getFolderLocation(testPageUrl) {
- const removedLocalHost = testPageUrl
- .split('http://localhost:8000')[1]
- .split('/');
- removedLocalHost.pop();
- return removedLocalHost.join('/');
-}
-
-/**
- * Get the absolute path of the relative src
- *
- * @param {string} testPageUrl
- * @param {string} src
- * @return {string}
- */
-function getAbsolutePathFromRelativePath(testPageUrl, src) {
- return path.join(__dirname, '../../..', getFolderLocation(testPageUrl), src);
-}
-
-module.exports = {
- CDN_URL,
- CONTROL,
- DEFAULT_EXTENSIONS,
- EXPERIMENT,
- INABOX_PATH,
- LOCAL_PATH_REGEXP,
- RESULTS_PATH,
- V0_PATH,
- copyToCache,
- maybeCopyImageToCache,
- downloadToDisk,
- getFileFromAbsolutePath,
- getLocalPathFromExtension,
- getLocalVendorConfig,
- getAbsolutePathFromRelativePath,
- localFileToCachePath,
- urlToCachePath,
-};
diff --git a/build-system/tasks/performance/index.js b/build-system/tasks/performance/index.js
deleted file mode 100644
index c0af2d1d4b9f..000000000000
--- a/build-system/tasks/performance/index.js
+++ /dev/null
@@ -1,50 +0,0 @@
-const cacheDocuments = require('./cache-documents');
-const compileScripts = require('./compile-scripts');
-const copyLocalImages = require('./copy-images');
-const getMetrics = require('./measure-documents');
-const loadConfig = require('./load-config');
-const rewriteAnalyticsTags = require('./rewrite-analytics-tags');
-const rewriteScriptTags = require('./rewrite-script-tags');
-const runTests = require('./run-tests');
-const {css} = require('../css');
-const {printReport} = require('./print-report');
-
-/**
- * @return {!Promise}
- */
-async function performance() {
- let resolver = (..._) => {}; // eslint-disable-line no-unused-vars
- const deferred = new Promise((resolverIn) => {
- resolver = resolverIn;
- });
-
- const config = loadConfig();
- const urls = Object.keys(config.urlToHandlers);
- const urlsAndAdsUrls = urls.concat(config.adsUrls || []);
- await css();
- await cacheDocuments(urlsAndAdsUrls);
- await compileScripts(urlsAndAdsUrls);
- await copyLocalImages(urlsAndAdsUrls);
- await rewriteScriptTags(urlsAndAdsUrls);
- await rewriteAnalyticsTags(config.handlers);
- await getMetrics(urls, config);
- printReport(urls);
- await runTests(resolver);
- return deferred;
-}
-
-performance.description = 'Run web performance tests';
-
-performance.flags = {
- 'devtools': 'Run with devtools open',
- 'headless': 'Run on chromium headless',
- 'nobuild': 'Do not compile minified runtime before running tests',
- 'threshold':
- 'Fraction by which metrics are allowed to increase (number between 0.0 and 1.0)',
- 'quiet': 'Do not log progress per page',
- 'url': 'Page to test (overrides urls set in config.json)',
-};
-
-module.exports = {
- performance,
-};
diff --git a/build-system/tasks/performance/load-config.js b/build-system/tasks/performance/load-config.js
deleted file mode 100644
index d1ddd26748b9..000000000000
--- a/build-system/tasks/performance/load-config.js
+++ /dev/null
@@ -1,60 +0,0 @@
-const argv = require('minimist')(process.argv.slice(2));
-const fs = require('fs');
-const path = require('path');
-
-const PATH = './config.json';
-
-/**
- * Loads test config from ./config.json
- * @return {{
- * concurrency:number,
- * headless:boolean,
- * runs:number,
- * handlers:Array,
- * urlToHandlers:Object,
- * adsUrls?:Array
- * }}
- */
-function loadConfig() {
- const file = fs.readFileSync(path.join(__dirname, PATH));
- const config = JSON.parse(file.toString());
- // Create mapping of url to handlers for ease of use later
- config.urlToHandlers = config.handlers.reduce((mapping, handlerOptions) => {
- if (argv.url && handlerOptions.handlerName === 'defaultHandler') {
- handlerOptions.urls = [argv.url];
- }
- handlerOptions.urls.forEach((url) => {
- if (mapping[url]) {
- throw new Error(`All urls must be unique: ${url}.`);
- }
- mapping[url] = handlerOptions;
- });
- return mapping;
- }, {});
- if (Object.keys(config.urlToHandlers).length < 1) {
- throw new Error('No URLs found in config.');
- }
- config.headless = !!argv.headless;
- config.devtools = !!argv.devtools;
-
- maybeExtractAdsUrls(config);
- return config;
-}
-
-/**
- * If adsHandler is in use, add the array as top level key to be used for
- * easy access to files for caching.
- * @param {!Object} config
- */
-function maybeExtractAdsUrls(config) {
- if (!config || !config.handlers) {
- return;
- }
- for (const handler of config.handlers) {
- if (handler.handlerName === 'adsHandler' && handler.adsUrls) {
- config['adsUrls'] = handler.adsUrls;
- }
- }
-}
-
-module.exports = loadConfig;
diff --git a/build-system/tasks/performance/measure-documents.js b/build-system/tasks/performance/measure-documents.js
deleted file mode 100644
index 25bf235d685c..000000000000
--- a/build-system/tasks/performance/measure-documents.js
+++ /dev/null
@@ -1,371 +0,0 @@
-const argv = require('minimist')(process.argv.slice(2));
-const fs = require('fs-extra');
-const puppeteer = require('puppeteer');
-const {
- CDN_URL,
- CONTROL,
- DEFAULT_EXTENSIONS,
- EXPERIMENT,
- RESULTS_PATH,
- getFileFromAbsolutePath,
- getLocalPathFromExtension,
- localFileToCachePath,
- urlToCachePath,
-} = require('./helpers');
-const {
- getAnalyticsMetrics,
- setupAnalyticsHandler,
-} = require('./analytics-handler');
-const {cyan, green} = require('kleur/colors');
-const {log} = require('../../common/logging');
-const {setupAdRequestHandler} = require('./ads-handler');
-
-/**
- * Setup measurement on page before navigating to the URL. Performance
- * observers need to be initialized before content begins to load to take
- * measurements.
- *
- * @param {puppeteer.Page} page
- * @return {Promise} Resolves when script is evaluated
- */
-const setupMeasurement = (page) =>
- page.evaluateOnNewDocument(() => {
- window.longTasks = [];
- window.cumulativeLayoutShift = 0;
- window.measureStarted = Date.now();
- window.largestContentfulPaint = 0;
-
- const longTaskObserver = new PerformanceObserver((list) =>
- list.getEntries().forEach((entry) => window.longTasks.push(entry))
- );
-
- longTaskObserver.observe({entryTypes: ['longtask']});
-
- const layoutShiftObserver = new PerformanceObserver((list) =>
- list
- .getEntries()
- .forEach((entry) => (window.cumulativeLayoutShift += entry.value))
- );
-
- layoutShiftObserver.observe({entryTypes: ['layout-shift']});
-
- const largestContentfulPaintObserver = new PerformanceObserver((list) => {
- const entries = list.getEntries();
- const entry = entries[entries.length - 1];
- window.largestContentfulPaint = entry.renderTime || entry.loadTime;
- });
-
- largestContentfulPaintObserver.observe({
- entryTypes: ['largest-contentful-paint'],
- });
- });
-
-/**
- * Intecepts requests for default extensions made by runtime and returns a
- * cached version.
- * @param {puppeteer.HTTPRequest} interceptedRequest
- * @param {string} version
- * @return {!Promise}
- */
-const defaultExtensionsHandler = async (interceptedRequest, version) => {
- const interceptedUrl = interceptedRequest.url();
- for (let i = 0; i < DEFAULT_EXTENSIONS.length; i++) {
- const extension = DEFAULT_EXTENSIONS[i];
- if (interceptedUrl.endsWith(extension)) {
- const localPath = getLocalPathFromExtension(extension);
- const jsonString = await getFileFromAbsolutePath(
- version === CONTROL
- ? urlToCachePath(CDN_URL + localPath)
- : localFileToCachePath(localPath)
- );
- interceptedRequest.respond({
- status: 200,
- contentType: 'script; charset=utf-8',
- body: jsonString,
- });
- return true;
- }
- }
- return false;
-};
-
-/**
- * Create a promise that will resolve after a setTimeout,
- * unless it has been resolved before then.
- * @param {?Object} handlerOptions
- * @return {!Object}
- */
-function setupDelayBasedOnHandlerOptions(handlerOptions) {
- let resolve;
- const timeoutPromise = new Promise((r) => {
- resolve = r;
- setTimeout(
- resolve,
- handlerOptions && handlerOptions.timeout ? handlerOptions.timeout : 0
- );
- });
- return {
- timeoutPromise,
- resolve,
- };
-}
-
-/**
- * Evaluate script on the page to collect and calculate metrics
- *
- * @param {puppeteer.Page} page
- * @return {Promise} Resolves with page load metrics
- */
-const readMetrics = (page) =>
- page.evaluate(() => {
- const entries = performance.getEntries();
-
- /**
- *
- * @param {string} name
- * @return {number}
- */
- function getMetric(name) {
- const entry = entries.find((entry) => entry.name === name);
- return entry ? entry.startTime : 0;
- }
-
- const firstContentfulPaint = getMetric('first-contentful-paint');
-
- /**
- * @return {number}
- */
- function getMaxFirstInputDelay() {
- let longest = 0;
-
- window.longTasks.forEach((longTask) => {
- if (
- longTask.startTime > firstContentfulPaint &&
- longTask.duration > longest
- ) {
- longest = longTask.duration;
- }
- });
-
- return longest;
- }
-
- return {
- largestContentfulPaint: window.largestContentfulPaint,
- maxFirstInputDelay: getMaxFirstInputDelay(),
- cumulativeLayoutShift: window.cumulativeLayoutShift * 100,
- };
- });
-
-/**
- * Set up defaults handlers for docs that will be requested
- * that are not explicted stated as script tags and not
- * handled by the 'additionalHandlers'.
- *
- * @param {!Array} handlersList
- * @param {string} version
- */
-function setupDefaultHandlers(handlersList, version) {
- // Handle requests made by runtime for default extensions
- handlersList.push((interceptedRequest) =>
- defaultExtensionsHandler(interceptedRequest, version)
- );
-}
-
-/**
- * Set up appropriate handlers based upon handlerOptions
- *
- * @param {!Array} handlersList
- * @param {?Object} handlerOptions
- * @param {!puppeteer.Page} page
- * @param {!function} resolve
- * @param {string} version
- * @return {Promise}
- */
-async function setupAdditionalHandlers(
- handlersList,
- handlerOptions,
- page,
- resolve,
- version
-) {
- switch (handlerOptions.handlerName) {
- case 'adsHandler':
- setupAdRequestHandler(handlersList, version);
- setupAnalyticsHandler(handlersList, handlerOptions, resolve);
- break;
- case 'analyticsHandler':
- setupAnalyticsHandler(handlersList, handlerOptions, resolve);
- break;
- case 'defaultHandler':
- default:
- await setupMeasurement(page);
- break;
- }
-}
-
-/**
- * Send each intercepted request to all handlers in list.
- * Takes care of continuing the request, if none of the
- * handlers respond/abort the request.
- *
- * @param {!Array} handlersList
- * @param {puppeteer.Page} page
- */
-function startRequestListener(handlersList, page) {
- page.on('request', async (interceptedRequest) => {
- let requestHandled = false;
- for (let i = 0; i < handlersList.length; i++) {
- const curr = await handlersList[i](interceptedRequest);
- requestHandled = requestHandled || curr;
- }
- if (!requestHandled) {
- interceptedRequest.continue();
- }
- });
-}
-
-/**
- * Return metrics based on handler
- *
- * @param {?Object} handlerOptions
- * @param {puppeteer.Page} page
- * @return {!Promise}
- */
-async function addHandlerMetric(handlerOptions, page) {
- switch (handlerOptions.handlerName) {
- case 'adsHandler':
- case 'analyticsHandler':
- return getAnalyticsMetrics(handlerOptions);
- case 'defaultHandler':
- default:
- return readMetrics(page);
- }
-}
-
-/**
- * Writes measurements to ./results.json
- *
- * @param {string} url
- * @param {string} version
- * @param {*} metrics
- */
-function writeMetrics(url, version, metrics) {
- let results = {};
-
- if (fs.existsSync(RESULTS_PATH)) {
- results = fs.readJson(RESULTS_PATH);
- }
-
- if (!results[url]) {
- results[url] = {[CONTROL]: [], [EXPERIMENT]: []};
- }
-
- results[url][version].push(metrics);
-
- fs.writeFileSync(RESULTS_PATH, JSON.stringify(results));
-}
-
-/**
- * Opens Chrome, loads the URL from local file cache, and collects
- * metrics for the specified URL and version
- *
- * @param {string} url
- * @param {string} version "control" or "experiment"
- * @param {!Object} config
- * @return {Promise}
- */
-async function measureDocument(url, version, config) {
- const browser = await puppeteer.launch({
- headless: config.headless,
- devtools: config.devtools,
- args: [
- '--allow-file-access-from-files',
- '--enable-blink-features=LayoutInstabilityAPI',
- '--disable-web-security',
- ],
- });
-
- const page = await browser.newPage();
- const handlerOptionsForUrl = {...config.urlToHandlers[url]};
- const handlersList = [];
- const {resolve, timeoutPromise} =
- setupDelayBasedOnHandlerOptions(handlerOptionsForUrl);
- await page.setCacheEnabled(false);
- await page.setRequestInterception(true);
- setupDefaultHandlers(handlersList, version);
- await setupAdditionalHandlers(
- handlersList,
- handlerOptionsForUrl,
- page,
- resolve,
- version
- );
- startRequestListener(handlersList, page);
- try {
- await page.goto(`file:${urlToCachePath(url, version)}`, {
- waitUntil: 'networkidle0',
- });
- } catch {
- // site did not load
- await browser.close();
- return;
- }
-
- await timeoutPromise;
- const metrics = await addHandlerMetric(handlerOptionsForUrl, page);
- writeMetrics(url, version, metrics);
- await browser.close();
-}
-
-/**
- * Loads cached local copies of the URLs in Chrome with Puppeteer and
- * runs a script on the page to collect performance metrics. Saves
- * performance metrics to results.json in this directory.
- *
- * @param {!Array} urls
- * @param {!Object} config
- * @return {Promise} Fulfills when all URLs have been measured
- */
-async function measureDocuments(urls, config) {
- try {
- fs.unlinkSync(RESULTS_PATH);
- } catch {} // file does not exist (first run)
-
- // Make an array of tasks to be executed
- const tasks = urls.flatMap((url) =>
- Array.from({length: config.runs}).flatMap(() => [
- measureDocument.bind(null, url, CONTROL, config),
- measureDocument.bind(null, url, EXPERIMENT, config),
- ])
- );
-
- const startTime = Date.now();
- /**
- * @return {number}
- */
- function timeLeft() {
- const elapsed = (Date.now() - startTime) / 1000;
- const secondsPerTask = elapsed / i;
- return Math.floor(secondsPerTask * (tasks.length - i));
- }
-
- log(
- green('Taking performance measurements'),
- cyan(tasks.length),
- green('times...')
- );
-
- // Excecute the tasks serially
- let i = 0;
- for (const task of tasks) {
- if (!argv.quiet) {
- log(`Progress: ${i++}/${tasks.length}. ${timeLeft()} seconds left.`);
- } else {
- process.stdout.write('.');
- }
- await task();
- }
-}
-
-module.exports = measureDocuments;
diff --git a/build-system/tasks/performance/package-lock.json b/build-system/tasks/performance/package-lock.json
deleted file mode 100644
index 7ea361ce87af..000000000000
--- a/build-system/tasks/performance/package-lock.json
+++ /dev/null
@@ -1,2534 +0,0 @@
-{
- "name": "amp-performance",
- "version": "0.1.0",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "name": "amp-performance",
- "version": "0.1.0",
- "devDependencies": {
- "chai": "4.3.4",
- "mocha": "9.1.3",
- "puppeteer": "11.0.0"
- }
- },
- "node_modules/@types/node": {
- "version": "16.11.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz",
- "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==",
- "dev": true,
- "optional": true
- },
- "node_modules/@types/yauzl": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
- "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@ungap/promise-all-settled": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
- "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
- "dev": true
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dev": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "node_modules/assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "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==",
- "dev": true
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "dev": true,
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "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==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/chai": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
- "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
- "dev": true,
- "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.5"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/chalk/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
- "dev": true,
- "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.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "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=",
- "dev": true
- },
- "node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/debug/node_modules/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
- },
- "node_modules/decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "dependencies": {
- "type-detect": "^4.0.0"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/devtools-protocol": {
- "version": "0.0.901419",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz",
- "integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ==",
- "dev": true
- },
- "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==",
- "dev": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/extract-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
- "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "dev": true,
- "dependencies": {
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "extract-zip": "cli.js"
- },
- "engines": {
- "node": ">= 10.17.0"
- },
- "optionalDependencies": {
- "@types/yauzl": "^2.9.1"
- }
- },
- "node_modules/fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
- "dev": true,
- "dependencies": {
- "pend": "~1.2.0"
- }
- },
- "node_modules/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,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true,
- "bin": {
- "flat": "cli.js"
- }
- },
- "node_modules/fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "dev": true
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "node_modules/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,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-func-name": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
- "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "dev": true,
- "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/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true,
- "engines": {
- "node": ">=4.x"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dev": true,
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "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==",
- "dev": true
- },
- "node_modules/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,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/mkdirp-classic": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
- "dev": true
- },
- "node_modules/mocha": {
- "version": "9.1.3",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
- "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
- "dev": true,
- "dependencies": {
- "@ungap/promise-all-settled": "1.1.2",
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.2",
- "debug": "4.3.2",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.1.7",
- "growl": "1.10.5",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "3.0.4",
- "ms": "2.1.3",
- "nanoid": "3.1.25",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "which": "2.0.2",
- "workerpool": "6.1.5",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
- },
- "bin": {
- "_mocha": "bin/_mocha",
- "mocha": "bin/mocha"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mochajs"
- }
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/nanoid": {
- "version": "3.1.25",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
- "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
- "dev": true,
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
- "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
- "dev": true,
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "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=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
- "dev": true
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/puppeteer": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-11.0.0.tgz",
- "integrity": "sha512-6rPFqN1ABjn4shgOICGDBITTRV09EjXVqhDERBDKwCLz0UyBxeeBH6Ay0vQUJ84VACmlxwzOIzVEJXThcF3aNg==",
- "dev": true,
- "hasInstallScript": true,
- "dependencies": {
- "debug": "4.3.2",
- "devtools-protocol": "0.0.901419",
- "extract-zip": "2.0.1",
- "https-proxy-agent": "5.0.0",
- "node-fetch": "2.6.5",
- "pkg-dir": "4.2.0",
- "progress": "2.0.3",
- "proxy-from-env": "1.1.0",
- "rimraf": "3.0.2",
- "tar-fs": "2.1.1",
- "unbzip2-stream": "1.4.3",
- "ws": "8.2.3"
- },
- "engines": {
- "node": ">=10.18.1"
- }
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/tar-fs": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
- "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
- "dev": true,
- "dependencies": {
- "chownr": "^1.1.1",
- "mkdirp-classic": "^0.5.2",
- "pump": "^3.0.0",
- "tar-stream": "^2.1.4"
- }
- },
- "node_modules/tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "dev": true,
- "dependencies": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
- },
- "node_modules/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,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
- "dev": true
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unbzip2-stream": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
- "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
- "dev": true,
- "dependencies": {
- "buffer": "^5.2.1",
- "through": "^2.3.8"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
- "dev": true
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "dev": true,
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/workerpool": {
- "version": "6.1.5",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
- "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
- "dev": true
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "node_modules/ws": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
- "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
- "dev": true,
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "dependencies": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
- "dev": true,
- "dependencies": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- },
- "dependencies": {
- "@types/node": {
- "version": "16.11.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.6.tgz",
- "integrity": "sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==",
- "dev": true,
- "optional": true
- },
- "@types/yauzl": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
- "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==",
- "dev": true,
- "optional": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@ungap/promise-all-settled": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
- "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
- "dev": true
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "requires": {
- "debug": "4"
- }
- },
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true
- },
- "bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "dev": true,
- "requires": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "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-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
- "dev": true
- },
- "camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
- "dev": true
- },
- "chai": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
- "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
- "dev": true,
- "requires": {
- "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.5"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "check-error": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
- "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
- "dev": true
- },
- "chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "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
- },
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- },
- "dependencies": {
- "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
- }
- }
- },
- "decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
- },
- "deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "devtools-protocol": {
- "version": "0.0.901419",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz",
- "integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ==",
- "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==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true
- },
- "escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true
- },
- "extract-zip": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
- "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
- "dev": true,
- "requires": {
- "@types/yauzl": "^2.9.1",
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- }
- },
- "fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
- "dev": true,
- "requires": {
- "pend": "~1.2.0"
- }
- },
- "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-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
- },
- "fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "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
- },
- "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
- },
- "get-func-name": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
- "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
- "dev": true
- },
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "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.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dev": true,
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "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-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": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "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-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
- },
- "is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.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"
- }
- },
- "mkdirp-classic": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
- "dev": true
- },
- "mocha": {
- "version": "9.1.3",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
- "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
- "dev": true,
- "requires": {
- "@ungap/promise-all-settled": "1.1.2",
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.2",
- "debug": "4.3.2",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.1.7",
- "growl": "1.10.5",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "3.0.4",
- "ms": "2.1.3",
- "nanoid": "3.1.25",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "which": "2.0.2",
- "workerpool": "6.1.5",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "nanoid": {
- "version": "3.1.25",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
- "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
- "dev": true
- },
- "node-fetch": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
- "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
- "dev": true,
- "requires": {
- "whatwg-url": "^5.0.0"
- }
- },
- "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
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "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
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "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
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true
- },
- "pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- }
- }
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
- "proxy-from-env": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
- "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
- "dev": true
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "puppeteer": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-11.0.0.tgz",
- "integrity": "sha512-6rPFqN1ABjn4shgOICGDBITTRV09EjXVqhDERBDKwCLz0UyBxeeBH6Ay0vQUJ84VACmlxwzOIzVEJXThcF3aNg==",
- "dev": true,
- "requires": {
- "debug": "4.3.2",
- "devtools-protocol": "0.0.901419",
- "extract-zip": "2.0.1",
- "https-proxy-agent": "5.0.0",
- "node-fetch": "2.6.5",
- "pkg-dir": "4.2.0",
- "progress": "2.0.3",
- "proxy-from-env": "1.1.0",
- "rimraf": "3.0.2",
- "tar-fs": "2.1.1",
- "unbzip2-stream": "1.4.3",
- "ws": "8.2.3"
- }
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "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
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- },
- "serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "tar-fs": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
- "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
- "dev": true,
- "requires": {
- "chownr": "^1.1.1",
- "mkdirp-classic": "^0.5.2",
- "pump": "^3.0.0",
- "tar-stream": "^2.1.4"
- }
- },
- "tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "dev": true,
- "requires": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- }
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "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"
- }
- },
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
- "dev": true
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
- },
- "unbzip2-stream": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
- "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
- "dev": true,
- "requires": {
- "buffer": "^5.2.1",
- "through": "^2.3.8"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
- "dev": true
- },
- "whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "dev": true,
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "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"
- }
- },
- "workerpool": {
- "version": "6.1.5",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
- "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
- "dev": true
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "ws": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
- "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
- "dev": true,
- "requires": {}
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true
- },
- "yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "requires": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- }
- },
- "yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
- "dev": true,
- "requires": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- }
- }
-}
diff --git a/build-system/tasks/performance/package.json b/build-system/tasks/performance/package.json
deleted file mode 100644
index 95bea1951ffb..000000000000
--- a/build-system/tasks/performance/package.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "private": true,
- "name": "amp-performance",
- "version": "0.1.0",
- "description": "Dev dependencies used by `amp performance`",
- "devDependencies": {
- "chai": "4.3.4",
- "mocha": "9.1.3",
- "puppeteer": "11.0.0"
- }
-}
diff --git a/build-system/tasks/performance/print-report.js b/build-system/tasks/performance/print-report.js
deleted file mode 100644
index 115cfb3c98be..000000000000
--- a/build-system/tasks/performance/print-report.js
+++ /dev/null
@@ -1,117 +0,0 @@
-const fs = require('fs');
-const {CONTROL, EXPERIMENT, RESULTS_PATH} = require('./helpers');
-const {cyan} = require('kleur/colors');
-const {percent, trimmedMean} = require('./stats');
-
-const HEADER_COLUMN = 26;
-const BODY_COLUMN = 12;
-const FULL_TABLE = 68;
-
-/**
- * Generates header lines to be printed to the console for url
- *
- * @param {string} url
- * @return {Array} lines
- */
-const headerLines = (url) => [
- '\nPAGE LOAD METRICS\n',
- `${cyan(url)}\n\n`,
- [
- 'METRIC'.padEnd(HEADER_COLUMN),
- 'BRANCH'.padEnd(BODY_COLUMN),
- 'PRODUCTION'.padEnd(BODY_COLUMN),
- 'CHANGE'.padEnd(BODY_COLUMN),
- ].join(' | '),
- `\n${''.padEnd(FULL_TABLE, '-')}\n`,
-];
-
-/**
- * Generates row to be printed to the console for the metric
- *
- * @param {string} metric
- * @param {Array<*>} results
- * @return {Array} lines
- */
-function linesForMetric(metric, results) {
- const control = trimmedMean(results[CONTROL], metric);
- const experiment = trimmedMean(results[EXPERIMENT], metric);
- const percentage = percent(control, experiment);
-
- return [
- [
- metric.padEnd(HEADER_COLUMN),
- experiment.toString().padEnd(BODY_COLUMN),
- control.toString().padEnd(BODY_COLUMN),
- percentage == null ? 'n/a' : `${percentage}%`,
- ].join(' | '),
- `\n${''.padEnd(FULL_TABLE, '-')}\n`,
- ];
-}
-
-/**
- *
- * @param {string[]} urls
- */
-function printReport(urls) {
- const results = JSON.parse(fs.readFileSync(RESULTS_PATH, 'utf-8'));
-
- urls.forEach((url) => {
- const keys = Object.keys(results[url][CONTROL][0]);
- let lines = [];
- lines = [...lines, ...headerLines(url)];
- lines = [...lines, ...keys.flatMap((m) => linesForMetric(m, results[url]))];
- console /* OK */
- .log(...lines);
- });
-}
-
-/**
- * Organizes a page's metrics for getReport()
- */
-class PageMetrics {
- url;
- metrics;
-
- /**
- * @param {string} url
- */
- constructor(url) {
- this.url = url;
- this.metrics = new Map();
- }
-
- /**
- *
- * @param {string} metric
- * @param {number} experiment
- * @param {number} control
- */
- set(metric, experiment, control) {
- this.metrics.set(metric, {experiment, control});
- }
-}
-
-/**
- * Gets report in the form of metrics per page
- * @param {Array} urls
- * @return {Array} report
- */
-function getReport(urls) {
- const raw = JSON.parse(fs.readFileSync(RESULTS_PATH, 'utf-8'));
- const report = [];
- urls.forEach((url) => {
- const results = raw[url];
- const pageMetrics = new PageMetrics(url);
- const metrics = Object.keys(results[CONTROL][0]);
- metrics.forEach((metric) => {
- const control = trimmedMean(results[CONTROL], metric);
- const experiment = trimmedMean(results[EXPERIMENT], metric);
- pageMetrics.set(metric, experiment, control);
- });
- report.push(pageMetrics);
- });
-
- return report;
-}
-
-module.exports = {getReport, printReport};
diff --git a/build-system/tasks/performance/rewrite-analytics-tags.js b/build-system/tasks/performance/rewrite-analytics-tags.js
deleted file mode 100644
index 85b922906246..000000000000
--- a/build-system/tasks/performance/rewrite-analytics-tags.js
+++ /dev/null
@@ -1,106 +0,0 @@
-const fs = require('fs');
-const {
- CONTROL,
- EXPERIMENT,
- getLocalVendorConfig,
- urlToCachePath,
-} = require('./helpers');
-
-/**
- * Return local vendor config.
- *
- * @param {string} vendor
- * @return {Promise}
- */
-async function getVendorConfig(vendor) {
- return JSON.parse(await getLocalVendorConfig(vendor));
-}
-
-/**
- * Fetch the vendor config and merge it with inline config.
- * Work around for fetching real vendor config that gets blocked
- * by AMP-analytics. Order of merging matters. Uses local config
- * for both CONTROL and EXPERIMENT.
- *
- * @param {Element} tag
- * @param {Object} script
- * @return {Promise}
- */
-async function maybeMergeAndRemoveVendorConfig(tag, script) {
- const vendor = tag.getAttribute('type');
- if (vendor) {
- tag.removeAttribute('type');
- const vendorConfig = await getVendorConfig(vendor);
- // TODO (micajuineho) replace with analytics/config.js merge objects
- return Object.assign(vendorConfig, script);
- }
- return script;
-}
-
-/**
- * Adds extraUrlParam in analytics inline config and
- * fetches and merges local vendor config.
- *
- * @param {string} url
- * @param {string} version
- * @param {?object} extraUrlParams
- * @return {Promise}
- */
-async function alterAnalyticsTags(url, version, extraUrlParams) {
- const cachePath = urlToCachePath(url, version);
- const document = fs.readFileSync(cachePath);
- const {JSDOM} = await import('jsdom'); // Lazy-imported to speed up task loading.
- const dom = new JSDOM(document);
-
- const analyticsTags = Array.from(
- dom.window.document.querySelectorAll('amp-analytics')
- );
- for (const tag of analyticsTags) {
- const scriptTag = tag.querySelector('script');
- let script = {};
- if (scriptTag) {
- tag.removeChild(scriptTag);
- script = JSON.parse(scriptTag./*OK*/ innerHTML);
- }
- script.extraUrlParams = script.extraUrlParams || {};
- Object.assign(script.extraUrlParams, extraUrlParams);
- script = await maybeMergeAndRemoveVendorConfig(tag, script);
- const newScriptTag = dom.window.document.createElement('script');
- newScriptTag.textContent = JSON.stringify(script);
- newScriptTag.setAttribute('type', 'application/json');
- tag.appendChild(newScriptTag);
- }
-
- fs.writeFileSync(cachePath, dom.serialize());
-}
-
-/**
- * Rewrite analytics configs for each document
- * downloaded from the analytics or ads handler urls
- * @param {?Object} handlers
- * @return {Promise}
- */
-async function rewriteAnalyticsConfig(handlers) {
- const handlerPromises = [];
- handlers.forEach((handler) => {
- const {adsUrls, extraUrlParam, handlerName, urls} = handler;
- if (handlerName !== 'analyticsHandler' && handlerName !== 'adsHandler') {
- return;
- }
-
- if (adsUrls) {
- urls.push(...adsUrls);
- }
-
- const handlerPromise = urls.flatMap((url) => [
- alterAnalyticsTags(url, CONTROL, extraUrlParam),
- alterAnalyticsTags(url, EXPERIMENT, extraUrlParam),
- ]);
-
- handlerPromises.push(handlerPromise);
- });
-
- return Promise.all(handlerPromises);
-}
-
-module.exports = rewriteAnalyticsConfig;
diff --git a/build-system/tasks/performance/rewrite-script-tags.js b/build-system/tasks/performance/rewrite-script-tags.js
deleted file mode 100644
index 412c7c864fb0..000000000000
--- a/build-system/tasks/performance/rewrite-script-tags.js
+++ /dev/null
@@ -1,106 +0,0 @@
-const fs = require('fs');
-const {
- CDN_URL,
- CONTROL,
- DEFAULT_EXTENSIONS,
- EXPERIMENT,
- INABOX_PATH,
- LOCAL_PATH_REGEXP,
- V0_PATH,
- copyToCache,
- downloadToDisk,
- getLocalPathFromExtension,
- urlToCachePath,
-} = require('./helpers');
-
-/**
- * Lookup URL from cache and rewrite URLs to build from working branch
- *
- * @param {string} url
- * @return {Promise}
- */
-async function useLocalScripts(url) {
- const cachePath = urlToCachePath(url, EXPERIMENT);
- const document = fs.readFileSync(cachePath);
- const {JSDOM} = await import('jsdom'); // Lazy-imported to speed up task loading.
- const dom = new JSDOM(document);
-
- const scripts = Array.from(dom.window.document.querySelectorAll('script'));
- for (const script of scripts) {
- const matchArray = script.src.match(LOCAL_PATH_REGEXP);
- // These cases handle real world websites and locally hosted websites
- if (script.src.startsWith(CDN_URL)) {
- const split = script.src.split(CDN_URL)[1];
- script.src = await copyToCache(split);
- } else if (matchArray) {
- script.src = await copyToCache(matchArray[1]);
- } else if (script.src === V0_PATH) {
- script.src = await copyToCache('v0.js');
- } else if (script.src === INABOX_PATH) {
- script.src = await copyToCache('amp4ads-v0.js');
- }
- }
-
- fs.writeFileSync(cachePath, dom.serialize());
-}
-
-/**
- * Lookup URL from cache and download scripts to cache and rewrite URLs to local
- * copy
- *
- * @param {string} url
- * @return {Promise}
- */
-async function useRemoteScripts(url) {
- const cachePath = urlToCachePath(url, CONTROL);
- const document = fs.readFileSync(cachePath);
- const {JSDOM} = await import('jsdom'); // Lazy-imported to speed up task loading.
- const dom = new JSDOM(document);
-
- const scripts = Array.from(dom.window.document.querySelectorAll('script'));
- for (const script of scripts) {
- const matchArray = script.src.match(LOCAL_PATH_REGEXP);
- // These cases handle real world websites and locally hosted websites
- if (script.src.startsWith(CDN_URL)) {
- script.src = await downloadToDisk(script.src);
- } else if (matchArray) {
- script.src = await downloadToDisk(CDN_URL + matchArray[1]);
- } else if (script.src === V0_PATH) {
- script.src = await downloadToDisk(CDN_URL + 'v0.js');
- } else if (script.src === INABOX_PATH) {
- script.src = await downloadToDisk(CDN_URL + 'amp4ads-v0.js');
- }
- }
-
- fs.writeFileSync(cachePath, dom.serialize());
-}
-
-/**
- * Download default extensions that are not explicility stated by script tags in
- * the HTML.
- * @return {Promise}
- */
-async function downloadDefaultExtensions() {
- return Promise.all(
- DEFAULT_EXTENSIONS.flatMap((extension) => {
- const localPath = getLocalPathFromExtension(extension);
- const cdnUrl = CDN_URL + localPath;
- return [downloadToDisk(cdnUrl), copyToCache(localPath)];
- })
- );
-}
-
-/**
- * Rewrite script tags for each document downloaded from the urls
- *
- * @param {!Array} urls
- * @return {Promise}
- */
-async function rewriteScriptTags(urls) {
- await downloadDefaultExtensions();
- return Promise.all(
- urls.flatMap((url) => [useLocalScripts(url), useRemoteScripts(url)])
- );
-}
-
-module.exports = rewriteScriptTags;
diff --git a/build-system/tasks/performance/run-tests.js b/build-system/tasks/performance/run-tests.js
deleted file mode 100644
index 96d0a98929d3..000000000000
--- a/build-system/tasks/performance/run-tests.js
+++ /dev/null
@@ -1,17 +0,0 @@
-const Mocha = require('mocha');
-const path = require('path');
-const TEST_SUITE_PATH = 'build-system/tasks/performance/test-suite.js';
-
-/**
- * @param {function} resolver
- */
-function runTests(resolver) {
- const mocha = new Mocha();
- mocha.addFile(path.join('./', TEST_SUITE_PATH));
- mocha.run(async (failures) => {
- process.exitCode = failures ? 1 : 0;
- await resolver();
- });
-}
-
-module.exports = runTests;
diff --git a/build-system/tasks/performance/stats.js b/build-system/tasks/performance/stats.js
deleted file mode 100644
index 542f6a0ff741..000000000000
--- a/build-system/tasks/performance/stats.js
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * Get the average of an array
- *
- * @param {Array} array
- * @return {number} average
- */
-const average = (array) => {
- if (!array || array.length == 0) {
- return 0;
- }
- return array.reduce((a, b) => a + b) / array.length;
-};
-
-/**
- * Sort an array from low to high
- *
- * @param {Array} array
- * @return {Array} array
- */
-const sort = (array) => {
- return array.sort((a, b) => a - b);
-};
-
-/**
- * Get the median of a sorted array
- *
- * @param {Array} array
- * @return {number} median
- */
-const median = (array) => {
- sort(array);
- const {length} = array;
- const mid = Math.floor(length / 2);
- const isEven = length % 2 == 0;
- if (isEven) {
- return average([array[mid], array[mid - 1]]);
- }
- return array[mid];
-};
-
-/**
- * Get the median of the lower half of a sorted array
- *
- * @param {Array} array
- * @return {number} q1
- */
-const q1 = (array) => {
- sort(array);
- const mid = Math.ceil(array.length / 2);
- const half = array.slice(0, mid);
- return median(half);
-};
-
-/**
- * Get the median of the upper half of a sorted array
- *
- * @param {Array} array
- * @return {number} q3
- */
-const q3 = (array) => {
- sort(array);
- const mid = Math.floor(array.length / 2);
- const half = array.slice(mid);
- return median(half);
-};
-
-/**
- * Get the percentage change between two numbers,
- * or returns null if invalid
- *
- * @param {number} a
- * @param {number} b
- * @return {?number} percentage change or null
- */
-function percent(a, b) {
- if (a === 0) {
- return b === 0 ? null : Math.round((a / b) * 100) - 100;
- } else {
- return 100 - Math.round((b / a) * 100);
- }
-}
-
-/**
- * Given an array, identify outliers using the Tukey method,
- * and return the average after removing them, which is
- * also known as the interquartile mean.
- *
- * @param {Array<*>} results
- * @param {string} metric
- * @return {number}
- */
-function trimmedMean(results, metric) {
- const array = results.map((a) => a[metric]);
- const stats = {
- q1: q1(array),
- q3: q3(array),
- };
- const lowerFence = stats.q1 - 1.5 * (stats.q3 - stats.q1);
- const upperFence = stats.q3 + 1.5 * (stats.q3 - stats.q1);
- const trimmedArray = array.filter((a) => a >= lowerFence && a <= upperFence);
-
- return Math.round(average(trimmedArray));
-}
-
-module.exports = {
- percent,
- trimmedMean,
-};
diff --git a/build-system/tasks/performance/test-suite.js b/build-system/tasks/performance/test-suite.js
deleted file mode 100644
index 4d884ae4cb82..000000000000
--- a/build-system/tasks/performance/test-suite.js
+++ /dev/null
@@ -1,20 +0,0 @@
-const argv = require('minimist')(process.argv.slice(2));
-const loadConfig = require('./load-config');
-const {expect} = require('chai');
-const {getReport} = require('./print-report');
-// Set threshold to 1.05 by default
-const DEFAULT_THRESHOLD = 1.05;
-const THRESHOLD = argv.threshold ? argv.threshold + 1 : DEFAULT_THRESHOLD;
-
-const {urlToHandlers} = loadConfig();
-const reports = getReport(Object.keys(urlToHandlers));
-
-reports.forEach((report) => {
- describe(`${report.url}`, () => {
- report.metrics.forEach(({control, experiment}, name) => {
- it(`${name}`, () => {
- expect(experiment).to.be.at.most(control * THRESHOLD);
- });
- });
- });
-});
diff --git a/build-system/tasks/pr-deploy-bot-utils.js b/build-system/tasks/pr-deploy-bot-utils.js
deleted file mode 100644
index 9a037d85b3e1..000000000000
--- a/build-system/tasks/pr-deploy-bot-utils.js
+++ /dev/null
@@ -1,86 +0,0 @@
-'use strict';
-
-const fetch = require('node-fetch');
-const fs = require('fs-extra');
-const path = require('path');
-const {ciBuildSha, circleciBuildNumber} = require('../common/ci');
-const {cyan} = require('kleur/colors');
-const {getLoggingPrefix, logWithoutTimestamp} = require('../common/logging');
-const {replaceUrls: replaceUrlsAppUtil} = require('../server/app-utils');
-
-const hostNamePrefix = 'https://storage.googleapis.com/amp-test-website-1';
-const prDeployBotBaseUrl =
- 'https://amp-pr-deploy-bot.appspot.com/v0/pr-deploy/';
-
-/**
- * @param {string} dest
- * @return {Promise}
- */
-async function walk(dest) {
- const filelist = [];
- const files = await fs.readdir(dest);
-
- for (let i = 0; i < files.length; i++) {
- const file = `${dest}/${files[i]}`;
-
- fs.statSync(file).isDirectory()
- ? Array.prototype.push.apply(filelist, await walk(file))
- : filelist.push(file);
- }
-
- return filelist;
-}
-
-/**
- * @return {string}
- */
-function getBaseUrl() {
- return `${hostNamePrefix}/amp_nomodule_${ciBuildSha()}`;
-}
-
-/**
- * @param {string} filePath
- * @return {Promise}
- */
-async function replace(filePath) {
- const data = await fs.readFile(filePath, 'utf8');
- const hostName = getBaseUrl();
- const result = replaceUrlsAppUtil('minified', data, hostName);
-
- await fs.writeFile(filePath, result, 'utf8');
-}
-
-/**
- * @param {string} dir
- * @return {Promise}
- */
-async function replaceUrls(dir) {
- const files = await walk(dir);
- const promises = files
- .filter((fileName) => path.extname(fileName) == '.html')
- .map((file) => replace(file));
- await Promise.all(promises);
-}
-
-/**
- * @param {string} result
- * @return {Promise}
- */
-async function signalPrDeployUpload(result) {
- const loggingPrefix = getLoggingPrefix();
- logWithoutTimestamp(
- `${loggingPrefix} Reporting`,
- cyan(result),
- 'to the pr-deploy GitHub App...'
- );
- const sha = ciBuildSha();
- const maybeJobId = result == 'success' ? `/${circleciBuildNumber()}` : '';
- const url = `${prDeployBotBaseUrl}headshas/${sha}/${result}${maybeJobId}`;
- await fetch(url, {method: 'POST'});
-}
-
-module.exports = {
- getBaseUrl,
- replaceUrls,
- signalPrDeployUpload,
-};
diff --git a/build-system/tasks/prepend-global/index.js b/build-system/tasks/prepend-global/index.js
index 71cafca407cb..c9ba5a7a5d6c 100644
--- a/build-system/tasks/prepend-global/index.js
+++ b/build-system/tasks/prepend-global/index.js
@@ -198,7 +198,7 @@ async function getConfig(
* Returns an empty string if no AMP_CONFIG is necessary.
*
* @param {string} filename the file being operated on.
- * @param {Object} options
+ * @param {object} options
* @return {!Promise}
*/
async function getAmpConfigForFile(filename, options) {
diff --git a/build-system/tasks/prettify.js b/build-system/tasks/prettify.js
index 877555ccf6f1..65f246fdb6bf 100644
--- a/build-system/tasks/prettify.js
+++ b/build-system/tasks/prettify.js
@@ -65,7 +65,7 @@ async function printErrorWithSuggestedFixes(file) {
log(`Suggested fixes for ${cyan(file)}:`);
const options = await getOptions(file);
const original = fs.readFileSync(file).toString();
- const fixed = prettier.format(original, options);
+ const fixed = await prettier.format(original, options);
const fixedFile = `${tempDir}/${file}`;
fs.ensureDirSync(path.dirname(fixedFile));
fs.writeFileSync(fixedFile, fixed);
@@ -114,7 +114,7 @@ async function runPrettify(filesToCheck) {
const options = await getOptions(file);
const original = fs.readFileSync(file).toString();
if (argv.fix) {
- const fixed = prettier.format(original, options);
+ const fixed = await prettier.format(original, options);
if (fixed != original) {
fs.writeFileSync(file, fixed);
}
diff --git a/build-system/tasks/release/index.js b/build-system/tasks/release/index.js
index c173ec7a057a..c5c79680dc2e 100644
--- a/build-system/tasks/release/index.js
+++ b/build-system/tasks/release/index.js
@@ -32,7 +32,6 @@ let DistFlavorDef;
const argv = require('minimist')(process.argv.slice(2));
/** @type {ExperimentsConfigDef} */
const experimentsConfig = require('../../global-configs/experiments-config.json');
-const fetch = require('node-fetch');
const fs = require('fs-extra');
const klaw = require('klaw');
const path = require('path');
@@ -248,6 +247,9 @@ async function compileDistFlavors_(flavorType, command, tempDir) {
if (argv.esm) {
command += ' --esm';
}
+ if (argv.full_sourcemaps) {
+ command += ' --full_sourcemaps';
+ }
log('Compiling flavor', green(flavorType), 'using', cyan(command));
execOrDie('amp clean --exclude release');
@@ -316,10 +318,19 @@ async function fetchAmpSw_(flavorType, tempDir) {
filter: (path) => path.startsWith('package/dist'),
strip: 2, // to strip "package/dist/".
});
- (await fetch(ampSwTarballUrl)).body.pipe(tarWritableStream);
- await new Promise((resolve) => {
- tarWritableStream.on('end', resolve);
- });
+ const tarballResponse = await fetch(ampSwTarballUrl);
+ if (!tarballResponse.body) {
+ throw new Error(`Failed to fetch ${ampSwTarballUrl}`);
+ }
+ const reader = tarballResponse.body.getReader();
+ while (true) {
+ const {done, value} = await reader.read();
+ if (done) {
+ break;
+ }
+ tarWritableStream.write(value);
+ }
+ tarWritableStream.end();
await fs.copy(ampSwTempDir, path.join(tempDir, flavorType, 'dist/sw'));
@@ -464,7 +475,9 @@ async function prependConfig_(outputDir) {
const channelPartialConfig = {
v: rtvNumber,
type: channelConfig.type,
- ...require(`../../global-configs/${channelConfig.configBase}-config.json`),
+ ...require(
+ `../../global-configs/${channelConfig.configBase}-config.json`
+ ),
...overlayConfig,
};
@@ -483,7 +496,8 @@ async function prependConfig_(outputDir) {
...target.config,
});
- const contents = await fs.readFile(targetPath, 'utf-8');
+ const contents = await fs.readFile(targetPath, 'utf8');
+
return fs.writeFile(
targetPath,
`self.AMP_CONFIG=${channelConfig};/*AMP_CONFIG*/${contents}`
@@ -518,7 +532,7 @@ async function populateNetWildcard_(tempDir, outputDir) {
* @return {Promise}
*/
async function cleanup_(tempDir) {
- await fs.rmdir(tempDir, {recursive: true});
+ await fs.rm(tempDir, {recursive: true});
logSeparator_();
}
@@ -590,6 +604,7 @@ release.flags = {
'flavor':
'Limit this release build to a single flavor (can be used to split the release work across multiple build machines)',
'esm': 'Compile with --esm if true, without --esm if false or unspecified',
+ 'full_sourcemaps': 'Include source code content in sourcemaps',
'dedup_v0':
'Removes duplicate copies of the v0/ subdirectory when they are the same files as those in the Stable (01-prefixed) channel',
};
diff --git a/build-system/tasks/remap-dependencies-plugin/remap-dependencies.js b/build-system/tasks/remap-dependencies-plugin/remap-dependencies.js
new file mode 100644
index 000000000000..613344b56fc9
--- /dev/null
+++ b/build-system/tasks/remap-dependencies-plugin/remap-dependencies.js
@@ -0,0 +1,110 @@
+const path = require('path');
+const {resolvePath} = require('../../babel-config/import-resolver');
+
+/**
+ * Generates a plugin to remap the dependencies of a JS bundle.
+ *
+ * `remaps` is an object where each entry indicates that the module identified by the key should be remapped to the module identified by the value.
+ * Modules (in key or value) can be local modules (js/jsx/ts/tsx files in the repo) or npm modules (in the node_modules at the root of the repo).
+ * Local modules must be declared as a relative-path, relative to repo root, with a leading './' (e.g './mod1.js'). They don't need a file extension.
+ * Keys can use regex syntax.
+ *
+ * `externals` is a list of strings representing import paths that should be external-ized
+ *
+ * `resolve` is function that will return the absolute path of a module given the import path, directory of the importer, and repo root
+ * @param {{remaps: Object, externals: Array, resolve: AmpResolve}} remapDependenciesPluginConfig
+ * @return {object}
+ */
+function remapDependenciesPlugin({externals, remaps, resolve}) {
+ const remapArr = Object.entries(remaps).map(([path, value]) => ({
+ regex: new RegExp(`^${path}(\\.[jt]sx?)?$`),
+ value,
+ }));
+ const rootDir = process.cwd();
+
+ return {
+ name: 'remap-dependencies',
+ setup(build) {
+ build.onResolve({filter: /.*/}, (args) =>
+ onResolveRemapDeps(
+ {
+ externals,
+ remapArr,
+ resolve,
+ rootDir,
+ },
+ args
+ )
+ );
+ },
+ };
+}
+
+/**
+ * Checks if the path that's being imported matches a declared remap.
+ * If import path matches, returns correct path with info on if it's an external.
+ * If not, returns undefined
+ * @param {{externals: string[], remapArr: Array<*>, resolve: AmpResolve, rootDir: string}} remapConfig
+ * @param {{resolveDir: string, path: string}} args
+ * @return {*}
+ */
+function onResolveRemapDeps({externals, remapArr, resolve, rootDir}, args) {
+ const {path: importPath, resolveDir} = args;
+
+ // Construct candidate for remapping
+ // If importing local module, must resolve module relative to repo-root and prefix with `./`
+ // because local modules listed in `remap` keys use relative paths from the repo-root
+ let dep;
+ if (importPath.startsWith('.')) {
+ const absPath = resolve(importPath, resolveDir, rootDir);
+ dep = `.${path.posix.sep}${path.posix.relative(rootDir, absPath)}`;
+ } else {
+ dep = importPath;
+ }
+
+ for (const {regex, value} of remapArr) {
+ if (!regex.test(dep)) {
+ continue;
+ }
+
+ const isExternal = externals.includes(value);
+ return {
+ // resolve value from rootDir in case value is a local module (local module routes are relative to repo root)
+ path: isExternal ? value : resolve(value, rootDir, rootDir),
+ external: isExternal,
+ };
+ }
+}
+
+/**
+ * @typedef {typeof ampResolve} AmpResolve
+ */
+
+/**
+ * Resolves mostly arbitrary import paths to (node or local) modules.
+ * Similar to require.resolve() but handles aliased paths and paths to non-js modules (jsx/ts/tsx).
+ *
+ * @param {string} importPath path to the import relative to importer
+ * @param {string} absResolveDir absolute path to directory of the importer
+ * @param {string} absRootDir absolute path to repo's root
+ * @return {string} absolute path to import
+ */
+function ampResolve(importPath, absResolveDir, absRootDir) {
+ const absImportPath = path.posix.join(absResolveDir, importPath);
+ const rootRelImportPath = path.posix.relative(absRootDir, absImportPath);
+ const babelResolvePath = resolvePath(rootRelImportPath, null);
+ if (babelResolvePath) {
+ return path.posix.join(absRootDir, babelResolvePath);
+ } else {
+ try {
+ return require.resolve(importPath);
+ } catch (e) {
+ return path.posix.resolve(importPath);
+ }
+ }
+}
+
+module.exports = {
+ remapDependenciesPlugin,
+ ampResolve,
+};
diff --git a/build-system/tasks/remap-dependencies-plugin/test-remap-dependencies.js b/build-system/tasks/remap-dependencies-plugin/test-remap-dependencies.js
new file mode 100644
index 000000000000..fd23bdd51d00
--- /dev/null
+++ b/build-system/tasks/remap-dependencies-plugin/test-remap-dependencies.js
@@ -0,0 +1,254 @@
+'use strict';
+
+const test = require('ava');
+const sinon = require('sinon');
+const path = require('path');
+const {remapDependenciesPlugin} = require('./remap-dependencies');
+
+/**
+ * slightly complex but mocks ampResolve() which is itself complex
+ * handles resolving node modules by returning input
+ * handles resolving local paths by
+ * ensuring it's prefixed with './'
+ * ensuring it resolves barrel files (ie. directory imports) by
+ * suffixing filepath with '/index' and appropriate file extension
+ */
+const resolveMock = sinon.fake((s, resolveDir, unusedAbsRootDir) => {
+ if (s.startsWith('#')) {
+ // do nothing
+ // technically ampResolve handles aliased paths, but I'm not mocking it since this functionality isn't actually used in the remap-dependencies plugin
+ // esbuild should have already resolved path aliases because it adheres to tsconfig.compilerOptions.paths config (https://esbuild.github.io/content-types/#tsconfig-json)
+ } else if (s.startsWith('node-mod-')) {
+ // return input if it's a node module (use special "node-mod-" prefix in tests to indicate node module)
+ // later we will assert that we resolved to the node-mod-
+ return s;
+ } else {
+ // handle directory imports with barrel file and appropriate file extension to emulate behavior of resolvePath
+ s = path.posix.join(resolveDir, s);
+ if (s.match(/((js|jsx|ts|tsx)-)?dir\d?\/?(index)?$/)) {
+ // return barrel file if importing a directory (use special "dir" in tests to indicate path to directory)
+ const [, , fileType, indexStr] = s.match(
+ /((js|jsx|ts|tsx)-)?dir\d?\/?(index)?$/
+ );
+ if (!indexStr) {
+ s = path.posix.join(s, '/index');
+ }
+ s += `.${fileType || 'js'}`;
+ }
+ // handle file imports with appropriate file extension to emulate behavior of resolvePath
+ if (s.match(/\/((js|jsx|ts|tsx)-)?mod\d?$/)) {
+ const fileType = s.match(/\/((js|jsx|ts|tsx)-)?mod\d?$/)[2];
+ s += `.${fileType || 'js'}`;
+ }
+ return s;
+ }
+});
+
+/**
+ * @param {Array} externals
+ * @param {object} remaps
+ * @return {*}
+ */
+function setup(externals, remaps) {
+ // indicates that a particular path was resolved relative to the root of the directory
+ const plugin = remapDependenciesPlugin({
+ externals,
+ remaps,
+ resolve: resolveMock,
+ });
+ const onResolveSpy = sinon.spy();
+ plugin.setup({onResolve: onResolveSpy});
+ const onResolve = onResolveSpy.getCall(0).args[1];
+ return onResolve;
+}
+
+test.afterEach(() => {
+ // Restore the default sandbox here
+ sinon.restore();
+});
+
+const rootDir = path.join(__dirname, '../../..');
+
+test('remap node modules to other node modules', (t) => {
+ const onResolve = setup(['node-mod-A', 'node-mod-C'], {
+ // multiple mods to same external mod
+ 'node-mod-1': 'node-mod-A',
+ 'node-mod-2': 'node-mod-A',
+
+ // multiple mods to same bundled mod
+ 'node-mod-3': 'node-mod-B',
+ 'node-mod-4': 'node-mod-B',
+
+ // single mod to external mod
+ 'node-mod-5': 'node-mod-C',
+
+ // single mod to bundled mod
+ 'node-mod-6': 'node-mod-D',
+ });
+
+ const res1 = onResolve({path: 'node-mod-1'});
+ t.is(res1?.path, 'node-mod-A');
+ t.is(res1?.external, true);
+
+ const res2 = onResolve({path: 'node-mod-2'});
+ t.is(res2?.path, 'node-mod-A');
+ t.is(res2?.external, true);
+
+ const res3 = onResolve({path: 'node-mod-3'});
+ t.is(res3?.path, 'node-mod-B');
+ t.is(res3?.external, false);
+
+ const res4 = onResolve({path: 'node-mod-4'});
+ t.is(res4?.path, 'node-mod-B');
+ t.is(res4?.external, false);
+
+ const res5 = onResolve({path: 'node-mod-5'});
+ t.is(res5?.path, 'node-mod-C');
+ t.is(res5?.external, true);
+
+ const res6 = onResolve({path: 'node-mod-6'});
+ t.is(res6?.path, 'node-mod-D');
+ t.is(res6?.external, false);
+
+ // remapping module with no remaps should return undefined
+ t.is(onResolve({path: 'node-mod-0'}), undefined);
+});
+
+test('remap local modules to node modules', (t) => {
+ const onResolve = setup(['node-mod-A', 'node-mod-C'], {
+ // multiple mods => same external mod
+ './mod1': 'node-mod-A',
+ './mod2.js': 'node-mod-A',
+
+ // multiple mods => same bundled mod
+ './mod3.js': 'node-mod-B',
+ './mod4.js': 'node-mod-B',
+
+ // single mod => external mod
+ './mod5.js': 'node-mod-C',
+
+ // single mod => bundled mod
+ './mod6.js': 'node-mod-D',
+
+ // handle directory imports (with various types of barrel files) => external mod
+ './src/1/dir/index.js': 'node-mod-A',
+ './src/1/js-dir/index.js': 'node-mod-A',
+ './src/1/jsx-dir/index.jsx': 'node-mod-A',
+ './src/1/ts-dir/index.ts': 'node-mod-A',
+ './src/1/tsx-dir/index.tsx': 'node-mod-A',
+
+ // handle directory imports (with various types of barrel files) => bundled mod
+ './src/2/dir/index.js': 'node-mod-B',
+ './src/2/js-dir/index.js': 'node-mod-B',
+ './src/2/jsx-dir/index.jsx': 'node-mod-B',
+ './src/2/ts-dir/index.ts': 'node-mod-B',
+ './src/2/tsx-dir/index.tsx': 'node-mod-B',
+
+ './src/3/dir/index': 'node-mod-A',
+ './src/4/dir/index': 'node-mod-B',
+ });
+
+ // test various types of file imports
+ const res1 = onResolve({resolveDir: rootDir, path: './mod1'});
+ t.is(res1.path, 'node-mod-A');
+ t.is(res1.external, true);
+ const res2 = onResolve({resolveDir: rootDir, path: './mod2'});
+ t.is(res2.path, 'node-mod-A');
+ t.is(res2.external, true);
+ const res3 = onResolve({resolveDir: rootDir, path: './mod3'});
+ t.is(res3.path, 'node-mod-B');
+ t.is(res3.external, false);
+ const res4 = onResolve({resolveDir: rootDir, path: './mod4'});
+ t.is(res4.path, 'node-mod-B');
+ t.is(res4.external, false);
+ const res5 = onResolve({resolveDir: rootDir, path: './mod5'});
+ t.is(res5.path, 'node-mod-C');
+ t.is(res5.external, true);
+ const res6 = onResolve({resolveDir: rootDir, path: './mod6'});
+ t.is(res6.path, 'node-mod-D');
+ t.is(res6.external, false);
+ t.is(onResolve({resolveDir: rootDir, path: './mod0'}), undefined);
+
+ t.is(
+ onResolve({resolveDir: path.join(rootDir, './src/1/dir'), path: './'}).path,
+ 'node-mod-A'
+ );
+
+ // test import local directory => external module
+ const dirRes1a = onResolve({resolveDir: rootDir, path: './src/1/dir/'});
+ t.is(dirRes1a.path, 'node-mod-A');
+ t.is(dirRes1a.external, true);
+ const dirRes1b = onResolve({resolveDir: rootDir, path: './src/1/js-dir/'});
+ t.is(dirRes1b.path, 'node-mod-A');
+ t.is(dirRes1b.external, true);
+ const dirRes1c = onResolve({resolveDir: rootDir, path: './src/1/jsx-dir/'});
+ t.is(dirRes1c.path, 'node-mod-A');
+ t.is(dirRes1c.external, true);
+ const dirRes1d = onResolve({resolveDir: rootDir, path: './src/1/ts-dir/'});
+ t.is(dirRes1d.path, 'node-mod-A');
+ t.is(dirRes1d.external, true);
+ const dirRes1e = onResolve({resolveDir: rootDir, path: './src/1/tsx-dir/'});
+ t.is(dirRes1e.path, 'node-mod-A');
+ t.is(dirRes1e.external, true);
+
+ const dirRes2a = onResolve({resolveDir: rootDir, path: './src/2/dir/'});
+ t.is(dirRes2a.path, 'node-mod-B');
+ t.is(dirRes2a.external, false);
+ const dirRes2b = onResolve({resolveDir: rootDir, path: './src/2/js-dir/'});
+ t.is(dirRes2b.path, 'node-mod-B');
+ t.is(dirRes2b.external, false);
+ const dirRes2c = onResolve({resolveDir: rootDir, path: './src/2/jsx-dir/'});
+ t.is(dirRes2c.path, 'node-mod-B');
+ t.is(dirRes2c.external, false);
+ const dirRes2d = onResolve({resolveDir: rootDir, path: './src/2/ts-dir/'});
+ t.is(dirRes2d.path, 'node-mod-B');
+ t.is(dirRes2d.external, false);
+ const dirRes2e = onResolve({resolveDir: rootDir, path: './src/2/tsx-dir/'});
+ t.is(dirRes2e.path, 'node-mod-B');
+ t.is(dirRes2e.external, false);
+
+ // test remaps with no file extensions
+ const resNoExtensionExternal = onResolve({
+ resolveDir: rootDir,
+ path: './src/3/dir/',
+ });
+ t.is(resNoExtensionExternal.path, 'node-mod-A');
+ t.is(resNoExtensionExternal.external, true);
+
+ const resNoExtensionBundled = onResolve({
+ resolveDir: rootDir,
+ path: './src/4/dir/',
+ });
+ t.is(resNoExtensionBundled.path, 'node-mod-B');
+ t.is(resNoExtensionBundled.external, false);
+});
+
+test('remap local modules to local modules', (t) => {
+ const onResolve = setup([], {
+ // multiple mods => same external mod
+ './mod1': './mod2',
+ './js-dir/mod1.js': './mod2.js',
+ './jsx-dir/mod1.jsx': './mod2.jsx',
+ './ts-dir/mod1.ts': './mod2.ts',
+ './tsx-dir/mod1.tsx': './mod2.tsx',
+ });
+
+ const expectations = {
+ 'mod1': 'mod2.js',
+ 'js-dir/mod1.js': 'mod2.js',
+ 'jsx-dir/mod1.jsx': 'mod2.jsx',
+ 'ts-dir/mod1.ts': 'mod2.ts',
+ 'tsx-dir/mod1.tsx': 'mod2.tsx',
+ };
+
+ for (const imp in expectations) {
+ const val = expectations[imp];
+ t.is(
+ `.${path.posix.sep}${path.posix.relative(
+ rootDir,
+ onResolve({path: `.${path.posix.sep}${imp}`, resolveDir: rootDir}).path
+ )}`,
+ `.${path.posix.sep}${val}`
+ );
+ }
+});
diff --git a/build-system/tasks/runtime-test/custom-launchers.js b/build-system/tasks/runtime-test/custom-launchers.js
index 4ed58fd32838..bd96683d0aa1 100644
--- a/build-system/tasks/runtime-test/custom-launchers.js
+++ b/build-system/tasks/runtime-test/custom-launchers.js
@@ -29,8 +29,8 @@ const customLaunchers = {
base: argv.headless
? 'ChromeHeadless'
: argv.chrome_canary
- ? 'ChromeCanary'
- : 'Chrome',
+ ? 'ChromeCanary'
+ : 'Chrome',
flags: argv.chrome_flags
? argv.chrome_flags.split(',').map((flag) => `--${flag}`)
: DEFAULT_CHROME_FLAGS,
@@ -43,8 +43,7 @@ const customLaunchers = {
flags: argv.headless ? ['-headless'] : [],
},
EdgeCustom: {
- // TODO(rsimha): Switch from Beta to Stable once it's available.
- base: argv.headless ? 'EdgeBetaHeadless' : 'EdgeBeta',
+ base: argv.headless ? 'EdgeHeadless' : 'Edge',
flags: ['--no-sandbox', '--disable-gpu', '--disable-dev-shm-usage'],
},
};
diff --git a/build-system/tasks/runtime-test/helpers-unit.js b/build-system/tasks/runtime-test/helpers-unit.js
index ef90c941dcf7..67b7f26299e0 100644
--- a/build-system/tasks/runtime-test/helpers-unit.js
+++ b/build-system/tasks/runtime-test/helpers-unit.js
@@ -1,14 +1,15 @@
'use strict';
+const config = require('../../../tsconfig.base.json');
const fastGlob = require('fast-glob');
const fs = require('fs');
const listImportsExports = require('list-imports-exports');
-const minimatch = require('minimatch');
+const {minimatch} = require('minimatch');
const path = require('path');
const testConfig = require('../../test-configs/config');
const {cyan, green} = require('kleur/colors');
const {execOrDie} = require('../../common/exec');
-const {extensions, maybeInitializeExtensions} = require('../extension-helpers');
+const {EXTENSIONS, maybeInitializeExtensions} = require('../extension-helpers');
const {gitDiffNameOnlyMain} = require('../../common/git');
const {isCiBuild} = require('../../common/ci');
const {log, logLocalDev} = require('../../common/logging');
@@ -32,20 +33,20 @@ function isLargeRefactor() {
* Extracts extension info and creates a mapping from CSS files in different
* source directories to their equivalent JS files in the 'build/' directory.
*
- * @return {!Object}
+ * @return {!{[key: string]: string}}
*/
function extractCssJsFileMap() {
execOrDie('amp css', {'stdio': 'ignore'});
- maybeInitializeExtensions(extensions);
- /** @type {Object} */
+ maybeInitializeExtensions(EXTENSIONS);
+ /** @type {{[key: string]: string}} */
const cssJsFileMap = {};
/**
* Adds an entry that maps a CSS file to a JS file
*
- * @param {Object} cssData
+ * @param {object} cssData
* @param {string} cssBinaryName
- * @param {Object} cssJsFileMap
+ * @param {object} cssJsFileMap
*/
function addCssJsEntry(cssData, cssBinaryName, cssJsFileMap) {
const cssFilePath =
@@ -55,8 +56,8 @@ function extractCssJsFileMap() {
cssJsFileMap[cssFilePath] = jsFilePath;
}
- Object.keys(extensions).forEach((extension) => {
- const cssData = extensions[extension];
+ Object.keys(EXTENSIONS).forEach((extension) => {
+ const cssData = EXTENSIONS[extension];
if (cssData['hasCss']) {
addCssJsEntry(cssData, cssData['name'], cssJsFileMap);
if (cssData.hasOwnProperty('cssBinaries')) {
@@ -70,6 +71,27 @@ function extractCssJsFileMap() {
return cssJsFileMap;
}
+/**
+ * Returns the full path of an import after resolving aliases if necessary.
+ * During prefix matching, wildcard characters if any are dropped.
+ * @param {string} jsFile
+ * @param {string} file
+ * @return {string}
+ */
+function resolveImportAliases(jsFile, file) {
+ const {paths} = config.compilerOptions;
+ const importAliases = Object.keys(paths);
+ for (const alias of importAliases) {
+ const aliasPrefix = alias.replace('*', '');
+ const actualPrefix = paths[alias][0].replace('*', '');
+ if (file.startsWith(aliasPrefix)) {
+ return file.replace(aliasPrefix, actualPrefix).replace('./', '');
+ }
+ }
+ const jsFileDir = path.dirname(jsFile);
+ return path.resolve(jsFileDir, file);
+}
+
/**
* Returns the list of files imported by a JS file
*
@@ -78,17 +100,13 @@ function extractCssJsFileMap() {
*/
function getImports(jsFile) {
const jsFileContents = fs.readFileSync(jsFile, 'utf8');
- const {imports} = listImportsExports.parse(jsFileContents, [
- 'importAssertions',
- ]);
+ const parsePlugins = ['importAssertions'];
+ const {imports} = listImportsExports.parse(jsFileContents, parsePlugins);
const files = [];
- const jsFileDir = path.dirname(jsFile);
imports.forEach(function (file) {
- const fullPath = path.resolve(jsFileDir, `${file}.js`);
- if (fs.existsSync(fullPath)) {
- const relativePath = path.relative(ROOT_DIR, fullPath);
- files.push(relativePath);
- }
+ const fullPath = resolveImportAliases(jsFile, file);
+ const relativePath = path.relative(ROOT_DIR, fullPath);
+ files.push(relativePath);
});
return files;
}
@@ -97,7 +115,7 @@ function getImports(jsFile) {
* Retrieves the set of JS source files that import the given CSS file.
*
* @param {string} cssFile
- * @param {!Object} cssJsFileMap
+ * @param {!{[key: string]: string}} cssJsFileMap
* @return {!Array}
*/
function getJsFilesFor(cssFile, cssJsFileMap) {
@@ -109,7 +127,10 @@ function getJsFilesFor(cssFile, cssJsFileMap) {
});
jsFilesInDir.forEach((jsFile) => {
const jsFilePath = `${cssFileDir}/${jsFile}`;
- if (getImports(jsFilePath).includes(cssJsFileMap[cssFile])) {
+ const jsImports = getImports(jsFilePath);
+ if (
+ jsImports.some((jsImport) => jsImport.includes(cssJsFileMap[cssFile]))
+ ) {
jsFiles.push(jsFilePath);
}
});
@@ -191,7 +212,7 @@ function unitTestsToRun() {
const filesImported = getImports(testFile);
return (
filesImported.filter(function (file) {
- return srcFiles.includes(file);
+ return srcFiles.some((srcFile) => srcFile.includes(file));
}).length > 0
);
}
diff --git a/build-system/tasks/runtime-test/helpers.js b/build-system/tasks/runtime-test/helpers.js
index f65e4fc9c934..8b73816f243e 100644
--- a/build-system/tasks/runtime-test/helpers.js
+++ b/build-system/tasks/runtime-test/helpers.js
@@ -135,7 +135,7 @@ function maybePrintArgvMessages() {
}
/**
- * @param {Object} browser
+ * @param {object} browser
* @return {Promise}
* @private
*/
diff --git a/build-system/tasks/runtime-test/runtime-test-base.js b/build-system/tasks/runtime-test/runtime-test-base.js
index 880e3be687d3..212caba7c417 100644
--- a/build-system/tasks/runtime-test/runtime-test-base.js
+++ b/build-system/tasks/runtime-test/runtime-test-base.js
@@ -4,7 +4,7 @@ const argv = require('minimist')(process.argv.slice(2));
const karmaConfig = require('../../test-configs/karma.conf');
const {
commonIntegrationTestPaths,
- commonUnitTestPaths,
+ getCommonUnitTestPaths,
integrationTestPaths,
karmaHtmlFixturesPath,
karmaJsPaths,
@@ -102,17 +102,17 @@ class RuntimeTestConfig {
}
/**
- * Picks a browser config based on the the test type and command line flags.
+ * Picks a browser config based on the test type and command line flags.
* Defaults to Chrome.
*/
updateBrowsers() {
const browser = argv.edge
? 'EdgeCustom'
: argv.firefox
- ? 'FirefoxCustom'
- : argv.safari
- ? 'SafariCustom'
- : 'ChromeCustom';
+ ? 'FirefoxCustom'
+ : argv.safari
+ ? 'SafariCustom'
+ : 'ChromeCustom';
Object.assign(this, {browsers: [browser], customLaunchers});
}
@@ -133,19 +133,21 @@ class RuntimeTestConfig {
this.junitReporter = {
outputFile: `result-reports/${this.testType}.xml`,
useBrowserName: false,
+ nameFormatter(_, result) {
+ return result.description.trim();
+ },
+ classNameFormatter(_, result) {
+ return result.suite
+ .map((s) => s.trim())
+ .filter(Boolean)
+ .join(' » ');
+ },
};
}
if (argv.coverage) {
this.reporters.push('coverage-istanbul');
}
-
- if (argv.report) {
- this.reporters.push('json-result');
- this.jsonResultReporter = {
- outputFile: `result-reports/${this.testType}.json`,
- };
- }
}
/**
@@ -155,6 +157,7 @@ class RuntimeTestConfig {
updateFiles() {
switch (this.testType) {
case 'unit':
+ const commonUnitTestPaths = getCommonUnitTestPaths();
if (argv.files || argv.filelist) {
this.files = commonUnitTestPaths
.concat(getFilesFromArgv())
@@ -226,16 +229,19 @@ class RuntimeTestConfig {
const babelPlugin = getEsbuildBabelPlugin(
/* callerName */ 'test',
/* enableCache */ true,
- /* preSetup */ this.logBabelStart,
- /* postLoad */ this.printBabelDot
+ {
+ preSetup: this.logBabelStart,
+ postLoad: this.printBabelDot,
+ }
);
this.esbuild = {
- target: 'es5',
+ target: 'esnext', // We use babel for transpilation.
define: {
'process.env.NODE_DEBUG': 'false',
'process.env.NODE_ENV': '"test"',
},
plugins: [importPathPlugin, babelPlugin],
+ mainFields: ['module', 'browser', 'main'],
sourcemap: 'inline',
};
}
diff --git a/build-system/tasks/sourcemaps.js b/build-system/tasks/sourcemaps.js
new file mode 100644
index 000000000000..8898573634e5
--- /dev/null
+++ b/build-system/tasks/sourcemaps.js
@@ -0,0 +1,67 @@
+const argv = require('minimist')(process.argv.slice(2));
+const {
+ VERSION: internalRuntimeVersion,
+} = require('../compile/internal-version');
+const {posix: path} = require('path');
+const Remapping = require('@ampproject/remapping');
+const ResolveUri = require('@jridgewell/resolve-uri');
+
+/** @type {Remapping.default} */
+const remapping = /** @type {*} */ (Remapping);
+
+/** @type {ResolveUri.default} */
+const resolveUri = /** @type {*} */ (ResolveUri);
+
+/**
+ * @return {boolean}
+ */
+function includeSourcesContent() {
+ if (argv._.includes('dist')) {
+ return !!argv.full_sourcemaps;
+ }
+ return true;
+}
+
+/**
+ * @param {Array} mapChain
+ * @param {string} destFile
+ * @param {*} options
+ * @return {object}
+ */
+function massageSourcemaps(mapChain, destFile, options) {
+ const map = remapping(mapChain, () => null, !includeSourcesContent());
+ map.file = path.basename(destFile);
+ map.sourceRoot = getSourceRoot(options);
+ map.sources = map.sources.map((s) => {
+ // By default, sources are relative to the map. But we just added an
+ // absolute sourceRoot, and we do not want the file to be relative to that
+ // root.
+ return resolveUri(s || '', destFile);
+ });
+
+ return map;
+}
+
+/**
+ * Computes the base url for sourcemaps. Custom sourcemap URLs have placeholder
+ * {version} that should be replaced with the actual version. Also, ensures
+ * that a trailing slash exists.
+ * @param {object} options
+ * @return {string}
+ */
+function getSourceRoot(options) {
+ if (argv.sourcemap_url) {
+ return String(argv.sourcemap_url)
+ .replace(/\{version\}/g, internalRuntimeVersion)
+ .replace(/([^/])$/, '$1/');
+ }
+ if (options.fortesting || !argv._.includes('dist')) {
+ return 'http://localhost:8000/';
+ }
+ return `https://raw.githubusercontent.com/ampproject/amphtml/${internalRuntimeVersion}/`;
+}
+
+module.exports = {
+ massageSourcemaps,
+ includeSourcesContent,
+};
diff --git a/build-system/tasks/storybook/OWNERS b/build-system/tasks/storybook/OWNERS
index 865f2a015273..c32e50897786 100644
--- a/build-system/tasks/storybook/OWNERS
+++ b/build-system/tasks/storybook/OWNERS
@@ -6,7 +6,6 @@
{
owners: [
{name: 'ampproject/wg-infra'},
- {name: 'ampproject/wg-bento'},
{name: 'ampproject/wg-components'},
{name: 'ampproject/wg-performance'},
{name: 'alanorozco', notify: true},
diff --git a/build-system/tasks/storybook/README.md b/build-system/tasks/storybook/README.md
index 89d6d1b3dc77..da0ebef90f31 100644
--- a/build-system/tasks/storybook/README.md
+++ b/build-system/tasks/storybook/README.md
@@ -12,28 +12,6 @@ Run `amp storybook -h` or see [testing.md](../../../docs/testing.md) for more la
Follow these recommendations when [writing stories.](https://storybook.js.org/docs/guides/guide-preact/#step-4-write-your-stories)
-### Do not include `Bento` in Story titles
-
-Even though a component's name may include `Bento`, it should be excluded from the title for consistency with existing stories.
-
-✅ Do:
-
-```jsx
-export default {
- title: 'Accordion',
- component: BentoAccordion,
-};
-```
-
-🚫 Don't:
-
-```jsx
-export default {
- title: 'BentoAccordion',
- component: BentoAccordion,
-};
-```
-
### Identify `args` and `argTypes` exactly like their component properties
Passing a value from a Control specified through `args` or `argTypes` without modification is implicit when spreading `{...args}`.
@@ -50,7 +28,7 @@ const MyStory = (args) => {
MyStory.args = {
width: 500,
height: 200,
- layout: 'responsive'
+ layout: 'responsive',
'data-foo': 'bar',
};
```
diff --git a/build-system/tasks/storybook/amp-env/main.js b/build-system/tasks/storybook/amp-env/main.js
deleted file mode 100644
index 6826dcd801ee..000000000000
--- a/build-system/tasks/storybook/amp-env/main.js
+++ /dev/null
@@ -1,29 +0,0 @@
-const {webpackConfigNoChunkTilde} = require('../env-utils');
-
-module.exports = {
- stories: [
- '../../../../src/builtins/storybook/*.amp.js',
- '../../../../extensions/**/*.*/storybook/*.amp.js',
- ],
- addons: [
- // TODO(alanorozco): AMP previews are loaded inside an iframe, so the a11y
- // addon is not able to inspect the tree inside it. Its results are incorrect,
- // since it only checks the structure of the outer iframe element.
- // Enable this once we find a way to inspect the iframe document's tree.
- // '@storybook/addon-a11y',
- '@storybook/addon-viewport/register',
- '@storybook/addon-controls/register',
- // TODO(#35923): Remove addon-knobs once all stories are migrated to
- // addon-controls (args/argTypes).
- '@storybook/addon-knobs',
- '@ampproject/storybook-addon',
- ],
- managerWebpack: (config) => {
- return webpackConfigNoChunkTilde(config);
- },
- webpackFinal: (config) => {
- // Disable entry point size warnings.
- config.performance.hints = false;
- return config;
- },
-};
diff --git a/build-system/tasks/storybook/amp-env/register.js b/build-system/tasks/storybook/amp-env/register.js
deleted file mode 100644
index 4910119f7d60..000000000000
--- a/build-system/tasks/storybook/amp-env/register.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import {addons} from '@storybook/addons';
-
-/**
- * Register the AMP Storybook decorator addon
- */
-export function register() {
- addons.register('amp/storybook', () => {});
-}
diff --git a/build-system/tasks/storybook/amp-env/webpack.config.js b/build-system/tasks/storybook/amp-env/webpack.config.js
deleted file mode 100644
index 01b8afda9ce9..000000000000
--- a/build-system/tasks/storybook/amp-env/webpack.config.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const path = require('path');
-const {getRelativeAliasMap} = require('../../../babel-config/import-resolver');
-const {webpackConfigNoChunkTilde} = require('../env-utils');
-
-const rootDir = path.join(__dirname, '../../../..');
-
-module.exports = ({config}) => {
- config.resolveLoader = {
- modules: [
- path.join(__dirname, '../node_modules'),
- path.join(rootDir, 'node_modules'),
- ],
- };
- config.resolve = {
- modules: [
- path.join(__dirname, '../node_modules'),
- path.join(rootDir, 'node_modules'),
- ],
- alias: getRelativeAliasMap(rootDir),
- };
- config.module = {
- rules: [
- {
- test: /\.jsx?$/,
- loader: 'babel-loader',
- exclude: /node_modules/,
- query: {
- presets: [
- [
- '@babel/preset-env',
- {
- bugfixes: true,
- targets: {'browsers': ['Last 2 versions']},
- },
- ],
- [
- '@babel/preset-react',
- {
- pragma: 'Preact.createElement',
- pragmaFrag: 'Preact.Fragment',
- useSpread: true,
- },
- ],
- ],
- },
- },
- ],
- };
-
- return webpackConfigNoChunkTilde(config);
-};
diff --git a/build-system/tasks/storybook/env-utils.js b/build-system/tasks/storybook/env-utils.js
deleted file mode 100644
index e80c11f46591..000000000000
--- a/build-system/tasks/storybook/env-utils.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * Change a Webpack config object so that filenames resulting from chunk
- * splitting do not include a tilde (~) character.
- * We do this since serving infrastructure does not play well with tildes.
- * See https://go.amp.dev/issue/30954#issuecomment-868679665
- * @param {Object} config
- * @return {Object}
- */
-function webpackConfigNoChunkTilde(config) {
- // Change runtime filenames (like runtime~main.*)
- if (config.optimization.runtimeChunk) {
- config.optimization.runtimeChunk = {
- name: ({name}) => `runtime-${name}`,
- };
- }
- // Change all other chunked filenames (like vendors~main.*)
- if (config.optimization.splitChunks) {
- config.optimization.splitChunks.automaticNameDelimiter = '-';
- }
- return config;
-}
-
-module.exports = {
- webpackConfigNoChunkTilde,
-};
diff --git a/build-system/tasks/storybook/env/amp/main.js b/build-system/tasks/storybook/env/amp/main.js
new file mode 100644
index 000000000000..25d84aed4b14
--- /dev/null
+++ b/build-system/tasks/storybook/env/amp/main.js
@@ -0,0 +1,26 @@
+const {getStaticDirs} = require('../static-dirs');
+
+const rootDir = '../../../../..';
+
+module.exports = {
+ staticDirs: getStaticDirs(rootDir),
+ stories: [
+ `${rootDir}/src/builtins/storybook/*.amp.js`,
+ `${rootDir}/extensions/**/*.*/storybook/*.amp.js`,
+ ],
+ addons: [
+ // TODO(alanorozco): AMP previews are loaded inside an iframe, so the a11y
+ // addon is not able to inspect the tree inside it. Its results are incorrect,
+ // since it only checks the structure of the outer iframe element.
+ // Enable this once we find a way to inspect the iframe document's tree.
+ // '@storybook/addon-a11y',
+ '@storybook/addon-viewport/register',
+ '@storybook/addon-controls/register',
+ '@ampproject/storybook-addon',
+ ],
+ webpackFinal: (config) => {
+ // Disable entry point size warnings.
+ config.performance.hints = false;
+ return config;
+ },
+};
diff --git a/build-system/tasks/storybook/env/amp/package-lock.json b/build-system/tasks/storybook/env/amp/package-lock.json
new file mode 100644
index 000000000000..ac4622f89778
--- /dev/null
+++ b/build-system/tasks/storybook/env/amp/package-lock.json
@@ -0,0 +1,1885 @@
+{
+ "name": "amp-storybook-amp",
+ "version": "0.1.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "amp-storybook-amp",
+ "version": "0.1.0",
+ "devDependencies": {
+ "@ampproject/storybook-addon": "1.1.10",
+ "preact": "10.25.4"
+ }
+ },
+ "node_modules/@ampproject/storybook-addon": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/@ampproject/storybook-addon/-/storybook-addon-1.1.10.tgz",
+ "integrity": "sha512-0JYv7FYNcLSCpbHd+W/IwHkOBk7s6phnboNCbv0SS0hcylXuX5gD53/5661/pMQ8m3UZU7xaPFK9OiG0m8KTYA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-api": "6.4.19",
+ "preact": "10.6.5",
+ "preact-render-to-string": "5.1.19",
+ "react-dom": "17.0.2"
+ },
+ "peerDependencies": {
+ "@storybook/addons": "^6.4.18",
+ "@storybook/components": "^6.4.18",
+ "@storybook/theming": "^6.4.18",
+ "react": "^17.0.2"
+ }
+ },
+ "node_modules/@ampproject/storybook-addon/node_modules/preact": {
+ "version": "10.6.5",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.5.tgz",
+ "integrity": "sha512-i+LXM6JiVjQXSt2jG2vZZFapGpCuk1fl8o6ii3G84MA3xgj686FKjs4JFDkmUVhtxyq21+4ay74zqPykz9hU6w==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
+ "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz",
+ "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
+ "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
+ "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz",
+ "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz",
+ "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==",
+ "dev": true,
+ "dependencies": {
+ "regenerator-runtime": "^0.13.11"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz",
+ "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@emotion/cache": {
+ "version": "10.0.29",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz",
+ "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==",
+ "dev": true,
+ "dependencies": {
+ "@emotion/sheet": "0.9.4",
+ "@emotion/stylis": "0.8.5",
+ "@emotion/utils": "0.11.3",
+ "@emotion/weak-memoize": "0.2.5"
+ }
+ },
+ "node_modules/@emotion/core": {
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.3.1.tgz",
+ "integrity": "sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "@emotion/cache": "^10.0.27",
+ "@emotion/css": "^10.0.27",
+ "@emotion/serialize": "^0.11.15",
+ "@emotion/sheet": "0.9.4",
+ "@emotion/utils": "0.11.3"
+ },
+ "peerDependencies": {
+ "react": ">=16.3.0"
+ }
+ },
+ "node_modules/@emotion/css": {
+ "version": "10.0.27",
+ "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz",
+ "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==",
+ "dev": true,
+ "dependencies": {
+ "@emotion/serialize": "^0.11.15",
+ "@emotion/utils": "0.11.3",
+ "babel-plugin-emotion": "^10.0.27"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
+ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==",
+ "dev": true
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "0.8.8",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
+ "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
+ "dev": true,
+ "dependencies": {
+ "@emotion/memoize": "0.7.4"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
+ "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==",
+ "dev": true
+ },
+ "node_modules/@emotion/serialize": {
+ "version": "0.11.16",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz",
+ "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==",
+ "dev": true,
+ "dependencies": {
+ "@emotion/hash": "0.8.0",
+ "@emotion/memoize": "0.7.4",
+ "@emotion/unitless": "0.7.5",
+ "@emotion/utils": "0.11.3",
+ "csstype": "^2.5.7"
+ }
+ },
+ "node_modules/@emotion/sheet": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz",
+ "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==",
+ "dev": true
+ },
+ "node_modules/@emotion/styled": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.3.0.tgz",
+ "integrity": "sha512-GgcUpXBBEU5ido+/p/mCT2/Xx+Oqmp9JzQRuC+a4lYM4i4LBBn/dWvc0rQ19N9ObA8/T4NWMrPNe79kMBDJqoQ==",
+ "dev": true,
+ "dependencies": {
+ "@emotion/styled-base": "^10.3.0",
+ "babel-plugin-emotion": "^10.0.27"
+ },
+ "peerDependencies": {
+ "@emotion/core": "^10.0.27",
+ "react": ">=16.3.0"
+ }
+ },
+ "node_modules/@emotion/styled-base": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.3.0.tgz",
+ "integrity": "sha512-PBRqsVKR7QRNkmfH78hTSSwHWcwDpecH9W6heujWAcyp2wdz/64PP73s7fWS1dIPm8/Exc8JAzYS8dEWXjv60w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "@emotion/is-prop-valid": "0.8.8",
+ "@emotion/serialize": "^0.11.15",
+ "@emotion/utils": "0.11.3"
+ },
+ "peerDependencies": {
+ "@emotion/core": "^10.0.28",
+ "react": ">=16.3.0"
+ }
+ },
+ "node_modules/@emotion/stylis": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz",
+ "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==",
+ "dev": true
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.7.5",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
+ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==",
+ "dev": true
+ },
+ "node_modules/@emotion/utils": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz",
+ "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==",
+ "dev": true
+ },
+ "node_modules/@emotion/weak-memoize": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz",
+ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==",
+ "dev": true
+ },
+ "node_modules/@remix-run/router": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.1.tgz",
+ "integrity": "sha512-bgVQM4ZJ2u2CM8k1ey70o1ePFXsEzYVZoWghh6WjM8p59jQ7HxzbHW4SbnWFG7V9ig9chLawQxDTZ3xzOF8MkQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@storybook/addons": {
+ "version": "6.5.16",
+ "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.16.tgz",
+ "integrity": "sha512-p3DqQi+8QRL5k7jXhXmJZLsE/GqHqyY6PcoA1oNTJr0try48uhTGUOYkgzmqtDaa/qPFO5LP+xCPzZXckGtquQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@storybook/api": "6.5.16",
+ "@storybook/channels": "6.5.16",
+ "@storybook/client-logger": "6.5.16",
+ "@storybook/core-events": "6.5.16",
+ "@storybook/csf": "0.0.2--canary.4566f4d.1",
+ "@storybook/router": "6.5.16",
+ "@storybook/theming": "6.5.16",
+ "@types/webpack-env": "^1.16.0",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
+ "regenerator-runtime": "^0.13.7"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@storybook/api": {
+ "version": "6.5.16",
+ "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.16.tgz",
+ "integrity": "sha512-HOsuT8iomqeTMQJrRx5U8nsC7lJTwRr1DhdD0SzlqL4c80S/7uuCy4IZvOt4sYQjOzW5fOo/kamcoBXyLproTA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@storybook/channels": "6.5.16",
+ "@storybook/client-logger": "6.5.16",
+ "@storybook/core-events": "6.5.16",
+ "@storybook/csf": "0.0.2--canary.4566f4d.1",
+ "@storybook/router": "6.5.16",
+ "@storybook/semver": "^7.3.2",
+ "@storybook/theming": "6.5.16",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "regenerator-runtime": "^0.13.7",
+ "store2": "^2.12.0",
+ "telejson": "^6.0.8",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@storybook/channel-postmessage": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.4.19.tgz",
+ "integrity": "sha512-E5h/itFzQ/6M08LR4kqlgqqmeO3tmavI+nUAlZrkCrotpJFNMHE2i0PQHg0TkFJrRDpYcrwD+AjUW4IwdqrisQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "6.4.19",
+ "@storybook/client-logger": "6.4.19",
+ "@storybook/core-events": "6.4.19",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
+ "qs": "^6.10.0",
+ "telejson": "^5.3.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/channel-postmessage/node_modules/@storybook/channels": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.4.19.tgz",
+ "integrity": "sha512-EwyoncFvTfmIlfsy8jTfayCxo2XchPkZk/9txipugWSmc057HdklMKPLOHWP0z5hLH0IbVIKXzdNISABm36jwQ==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.8.2",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/channel-postmessage/node_modules/@storybook/client-logger": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.4.19.tgz",
+ "integrity": "sha512-zmg/2wyc9W3uZrvxaW4BfHcr40J0v7AGslqYXk9H+ERLVwIvrR4NhxQFaS6uITjBENyRDxwzfU3Va634WcmdDQ==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.8.2",
+ "global": "^4.4.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/channel-postmessage/node_modules/@storybook/core-events": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.4.19.tgz",
+ "integrity": "sha512-KICzUw6XVQUJzFSCXfvhfHAuyhn4Q5J4IZEfuZkcGJS4ODkrO6tmpdYE5Cfr+so95Nfp0ErWiLUuodBsW9/rtA==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.8.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/channel-postmessage/node_modules/telejson": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.3.3.tgz",
+ "integrity": "sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==",
+ "dev": true,
+ "dependencies": {
+ "@types/is-function": "^1.0.0",
+ "global": "^4.4.0",
+ "is-function": "^1.0.2",
+ "is-regex": "^1.1.2",
+ "is-symbol": "^1.0.3",
+ "isobject": "^4.0.0",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3"
+ }
+ },
+ "node_modules/@storybook/channels": {
+ "version": "6.5.16",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.16.tgz",
+ "integrity": "sha512-VylzaWQZaMozEwZPJdyJoz+0jpDa8GRyaqu9TGG6QGv+KU5POoZaGLDkRE7TzWkyyP0KQLo80K99MssZCpgSeg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "core-js": "^3.8.2",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/client-api": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.4.19.tgz",
+ "integrity": "sha512-OCrT5Um3FDvZnimQKwWtwsaI+5agPwq2i8YiqlofrI/NPMKp0I7DEkCGwE5IRD1Q8BIKqHcMo5tTmfYi0AxyOg==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/addons": "6.4.19",
+ "@storybook/channel-postmessage": "6.4.19",
+ "@storybook/channels": "6.4.19",
+ "@storybook/client-logger": "6.4.19",
+ "@storybook/core-events": "6.4.19",
+ "@storybook/csf": "0.0.2--canary.87bc651.0",
+ "@storybook/store": "6.4.19",
+ "@types/qs": "^6.9.5",
+ "@types/webpack-env": "^1.16.0",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "regenerator-runtime": "^0.13.7",
+ "store2": "^2.12.0",
+ "synchronous-promise": "^2.0.15",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@storybook/client-api/node_modules/@storybook/addons": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.4.19.tgz",
+ "integrity": "sha512-QNyRYhpqmHV8oJxxTBdkRlLSbDFhpBvfvMfIrIT1UXb/eemdBZTaCGVvXZ9UixoEEI7f8VwAQ44IvkU5B1509w==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/api": "6.4.19",
+ "@storybook/channels": "6.4.19",
+ "@storybook/client-logger": "6.4.19",
+ "@storybook/core-events": "6.4.19",
+ "@storybook/csf": "0.0.2--canary.87bc651.0",
+ "@storybook/router": "6.4.19",
+ "@storybook/theming": "6.4.19",
+ "@types/webpack-env": "^1.16.0",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
+ "regenerator-runtime": "^0.13.7"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@storybook/client-api/node_modules/@storybook/api": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.4.19.tgz",
+ "integrity": "sha512-aDvea+NpQCBjpNp9YidO1Pr7fzzCp15FSdkG+2ihGQfv5raxrN+IIJnGUXecpe71nvlYiB+29UXBVK7AL0j51Q==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "6.4.19",
+ "@storybook/client-logger": "6.4.19",
+ "@storybook/core-events": "6.4.19",
+ "@storybook/csf": "0.0.2--canary.87bc651.0",
+ "@storybook/router": "6.4.19",
+ "@storybook/semver": "^7.3.2",
+ "@storybook/theming": "6.4.19",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "regenerator-runtime": "^0.13.7",
+ "store2": "^2.12.0",
+ "telejson": "^5.3.2",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@storybook/client-api/node_modules/@storybook/channels": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.4.19.tgz",
+ "integrity": "sha512-EwyoncFvTfmIlfsy8jTfayCxo2XchPkZk/9txipugWSmc057HdklMKPLOHWP0z5hLH0IbVIKXzdNISABm36jwQ==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.8.2",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/client-api/node_modules/@storybook/client-logger": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.4.19.tgz",
+ "integrity": "sha512-zmg/2wyc9W3uZrvxaW4BfHcr40J0v7AGslqYXk9H+ERLVwIvrR4NhxQFaS6uITjBENyRDxwzfU3Va634WcmdDQ==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.8.2",
+ "global": "^4.4.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/client-api/node_modules/@storybook/core-events": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.4.19.tgz",
+ "integrity": "sha512-KICzUw6XVQUJzFSCXfvhfHAuyhn4Q5J4IZEfuZkcGJS4ODkrO6tmpdYE5Cfr+so95Nfp0ErWiLUuodBsW9/rtA==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.8.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/client-api/node_modules/@storybook/csf": {
+ "version": "0.0.2--canary.87bc651.0",
+ "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz",
+ "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.15"
+ }
+ },
+ "node_modules/@storybook/client-api/node_modules/@storybook/router": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.4.19.tgz",
+ "integrity": "sha512-KWWwIzuyeEIWVezkCihwY2A76Il9tUNg0I410g9qT7NrEsKyqXGRYOijWub7c1GGyNjLqz0jtrrehtixMcJkuA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "6.4.19",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "history": "5.0.0",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "react-router": "^6.0.0",
+ "react-router-dom": "^6.0.0",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@storybook/client-api/node_modules/@storybook/theming": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.4.19.tgz",
+ "integrity": "sha512-V4pWmTvAxmbHR6B3jA4hPkaxZPyExHvCToy7b76DpUTpuHihijNDMAn85KhOQYIeL9q14zP/aiz899tOHsOidg==",
+ "dev": true,
+ "dependencies": {
+ "@emotion/core": "^10.1.1",
+ "@emotion/is-prop-valid": "^0.8.6",
+ "@emotion/styled": "^10.0.27",
+ "@storybook/client-logger": "6.4.19",
+ "core-js": "^3.8.2",
+ "deep-object-diff": "^1.1.0",
+ "emotion-theming": "^10.0.27",
+ "global": "^4.4.0",
+ "memoizerific": "^1.11.3",
+ "polished": "^4.0.5",
+ "resolve-from": "^5.0.0",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@storybook/client-api/node_modules/telejson": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.3.3.tgz",
+ "integrity": "sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==",
+ "dev": true,
+ "dependencies": {
+ "@types/is-function": "^1.0.0",
+ "global": "^4.4.0",
+ "is-function": "^1.0.2",
+ "is-regex": "^1.1.2",
+ "is-symbol": "^1.0.3",
+ "isobject": "^4.0.0",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3"
+ }
+ },
+ "node_modules/@storybook/client-logger": {
+ "version": "6.5.16",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.16.tgz",
+ "integrity": "sha512-pxcNaCj3ItDdicPTXTtmYJE3YC1SjxFrBmHcyrN+nffeNyiMuViJdOOZzzzucTUG0wcOOX8jaSyak+nnHg5H1Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "core-js": "^3.8.2",
+ "global": "^4.4.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/components": {
+ "version": "6.5.16",
+ "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.16.tgz",
+ "integrity": "sha512-LzBOFJKITLtDcbW9jXl0/PaG+4xAz25PK8JxPZpIALbmOpYWOAPcO6V9C2heX6e6NgWFMUxjplkULEk9RCQMNA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@storybook/client-logger": "6.5.16",
+ "@storybook/csf": "0.0.2--canary.4566f4d.1",
+ "@storybook/theming": "6.5.16",
+ "core-js": "^3.8.2",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "regenerator-runtime": "^0.13.7",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@storybook/core-events": {
+ "version": "6.5.16",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.16.tgz",
+ "integrity": "sha512-qMZQwmvzpH5F2uwNUllTPg6eZXr2OaYZQRRN8VZJiuorZzDNdAFmiVWMWdkThwmyLEJuQKXxqCL8lMj/7PPM+g==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "core-js": "^3.8.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/csf": {
+ "version": "0.0.2--canary.4566f4d.1",
+ "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz",
+ "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "lodash": "^4.17.15"
+ }
+ },
+ "node_modules/@storybook/router": {
+ "version": "6.5.16",
+ "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.16.tgz",
+ "integrity": "sha512-ZgeP8a5YV/iuKbv31V8DjPxlV4AzorRiR8OuSt/KqaiYXNXlOoQDz/qMmiNcrshrfLpmkzoq7fSo4T8lWo2UwQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@storybook/client-logger": "6.5.16",
+ "core-js": "^3.8.2",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "regenerator-runtime": "^0.13.7"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@storybook/semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.6.5",
+ "find-up": "^4.1.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@storybook/store": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.4.19.tgz",
+ "integrity": "sha512-N9/ZjemRHGfT3InPIbqQqc6snkcfnf3Qh9oOr0smbfaVGJol//KOX65kzzobtzFcid0WxtTDZ3HmgFVH+GvuhQ==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/addons": "6.4.19",
+ "@storybook/client-logger": "6.4.19",
+ "@storybook/core-events": "6.4.19",
+ "@storybook/csf": "0.0.2--canary.87bc651.0",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "regenerator-runtime": "^0.13.7",
+ "slash": "^3.0.0",
+ "stable": "^0.1.8",
+ "synchronous-promise": "^2.0.15",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@storybook/store/node_modules/@storybook/addons": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.4.19.tgz",
+ "integrity": "sha512-QNyRYhpqmHV8oJxxTBdkRlLSbDFhpBvfvMfIrIT1UXb/eemdBZTaCGVvXZ9UixoEEI7f8VwAQ44IvkU5B1509w==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/api": "6.4.19",
+ "@storybook/channels": "6.4.19",
+ "@storybook/client-logger": "6.4.19",
+ "@storybook/core-events": "6.4.19",
+ "@storybook/csf": "0.0.2--canary.87bc651.0",
+ "@storybook/router": "6.4.19",
+ "@storybook/theming": "6.4.19",
+ "@types/webpack-env": "^1.16.0",
+ "core-js": "^3.8.2",
+ "global": "^4.4.0",
+ "regenerator-runtime": "^0.13.7"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@storybook/store/node_modules/@storybook/api": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.4.19.tgz",
+ "integrity": "sha512-aDvea+NpQCBjpNp9YidO1Pr7fzzCp15FSdkG+2ihGQfv5raxrN+IIJnGUXecpe71nvlYiB+29UXBVK7AL0j51Q==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/channels": "6.4.19",
+ "@storybook/client-logger": "6.4.19",
+ "@storybook/core-events": "6.4.19",
+ "@storybook/csf": "0.0.2--canary.87bc651.0",
+ "@storybook/router": "6.4.19",
+ "@storybook/semver": "^7.3.2",
+ "@storybook/theming": "6.4.19",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "regenerator-runtime": "^0.13.7",
+ "store2": "^2.12.0",
+ "telejson": "^5.3.2",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@storybook/store/node_modules/@storybook/channels": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.4.19.tgz",
+ "integrity": "sha512-EwyoncFvTfmIlfsy8jTfayCxo2XchPkZk/9txipugWSmc057HdklMKPLOHWP0z5hLH0IbVIKXzdNISABm36jwQ==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.8.2",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/store/node_modules/@storybook/client-logger": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.4.19.tgz",
+ "integrity": "sha512-zmg/2wyc9W3uZrvxaW4BfHcr40J0v7AGslqYXk9H+ERLVwIvrR4NhxQFaS6uITjBENyRDxwzfU3Va634WcmdDQ==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.8.2",
+ "global": "^4.4.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/store/node_modules/@storybook/core-events": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.4.19.tgz",
+ "integrity": "sha512-KICzUw6XVQUJzFSCXfvhfHAuyhn4Q5J4IZEfuZkcGJS4ODkrO6tmpdYE5Cfr+so95Nfp0ErWiLUuodBsW9/rtA==",
+ "dev": true,
+ "dependencies": {
+ "core-js": "^3.8.2"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ }
+ },
+ "node_modules/@storybook/store/node_modules/@storybook/csf": {
+ "version": "0.0.2--canary.87bc651.0",
+ "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.87bc651.0.tgz",
+ "integrity": "sha512-ajk1Uxa+rBpFQHKrCcTmJyQBXZ5slfwHVEaKlkuFaW77it8RgbPJp/ccna3sgoi8oZ7FkkOyvv1Ve4SmwFqRqw==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.15"
+ }
+ },
+ "node_modules/@storybook/store/node_modules/@storybook/router": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.4.19.tgz",
+ "integrity": "sha512-KWWwIzuyeEIWVezkCihwY2A76Il9tUNg0I410g9qT7NrEsKyqXGRYOijWub7c1GGyNjLqz0jtrrehtixMcJkuA==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "6.4.19",
+ "core-js": "^3.8.2",
+ "fast-deep-equal": "^3.1.3",
+ "global": "^4.4.0",
+ "history": "5.0.0",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "react-router": "^6.0.0",
+ "react-router-dom": "^6.0.0",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@storybook/store/node_modules/@storybook/theming": {
+ "version": "6.4.19",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.4.19.tgz",
+ "integrity": "sha512-V4pWmTvAxmbHR6B3jA4hPkaxZPyExHvCToy7b76DpUTpuHihijNDMAn85KhOQYIeL9q14zP/aiz899tOHsOidg==",
+ "dev": true,
+ "dependencies": {
+ "@emotion/core": "^10.1.1",
+ "@emotion/is-prop-valid": "^0.8.6",
+ "@emotion/styled": "^10.0.27",
+ "@storybook/client-logger": "6.4.19",
+ "core-js": "^3.8.2",
+ "deep-object-diff": "^1.1.0",
+ "emotion-theming": "^10.0.27",
+ "global": "^4.4.0",
+ "memoizerific": "^1.11.3",
+ "polished": "^4.0.5",
+ "resolve-from": "^5.0.0",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0"
+ }
+ },
+ "node_modules/@storybook/store/node_modules/telejson": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.3.3.tgz",
+ "integrity": "sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==",
+ "dev": true,
+ "dependencies": {
+ "@types/is-function": "^1.0.0",
+ "global": "^4.4.0",
+ "is-function": "^1.0.2",
+ "is-regex": "^1.1.2",
+ "is-symbol": "^1.0.3",
+ "isobject": "^4.0.0",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3"
+ }
+ },
+ "node_modules/@storybook/theming": {
+ "version": "6.5.16",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.16.tgz",
+ "integrity": "sha512-hNLctkjaYLRdk1+xYTkC1mg4dYz2wSv6SqbLpcKMbkPHTE0ElhddGPHQqB362md/w9emYXNkt1LSMD8Xk9JzVQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@storybook/client-logger": "6.5.16",
+ "core-js": "^3.8.2",
+ "memoizerific": "^1.11.3",
+ "regenerator-runtime": "^0.13.7"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@types/is-function": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz",
+ "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==",
+ "dev": true
+ },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
+ "dev": true
+ },
+ "node_modules/@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
+ "dev": true
+ },
+ "node_modules/@types/webpack-env": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.1.tgz",
+ "integrity": "sha512-D0HJET2/UY6k9L6y3f5BL+IDxZmPkYmPT4+qBrRdmRLYRuV0qNKizMgTvYxXZYn+36zjPeoDZAEYBCM6XB+gww==",
+ "dev": true
+ },
+ "node_modules/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,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/babel-plugin-emotion": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz",
+ "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@emotion/hash": "0.8.0",
+ "@emotion/memoize": "0.7.4",
+ "@emotion/serialize": "^0.11.16",
+ "babel-plugin-macros": "^2.0.0",
+ "babel-plugin-syntax-jsx": "^6.18.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^1.0.5",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7"
+ }
+ },
+ "node_modules/babel-plugin-macros": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
+ "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.7.2",
+ "cosmiconfig": "^6.0.0",
+ "resolve": "^1.12.0"
+ }
+ },
+ "node_modules/babel-plugin-syntax-jsx": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==",
+ "dev": true
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "node_modules/core-js": {
+ "version": "3.31.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.1.tgz",
+ "integrity": "sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/cosmiconfig": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
+ "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+ "dev": true,
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.1.0",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.7.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "2.6.21",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
+ "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
+ "dev": true
+ },
+ "node_modules/deep-object-diff": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.9.tgz",
+ "integrity": "sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==",
+ "dev": true
+ },
+ "node_modules/dom-walk": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
+ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
+ "dev": true
+ },
+ "node_modules/emotion-theming": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/emotion-theming/-/emotion-theming-10.3.0.tgz",
+ "integrity": "sha512-mXiD2Oj7N9b6+h/dC6oLf9hwxbtKHQjoIqtodEyL8CpkN4F3V4IK/BT4D0C7zSs4BBFOu4UlPJbvvBLa88SGEA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "@emotion/weak-memoize": "0.2.5",
+ "hoist-non-react-statics": "^3.3.0"
+ },
+ "peerDependencies": {
+ "@emotion/core": "^10.0.27",
+ "react": ">=16.3.0"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+ "dev": true
+ },
+ "node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/global": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
+ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+ "dev": true,
+ "dependencies": {
+ "min-document": "^2.19.0",
+ "process": "^0.11.10"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/history": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/history/-/history-5.0.0.tgz",
+ "integrity": "sha512-3NyRMKIiFSJmIPdq7FxkNMJkQ7ZEtVblOQ38VtKaA0zZMW1Eo6Q6W8oDKEflr1kNNTItSnk4JMCO1deeSgbLLg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.7.6"
+ }
+ },
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dev": true,
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-fresh/node_modules/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,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "node_modules/is-core-module": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-function": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
+ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
+ "dev": true
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isobject": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
+ "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/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
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true
+ },
+ "node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/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,
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/map-or-similar": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz",
+ "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==",
+ "dev": true
+ },
+ "node_modules/memoizerific": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz",
+ "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==",
+ "dev": true,
+ "dependencies": {
+ "map-or-similar": "^1.5.0"
+ }
+ },
+ "node_modules/min-document": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
+ "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==",
+ "dev": true,
+ "dependencies": {
+ "dom-walk": "^0.1.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/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,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/polished": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz",
+ "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.17.8"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/preact": {
+ "version": "10.25.4",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.25.4.tgz",
+ "integrity": "sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ },
+ "node_modules/preact-render-to-string": {
+ "version": "5.1.19",
+ "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.1.19.tgz",
+ "integrity": "sha512-bj8sn/oytIKO6RtOGSS/1+5CrQyRSC99eLUnEVbqUa6MzJX5dYh7wu9bmT0d6lm/Vea21k9KhCQwvr2sYN3rrQ==",
+ "dev": true,
+ "dependencies": {
+ "pretty-format": "^3.8.0"
+ },
+ "peerDependencies": {
+ "preact": ">=10"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
+ "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==",
+ "dev": true
+ },
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/react": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
+ "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
+ "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1",
+ "scheduler": "^0.20.2"
+ },
+ "peerDependencies": {
+ "react": "17.0.2"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true
+ },
+ "node_modules/react-router": {
+ "version": "6.14.1",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.1.tgz",
+ "integrity": "sha512-U4PfgvG55LdvbQjg5Y9QRWyVxIdO1LlpYT7x+tMAxd9/vmiPuJhIwdxZuIQLN/9e3O4KFDHYfR9gzGeYMasW8g==",
+ "dev": true,
+ "dependencies": {
+ "@remix-run/router": "1.7.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.14.1",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.1.tgz",
+ "integrity": "sha512-ssF6M5UkQjHK70fgukCJyjlda0Dgono2QGwqGvuk7D+EDGHdacEN3Yke2LTMjkrpHuFwBfDFsEjGVXBDmL+bWw==",
+ "dev": true,
+ "dependencies": {
+ "@remix-run/router": "1.7.1",
+ "react-router": "6.14.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+ "dev": true
+ },
+ "node_modules/resolve": {
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.11.0",
+ "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/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
+ "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
+ "dev": true,
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility",
+ "dev": true
+ },
+ "node_modules/store2": {
+ "version": "2.14.2",
+ "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz",
+ "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==",
+ "dev": true
+ },
+ "node_modules/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,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/synchronous-promise": {
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz",
+ "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==",
+ "dev": true
+ },
+ "node_modules/telejson": {
+ "version": "6.0.8",
+ "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz",
+ "integrity": "sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/is-function": "^1.0.0",
+ "global": "^4.4.0",
+ "is-function": "^1.0.2",
+ "is-regex": "^1.1.2",
+ "is-symbol": "^1.0.3",
+ "isobject": "^4.0.0",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3"
+ }
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/ts-dedent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
+ "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.10"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ }
+ }
+}
diff --git a/build-system/tasks/storybook/env/amp/package.json b/build-system/tasks/storybook/env/amp/package.json
new file mode 100644
index 000000000000..d4c1619cc185
--- /dev/null
+++ b/build-system/tasks/storybook/env/amp/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "amp-storybook-amp",
+ "version": "0.1.0",
+ "description": "packages specific to the amp storybook env",
+ "devDependencies": {
+ "@ampproject/storybook-addon": "1.1.10",
+ "preact": "10.25.4"
+ }
+}
diff --git a/build-system/tasks/storybook/env/amp/webpack.config.js b/build-system/tasks/storybook/env/amp/webpack.config.js
new file mode 100644
index 000000000000..ee8be023f167
--- /dev/null
+++ b/build-system/tasks/storybook/env/amp/webpack.config.js
@@ -0,0 +1,57 @@
+const path = require('path');
+const {
+ getRelativeAliasMap,
+} = require('../../../../babel-config/import-resolver');
+
+const rootDir = path.join(__dirname, '../../../../..');
+
+const modules = [
+ path.join(__dirname, 'node_modules'),
+ path.join(__dirname, '../../node_modules'),
+ path.join(rootDir, 'node_modules'),
+];
+
+module.exports = ({config}) => {
+ config.resolveLoader = {
+ modules,
+ };
+ config.resolve = {
+ modules,
+ alias: getRelativeAliasMap(rootDir),
+ extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
+ };
+ config.module = {
+ rules: [
+ {
+ test: /\.jsx?|tsx?$/,
+ loader: 'babel-loader',
+ exclude: /node_modules/,
+ query: {
+ presets: [
+ [
+ '@babel/preset-typescript',
+ {jsxPragma: 'Preact', jsxPragmaFrag: 'Preact.Fragment'},
+ ],
+ [
+ '@babel/preset-env',
+ {
+ bugfixes: true,
+ targets: {'browsers': ['Last 2 versions']},
+ },
+ ],
+ [
+ '@babel/preset-react',
+ {
+ pragma: 'Preact.createElement',
+ pragmaFrag: 'Preact.Fragment',
+ useSpread: true,
+ },
+ ],
+ ],
+ },
+ },
+ ],
+ };
+
+ return config;
+};
diff --git a/build-system/tasks/storybook/env/preact/main.js b/build-system/tasks/storybook/env/preact/main.js
new file mode 100644
index 000000000000..47dcbab48bd2
--- /dev/null
+++ b/build-system/tasks/storybook/env/preact/main.js
@@ -0,0 +1,21 @@
+const {getStaticDirs} = require('../static-dirs');
+
+const rootDir = '../../../../..';
+
+module.exports = {
+ staticDirs: getStaticDirs(rootDir),
+ stories: [
+ `${rootDir}/src/**/storybook/!(*.amp).js`,
+ `${rootDir}/extensions/**/*.*/storybook/!(*.amp).js`,
+ ],
+ addons: [
+ '@storybook/addon-a11y',
+ '@storybook/addon-viewport/register',
+ '@storybook/addon-controls/register',
+ ],
+ webpackFinal: async (config) => {
+ // Disable entry point size warnings.
+ config.performance.hints = false;
+ return config;
+ },
+};
diff --git a/build-system/tasks/storybook/env/preact/package-lock.json b/build-system/tasks/storybook/env/preact/package-lock.json
new file mode 100644
index 000000000000..1421a5e18655
--- /dev/null
+++ b/build-system/tasks/storybook/env/preact/package-lock.json
@@ -0,0 +1,33 @@
+{
+ "name": "amp-storybook-preact",
+ "version": "0.1.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "amp-storybook-preact",
+ "version": "0.1.0",
+ "devDependencies": {
+ "preact": "10.25.4"
+ }
+ },
+ "node_modules/preact": {
+ "version": "10.25.4",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.25.4.tgz",
+ "integrity": "sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ }
+ },
+ "dependencies": {
+ "preact": {
+ "version": "10.25.4",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.25.4.tgz",
+ "integrity": "sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==",
+ "dev": true
+ }
+ }
+}
diff --git a/build-system/tasks/storybook/env/preact/package.json b/build-system/tasks/storybook/env/preact/package.json
new file mode 100644
index 000000000000..51be5cc60363
--- /dev/null
+++ b/build-system/tasks/storybook/env/preact/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "amp-storybook-preact",
+ "version": "0.1.0",
+ "description": "packages specific to the preact storybook env",
+ "devDependencies": {
+ "preact": "10.25.4"
+ }
+}
diff --git a/build-system/tasks/storybook/env/preact/webpack.config.js b/build-system/tasks/storybook/env/preact/webpack.config.js
new file mode 100644
index 000000000000..1bd457d59697
--- /dev/null
+++ b/build-system/tasks/storybook/env/preact/webpack.config.js
@@ -0,0 +1,70 @@
+const path = require('path');
+const {BUILD_CONSTANTS} = require('../../../../compile/build-constants');
+const {DefinePlugin} = require('webpack');
+const {
+ getRelativeAliasMap,
+} = require('../../../../babel-config/import-resolver');
+
+const rootDir = path.join(__dirname, '../../../../..');
+
+const modules = [
+ path.join(__dirname, 'node_modules'),
+ path.join(__dirname, '../../node_modules'),
+ path.join(rootDir, 'node_modules'),
+];
+
+module.exports = ({config}) => {
+ config.resolveLoader = {
+ modules,
+ };
+ config.resolve = {
+ modules,
+ extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
+ alias: {
+ ...getRelativeAliasMap(rootDir),
+ 'react': 'preact/compat',
+ 'react-dom': 'preact/compat',
+ },
+ };
+ config.module = {
+ rules: [
+ {
+ test: /\.jsx?|tsx?$/,
+ loader: 'babel-loader',
+ exclude: /node_modules/,
+ query: {
+ presets: [
+ [
+ '@babel/preset-typescript',
+ {jsxPragma: 'Preact', jsxPragmaFrag: 'Preact.Fragment'},
+ ],
+ [
+ '@babel/preset-env',
+ {
+ bugfixes: true,
+ targets: {'browsers': ['Last 2 versions']},
+ },
+ ],
+ [
+ '@babel/preset-react',
+ {
+ pragma: 'Preact.createElement',
+ pragmaFrag: 'Preact.Fragment',
+ useSpread: true,
+ },
+ ],
+ ],
+ },
+ },
+ {
+ test: /\.css$/i,
+ use: ['style-loader', 'css-loader'],
+ },
+ ],
+ };
+ // Replaced by minify-replace (babel) in the usual build pipeline
+ // build-system/babel-config/helpers.js#getReplacePlugin
+ config.plugins.push(new DefinePlugin(BUILD_CONSTANTS));
+
+ return config;
+};
diff --git a/build-system/tasks/storybook/env/react/main.js b/build-system/tasks/storybook/env/react/main.js
new file mode 100644
index 000000000000..2ff449e897db
--- /dev/null
+++ b/build-system/tasks/storybook/env/react/main.js
@@ -0,0 +1,21 @@
+const {getStaticDirs} = require('../static-dirs');
+
+const rootDir = '../../../../..';
+
+module.exports = {
+ staticDirs: getStaticDirs(rootDir),
+ // Unlike the `amp` and `preact` environments, we search Storybook files only
+ // under component paths. This is because only components have React build
+ // output, but directories in src/ outside src/bento/components/ do not.
+ stories: [`${rootDir}/extensions/**/*.*/storybook/!(*.amp).js`],
+ addons: [
+ '@storybook/addon-a11y',
+ '@storybook/addon-viewport/register',
+ '@storybook/addon-controls/register',
+ ],
+ webpackFinal: (config) => {
+ // Disable entry point size warnings.
+ config.performance.hints = false;
+ return config;
+ },
+};
diff --git a/build-system/tasks/storybook/env/react/package-lock.json b/build-system/tasks/storybook/env/react/package-lock.json
new file mode 100644
index 000000000000..4e20cfacaf1f
--- /dev/null
+++ b/build-system/tasks/storybook/env/react/package-lock.json
@@ -0,0 +1,12 @@
+{
+ "name": "amp-storybook-react",
+ "version": "0.1.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "amp-storybook-react",
+ "version": "0.1.0"
+ }
+ }
+}
diff --git a/build-system/tasks/storybook/env/react/package.json b/build-system/tasks/storybook/env/react/package.json
new file mode 100644
index 000000000000..c70615b2e6ea
--- /dev/null
+++ b/build-system/tasks/storybook/env/react/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "amp-storybook-react",
+ "version": "0.1.0",
+ "description": "packages specific to the react storybook env"
+}
diff --git a/build-system/tasks/storybook/env/react/webpack.config.js b/build-system/tasks/storybook/env/react/webpack.config.js
new file mode 100644
index 000000000000..a0ae852c467a
--- /dev/null
+++ b/build-system/tasks/storybook/env/react/webpack.config.js
@@ -0,0 +1,113 @@
+const path = require('path');
+const {BUILD_CONSTANTS} = require('../../../../compile/build-constants');
+const {DefinePlugin} = require('webpack');
+const {
+ getRelativeAliasMap,
+} = require('../../../../babel-config/import-resolver');
+const {existsSync} = require('fs-extra');
+const {
+ mergeReactBabelConfig,
+} = require('../../../../babel-config/react-config');
+
+const rootDir = path.join(__dirname, '../../../../..');
+
+/**
+ * @param {string} requestPath
+ * @return {string}
+ */
+function mapToReactBuild(requestPath) {
+ // Only handle extension paths because they have React build output.
+ if (!requestPath.includes('extensions/')) {
+ return requestPath;
+ }
+ return requestPath
+ .replace(/\/component\.jss$/, '/dist/styles.css')
+ .replace(/\/component\.js$/, '/dist/component-react.max.js');
+}
+
+/**
+ * Webpack ResolverPlugin that maps relative imports in source to their React
+ * bundle.
+ * import '../component.js' to import '../dist/component-react.max.js'
+ */
+class ReactBuildImportResolver {
+ /**
+ * @param {*} resolver
+ */
+ apply(resolver) {
+ resolver.hooks.file.tapAsync(
+ 'ReactBuildImportResolverPlugin',
+ (request, _, callback) => {
+ const mappedRequestPath = mapToReactBuild(request.path);
+ if (mappedRequestPath === request.path) {
+ callback();
+ return;
+ }
+ if (!existsSync(mappedRequestPath)) {
+ callback();
+ return;
+ }
+ callback(null, {
+ ...request,
+ path: mappedRequestPath,
+ request: mappedRequestPath,
+ });
+ }
+ );
+ }
+}
+
+const modules = [
+ path.join(__dirname, 'node_modules'),
+ path.join(__dirname, '../../node_modules'),
+ path.join(rootDir, 'node_modules'),
+];
+
+module.exports = ({config}) => {
+ config.resolveLoader = {
+ modules,
+ };
+ config.resolve = {
+ modules,
+ plugins: [new ReactBuildImportResolver()],
+ extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
+ alias: {
+ ...getRelativeAliasMap(rootDir, 'react'),
+ // Alias preact to react
+ 'preact/dom': 'react-dom',
+ 'preact/hooks': 'react',
+ 'preact/compat': 'react',
+ 'preact': 'react',
+ },
+ };
+ config.module = {
+ rules: [
+ {
+ test: /\.jsx?|tsx?$/,
+ loader: 'babel-loader',
+ exclude: /node_modules/,
+ query: mergeReactBabelConfig({
+ presets: [
+ [
+ '@babel/preset-env',
+ {
+ bugfixes: true,
+ targets: {'browsers': ['Last 2 versions']},
+ },
+ ],
+ ['@babel/preset-react', {'runtime': 'automatic'}],
+ ],
+ }),
+ },
+ {
+ test: /\.css$/i,
+ use: ['style-loader', 'css-loader'],
+ },
+ ],
+ };
+ // Replaced by minify-replace (babel) in the usual build pipeline
+ // build-system/babel-config/helpers.js#getReplacePlugin
+ config.plugins.push(new DefinePlugin(BUILD_CONSTANTS));
+
+ return config;
+};
diff --git a/build-system/tasks/storybook/env/static-dirs.js b/build-system/tasks/storybook/env/static-dirs.js
new file mode 100644
index 000000000000..df9c7580f260
--- /dev/null
+++ b/build-system/tasks/storybook/env/static-dirs.js
@@ -0,0 +1,17 @@
+/**
+ * @param {string} rootDir
+ * @return {string[]|undefined}
+ */
+function getStaticDirs(rootDir) {
+ // We only need to point to the rootDir when we're in the local dev server.
+ // When building, the output directory should be served along the rootDir.
+ const isBuild = process.argv?.[1]?.endsWith('build-storybook');
+ if (isBuild) {
+ return undefined;
+ }
+ return [rootDir];
+}
+
+module.exports = {
+ getStaticDirs,
+};
diff --git a/build-system/tasks/storybook/index.js b/build-system/tasks/storybook/index.js
index f1f0bff487a1..890a2ccbf329 100644
--- a/build-system/tasks/storybook/index.js
+++ b/build-system/tasks/storybook/index.js
@@ -6,110 +6,107 @@ const {createCtrlcHandler} = require('../../common/ctrlcHandler');
const {cyan} = require('kleur/colors');
const {defaultTask: runAmpDevBuildServer} = require('../default-task');
const {exec, execScriptAsync} = require('../../common/exec');
-const {getBaseUrl} = require('../pr-deploy-bot-utils');
const {isCiBuild} = require('../../common/ci');
-const {isPullRequestBuild} = require('../../common/ci');
const {log} = require('../../common/logging');
-const {writeFileSync} = require('fs-extra');
-const {yellow} = require('kleur/colors');
+const {updateSubpackages} = require('../../common/update-packages');
+const {bootstrapThirdPartyFrames} = require('../helpers');
+
+/** @typedef {'amp'|'preact'|'react'} StorybookEnv */
const ENV_PORTS = {
amp: 9001,
preact: 9002,
+ react: 9003,
};
const repoDir = path.join(__dirname, '../../..');
/**
- * @param {string} env 'amp' or 'preact'
+ * @param {StorybookEnv} env
* @return {string}
*/
-const envConfigDir = (env) => path.join(__dirname, `${env}-env`);
+const envDir = (env) => path.join(__dirname, 'env', env);
/**
- * @param {string} env 'amp' or 'preact'
+ * @param {StorybookEnv} env
*/
-function launchEnv(env) {
- if (env === 'amp') {
- log(
- yellow('AMP environment for storybook is temporarily disabled.\n') +
- 'See https://github.com/ampproject/storybook-addon-amp/issues/57'
- );
- return;
- }
- log(`Launching storybook for the ${cyan(env)} environment...`);
+function startStorybook(env) {
const {'storybook_port': port = ENV_PORTS[env]} = argv;
+ log(`Launching storybook for the ${cyan(env)} environment...`);
execScriptAsync(
[
- './node_modules/.bin/start-storybook',
- `--config-dir ${envConfigDir(env)}`,
- `--static-dir ${repoDir}/`,
+ 'npx',
+ 'start-storybook',
+ `--config-dir .`,
`--port ${port}`,
'--quiet',
isCiBuild() ? '--ci' : '',
].join(' '),
- {cwd: __dirname, stdio: 'inherit'}
+ {cwd: envDir(env), stdio: 'inherit'}
).on('error', () => {
throw new Error('Launch failed');
});
}
/**
- * @param {string} env 'amp' or 'preact'
+ * @param {StorybookEnv} env
*/
-function buildEnv(env) {
- if (env === 'amp') {
- log(
- yellow('AMP environment for storybook is temporarily disabled.\n') +
- 'See https://github.com/ampproject/storybook-addon-amp/issues/57'
- );
- return;
- }
-
- const configDir = envConfigDir(env);
-
- if (env === 'amp' && isPullRequestBuild()) {
- // Allows PR deploys to reference built binaries.
- writeFileSync(
- `${configDir}/preview.js`,
- // If you change this JS template, make sure to JSON.stringify every
- // dynamic value. This prevents XSS and other types of garbling.
- `// DO NOT${' '}SUBMIT.
- // This preview.js file was generated for a specific PR build.
- export const parameters = (${JSON.stringify({
- ampBaseUrlOptions: [`${getBaseUrl()}/dist`],
- })});`
- );
- }
+function buildStorybook(env) {
log(`Building storybook for the ${cyan(env)} environment...`);
+
const result = exec(
[
- './node_modules/.bin/build-storybook',
- `--config-dir ${configDir}`,
+ 'npx',
+ 'build-storybook',
+ `--config-dir .`,
`--output-dir ${repoDir}/examples/storybook/${env}`,
'--quiet',
`--loglevel ${isCiBuild() ? 'warn' : 'info'}`,
].join(' '),
- {cwd: __dirname, stdio: 'inherit'}
+ {cwd: envDir(env), stdio: 'inherit'}
);
if (result.status != 0) {
throw new Error('Build failed');
}
}
+/**
+ * @param {string} env
+ * @return {StorybookEnv[]}
+ */
+function parseEnvs(env) {
+ return /** @type {StorybookEnv[]} */ (
+ env.split(',').filter((env) => {
+ return env === 'amp' || env === 'preact' || env === 'react';
+ })
+ );
+}
+
/**
* @return {Promise}
*/
async function storybook() {
- const {build = false, 'storybook_env': env = 'amp,preact'} = argv;
- const envs = env.split(',');
- if (!build && envs.includes('amp')) {
- await runAmpDevBuildServer();
- }
+ const {build = false, 'storybook_env': storybookEnv = 'preact'} = argv;
+ const envs = parseEnvs(storybookEnv);
if (!build) {
createCtrlcHandler('storybook');
+ if (envs.includes('amp')) {
+ await runAmpDevBuildServer();
+ } else {
+ // Proxy frames require an .html file output from the function below.
+ // runAmpDevBuildServer() does this implicitly, so it's not required to
+ // call directly in that case.
+ await bootstrapThirdPartyFrames({});
+ }
+ }
+ for (const env of envs) {
+ updateSubpackages(envDir(env));
+ if (build) {
+ buildStorybook(env);
+ } else {
+ startStorybook(env);
+ }
}
- envs.map(build ? buildEnv : launchEnv);
}
module.exports = {
@@ -122,6 +119,6 @@ storybook.description =
storybook.flags = {
'build': 'Build a static web application (see https://storybook.js.org/docs)',
'storybook_env':
- "Environment(s) to run Storybook (either 'amp', 'preact' or a list as 'amp,preact')",
+ "Environment(s) to run Storybook. Either 'amp', 'preact' or 'react', or a list as 'amp,preact'. Defaults to 'preact'",
'storybook_port': 'Port from which to run the Storybook dashboard',
};
diff --git a/build-system/tasks/storybook/package-lock.json b/build-system/tasks/storybook/package-lock.json
index 315771530f99..61d5fafb61fc 100644
--- a/build-system/tasks/storybook/package-lock.json
+++ b/build-system/tasks/storybook/package-lock.json
@@ -1,71 +1,81 @@
{
"name": "amp-storybook",
"version": "0.1.0",
- "lockfileVersion": 2,
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "amp-storybook",
"version": "0.1.0",
"devDependencies": {
- "@babel/core": "7.15.8",
- "@babel/preset-react": "7.14.5",
- "@babel/runtime-corejs3": "7.15.4",
- "@storybook/addon-a11y": "6.3.12",
- "@storybook/addon-controls": "6.3.12",
- "@storybook/addon-knobs": "6.3.1",
- "@storybook/addon-viewport": "6.3.12",
- "@storybook/client-api": "6.3.12",
- "@storybook/preact": "6.3.12",
- "babel-loader": "8.2.3",
- "core-js": "3.19.0",
- "preact": "10.5.15",
- "preact-render-to-string": "5.1.19",
- "styled-jsx": "4.0.1"
+ "@babel/core": "7.26.0",
+ "@babel/preset-react": "7.26.3",
+ "@storybook/addon-a11y": "8.4.7",
+ "@storybook/addon-controls": "8.4.7",
+ "@storybook/addon-viewport": "8.4.7",
+ "babel-loader": "9.2.1"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
+ "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
"node_modules/@babel/code-frame": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
- "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+ "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/highlight": "^7.14.5"
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/compat-data": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz",
- "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz",
+ "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz",
- "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.15.8",
- "@babel/generator": "^7.15.8",
- "@babel/helper-compilation-targets": "^7.15.4",
- "@babel/helper-module-transforms": "^7.15.8",
- "@babel/helpers": "^7.15.4",
- "@babel/parser": "^7.15.8",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.6",
- "convert-source-map": "^1.7.0",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
+ "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.26.0",
+ "@babel/generator": "^7.26.0",
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-module-transforms": "^7.26.0",
+ "@babel/helpers": "^7.26.0",
+ "@babel/parser": "^7.26.0",
+ "@babel/template": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.26.0",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.1.2",
- "semver": "^6.3.0",
- "source-map": "^0.5.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
@@ -76,74 +86,76 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz",
- "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==",
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz",
+ "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.15.6",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
+ "@babel/parser": "^7.26.5",
+ "@babel/types": "^7.26.5",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^3.0.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz",
- "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz",
+ "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz",
- "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==",
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
+ "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-explode-assignable-expression": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/compat-data": "^7.26.5",
+ "@babel/helper-validator-option": "^7.25.9",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz",
- "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==",
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
+ "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/compat-data": "^7.15.0",
- "@babel/helper-validator-option": "^7.14.5",
- "browserslist": "^4.16.6",
- "semver": "^6.3.0"
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz",
- "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==",
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
+ "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.15.4",
- "@babel/helper-function-name": "^7.15.4",
- "@babel/helper-member-expression-to-functions": "^7.15.4",
- "@babel/helper-optimise-call-expression": "^7.15.4",
- "@babel/helper-replace-supers": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4"
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -152,28956 +164,2888 @@
"@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz",
- "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==",
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
+ "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
"dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.14.5",
- "regexpu-core": "^4.7.1"
- },
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz",
- "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==",
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
"dev": true,
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.13.0",
- "@babel/helper-module-imports": "^7.12.13",
- "@babel/helper-plugin-utils": "^7.13.0",
- "@babel/traverse": "^7.13.0",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2",
- "semver": "^6.1.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0-0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-explode-assignable-expression": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz",
- "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==",
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
"dev": true,
- "dependencies": {
- "@babel/types": "^7.15.4"
- },
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-function-name": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz",
- "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==",
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
+ "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
"dev": true,
- "dependencies": {
- "@babel/helper-get-function-arity": "^7.15.4",
- "@babel/template": "^7.15.4",
- "@babel/types": "^7.15.4"
- },
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-get-function-arity": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz",
- "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==",
+ "node_modules/@babel/helpers": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
+ "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/template": "^7.25.9",
+ "@babel/types": "^7.26.0"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz",
- "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==",
+ "node_modules/@babel/parser": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz",
+ "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.26.5"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">=6.0.0"
}
},
- "node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz",
- "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==",
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz",
+ "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/helper-module-imports": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz",
- "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==",
+ "node_modules/@babel/plugin-transform-react-display-name": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz",
+ "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz",
- "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==",
+ "node_modules/@babel/plugin-transform-react-jsx": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz",
+ "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-module-imports": "^7.15.4",
- "@babel/helper-replace-supers": "^7.15.4",
- "@babel/helper-simple-access": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
- "@babel/helper-validator-identifier": "^7.15.7",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.6"
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/plugin-syntax-jsx": "^7.25.9",
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz",
- "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==",
+ "node_modules/@babel/plugin-transform-react-jsx-development": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz",
+ "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/plugin-transform-react-jsx": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
- "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
+ "node_modules/@babel/plugin-transform-react-pure-annotations": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz",
+ "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==",
"dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.25.9",
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz",
- "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==",
+ "node_modules/@babel/preset-react": {
+ "version": "7.26.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz",
+ "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.15.4",
- "@babel/helper-wrap-function": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/helper-plugin-utils": "^7.25.9",
+ "@babel/helper-validator-option": "^7.25.9",
+ "@babel/plugin-transform-react-display-name": "^7.25.9",
+ "@babel/plugin-transform-react-jsx": "^7.25.9",
+ "@babel/plugin-transform-react-jsx-development": "^7.25.9",
+ "@babel/plugin-transform-react-pure-annotations": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/helper-replace-supers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz",
- "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==",
+ "node_modules/@babel/template": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
+ "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.15.4",
- "@babel/helper-optimise-call-expression": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/code-frame": "^7.25.9",
+ "@babel/parser": "^7.25.9",
+ "@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-simple-access": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz",
- "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.15.4"
+ "node_modules/@babel/traverse": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz",
+ "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.26.2",
+ "@babel/generator": "^7.26.5",
+ "@babel/parser": "^7.26.5",
+ "@babel/template": "^7.25.9",
+ "@babel/types": "^7.26.5",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz",
- "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==",
+ "node_modules/@babel/types": {
+ "version": "7.26.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz",
+ "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz",
- "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==",
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz",
+ "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==",
+ "cpu": [
+ "ppc64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/types": "^7.15.4"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
+ "node": ">=18"
}
},
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.15.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
- "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz",
+ "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
+ "node": ">=18"
}
},
- "node_modules/@babel/helper-validator-option": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
- "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz",
+ "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
+ "node": ">=18"
}
},
- "node_modules/@babel/helper-wrap-function": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz",
- "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==",
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz",
+ "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-function-name": "^7.15.4",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
+ "node": ">=18"
}
},
- "node_modules/@babel/helpers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz",
- "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==",
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz",
+ "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
+ "node": ">=18"
}
},
- "node_modules/@babel/highlight": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
- "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz",
+ "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.14.5",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
+ "node": ">=18"
}
},
- "node_modules/@babel/parser": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz",
- "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==",
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz",
+ "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "bin": {
- "parser": "bin/babel-parser.js"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.0.0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz",
- "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==",
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz",
+ "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4",
- "@babel/plugin-proposal-optional-chaining": "^7.14.5"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.13.0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-async-generator-functions": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz",
- "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==",
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz",
+ "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==",
+ "cpu": [
+ "arm"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-remap-async-to-generator": "^7.15.4",
- "@babel/plugin-syntax-async-generators": "^7.8.4"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-class-properties": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz",
- "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==",
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz",
+ "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-class-static-block": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz",
- "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==",
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz",
+ "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-class-static-block": "^7.14.5"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.12.0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-decorators": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.15.8.tgz",
- "integrity": "sha512-5n8+xGK7YDrXF+WAORg3P7LlCCdiaAyKLZi22eP2BwTy4kJ0kFUMMDCj4nQ8YrKyNZgjhU/9eRVqONnjB3us8g==",
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz",
+ "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==",
+ "cpu": [
+ "loong64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-decorators": "^7.14.5"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-dynamic-import": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz",
- "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==",
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz",
+ "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==",
+ "cpu": [
+ "mips64el"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-export-default-from": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.14.5.tgz",
- "integrity": "sha512-T8KZ5abXvKMjF6JcoXjgac3ElmXf0AWzJwi2O/42Jk+HmCky3D9+i1B7NPP1FblyceqTevKeV/9szeikFoaMDg==",
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz",
+ "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==",
+ "cpu": [
+ "ppc64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-export-default-from": "^7.14.5"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-export-namespace-from": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz",
- "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==",
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz",
+ "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==",
+ "cpu": [
+ "riscv64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-json-strings": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz",
- "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==",
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz",
+ "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==",
+ "cpu": [
+ "s390x"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-json-strings": "^7.8.3"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-logical-assignment-operators": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz",
- "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==",
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz",
+ "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz",
- "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==",
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz",
+ "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-numeric-separator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz",
- "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==",
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz",
+ "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-object-rest-spread": {
- "version": "7.15.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz",
- "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==",
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz",
+ "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.15.0",
- "@babel/helper-compilation-targets": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.15.4"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz",
- "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==",
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz",
+ "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-optional-chaining": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz",
- "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==",
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz",
+ "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-private-methods": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz",
- "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==",
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz",
+ "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-private-property-in-object": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz",
- "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==",
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz",
+ "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.15.4",
- "@babel/helper-create-class-features-plugin": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz",
- "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==",
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz",
+ "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "peer": true,
"engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=18"
}
},
- "node_modules/@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "node_modules/@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "node_modules/@babel/plugin-syntax-class-static-block": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
- "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=6.0.0"
}
},
- "node_modules/@babel/plugin-syntax-decorators": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz",
- "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==",
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
+ "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
}
},
- "node_modules/@babel/plugin-syntax-dynamic-import": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
- "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@babel/plugin-syntax-export-default-from": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.14.5.tgz",
- "integrity": "sha512-snWDxjuaPEobRBnhpqEfZ8RMxDbHt8+87fiEioGuE+Uc0xAKgSD8QiuL3lF93hPVQfZFAcYwrrf+H5qUhike3Q==",
+ "node_modules/@storybook/addon-a11y": {
+ "version": "8.4.7",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.4.7.tgz",
+ "integrity": "sha512-GpUvXp6n25U1ZSv+hmDC+05BEqxWdlWjQTb/GaboRXZQeMBlze6zckpVb66spjmmtQAIISo0eZxX1+mGcVR7lA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@storybook/addon-highlight": "8.4.7",
+ "axe-core": "^4.2.0"
},
- "engines": {
- "node": ">=6.9.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "storybook": "^8.4.7"
}
},
- "node_modules/@babel/plugin-syntax-export-namespace-from": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
- "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "node_modules/@storybook/addon-controls": {
+ "version": "8.4.7",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.4.7.tgz",
+ "integrity": "sha512-377uo5IsJgXLnQLJixa47+11V+7Wn9KcDEw+96aGCBCfLbWNH8S08tJHHnSu+jXg9zoqCAC23MetntVp6LetHA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@storybook/global": "^5.0.0",
+ "dequal": "^2.0.2",
+ "ts-dedent": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "storybook": "^8.4.7"
}
},
- "node_modules/@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "node_modules/@storybook/addon-highlight": {
+ "version": "8.4.7",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.4.7.tgz",
+ "integrity": "sha512-whQIDBd3PfVwcUCrRXvCUHWClXe9mQ7XkTPCdPo4B/tZ6Z9c6zD8JUHT76ddyHivixFLowMnA8PxMU6kCMAiNw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
+ "@storybook/global": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "storybook": "^8.4.7"
}
},
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz",
- "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==",
+ "node_modules/@storybook/addon-viewport": {
+ "version": "8.4.7",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.4.7.tgz",
+ "integrity": "sha512-hvczh/jjuXXcOogih09a663sRDDSATXwbE866al1DXgbDFraYD/LxX/QDb38W9hdjU9+Qhx8VFIcNWoMQns5HQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "memoizerific": "^1.11.3"
},
- "engines": {
- "node": ">=6.9.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "storybook": "^8.4.7"
}
},
- "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "node_modules/@storybook/core": {
+ "version": "8.4.7",
+ "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.4.7.tgz",
+ "integrity": "sha512-7Z8Z0A+1YnhrrSXoKKwFFI4gnsLbWzr8fnDCU6+6HlDukFYh8GHRcZ9zKfqmy6U3hw2h8H5DrHsxWfyaYUUOoA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "@storybook/csf": "^0.1.11",
+ "better-opn": "^3.0.2",
+ "browser-assert": "^1.2.1",
+ "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0",
+ "esbuild-register": "^3.5.0",
+ "jsdoc-type-pratt-parser": "^4.0.0",
+ "process": "^0.11.10",
+ "recast": "^0.23.5",
+ "semver": "^7.6.2",
+ "util": "^0.12.5",
+ "ws": "^8.2.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "prettier": "^2 || ^3"
+ },
+ "peerDependenciesMeta": {
+ "prettier": {
+ "optional": true
+ }
}
},
- "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "node_modules/@storybook/core/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
+ "license": "ISC",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "engines": {
+ "node": ">=10"
}
},
- "node_modules/@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "node_modules/@storybook/csf": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.13.tgz",
+ "integrity": "sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "type-fest": "^2.19.0"
}
},
- "node_modules/@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "node_modules/@storybook/global": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz",
+ "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==",
+ "dev": true
+ },
+ "node_modules/@types/eslint": {
+ "version": "8.4.1",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz",
+ "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@types/estree": "*",
+ "@types/json-schema": "*"
}
},
- "node_modules/@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.3",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz",
+ "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@types/eslint": "*",
+ "@types/estree": "*"
}
},
- "node_modules/@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "node_modules/@types/estree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
+ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.9",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
+ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "18.18.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.5.tgz",
+ "integrity": "sha512-4slmbtwV59ZxitY4ixUZdy1uRLf9eSIvBWPQxNjhHYWEtn0FryfKpyS2cvADYXTayWdKEIsJengncrVvkI4I6A==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
+ "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@webassemblyjs/helper-numbers": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
}
},
- "node_modules/@babel/plugin-syntax-private-property-in-object": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
- "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
+ "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
+ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
+ "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
"dev": true,
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
+ "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
+ "dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@webassemblyjs/floating-point-hex-parser": "1.11.6",
+ "@webassemblyjs/helper-api-error": "1.11.6",
+ "@xtuc/long": "4.2.2"
}
},
- "node_modules/@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
+ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
+ "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.11.6"
}
},
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz",
- "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==",
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
+ "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@xtuc/ieee754": "^1.2.0"
}
},
- "node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz",
- "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==",
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
+ "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@xtuc/long": "4.2.2"
}
},
- "node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz",
- "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==",
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
+ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
+ "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-module-imports": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-remap-async-to-generator": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/helper-wasm-section": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.11.6",
+ "@webassemblyjs/wasm-opt": "1.11.6",
+ "@webassemblyjs/wasm-parser": "1.11.6",
+ "@webassemblyjs/wast-printer": "1.11.6"
}
},
- "node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz",
- "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==",
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
+ "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
}
},
- "node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.15.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz",
- "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==",
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
+ "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.11.6",
+ "@webassemblyjs/wasm-parser": "1.11.6"
}
},
- "node_modules/@babel/plugin-transform-classes": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz",
- "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==",
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
+ "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.15.4",
- "@babel/helper-function-name": "^7.15.4",
- "@babel/helper-optimise-call-expression": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-replace-supers": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-api-error": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
}
},
- "node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz",
- "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==",
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
+ "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@webassemblyjs/ast": "1.11.6",
+ "@xtuc/long": "4.2.2"
}
},
- "node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.14.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz",
- "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==",
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "peer": true
+ },
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/acorn": {
+ "version": "8.12.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+ "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "acorn": "bin/acorn"
},
"engines": {
- "node": ">=6.9.0"
- },
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-import-assertions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
+ "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+ "dev": true,
+ "peer": true,
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "acorn": "^8"
}
},
- "node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz",
- "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==",
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz",
- "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==",
+ "node_modules/ajv-formats": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
+ "ajv": "^8.0.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
}
},
- "node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz",
- "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==",
+ "node_modules/ajv-formats/node_modules/ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
"dev": true,
"dependencies": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/@babel/plugin-transform-for-of": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz",
- "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==",
+ "node_modules/ajv-formats/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
+ "peer": true,
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "ajv": "^6.9.1"
}
},
- "node_modules/@babel/plugin-transform-function-name": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz",
- "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==",
+ "node_modules/ast-types": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
+ "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/helper-function-name": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "tslib": "^2.0.1"
},
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=4"
}
},
- "node_modules/@babel/plugin-transform-literals": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz",
- "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==",
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "possible-typed-array-names": "^1.0.0"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">= 0.4"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz",
- "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==",
+ "node_modules/axe-core": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz",
+ "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==",
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=4"
}
},
- "node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz",
- "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==",
+ "node_modules/babel-loader": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz",
+ "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-module-transforms": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "find-cache-dir": "^4.0.0",
+ "schema-utils": "^4.0.0"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">= 14.15.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.12.0",
+ "webpack": ">=5"
}
},
- "node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz",
- "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==",
+ "node_modules/better-opn": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz",
+ "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-simple-access": "^7.15.4",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "open": "^8.0.4"
},
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=12.0.0"
}
},
- "node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz",
- "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==",
+ "node_modules/browser-assert": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz",
+ "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/browserslist": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz",
+ "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "@babel/helper-hoist-variables": "^7.15.4",
- "@babel/helper-module-transforms": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-identifier": "^7.14.9",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "caniuse-lite": "^1.0.30001663",
+ "electron-to-chromium": "^1.5.28",
+ "node-releases": "^2.0.18",
+ "update-browserslist-db": "^1.1.0"
},
- "engines": {
- "node": ">=6.9.0"
+ "bin": {
+ "browserslist": "cli.js"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
- "node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz",
- "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==",
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+ "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "call-bind-apply-helpers": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.2"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">= 0.4"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.14.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz",
- "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==",
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
+ "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.14.5"
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
},
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
+ "node": ">= 0.4"
}
},
- "node_modules/@babel/plugin-transform-new-target": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz",
- "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==",
+ "node_modules/call-bound": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
+ "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "call-bind-apply-helpers": "^1.0.1",
+ "get-intrinsic": "^1.2.6"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">= 0.4"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@babel/plugin-transform-object-super": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz",
- "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==",
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001666",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001666.tgz",
+ "integrity": "sha512-gD14ICmoV5ZZM1OdzPWmpx+q4GyefaK06zi8hmfHV5xe4/2nOQX3+Dw5o+fSqOws2xVwL9j+anOPFwHzdEdV4g==",
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-replace-supers": "^7.14.5"
- },
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "dev": true,
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=6.0"
}
},
- "node_modules/@babel/plugin-transform-parameters": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz",
- "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==",
+ "node_modules/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,
+ "peer": true
+ },
+ "node_modules/common-path-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
+ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
+ "dev": true
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "ms": "2.1.2"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">=6.0"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz",
- "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==",
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">= 0.4"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@babel/plugin-transform-react-display-name": {
- "version": "7.15.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz",
- "integrity": "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==",
+ "node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
+ "license": "MIT",
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=8"
}
},
- "node_modules/@babel/plugin-transform-react-jsx": {
- "version": "7.14.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz",
- "integrity": "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==",
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
"dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.14.5",
- "@babel/helper-module-imports": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-jsx": "^7.14.5",
- "@babel/types": "^7.14.9"
- },
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=6"
}
},
- "node_modules/@babel/plugin-transform-react-jsx-development": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz",
- "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==",
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/plugin-transform-react-jsx": "^7.14.5"
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
},
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">= 0.4"
}
},
- "node_modules/@babel/plugin-transform-react-pure-annotations": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz",
- "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==",
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.31",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.31.tgz",
+ "integrity": "sha512-QcDoBbQeYt0+3CWcK/rEbuHvwpbT/8SV9T3OSgs6cX1FlcUAkgrkqbg9zLnDrMM/rLamzQwal4LYFCiWk861Tg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.15.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz",
+ "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
},
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=10.13.0"
}
},
- "node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz",
- "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==",
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"dev": true,
- "dependencies": {
- "regenerator-transform": "^0.14.2"
- },
+ "license": "MIT",
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">= 0.4"
}
},
- "node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz",
- "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==",
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
+ "license": "MIT",
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">= 0.4"
}
},
- "node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz",
- "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==",
+ "node_modules/es-module-lexer": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz",
+ "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "es-errors": "^1.3.0"
},
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">= 0.4"
}
},
- "node_modules/@babel/plugin-transform-spread": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz",
- "integrity": "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==",
+ "node_modules/esbuild": {
+ "version": "0.24.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz",
+ "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==",
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4"
+ "hasInstallScript": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">=18"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz",
- "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==",
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.24.2",
+ "@esbuild/android-arm": "0.24.2",
+ "@esbuild/android-arm64": "0.24.2",
+ "@esbuild/android-x64": "0.24.2",
+ "@esbuild/darwin-arm64": "0.24.2",
+ "@esbuild/darwin-x64": "0.24.2",
+ "@esbuild/freebsd-arm64": "0.24.2",
+ "@esbuild/freebsd-x64": "0.24.2",
+ "@esbuild/linux-arm": "0.24.2",
+ "@esbuild/linux-arm64": "0.24.2",
+ "@esbuild/linux-ia32": "0.24.2",
+ "@esbuild/linux-loong64": "0.24.2",
+ "@esbuild/linux-mips64el": "0.24.2",
+ "@esbuild/linux-ppc64": "0.24.2",
+ "@esbuild/linux-riscv64": "0.24.2",
+ "@esbuild/linux-s390x": "0.24.2",
+ "@esbuild/linux-x64": "0.24.2",
+ "@esbuild/netbsd-arm64": "0.24.2",
+ "@esbuild/netbsd-x64": "0.24.2",
+ "@esbuild/openbsd-arm64": "0.24.2",
+ "@esbuild/openbsd-x64": "0.24.2",
+ "@esbuild/sunos-x64": "0.24.2",
+ "@esbuild/win32-arm64": "0.24.2",
+ "@esbuild/win32-ia32": "0.24.2",
+ "@esbuild/win32-x64": "0.24.2"
+ }
+ },
+ "node_modules/esbuild-register": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz",
+ "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
+ "debug": "^4.3.4"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "esbuild": ">=0.12 <1"
}
},
- "node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz",
- "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==",
+ "node_modules/escalade": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
"dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
+ "license": "MIT",
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=6"
}
},
- "node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz",
- "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==",
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
},
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=8.0.0"
}
},
- "node_modules/@babel/plugin-transform-typescript": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.8.tgz",
- "integrity": "sha512-ZXIkJpbaf6/EsmjeTbiJN/yMxWPFWvlr7sEG1P95Xb4S4IBcrf2n7s/fItIhsAmOf8oSh3VJPDppO6ExfAfKRQ==",
+ "node_modules/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,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-typescript": "^7.14.5"
+ "license": "BSD-2-Clause",
+ "peer": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
},
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=4"
}
},
- "node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz",
- "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==",
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "estraverse": "^5.2.0"
},
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=4.0"
}
},
- "node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz",
- "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==",
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- },
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=4.0"
}
},
- "node_modules/@babel/preset-env": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz",
- "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==",
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.15.0",
- "@babel/helper-compilation-targets": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4",
- "@babel/plugin-proposal-async-generator-functions": "^7.15.8",
- "@babel/plugin-proposal-class-properties": "^7.14.5",
- "@babel/plugin-proposal-class-static-block": "^7.15.4",
- "@babel/plugin-proposal-dynamic-import": "^7.14.5",
- "@babel/plugin-proposal-export-namespace-from": "^7.14.5",
- "@babel/plugin-proposal-json-strings": "^7.14.5",
- "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5",
- "@babel/plugin-proposal-numeric-separator": "^7.14.5",
- "@babel/plugin-proposal-object-rest-spread": "^7.15.6",
- "@babel/plugin-proposal-optional-catch-binding": "^7.14.5",
- "@babel/plugin-proposal-optional-chaining": "^7.14.5",
- "@babel/plugin-proposal-private-methods": "^7.14.5",
- "@babel/plugin-proposal-private-property-in-object": "^7.15.4",
- "@babel/plugin-proposal-unicode-property-regex": "^7.14.5",
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5",
- "@babel/plugin-transform-arrow-functions": "^7.14.5",
- "@babel/plugin-transform-async-to-generator": "^7.14.5",
- "@babel/plugin-transform-block-scoped-functions": "^7.14.5",
- "@babel/plugin-transform-block-scoping": "^7.15.3",
- "@babel/plugin-transform-classes": "^7.15.4",
- "@babel/plugin-transform-computed-properties": "^7.14.5",
- "@babel/plugin-transform-destructuring": "^7.14.7",
- "@babel/plugin-transform-dotall-regex": "^7.14.5",
- "@babel/plugin-transform-duplicate-keys": "^7.14.5",
- "@babel/plugin-transform-exponentiation-operator": "^7.14.5",
- "@babel/plugin-transform-for-of": "^7.15.4",
- "@babel/plugin-transform-function-name": "^7.14.5",
- "@babel/plugin-transform-literals": "^7.14.5",
- "@babel/plugin-transform-member-expression-literals": "^7.14.5",
- "@babel/plugin-transform-modules-amd": "^7.14.5",
- "@babel/plugin-transform-modules-commonjs": "^7.15.4",
- "@babel/plugin-transform-modules-systemjs": "^7.15.4",
- "@babel/plugin-transform-modules-umd": "^7.14.5",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9",
- "@babel/plugin-transform-new-target": "^7.14.5",
- "@babel/plugin-transform-object-super": "^7.14.5",
- "@babel/plugin-transform-parameters": "^7.15.4",
- "@babel/plugin-transform-property-literals": "^7.14.5",
- "@babel/plugin-transform-regenerator": "^7.14.5",
- "@babel/plugin-transform-reserved-words": "^7.14.5",
- "@babel/plugin-transform-shorthand-properties": "^7.14.5",
- "@babel/plugin-transform-spread": "^7.15.8",
- "@babel/plugin-transform-sticky-regex": "^7.14.5",
- "@babel/plugin-transform-template-literals": "^7.14.5",
- "@babel/plugin-transform-typeof-symbol": "^7.14.5",
- "@babel/plugin-transform-unicode-escapes": "^7.14.5",
- "@babel/plugin-transform-unicode-regex": "^7.14.5",
- "@babel/preset-modules": "^0.1.4",
- "@babel/types": "^7.15.6",
- "babel-plugin-polyfill-corejs2": "^0.2.2",
- "babel-plugin-polyfill-corejs3": "^0.2.5",
- "babel-plugin-polyfill-regenerator": "^0.2.2",
- "core-js-compat": "^3.16.0",
- "semver": "^6.3.0"
- },
+ "peer": true,
"engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "node": ">=4.0"
}
},
- "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz",
- "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==",
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"dev": true,
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.2.2",
- "core-js-compat": "^3.16.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.x"
}
},
- "node_modules/@babel/preset-modules": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
- "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/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,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
- "@babel/plugin-transform-dotall-regex": "^7.4.4",
- "@babel/types": "^7.4.4",
- "esutils": "^2.0.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
+ "peer": true
},
- "node_modules/@babel/preset-react": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz",
- "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==",
+ "node_modules/find-cache-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
+ "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-react-display-name": "^7.14.5",
- "@babel/plugin-transform-react-jsx": "^7.14.5",
- "@babel/plugin-transform-react-jsx-development": "^7.14.5",
- "@babel/plugin-transform-react-pure-annotations": "^7.14.5"
+ "common-path-prefix": "^3.0.0",
+ "pkg-dir": "^7.0.0"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">=14.16"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@babel/preset-typescript": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz",
- "integrity": "sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==",
+ "node_modules/find-cache-dir/node_modules/find-up": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+ "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-typescript": "^7.15.0"
+ "locate-path": "^7.1.0",
+ "path-exists": "^5.0.0"
},
"engines": {
- "node": ">=6.9.0"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@babel/register": {
- "version": "7.15.3",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.15.3.tgz",
- "integrity": "sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==",
+ "node_modules/find-cache-dir/node_modules/locate-path": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+ "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
"dev": true,
"dependencies": {
- "clone-deep": "^4.0.1",
- "find-cache-dir": "^2.0.0",
- "make-dir": "^2.1.0",
- "pirates": "^4.0.0",
- "source-map-support": "^0.5.16"
+ "p-locate": "^6.0.0"
},
"engines": {
- "node": ">=6.9.0"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@babel/runtime": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz",
- "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==",
+ "node_modules/find-cache-dir/node_modules/p-limit": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+ "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
"dev": true,
"dependencies": {
- "regenerator-runtime": "^0.13.4"
+ "yocto-queue": "^1.0.0"
},
"engines": {
- "node": ">=6.9.0"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@babel/runtime-corejs3": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz",
- "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==",
+ "node_modules/find-cache-dir/node_modules/p-locate": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+ "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
"dev": true,
"dependencies": {
- "core-js-pure": "^3.16.0",
- "regenerator-runtime": "^0.13.4"
+ "p-limit": "^4.0.0"
},
"engines": {
- "node": ">=6.9.0"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@babel/template": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
- "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==",
+ "node_modules/find-cache-dir/node_modules/path-exists": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+ "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
"dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.14.5",
- "@babel/parser": "^7.15.4",
- "@babel/types": "^7.15.4"
- },
"engines": {
- "node": ">=6.9.0"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
- "node_modules/@babel/traverse": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz",
- "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==",
+ "node_modules/find-cache-dir/node_modules/pkg-dir": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
+ "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.15.4",
- "@babel/helper-function-name": "^7.15.4",
- "@babel/helper-hoist-variables": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
- "@babel/parser": "^7.15.4",
- "@babel/types": "^7.15.4",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
+ "find-up": "^6.3.0"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@babel/types": {
- "version": "7.15.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz",
- "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==",
+ "node_modules/find-cache-dir/node_modules/yocto-queue": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+ "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
"dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.14.9",
- "to-fast-properties": "^2.0.0"
- },
"engines": {
- "node": ">=6.9.0"
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@discoveryjs/json-ext": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz",
- "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==",
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
"dev": true,
- "engines": {
- "node": ">=10.0.0"
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
}
},
- "node_modules/@emotion/cache": {
- "version": "10.0.29",
- "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz",
- "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==",
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
- "dependencies": {
- "@emotion/sheet": "0.9.4",
- "@emotion/stylis": "0.8.5",
- "@emotion/utils": "0.11.3",
- "@emotion/weak-memoize": "0.2.5"
+ "license": "MIT",
+ "peer": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@emotion/core": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.1.1.tgz",
- "integrity": "sha512-ZMLG6qpXR8x031NXD8HJqugy/AZSkAuMxxqB46pmAR7ze47MhNJ56cdoX243QPZdGctrdfo+s08yZTiwaUcRKA==",
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
- "dependencies": {
- "@babel/runtime": "^7.5.5",
- "@emotion/cache": "^10.0.27",
- "@emotion/css": "^10.0.27",
- "@emotion/serialize": "^0.11.15",
- "@emotion/sheet": "0.9.4",
- "@emotion/utils": "0.11.3"
- },
- "peerDependencies": {
- "react": ">=16.3.0"
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "node_modules/@emotion/css": {
- "version": "10.0.27",
- "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz",
- "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==",
+ "node_modules/get-intrinsic": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz",
+ "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@emotion/serialize": "^0.11.15",
- "@emotion/utils": "0.11.3",
- "babel-plugin-emotion": "^10.0.27"
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.0",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@emotion/hash": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
- "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==",
- "dev": true
- },
- "node_modules/@emotion/is-prop-valid": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
- "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@emotion/memoize": "0.7.4"
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "node_modules/@emotion/memoize": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
- "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==",
- "dev": true
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true,
+ "peer": true
},
- "node_modules/@emotion/serialize": {
- "version": "0.11.16",
- "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz",
- "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==",
+ "node_modules/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,
- "dependencies": {
- "@emotion/hash": "0.8.0",
- "@emotion/memoize": "0.7.4",
- "@emotion/unitless": "0.7.5",
- "@emotion/utils": "0.11.3",
- "csstype": "^2.5.7"
+ "engines": {
+ "node": ">=4"
}
},
- "node_modules/@emotion/sheet": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz",
- "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==",
- "dev": true
- },
- "node_modules/@emotion/styled": {
- "version": "10.0.27",
- "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.27.tgz",
- "integrity": "sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==",
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"dev": true,
- "dependencies": {
- "@emotion/styled-base": "^10.0.27",
- "babel-plugin-emotion": "^10.0.27"
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
},
- "peerDependencies": {
- "@emotion/core": "^10.0.27",
- "react": ">=16.3.0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@emotion/styled-base": {
- "version": "10.0.31",
- "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.31.tgz",
- "integrity": "sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ==",
+ "node_modules/graceful-fs": {
+ "version": "4.2.9",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
+ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/runtime": "^7.5.5",
- "@emotion/is-prop-valid": "0.8.8",
- "@emotion/serialize": "^0.11.15",
- "@emotion/utils": "0.11.3"
+ "es-define-property": "^1.0.0"
},
- "peerDependencies": {
- "@emotion/core": "^10.0.28",
- "react": ">=16.3.0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@emotion/stylis": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz",
- "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==",
- "dev": true
- },
- "node_modules/@emotion/unitless": {
- "version": "0.7.5",
- "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
- "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==",
- "dev": true
- },
- "node_modules/@emotion/utils": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz",
- "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==",
- "dev": true
- },
- "node_modules/@emotion/weak-memoize": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz",
- "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==",
- "dev": true
- },
- "node_modules/@gar/promisify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz",
- "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==",
- "dev": true
- },
- "node_modules/@mdx-js/mdx": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz",
- "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==",
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"dev": true,
- "dependencies": {
- "@babel/core": "7.12.9",
- "@babel/plugin-syntax-jsx": "7.12.1",
- "@babel/plugin-syntax-object-rest-spread": "7.8.3",
- "@mdx-js/util": "1.6.22",
- "babel-plugin-apply-mdx-type-prop": "1.6.22",
- "babel-plugin-extract-import-names": "1.6.22",
- "camelcase-css": "2.0.1",
- "detab": "2.0.4",
- "hast-util-raw": "6.0.1",
- "lodash.uniq": "4.5.0",
- "mdast-util-to-hast": "10.0.1",
- "remark-footnotes": "2.0.0",
- "remark-mdx": "1.6.22",
- "remark-parse": "8.0.3",
- "remark-squeeze-paragraphs": "4.0.0",
- "style-to-object": "0.3.0",
- "unified": "9.2.0",
- "unist-builder": "2.0.3",
- "unist-util-visit": "2.0.3"
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@mdx-js/mdx/node_modules/@babel/core": {
- "version": "7.12.9",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz",
- "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==",
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helpers": "^7.12.5",
- "@babel/parser": "^7.12.7",
- "@babel/template": "^7.12.7",
- "@babel/traverse": "^7.12.9",
- "@babel/types": "^7.12.7",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
+ "has-symbols": "^1.0.3"
},
"engines": {
- "node": ">=6.9.0"
+ "node": ">= 0.4"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
- "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "function-bind": "^1.1.2"
},
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "engines": {
+ "node": ">= 0.4"
}
},
- "node_modules/@mdx-js/mdx/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true,
- "bin": {
- "semver": "bin/semver"
+ "license": "ISC",
+ "peer": true
+ },
+ "node_modules/is-arguments": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz",
+ "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@mdx-js/util": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz",
- "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==",
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@mrmlnc/readdir-enhanced": {
+ "node_modules/is-docker": {
"version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
- "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"dev": true,
- "dependencies": {
- "call-me-maybe": "^1.0.1",
- "glob-to-regexp": "^0.3.0"
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "is-docker": "cli.js"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "node_modules/is-generator-function": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
+ "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
+ "call-bound": "^1.0.3",
+ "get-proto": "^1.0.0",
+ "has-tostringtag": "^1.0.2",
+ "safe-regex-test": "^1.1.0"
},
"engines": {
- "node": ">= 8"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "node_modules/is-regex": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+ "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
"engines": {
- "node": ">= 8"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "node_modules/is-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+ "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
+ "which-typed-array": "^1.1.16"
},
"engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@npmcli/fs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz",
- "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==",
- "dev": true,
- "dependencies": {
- "@gar/promisify": "^1.0.1",
- "semver": "^7.3.5"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@npmcli/fs/node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
+ "is-docker": "^2.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=8"
}
},
- "node_modules/@npmcli/move-file": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
- "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+ "node_modules/jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
"dev": true,
+ "peer": true,
"dependencies": {
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2"
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">= 10.13.0"
}
},
- "node_modules/@popperjs/core": {
- "version": "2.10.2",
- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.2.tgz",
- "integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==",
+ "node_modules/jest-worker/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/popperjs"
+ "peer": true,
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@reach/router": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.3.4.tgz",
- "integrity": "sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==",
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
+ "peer": true,
"dependencies": {
- "create-react-context": "0.3.0",
- "invariant": "^2.2.3",
- "prop-types": "^15.6.1",
- "react-lifecycles-compat": "^3.0.4"
+ "has-flag": "^4.0.0"
},
- "peerDependencies": {
- "react": "15.x || 16.x || 16.4.0-alpha.0911da3",
- "react-dom": "15.x || 16.x || 16.4.0-alpha.0911da3"
- }
- },
- "node_modules/@storybook/addon-a11y": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-6.3.12.tgz",
- "integrity": "sha512-q1NdRHFJV6sLEEJw0hatCc5ZIthELqM/AWdrEWDyhcJNyiq7Tq4nKqQBMTQSYwHiUAmxVgw7i4oa1vM2M51/3g==",
- "dev": true,
- "dependencies": {
- "@storybook/addons": "6.3.12",
- "@storybook/api": "6.3.12",
- "@storybook/channels": "6.3.12",
- "@storybook/client-api": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/components": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/theming": "6.3.12",
- "axe-core": "^4.2.0",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "react-sizeme": "^3.0.1",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
+ "engines": {
+ "node": ">=10"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- },
- "peerDependenciesMeta": {
- "react": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- }
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "node_modules/@storybook/addon-controls": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.3.12.tgz",
- "integrity": "sha512-WO/PbygE4sDg3BbstJ49q0uM3Xu5Nw4lnHR5N4hXSvRAulZt1d1nhphRTHjfX+CW+uBcfzkq9bksm6nKuwmOyw==",
+ "node_modules/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,
- "dependencies": {
- "@storybook/addons": "6.3.12",
- "@storybook/api": "6.3.12",
- "@storybook/client-api": "6.3.12",
- "@storybook/components": "6.3.12",
- "@storybook/node-logger": "6.3.12",
- "@storybook/theming": "6.3.12",
- "core-js": "^3.8.2",
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- },
- "peerDependenciesMeta": {
- "react": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- }
- }
+ "license": "MIT"
},
- "node_modules/@storybook/addon-knobs": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-6.3.1.tgz",
- "integrity": "sha512-2GGGnQSPXXUhHHYv4IW6pkyQlCPYXKYiyGzfhV7Zhs95M2Ban08OA6KLmliMptWCt7U9tqTO8dB5u0C2cWmCTw==",
+ "node_modules/jsdoc-type-pratt-parser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz",
+ "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==",
"dev": true,
- "dependencies": {
- "copy-to-clipboard": "^3.3.1",
- "core-js": "^3.8.2",
- "escape-html": "^1.0.3",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "prop-types": "^15.7.2",
- "qs": "^6.10.0",
- "react-colorful": "^5.1.2",
- "react-lifecycles-compat": "^3.0.4",
- "react-select": "^3.2.0"
- },
- "peerDependencies": {
- "@storybook/addons": "^6.3.0",
- "@storybook/api": "^6.3.0",
- "@storybook/components": "^6.3.0",
- "@storybook/core-events": "^6.3.0",
- "@storybook/theming": "^6.3.0",
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- },
- "peerDependenciesMeta": {
- "react": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- }
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12.0.0"
}
},
- "node_modules/@storybook/addon-viewport": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.3.12.tgz",
- "integrity": "sha512-TRjyfm85xouOPmXxeLdEIzXLfJZZ1ePQ7p/5yphDGBHdxMU4m4qiZr8wYpUaxHsRu/UB3dKfaOyGT+ivogbnbw==",
+ "node_modules/jsesc": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+ "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
"dev": true,
- "dependencies": {
- "@storybook/addons": "6.3.12",
- "@storybook/api": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/components": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/theming": "6.3.12",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "memoizerific": "^1.11.3",
- "prop-types": "^15.7.2",
- "regenerator-runtime": "^0.13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
},
- "peerDependenciesMeta": {
- "react": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- }
+ "engines": {
+ "node": ">=6"
}
},
- "node_modules/@storybook/addons": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.3.12.tgz",
- "integrity": "sha512-UgoMyr7Qr0FS3ezt8u6hMEcHgyynQS9ucr5mAwZky3wpXRPFyUTmMto9r4BBUdqyUvTUj/LRKIcmLBfj+/l0Fg==",
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true,
- "dependencies": {
- "@storybook/api": "6.3.12",
- "@storybook/channels": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/router": "6.3.12",
- "@storybook/theming": "6.3.12",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "regenerator-runtime": "^0.13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- }
+ "peer": true
},
- "node_modules/@storybook/api": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.3.12.tgz",
- "integrity": "sha512-LScRXUeCWEW/OP+jiooNMQICVdusv7azTmULxtm72fhkXFRiQs2CdRNTiqNg46JLLC9z95f1W+pGK66X6HiiQA==",
+ "node_modules/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,
- "dependencies": {
- "@reach/router": "^1.3.4",
- "@storybook/channels": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/csf": "0.0.1",
- "@storybook/router": "6.3.12",
- "@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.3.12",
- "@types/reach__router": "^1.3.7",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "store2": "^2.12.0",
- "telejson": "^5.3.2",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- }
+ "peer": true
},
- "node_modules/@storybook/builder-webpack4": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.3.12.tgz",
- "integrity": "sha512-Dlm5Fc1svqpFDnVPZdAaEBiM/IDZHMV3RfEGbUTY/ZC0q8b/Ug1czzp/w0aTIjOFRuBDcG6IcplikaqHL8CJLg==",
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
- "dependencies": {
- "@babel/core": "^7.12.10",
- "@babel/plugin-proposal-class-properties": "^7.12.1",
- "@babel/plugin-proposal-decorators": "^7.12.12",
- "@babel/plugin-proposal-export-default-from": "^7.12.1",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
- "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
- "@babel/plugin-proposal-optional-chaining": "^7.12.7",
- "@babel/plugin-proposal-private-methods": "^7.12.1",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-transform-arrow-functions": "^7.12.1",
- "@babel/plugin-transform-block-scoping": "^7.12.12",
- "@babel/plugin-transform-classes": "^7.12.1",
- "@babel/plugin-transform-destructuring": "^7.12.1",
- "@babel/plugin-transform-for-of": "^7.12.1",
- "@babel/plugin-transform-parameters": "^7.12.1",
- "@babel/plugin-transform-shorthand-properties": "^7.12.1",
- "@babel/plugin-transform-spread": "^7.12.1",
- "@babel/plugin-transform-template-literals": "^7.12.1",
- "@babel/preset-env": "^7.12.11",
- "@babel/preset-react": "^7.12.10",
- "@babel/preset-typescript": "^7.12.7",
- "@storybook/addons": "6.3.12",
- "@storybook/api": "6.3.12",
- "@storybook/channel-postmessage": "6.3.12",
- "@storybook/channels": "6.3.12",
- "@storybook/client-api": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/components": "6.3.12",
- "@storybook/core-common": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/node-logger": "6.3.12",
- "@storybook/router": "6.3.12",
- "@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.3.12",
- "@storybook/ui": "6.3.12",
- "@types/node": "^14.0.10",
- "@types/webpack": "^4.41.26",
- "autoprefixer": "^9.8.6",
- "babel-loader": "^8.2.2",
- "babel-plugin-macros": "^2.8.0",
- "babel-plugin-polyfill-corejs3": "^0.1.0",
- "case-sensitive-paths-webpack-plugin": "^2.3.0",
- "core-js": "^3.8.2",
- "css-loader": "^3.6.0",
- "dotenv-webpack": "^1.8.0",
- "file-loader": "^6.2.0",
- "find-up": "^5.0.0",
- "fork-ts-checker-webpack-plugin": "^4.1.6",
- "fs-extra": "^9.0.1",
- "glob": "^7.1.6",
- "glob-promise": "^3.4.0",
- "global": "^4.4.0",
- "html-webpack-plugin": "^4.0.0",
- "pnp-webpack-plugin": "1.6.4",
- "postcss": "^7.0.36",
- "postcss-flexbugs-fixes": "^4.2.1",
- "postcss-loader": "^4.2.0",
- "raw-loader": "^4.0.2",
- "react-dev-utils": "^11.0.3",
- "stable": "^0.1.8",
- "style-loader": "^1.3.0",
- "terser-webpack-plugin": "^4.2.3",
- "ts-dedent": "^2.0.0",
- "url-loader": "^4.1.1",
- "util-deprecate": "^1.0.2",
- "webpack": "4",
- "webpack-dev-middleware": "^3.7.3",
- "webpack-filter-warnings-plugin": "^1.2.1",
- "webpack-hot-middleware": "^2.25.0",
- "webpack-virtual-modules": "^0.2.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
+ "bin": {
+ "json5": "lib/cli.js"
},
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "engines": {
+ "node": ">=6"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/babel-plugin-macros": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
- "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
+ "node_modules/loader-runner": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
+ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
"dev": true,
- "dependencies": {
- "@babel/runtime": "^7.7.2",
- "cosmiconfig": "^6.0.0",
- "resolve": "^1.12.0"
+ "peer": true,
+ "engines": {
+ "node": ">=6.11.5"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
+ "yallist": "^3.0.2"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "node_modules/map-or-similar": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz",
+ "integrity": "sha1-beJlMXSt+12e3DPGnT6Sobdvrwg=",
+ "dev": true
+ },
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
+ "license": "MIT",
+ "peer": true,
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+ "node_modules/memoizerific": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz",
+ "integrity": "sha1-fIekZGREwy11Q4VwkF8tvRsagFo=",
"dev": true,
"dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
- },
- "engines": {
- "node": ">=8"
+ "map-or-similar": "^1.5.0"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true,
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
+ "peer": true
},
- "node_modules/@storybook/builder-webpack4/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "node_modules/mime-db": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
"dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
+ "peer": true,
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.6"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/fork-ts-checker-webpack-plugin": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
- "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==",
+ "node_modules/mime-types": {
+ "version": "2.1.34",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/code-frame": "^7.5.5",
- "chalk": "^2.4.1",
- "micromatch": "^3.1.10",
- "minimatch": "^3.0.4",
- "semver": "^5.6.0",
- "tapable": "^1.0.0",
- "worker-rpc": "^0.1.0"
+ "mime-db": "1.51.0"
},
"engines": {
- "node": ">=6.11.5",
- "yarn": ">=1.0.0"
+ "node": ">= 0.6"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "node_modules/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
},
- "node_modules/@storybook/builder-webpack4/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "peer": true
},
- "node_modules/@storybook/builder-webpack4/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "node_modules/node-releases": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
+ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
"dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
+ "license": "MIT"
},
- "node_modules/@storybook/builder-webpack4/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "node_modules/open": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "is-buffer": "^1.1.5"
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "node_modules/picocolors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "license": "ISC"
},
- "node_modules/@storybook/builder-webpack4/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
"dev": true,
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- },
+ "license": "MIT",
+ "peer": true,
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "node_modules/process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
"dev": true,
- "bin": {
- "semver": "bin/semver"
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6.0"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/to-regex-range": {
+ "node_modules/punycode": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=6"
}
},
- "node_modules/@storybook/channel-postmessage": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.3.12.tgz",
- "integrity": "sha512-Ou/2Ga3JRTZ/4sSv7ikMgUgLTeZMsXXWLXuscz4oaYhmOqAU9CrJw0G1NitwBgK/+qC83lEFSLujHkWcoQDOKg==",
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@storybook/channels": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "qs": "^6.10.0",
- "telejson": "^5.3.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "safe-buffer": "^5.1.0"
}
},
- "node_modules/@storybook/channels": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.3.12.tgz",
- "integrity": "sha512-l4sA+g1PdUV8YCbgs47fIKREdEQAKNdQIZw0b7BfTvY9t0x5yfBywgQhYON/lIeiNGz2OlIuD+VUtqYfCtNSyw==",
+ "node_modules/recast": {
+ "version": "0.23.9",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz",
+ "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "core-js": "^3.8.2",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tiny-invariant": "^1.3.3",
+ "tslib": "^2.0.1"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "engines": {
+ "node": ">= 4"
}
},
- "node_modules/@storybook/client-api": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.3.12.tgz",
- "integrity": "sha512-xnW+lKKK2T774z+rOr9Wopt1aYTStfb86PSs9p3Fpnc2Btcftln+C3NtiHZl8Ccqft8Mz/chLGgewRui6tNI8g==",
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true,
- "dependencies": {
- "@storybook/addons": "6.3.12",
- "@storybook/channel-postmessage": "6.3.12",
- "@storybook/channels": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/csf": "0.0.1",
- "@types/qs": "^6.9.5",
- "@types/webpack-env": "^1.16.0",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "stable": "^0.1.8",
- "store2": "^2.12.0",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/@storybook/client-logger": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.3.12.tgz",
- "integrity": "sha512-zNDsamZvHnuqLznDdP9dUeGgQ9TyFh4ray3t1VGO7ZqWVZ2xtVCCXjDvMnOXI2ifMpX5UsrOvshIPeE9fMBmiQ==",
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
+ "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "core-js": "^3.8.2",
- "global": "^4.4.0"
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@storybook/components": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.3.12.tgz",
- "integrity": "sha512-kdQt8toUjynYAxDLrJzuG7YSNL6as1wJoyzNUaCfG06YPhvIAlKo7le9tS2mThVFN5e9nbKrW3N1V1sp6ypZXQ==",
+ "node_modules/schema-utils": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz",
+ "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==",
"dev": true,
"dependencies": {
- "@popperjs/core": "^2.6.0",
- "@storybook/client-logger": "6.3.12",
- "@storybook/csf": "0.0.1",
- "@storybook/theming": "6.3.12",
- "@types/color-convert": "^2.0.0",
- "@types/overlayscrollbars": "^1.12.0",
- "@types/react-syntax-highlighter": "11.0.5",
- "color-convert": "^2.0.1",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "markdown-to-jsx": "^7.1.3",
- "memoizerific": "^1.11.3",
- "overlayscrollbars": "^1.13.1",
- "polished": "^4.0.5",
- "prop-types": "^15.7.2",
- "react-colorful": "^5.1.2",
- "react-popper-tooltip": "^3.1.1",
- "react-syntax-highlighter": "^13.5.3",
- "react-textarea-autosize": "^8.3.0",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
+ },
+ "engines": {
+ "node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
+ "url": "https://opencollective.com/webpack"
}
},
- "node_modules/@storybook/core": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.3.12.tgz",
- "integrity": "sha512-FJm2ns8wk85hXWKslLWiUWRWwS9KWRq7jlkN6M9p57ghFseSGr4W71Orcoab4P3M7jI97l5yqBfppbscinE74g==",
+ "node_modules/schema-utils/node_modules/ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
"dev": true,
"dependencies": {
- "@storybook/core-client": "6.3.12",
- "@storybook/core-server": "6.3.12"
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "@storybook/builder-webpack5": "6.3.12",
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- },
- "peerDependenciesMeta": {
- "@storybook/builder-webpack5": {
- "optional": true
- },
- "typescript": {
- "optional": true
- }
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/@storybook/core-client": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.3.12.tgz",
- "integrity": "sha512-8Smd9BgZHJpAdevLKQYinwtjSyCZAuBMoetP4P5hnn53mWl0NFbrHFaAdT+yNchDLZQUbf7Y18VmIqEH+RCR5w==",
+ "node_modules/schema-utils/node_modules/ajv-keywords": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
+ "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
"dev": true,
"dependencies": {
- "@storybook/addons": "6.3.12",
- "@storybook/channel-postmessage": "6.3.12",
- "@storybook/client-api": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/csf": "0.0.1",
- "@storybook/ui": "6.3.12",
- "airbnb-js-shims": "^2.2.1",
- "ansi-to-html": "^0.6.11",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0",
- "unfetch": "^4.2.0",
- "util-deprecate": "^1.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "fast-deep-equal": "^3.1.3"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0",
- "webpack": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "ajv": "^8.8.2"
}
},
- "node_modules/@storybook/core-common": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.3.12.tgz",
- "integrity": "sha512-xlHs2QXELq/moB4MuXjYOczaxU64BIseHsnFBLyboJYN6Yso3qihW5RB7cuJlGohkjb4JwY74dvfT4Ww66rkBA==",
+ "node_modules/schema-utils/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
- "dependencies": {
- "@babel/core": "^7.12.10",
- "@babel/plugin-proposal-class-properties": "^7.12.1",
- "@babel/plugin-proposal-decorators": "^7.12.12",
- "@babel/plugin-proposal-export-default-from": "^7.12.1",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
- "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
- "@babel/plugin-proposal-optional-chaining": "^7.12.7",
- "@babel/plugin-proposal-private-methods": "^7.12.1",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-transform-arrow-functions": "^7.12.1",
- "@babel/plugin-transform-block-scoping": "^7.12.12",
- "@babel/plugin-transform-classes": "^7.12.1",
- "@babel/plugin-transform-destructuring": "^7.12.1",
- "@babel/plugin-transform-for-of": "^7.12.1",
- "@babel/plugin-transform-parameters": "^7.12.1",
- "@babel/plugin-transform-shorthand-properties": "^7.12.1",
- "@babel/plugin-transform-spread": "^7.12.1",
- "@babel/preset-env": "^7.12.11",
- "@babel/preset-react": "^7.12.10",
- "@babel/preset-typescript": "^7.12.7",
- "@babel/register": "^7.12.1",
- "@storybook/node-logger": "6.3.12",
- "@storybook/semver": "^7.3.2",
- "@types/glob-base": "^0.3.0",
- "@types/micromatch": "^4.0.1",
- "@types/node": "^14.0.10",
- "@types/pretty-hrtime": "^1.0.0",
- "babel-loader": "^8.2.2",
- "babel-plugin-macros": "^3.0.1",
- "babel-plugin-polyfill-corejs3": "^0.1.0",
- "chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "express": "^4.17.1",
- "file-system-cache": "^1.0.5",
- "find-up": "^5.0.0",
- "fork-ts-checker-webpack-plugin": "^6.0.4",
- "glob": "^7.1.6",
- "glob-base": "^0.3.0",
- "interpret": "^2.2.0",
- "json5": "^2.1.3",
- "lazy-universal-dotenv": "^3.0.1",
- "micromatch": "^4.0.2",
- "pkg-dir": "^5.0.0",
- "pretty-hrtime": "^1.0.3",
- "resolve-from": "^5.0.0",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2",
- "webpack": "4"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
+ "bin": {
+ "semver": "bin/semver.js"
}
},
- "node_modules/@storybook/core-common/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/serialize-javascript": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
+ "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
"dev": true,
+ "peer": true,
"dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "randombytes": "^2.1.0"
}
},
- "node_modules/@storybook/core-common/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "node": ">= 0.4"
}
},
- "node_modules/@storybook/core-common/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/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,
+ "peer": true,
"engines": {
- "node": ">=8"
+ "node": ">=0.10.0"
}
},
- "node_modules/@storybook/core-common/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
+ "peer": true,
"dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
}
},
- "node_modules/@storybook/core-events": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.3.12.tgz",
- "integrity": "sha512-SXfD7xUUMazaeFkB92qOTUV8Y/RghE4SkEYe5slAdjeocSaH7Nz2WV0rqNEgChg0AQc+JUI66no8L9g0+lw4Gw==",
+ "node_modules/storybook": {
+ "version": "8.4.7",
+ "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.4.7.tgz",
+ "integrity": "sha512-RP/nMJxiWyFc8EVMH5gp20ID032Wvk+Yr3lmKidoegto5Iy+2dVQnUoElZb2zpbVXNHWakGuAkfI0dY1Hfp/vw==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "core-js": "^3.8.2"
+ "@storybook/core": "8.4.7"
+ },
+ "bin": {
+ "getstorybook": "bin/index.cjs",
+ "sb": "bin/index.cjs",
+ "storybook": "bin/index.cjs"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "prettier": "^2 || ^3"
+ },
+ "peerDependenciesMeta": {
+ "prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/terser": {
+ "version": "5.19.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.0.tgz",
+ "integrity": "sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "node_modules/@storybook/core-server": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.3.12.tgz",
- "integrity": "sha512-T/Mdyi1FVkUycdyOnhXvoo3d9nYXLQFkmaJkltxBFLzAePAJUSgAsPL9odNC3+p8Nr2/UDsDzvu/Ow0IF0mzLQ==",
+ "node_modules/terser-webpack-plugin": {
+ "version": "5.3.9",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz",
+ "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@discoveryjs/json-ext": "^0.5.3",
- "@storybook/builder-webpack4": "6.3.12",
- "@storybook/core-client": "6.3.12",
- "@storybook/core-common": "6.3.12",
- "@storybook/csf-tools": "6.3.12",
- "@storybook/manager-webpack4": "6.3.12",
- "@storybook/node-logger": "6.3.12",
- "@storybook/semver": "^7.3.2",
- "@types/node": "^14.0.10",
- "@types/node-fetch": "^2.5.7",
- "@types/pretty-hrtime": "^1.0.0",
- "@types/webpack": "^4.41.26",
- "better-opn": "^2.1.1",
- "boxen": "^4.2.0",
- "chalk": "^4.1.0",
- "cli-table3": "0.6.0",
- "commander": "^6.2.1",
- "compression": "^1.7.4",
- "core-js": "^3.8.2",
- "cpy": "^8.1.1",
- "detect-port": "^1.3.0",
- "express": "^4.17.1",
- "file-system-cache": "^1.0.5",
- "fs-extra": "^9.0.1",
- "globby": "^11.0.2",
- "ip": "^1.1.5",
- "node-fetch": "^2.6.1",
- "pretty-hrtime": "^1.0.3",
- "prompts": "^2.4.0",
- "regenerator-runtime": "^0.13.7",
- "serve-favicon": "^2.5.0",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2",
- "webpack": "4"
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jest-worker": "^27.4.5",
+ "schema-utils": "^3.1.1",
+ "serialize-javascript": "^6.0.1",
+ "terser": "^5.16.8"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "url": "https://opencollective.com/webpack"
},
"peerDependencies": {
- "@storybook/builder-webpack5": "6.3.12",
- "@storybook/manager-webpack5": "6.3.12",
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
+ "webpack": "^5.1.0"
},
"peerDependenciesMeta": {
- "@storybook/builder-webpack5": {
+ "@swc/core": {
"optional": true
},
- "@storybook/manager-webpack5": {
+ "esbuild": {
"optional": true
},
- "typescript": {
+ "uglify-js": {
"optional": true
}
}
},
- "node_modules/@storybook/core-server/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
"dev": true,
+ "peer": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
},
"engines": {
- "node": ">=8"
+ "node": ">= 10.13.0"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
}
},
- "node_modules/@storybook/core-server/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
"dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/ts-dedent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
+ "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "node": ">=6.10"
}
},
- "node_modules/@storybook/core-server/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD",
+ "peer": true
+ },
+ "node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
"dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "peer": true,
"engines": {
- "node": ">=8"
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-server/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+ "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "has-flag": "^4.0.0"
+ "escalade": "^3.1.2",
+ "picocolors": "^1.0.1"
},
- "engines": {
- "node": ">=8"
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
}
},
- "node_modules/@storybook/csf": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz",
- "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==",
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"dev": true,
"dependencies": {
- "lodash": "^4.17.15"
+ "punycode": "^2.1.0"
}
},
- "node_modules/@storybook/csf-tools": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.3.12.tgz",
- "integrity": "sha512-wNrX+99ajAXxLo0iRwrqw65MLvCV6SFC0XoPLYrtBvyKr+hXOOnzIhO2f5BNEii8velpC2gl2gcLKeacpVYLqA==",
+ "node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "@babel/generator": "^7.12.11",
- "@babel/parser": "^7.12.11",
- "@babel/plugin-transform-react-jsx": "^7.12.12",
- "@babel/preset-env": "^7.12.11",
- "@babel/traverse": "^7.12.11",
- "@babel/types": "^7.12.11",
- "@mdx-js/mdx": "^1.6.22",
- "@storybook/csf": "^0.0.1",
- "core-js": "^3.8.2",
- "fs-extra": "^9.0.1",
- "js-string-escape": "^1.0.1",
- "lodash": "^4.17.20",
- "prettier": "~2.2.1",
- "regenerator-runtime": "^0.13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
}
},
- "node_modules/@storybook/manager-webpack4": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.3.12.tgz",
- "integrity": "sha512-OkPYNrHXg2yZfKmEfTokP6iKx4OLTr0gdI5yehi/bLEuQCSHeruxBc70Dxm1GBk1Mrf821wD9WqMXNDjY5Qtug==",
+ "node_modules/watchpack": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
+ "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
"dev": true,
+ "peer": true,
"dependencies": {
- "@babel/core": "^7.12.10",
- "@babel/plugin-transform-template-literals": "^7.12.1",
- "@babel/preset-react": "^7.12.10",
- "@storybook/addons": "6.3.12",
- "@storybook/core-client": "6.3.12",
- "@storybook/core-common": "6.3.12",
- "@storybook/node-logger": "6.3.12",
- "@storybook/theming": "6.3.12",
- "@storybook/ui": "6.3.12",
- "@types/node": "^14.0.10",
- "@types/webpack": "^4.41.26",
- "babel-loader": "^8.2.2",
- "case-sensitive-paths-webpack-plugin": "^2.3.0",
- "chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "css-loader": "^3.6.0",
- "dotenv-webpack": "^1.8.0",
- "express": "^4.17.1",
- "file-loader": "^6.2.0",
- "file-system-cache": "^1.0.5",
- "find-up": "^5.0.0",
- "fs-extra": "^9.0.1",
- "html-webpack-plugin": "^4.0.0",
- "node-fetch": "^2.6.1",
- "pnp-webpack-plugin": "1.6.4",
- "read-pkg-up": "^7.0.1",
- "regenerator-runtime": "^0.13.7",
- "resolve-from": "^5.0.0",
- "style-loader": "^1.3.0",
- "telejson": "^5.3.2",
- "terser-webpack-plugin": "^4.2.3",
- "ts-dedent": "^2.0.0",
- "url-loader": "^4.1.1",
- "util-deprecate": "^1.0.2",
- "webpack": "4",
- "webpack-dev-middleware": "^3.7.3",
- "webpack-virtual-modules": "^0.2.2"
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack": {
+ "version": "5.88.1",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz",
+ "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.3",
+ "@types/estree": "^1.0.0",
+ "@webassemblyjs/ast": "^1.11.5",
+ "@webassemblyjs/wasm-edit": "^1.11.5",
+ "@webassemblyjs/wasm-parser": "^1.11.5",
+ "acorn": "^8.7.1",
+ "acorn-import-assertions": "^1.9.0",
+ "browserslist": "^4.14.5",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.15.0",
+ "es-module-lexer": "^1.2.1",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.9",
+ "json-parse-even-better-errors": "^2.3.1",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.2.0",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.3.7",
+ "watchpack": "^2.4.0",
+ "webpack-sources": "^3.2.3"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
+ "url": "https://opencollective.com/webpack"
},
"peerDependenciesMeta": {
- "typescript": {
+ "webpack-cli": {
"optional": true
}
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/webpack-sources": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack/node_modules/schema-utils": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
+ "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
"dev": true,
+ "peer": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
},
"engines": {
- "node": ">=8"
+ "node": ">= 10.13.0"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/which-typed-array": {
+ "version": "1.1.18",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz",
+ "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==",
"dev": true,
+ "license": "MIT",
+ "peer": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.8",
+ "call-bound": "^1.0.3",
+ "for-each": "^0.3.3",
+ "gopd": "^1.2.0",
+ "has-tostringtag": "^1.0.2"
},
"engines": {
- "node": ">=10"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/node-logger": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.12.tgz",
- "integrity": "sha512-iktOem/Ls2+dsZY9PhPeC6T1QhX/y7OInP88neLsqEPEbB2UXca3Ydv7OZBhBVbvN25W45b05MRzbtNUxYLNRw==",
- "dev": true,
- "dependencies": {
- "@types/npmlog": "^4.1.2",
- "chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "npmlog": "^4.1.2",
- "pretty-hrtime": "^1.0.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- }
- },
- "node_modules/@storybook/node-logger/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@storybook/node-logger/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@storybook/node-logger/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/node-logger/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/preact": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/preact/-/preact-6.3.12.tgz",
- "integrity": "sha512-okP4Y1Zf26AdjK/5sFJGoF1Ce2WPK/3w+x0WgMdEOs7K7/pnKNQ1Ck8KLXmPyjTN+6bVoIMP8NcS8ZqHJu25lw==",
- "dev": true,
- "dependencies": {
- "@babel/plugin-transform-react-jsx": "^7.12.12",
- "@storybook/addons": "6.3.12",
- "@storybook/core": "6.3.12",
- "@storybook/core-common": "6.3.12",
- "@types/webpack-env": "^1.16.0",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "react": "16.14.0",
- "react-dom": "16.14.0",
- "read-pkg-up": "^7.0.1",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
- },
- "bin": {
- "build-storybook": "bin/build.js",
- "start-storybook": "bin/index.js",
- "storybook-server": "bin/index.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "@babel/core": "*",
- "preact": "^8.0.0||^10.0.0",
- "webpack": "*"
- }
- },
- "node_modules/@storybook/router": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.3.12.tgz",
- "integrity": "sha512-G/pNGCnrJRetCwyEZulHPT+YOcqEj/vkPVDTUfii2qgqukup6K0cjwgd7IukAURnAnnzTi1gmgFuEKUi8GE/KA==",
- "dev": true,
- "dependencies": {
- "@reach/router": "^1.3.4",
- "@storybook/client-logger": "6.3.12",
- "@types/reach__router": "^1.3.7",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- }
- },
- "node_modules/@storybook/semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==",
- "dev": true,
- "dependencies": {
- "core-js": "^3.6.5",
- "find-up": "^4.1.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@storybook/semver/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/semver/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/semver/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@storybook/semver/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/theming": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.3.12.tgz",
- "integrity": "sha512-wOJdTEa/VFyFB2UyoqyYGaZdym6EN7RALuQOAMT6zHA282FBmKw8nL5DETHEbctpnHdcrMC/391teK4nNSrdOA==",
- "dev": true,
- "dependencies": {
- "@emotion/core": "^10.1.1",
- "@emotion/is-prop-valid": "^0.8.6",
- "@emotion/styled": "^10.0.27",
- "@storybook/client-logger": "6.3.12",
- "core-js": "^3.8.2",
- "deep-object-diff": "^1.1.0",
- "emotion-theming": "^10.0.27",
- "global": "^4.4.0",
- "memoizerific": "^1.11.3",
- "polished": "^4.0.5",
- "resolve-from": "^5.0.0",
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- }
- },
- "node_modules/@storybook/ui": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.3.12.tgz",
- "integrity": "sha512-PC2yEz4JMfarq7rUFbeA3hCA+31p5es7YPEtxLRvRwIZhtL0P4zQUfHpotb3KgWdoAIfZesAuoIQwMPQmEFYrw==",
- "dev": true,
- "dependencies": {
- "@emotion/core": "^10.1.1",
- "@storybook/addons": "6.3.12",
- "@storybook/api": "6.3.12",
- "@storybook/channels": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/components": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/router": "6.3.12",
- "@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.3.12",
- "@types/markdown-to-jsx": "^6.11.3",
- "copy-to-clipboard": "^3.3.1",
- "core-js": "^3.8.2",
- "core-js-pure": "^3.8.2",
- "downshift": "^6.0.15",
- "emotion-theming": "^10.0.27",
- "fuse.js": "^3.6.1",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "markdown-to-jsx": "^6.11.4",
- "memoizerific": "^1.11.3",
- "polished": "^4.0.5",
- "qs": "^6.10.0",
- "react-draggable": "^4.4.3",
- "react-helmet-async": "^1.0.7",
- "react-sizeme": "^3.0.1",
- "regenerator-runtime": "^0.13.7",
- "resolve-from": "^5.0.0",
- "store2": "^2.12.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- }
- },
- "node_modules/@storybook/ui/node_modules/markdown-to-jsx": {
- "version": "6.11.4",
- "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz",
- "integrity": "sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==",
- "dev": true,
- "dependencies": {
- "prop-types": "^15.6.2",
- "unquote": "^1.1.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "peerDependencies": {
- "react": ">= 0.14.0"
- }
- },
- "node_modules/@types/braces": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.1.tgz",
- "integrity": "sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==",
- "dev": true
- },
- "node_modules/@types/color-convert": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz",
- "integrity": "sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==",
- "dev": true,
- "dependencies": {
- "@types/color-name": "*"
- }
- },
- "node_modules/@types/color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
- "dev": true
- },
- "node_modules/@types/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
- "dev": true,
- "dependencies": {
- "@types/minimatch": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/glob-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@types/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-pYHWiDR+EOUN18F9byiAoQNUMZ0=",
- "dev": true
- },
- "node_modules/@types/hast": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
- "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
- "dev": true,
- "dependencies": {
- "@types/unist": "*"
- }
- },
- "node_modules/@types/html-minifier-terser": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz",
- "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==",
- "dev": true
- },
- "node_modules/@types/is-function": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz",
- "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==",
- "dev": true
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
- "dev": true
- },
- "node_modules/@types/markdown-to-jsx": {
- "version": "6.11.3",
- "resolved": "https://registry.npmjs.org/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.3.tgz",
- "integrity": "sha512-30nFYpceM/ZEvhGiqWjm5quLUxNeld0HCzJEXMZZDpq53FPkS85mTwkWtCXzCqq8s5JYLgM5W392a02xn8Bdaw==",
- "dev": true,
- "dependencies": {
- "@types/react": "*"
- }
- },
- "node_modules/@types/mdast": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
- "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
- "dev": true,
- "dependencies": {
- "@types/unist": "*"
- }
- },
- "node_modules/@types/micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==",
- "dev": true,
- "dependencies": {
- "@types/braces": "*"
- }
- },
- "node_modules/@types/minimatch": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
- "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
- "dev": true
- },
- "node_modules/@types/node": {
- "version": "14.17.32",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.32.tgz",
- "integrity": "sha512-JcII3D5/OapPGx+eJ+Ik1SQGyt6WvuqdRfh9jUwL6/iHGjmyOriBDciBUu7lEIBTL2ijxwrR70WUnw5AEDmFvQ==",
- "dev": true
- },
- "node_modules/@types/node-fetch": {
- "version": "2.5.12",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz",
- "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "form-data": "^3.0.0"
- }
- },
- "node_modules/@types/normalize-package-data": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
- "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
- "dev": true
- },
- "node_modules/@types/npmlog": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.3.tgz",
- "integrity": "sha512-1TcL7YDYCtnHmLhTWbum+IIwLlvpaHoEKS2KNIngEwLzwgDeHaebaEHHbQp8IqzNQ9IYiboLKUjAf7MZqG63+w==",
- "dev": true
- },
- "node_modules/@types/overlayscrollbars": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.1.tgz",
- "integrity": "sha512-V25YHbSoKQN35UasHf0EKD9U2vcmexRSp78qa8UglxFH8H3D+adEa9zGZwrqpH4TdvqeMrgMqVqsLB4woAryrQ==",
- "dev": true
- },
- "node_modules/@types/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
- "dev": true
- },
- "node_modules/@types/parse5": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz",
- "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==",
- "dev": true
- },
- "node_modules/@types/pretty-hrtime": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz",
- "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==",
- "dev": true
- },
- "node_modules/@types/prop-types": {
- "version": "15.7.4",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz",
- "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==",
- "dev": true
- },
- "node_modules/@types/qs": {
- "version": "6.9.7",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
- "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
- "dev": true
- },
- "node_modules/@types/reach__router": {
- "version": "1.3.9",
- "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.9.tgz",
- "integrity": "sha512-N6rqQqTTAV/zKLfK3iq9Ww3wqCEhTZvsilhl0zI09zETdVq1QGmJH6+/xnj8AFUWIrle2Cqo+PGM/Ltr1vBb9w==",
- "dev": true,
- "dependencies": {
- "@types/react": "*"
- }
- },
- "node_modules/@types/react": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.33.tgz",
- "integrity": "sha512-pLWntxXpDPaU+RTAuSGWGSEL2FRTNyRQOjSWDke/rxRg14ncsZvx8AKWMWZqvc1UOaJIAoObdZhAWvRaHFi5rw==",
- "dev": true,
- "dependencies": {
- "@types/prop-types": "*",
- "@types/scheduler": "*",
- "csstype": "^3.0.2"
- }
- },
- "node_modules/@types/react-syntax-highlighter": {
- "version": "11.0.5",
- "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz",
- "integrity": "sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==",
- "dev": true,
- "dependencies": {
- "@types/react": "*"
- }
- },
- "node_modules/@types/react/node_modules/csstype": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz",
- "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==",
- "dev": true
- },
- "node_modules/@types/scheduler": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
- "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
- "dev": true
- },
- "node_modules/@types/source-list-map": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
- "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
- "dev": true
- },
- "node_modules/@types/tapable": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz",
- "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==",
- "dev": true
- },
- "node_modules/@types/uglify-js": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz",
- "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==",
- "dev": true,
- "dependencies": {
- "source-map": "^0.6.1"
- }
- },
- "node_modules/@types/uglify-js/node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@types/unist": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
- "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==",
- "dev": true
- },
- "node_modules/@types/webpack": {
- "version": "4.41.31",
- "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.31.tgz",
- "integrity": "sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "@types/tapable": "^1",
- "@types/uglify-js": "*",
- "@types/webpack-sources": "*",
- "anymatch": "^3.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/@types/webpack-env": {
- "version": "1.16.3",
- "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.3.tgz",
- "integrity": "sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw==",
- "dev": true
- },
- "node_modules/@types/webpack-sources": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz",
- "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "@types/source-list-map": "*",
- "source-map": "^0.7.3"
- }
- },
- "node_modules/@types/webpack-sources/node_modules/source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@types/webpack/node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
- "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-code-frame": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
- "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/helper-fsm": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
- "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-module-context": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
- "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
- "dev": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "node_modules/@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
- "dev": true,
- "dependencies": {
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
- "dev": true
- },
- "node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/helper-wasm-section": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-opt": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/wast-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
- "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/floating-point-hex-parser": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-code-frame": "1.9.0",
- "@webassemblyjs/helper-fsm": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true
- },
- "node_modules/@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true
- },
- "node_modules/accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "dev": true,
- "dependencies": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/address": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz",
- "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==",
- "dev": true,
- "engines": {
- "node": ">= 0.12.0"
- }
- },
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/airbnb-js-shims": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz",
- "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==",
- "dev": true,
- "dependencies": {
- "array-includes": "^3.0.3",
- "array.prototype.flat": "^1.2.1",
- "array.prototype.flatmap": "^1.2.1",
- "es5-shim": "^4.5.13",
- "es6-shim": "^0.35.5",
- "function.prototype.name": "^1.1.0",
- "globalthis": "^1.0.0",
- "object.entries": "^1.1.0",
- "object.fromentries": "^2.0.0 || ^1.0.0",
- "object.getownpropertydescriptors": "^2.0.3",
- "object.values": "^1.1.0",
- "promise.allsettled": "^1.0.0",
- "promise.prototype.finally": "^3.1.0",
- "string.prototype.matchall": "^4.0.0 || ^3.0.1",
- "string.prototype.padend": "^3.0.0",
- "string.prototype.padstart": "^3.0.0",
- "symbol.prototype.description": "^1.0.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-errors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
- "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": ">=5.0.0"
- }
- },
- "node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/ansi-align": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
- "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.1.0"
- }
- },
- "node_modules/ansi-colors": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
- "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-html-community": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
- "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
- "dev": true,
- "engines": [
- "node >= 0.8.0"
- ],
- "bin": {
- "ansi-html": "bin/ansi-html"
- }
- },
- "node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/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,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ansi-styles/node_modules/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,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/ansi-styles/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "node_modules/ansi-to-html": {
- "version": "0.6.15",
- "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz",
- "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==",
- "dev": true,
- "dependencies": {
- "entities": "^2.0.0"
- },
- "bin": {
- "ansi-to-html": "bin/ansi-to-html"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dev": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/app-root-dir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz",
- "integrity": "sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg=",
- "dev": true
- },
- "node_modules/aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true
- },
- "node_modules/are-we-there-yet": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
- "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
- "dev": true,
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "node_modules/arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
- "dev": true
- },
- "node_modules/array-includes": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
- "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1",
- "get-intrinsic": "^1.1.1",
- "is-string": "^1.0.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/array.prototype.flat": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
- "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz",
- "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.map": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.4.tgz",
- "integrity": "sha512-Qds9QnX7A0qISY7JT5WuJO0NJPE9CMlC6JzHQfhpqAAQQzufVRoeH7EzUY5GcPTx72voG8LV/5eo+b8Qi8hmhA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.0",
- "es-array-method-boxes-properly": "^1.0.0",
- "is-string": "^1.0.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/asn1.js": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
- "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "node_modules/asn1.js/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
- "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
- "dev": true,
- "dependencies": {
- "object-assign": "^4.1.1",
- "util": "0.10.3"
- }
- },
- "node_modules/assert/node_modules/inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- },
- "node_modules/assert/node_modules/util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "dev": true,
- "dependencies": {
- "inherits": "2.0.1"
- }
- },
- "node_modules/assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/async-each": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
- "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
- "dev": true,
- "optional": true
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true,
- "bin": {
- "atob": "bin/atob.js"
- },
- "engines": {
- "node": ">= 4.5.0"
- }
- },
- "node_modules/autoprefixer": {
- "version": "9.8.8",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz",
- "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.12.0",
- "caniuse-lite": "^1.0.30001109",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "picocolors": "^0.2.1",
- "postcss": "^7.0.32",
- "postcss-value-parser": "^4.1.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "funding": {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
- }
- },
- "node_modules/axe-core": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.4.tgz",
- "integrity": "sha512-4Hk6iSA/H90rtiPoCpSkeJxNWCPBf7szwVvaUqrPdxo0j2Y04suHK9jPKXaE3WI7OET6wBSwsWw7FDc1DBq7iQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/babel-loader": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
- "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==",
- "dev": true,
- "dependencies": {
- "find-cache-dir": "^3.3.1",
- "loader-utils": "^1.4.0",
- "make-dir": "^3.1.0",
- "schema-utils": "^2.6.5"
- },
- "engines": {
- "node": ">= 8.9"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0",
- "webpack": ">=2"
- }
- },
- "node_modules/babel-loader/node_modules/find-cache-dir": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
- "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
- "dev": true,
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
- }
- },
- "node_modules/babel-loader/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-loader/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-loader/node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/babel-loader/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/babel-loader/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-loader/node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-plugin-apply-mdx-type-prop": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz",
- "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "7.10.4",
- "@mdx-js/util": "1.6.22"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- },
- "peerDependencies": {
- "@babel/core": "^7.11.6"
- }
- },
- "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- },
- "node_modules/babel-plugin-dynamic-import-node": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
- "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
- "dev": true,
- "dependencies": {
- "object.assign": "^4.1.0"
- }
- },
- "node_modules/babel-plugin-emotion": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz",
- "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-module-imports": "^7.0.0",
- "@emotion/hash": "0.8.0",
- "@emotion/memoize": "0.7.4",
- "@emotion/serialize": "^0.11.16",
- "babel-plugin-macros": "^2.0.0",
- "babel-plugin-syntax-jsx": "^6.18.0",
- "convert-source-map": "^1.5.0",
- "escape-string-regexp": "^1.0.5",
- "find-root": "^1.1.0",
- "source-map": "^0.5.7"
- }
- },
- "node_modules/babel-plugin-emotion/node_modules/babel-plugin-macros": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
- "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.7.2",
- "cosmiconfig": "^6.0.0",
- "resolve": "^1.12.0"
- }
- },
- "node_modules/babel-plugin-emotion/node_modules/cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
- "dev": true,
- "dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-plugin-extract-import-names": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz",
- "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "7.10.4"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- },
- "node_modules/babel-plugin-macros": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
- "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "cosmiconfig": "^7.0.0",
- "resolve": "^1.19.0"
- },
- "engines": {
- "node": ">=10",
- "npm": ">=6"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz",
- "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==",
- "dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.13.11",
- "@babel/helper-define-polyfill-provider": "^0.2.2",
- "semver": "^6.1.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz",
- "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.1.5",
- "core-js-compat": "^3.8.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs3/node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz",
- "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.13.0",
- "@babel/helper-module-imports": "^7.12.13",
- "@babel/helper-plugin-utils": "^7.13.0",
- "@babel/traverse": "^7.13.0",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2",
- "semver": "^6.1.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0-0"
- }
- },
- "node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz",
- "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.2.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/babel-plugin-syntax-jsx": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
- "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
- "dev": true
- },
- "node_modules/bail": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
- "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "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==",
- "dev": true
- },
- "node_modules/base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "dependencies": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/batch-processor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz",
- "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=",
- "dev": true
- },
- "node_modules/better-opn": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz",
- "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==",
- "dev": true,
- "dependencies": {
- "open": "^7.0.3"
- },
- "engines": {
- "node": ">8.0.0"
- }
- },
- "node_modules/big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
- },
- "node_modules/bn.js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
- "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==",
- "dev": true
- },
- "node_modules/body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
- "dev": true,
- "dependencies": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/body-parser/node_modules/bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/body-parser/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/body-parser/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "node_modules/body-parser/node_modules/qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "dev": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
- "dev": true
- },
- "node_modules/boxen": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
- "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
- "dev": true,
- "dependencies": {
- "ansi-align": "^3.0.0",
- "camelcase": "^5.3.1",
- "chalk": "^3.0.0",
- "cli-boxes": "^2.2.0",
- "string-width": "^4.1.0",
- "term-size": "^2.1.0",
- "type-fest": "^0.8.1",
- "widest-line": "^3.1.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/boxen/node_modules/chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/boxen/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/boxen/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "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==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
- "dev": true
- },
- "node_modules/browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
- "dependencies": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/browserify-cipher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "dev": true,
- "dependencies": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "node_modules/browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
- "dev": true,
- "dependencies": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/browserify-rsa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
- "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
- "dev": true,
- "dependencies": {
- "bn.js": "^5.0.0",
- "randombytes": "^2.0.1"
- }
- },
- "node_modules/browserify-sign": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
- "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
- "dev": true,
- "dependencies": {
- "bn.js": "^5.1.1",
- "browserify-rsa": "^4.0.1",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "elliptic": "^6.5.3",
- "inherits": "^2.0.4",
- "parse-asn1": "^5.1.5",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- }
- },
- "node_modules/browserify-sign/node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/browserify-sign/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "dev": true,
- "dependencies": {
- "pako": "~1.0.5"
- }
- },
- "node_modules/browserslist": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz",
- "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==",
- "dev": true,
- "dependencies": {
- "caniuse-lite": "^1.0.30001271",
- "electron-to-chromium": "^1.3.878",
- "escalade": "^3.1.1",
- "node-releases": "^2.0.1",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- }
- },
- "node_modules/browserslist/node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
- "node_modules/buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
- "dev": true,
- "dependencies": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- }
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "node_modules/buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
- "dev": true
- },
- "node_modules/buffer/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "node_modules/builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
- "dev": true
- },
- "node_modules/bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/cacache": {
- "version": "15.3.0",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
- "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
- "dev": true,
- "dependencies": {
- "@npmcli/fs": "^1.0.0",
- "@npmcli/move-file": "^1.0.1",
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "glob": "^7.1.4",
- "infer-owner": "^1.0.4",
- "lru-cache": "^6.0.0",
- "minipass": "^3.1.1",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.2",
- "mkdirp": "^1.0.3",
- "p-map": "^4.0.0",
- "promise-inflight": "^1.0.1",
- "rimraf": "^3.0.2",
- "ssri": "^8.0.1",
- "tar": "^6.0.2",
- "unique-filename": "^1.1.1"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/cacache/node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "dependencies": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cache-base/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/call-me-maybe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
- "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
- "dev": true
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camel-case": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
- "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
- "dev": true,
- "dependencies": {
- "pascal-case": "^3.1.2",
- "tslib": "^2.0.3"
- }
- },
- "node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase-css": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001271",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz",
- "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- }
- },
- "node_modules/case-sensitive-paths-webpack-plugin": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
- "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ccount": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
- "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/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,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/character-entities": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
- "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-entities-legacy": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
- "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-reference-invalid": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
- "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
- "dev": true,
- "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.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
- "dev": true,
- "engines": {
- "node": ">=6.0"
- }
- },
- "node_modules/cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "dependencies": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/class-utils/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/clean-css": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz",
- "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==",
- "dev": true,
- "dependencies": {
- "source-map": "~0.6.0"
- },
- "engines": {
- "node": ">= 4.0"
- }
- },
- "node_modules/clean-css/node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cli-table3": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz",
- "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==",
- "dev": true,
- "dependencies": {
- "object-assign": "^4.1.0",
- "string-width": "^4.2.0"
- },
- "engines": {
- "node": "10.* || >= 12.*"
- },
- "optionalDependencies": {
- "colors": "^1.1.2"
- }
- },
- "node_modules/clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/clone-deep/node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/clone-deep/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/clsx": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
- "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/collapse-white-space": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz",
- "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "dependencies": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/colors": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
- "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.1.90"
- }
- },
- "node_modules/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,
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/comma-separated-tokens": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
- "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
- "dev": true
- },
- "node_modules/component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "node_modules/compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "dev": true,
- "dependencies": {
- "mime-db": ">= 1.43.0 < 2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/compression": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
- "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
- "dev": true,
- "dependencies": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.16",
- "debug": "2.6.9",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.1.2",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/compression/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/compression/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "node_modules/compute-scroll-into-view": {
- "version": "1.0.17",
- "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz",
- "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==",
- "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=",
- "dev": true
- },
- "node_modules/concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
- "engines": [
- "node >= 0.8"
- ],
- "dependencies": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "node_modules/console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
- "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
- "dev": true
- },
- "node_modules/console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true
- },
- "node_modules/constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
- "dev": true
- },
- "node_modules/content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "5.1.2"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.1"
- }
- },
- "node_modules/cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
- "dev": true
- },
- "node_modules/copy-concurrently": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
- "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
- "dev": true,
- "dependencies": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- }
- },
- "node_modules/copy-concurrently/node_modules/mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/copy-concurrently/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/copy-to-clipboard": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz",
- "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==",
- "dev": true,
- "dependencies": {
- "toggle-selection": "^1.0.6"
- }
- },
- "node_modules/core-js": {
- "version": "3.19.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.0.tgz",
- "integrity": "sha512-L1TpFRWXZ76vH1yLM+z6KssLZrP8Z6GxxW4auoCj+XiViOzNPJCAuTIkn03BGdFe6Z5clX5t64wRIRypsZQrUg==",
- "dev": true,
- "hasInstallScript": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/core-js-compat": {
- "version": "3.19.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.0.tgz",
- "integrity": "sha512-R09rKZ56ccGBebjTLZHvzDxhz93YPT37gBm6qUhnwj3Kt7aCjjZWD1injyNbyeFHxNKfeZBSyds6O9n3MKq1sw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.17.5",
- "semver": "7.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/core-js-compat/node_modules/semver": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
- "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/core-js-pure": {
- "version": "3.19.0",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.0.tgz",
- "integrity": "sha512-UEQk8AxyCYvNAs6baNoPqDADv7BX0AmBLGxVsrAifPPx/C8EAzV4Q+2ZUJqVzfI2TQQEZITnwUkWcHpgc/IubQ==",
- "dev": true,
- "hasInstallScript": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true
- },
- "node_modules/cosmiconfig": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
- "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
- "dev": true,
- "dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.2.1",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.10.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/cp-file": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz",
- "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "nested-error-stacks": "^2.0.0",
- "p-event": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cp-file/node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cpy": {
- "version": "8.1.2",
- "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz",
- "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==",
- "dev": true,
- "dependencies": {
- "arrify": "^2.0.1",
- "cp-file": "^7.0.0",
- "globby": "^9.2.0",
- "has-glob": "^1.0.0",
- "junk": "^3.1.0",
- "nested-error-stacks": "^2.1.0",
- "p-all": "^2.1.0",
- "p-filter": "^2.1.0",
- "p-map": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cpy/node_modules/@nodelib/fs.stat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
- "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/cpy/node_modules/array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true,
- "dependencies": {
- "array-uniq": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "dependencies": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/dir-glob": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
- "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
- "dev": true,
- "dependencies": {
- "path-type": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cpy/node_modules/fast-glob": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
- "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
- "dev": true,
- "dependencies": {
- "@mrmlnc/readdir-enhanced": "^2.2.1",
- "@nodelib/fs.stat": "^1.1.2",
- "glob-parent": "^3.1.0",
- "is-glob": "^4.0.0",
- "merge2": "^1.2.3",
- "micromatch": "^3.1.10"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/cpy/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
- "dependencies": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- }
- },
- "node_modules/cpy/node_modules/glob-parent/node_modules/is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/globby": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz",
- "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==",
- "dev": true,
- "dependencies": {
- "@types/glob": "^7.1.1",
- "array-union": "^1.0.2",
- "dir-glob": "^2.2.2",
- "fast-glob": "^2.2.6",
- "glob": "^7.1.3",
- "ignore": "^4.0.3",
- "pify": "^4.0.1",
- "slash": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cpy/node_modules/ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/cpy/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/cpy/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/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,
- "dependencies": {
- "pify": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cpy/node_modules/path-type/node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cpy/node_modules/slash": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cpy/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/create-ecdh": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
- "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.5.3"
- }
- },
- "node_modules/create-ecdh/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "dependencies": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "node_modules/create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
- "dependencies": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "node_modules/create-react-context": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz",
- "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==",
- "dev": true,
- "dependencies": {
- "gud": "^1.0.0",
- "warning": "^4.0.3"
- },
- "peerDependencies": {
- "prop-types": "^15.0.0",
- "react": "^0.14.0 || ^15.0.0 || ^16.0.0"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "dev": true,
- "dependencies": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/css-loader": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
- "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
- "dev": true,
- "dependencies": {
- "camelcase": "^5.3.1",
- "cssesc": "^3.0.0",
- "icss-utils": "^4.1.1",
- "loader-utils": "^1.2.3",
- "normalize-path": "^3.0.0",
- "postcss": "^7.0.32",
- "postcss-modules-extract-imports": "^2.0.0",
- "postcss-modules-local-by-default": "^3.0.2",
- "postcss-modules-scope": "^2.2.0",
- "postcss-modules-values": "^3.0.0",
- "postcss-value-parser": "^4.1.0",
- "schema-utils": "^2.7.0",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">= 8.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/css-select": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
- "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^5.0.0",
- "domhandler": "^4.2.0",
- "domutils": "^2.6.0",
- "nth-check": "^2.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/css-what": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
- "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true,
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/csstype": {
- "version": "2.6.18",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.18.tgz",
- "integrity": "sha512-RSU6Hyeg14am3Ah4VZEmeX8H7kLwEEirXe6aU2IPfKNvhXwTflK5HQRDNI0ypQXoqmm+QPyG2IaPuQE5zMwSIQ==",
- "dev": true
- },
- "node_modules/cyclist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
- "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
- "dev": true
- },
- "node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true,
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/deep-object-diff": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz",
- "integrity": "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==",
- "dev": true
- },
- "node_modules/deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dev": true,
- "dependencies": {
- "object-keys": "^1.0.12"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/define-property/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true
- },
- "node_modules/depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/des.js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
- "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "node_modules/destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
- "dev": true
- },
- "node_modules/detab": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz",
- "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==",
- "dev": true,
- "dependencies": {
- "repeat-string": "^1.5.4"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/detect-port": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz",
- "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==",
- "dev": true,
- "dependencies": {
- "address": "^1.0.1",
- "debug": "^2.6.0"
- },
- "bin": {
- "detect": "bin/detect-port",
- "detect-port": "bin/detect-port"
- },
- "engines": {
- "node": ">= 4.2.1"
- }
- },
- "node_modules/detect-port-alt": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz",
- "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==",
- "dev": true,
- "dependencies": {
- "address": "^1.0.1",
- "debug": "^2.6.0"
- },
- "bin": {
- "detect": "bin/detect-port",
- "detect-port": "bin/detect-port"
- },
- "engines": {
- "node": ">= 4.2.1"
- }
- },
- "node_modules/detect-port-alt/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/detect-port-alt/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "node_modules/detect-port/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/detect-port/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "node_modules/diffie-hellman": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
- }
- },
- "node_modules/diffie-hellman/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dom-converter": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
- "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
- "dev": true,
- "dependencies": {
- "utila": "~0.4"
- }
- },
- "node_modules/dom-helpers": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
- "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.8.7",
- "csstype": "^3.0.2"
- }
- },
- "node_modules/dom-helpers/node_modules/csstype": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz",
- "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==",
- "dev": true
- },
- "node_modules/dom-serializer": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
- "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.2.0",
- "entities": "^2.0.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/dom-walk": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
- "dev": true
- },
- "node_modules/domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true,
- "engines": {
- "node": ">=0.4",
- "npm": ">=1.2"
- }
- },
- "node_modules/domelementtype": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
- "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ]
- },
- "node_modules/domhandler": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
- "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.2.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/domutils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
- "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
- "dev": true,
- "dependencies": {
- "dom-serializer": "^1.0.1",
- "domelementtype": "^2.2.0",
- "domhandler": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/dot-case": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
- "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
- "dev": true,
- "dependencies": {
- "no-case": "^3.0.4",
- "tslib": "^2.0.3"
- }
- },
- "node_modules/dotenv": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz",
- "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/dotenv-defaults": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-1.1.1.tgz",
- "integrity": "sha512-6fPRo9o/3MxKvmRZBD3oNFdxODdhJtIy1zcJeUSCs6HCy4tarUpd+G67UTU9tF6OWXeSPqsm4fPAB+2eY9Rt9Q==",
- "dev": true,
- "dependencies": {
- "dotenv": "^6.2.0"
- }
- },
- "node_modules/dotenv-expand": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
- "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
- "dev": true
- },
- "node_modules/dotenv-webpack": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-1.8.0.tgz",
- "integrity": "sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg==",
- "dev": true,
- "dependencies": {
- "dotenv-defaults": "^1.0.2"
- },
- "peerDependencies": {
- "webpack": "^1 || ^2 || ^3 || ^4"
- }
- },
- "node_modules/downshift": {
- "version": "6.1.7",
- "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz",
- "integrity": "sha512-cVprZg/9Lvj/uhYRxELzlu1aezRcgPWBjTvspiGTVEU64gF5pRdSRKFVLcxqsZC637cLAGMbL40JavEfWnqgNg==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.14.8",
- "compute-scroll-into-view": "^1.0.17",
- "prop-types": "^15.7.2",
- "react-is": "^17.0.2",
- "tslib": "^2.3.0"
- },
- "peerDependencies": {
- "react": ">=16.12.0"
- }
- },
- "node_modules/duplexer": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
- "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
- "dev": true
- },
- "node_modules/duplexify": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
- "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
- "dev": true
- },
- "node_modules/electron-to-chromium": {
- "version": "1.3.879",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.879.tgz",
- "integrity": "sha512-zJo+D9GwbJvM31IdFmwcGvychhk4KKbKYo2GWlsn+C/dxz2NwmbhGJjWwTfFSF2+eFH7VvfA8MCZ8SOqTrlnpw==",
- "dev": true
- },
- "node_modules/element-resize-detector": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.3.tgz",
- "integrity": "sha512-+dhNzUgLpq9ol5tyhoG7YLoXL3ssjfFW+0gpszXPwRU6NjGr1fVHMEAF8fVzIiRJq57Nre0RFeIjJwI8Nh2NmQ==",
- "dev": true,
- "dependencies": {
- "batch-processor": "1.0.0"
- }
- },
- "node_modules/elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/elliptic/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/emotion-theming": {
- "version": "10.0.27",
- "resolved": "https://registry.npmjs.org/emotion-theming/-/emotion-theming-10.0.27.tgz",
- "integrity": "sha512-MlF1yu/gYh8u+sLUqA0YuA9JX0P4Hb69WlKc/9OLo+WCXuX6sy/KoIa+qJimgmr2dWqnypYKYPX37esjDBbhdw==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.5.5",
- "@emotion/weak-memoize": "0.2.5",
- "hoist-non-react-statics": "^3.3.0"
- },
- "peerDependencies": {
- "@emotion/core": "^10.0.27",
- "react": ">=16.3.0"
- }
- },
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/enhanced-resolve": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
- "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/enhanced-resolve/node_modules/memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "dependencies": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- },
- "engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
- }
- },
- "node_modules/entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
- "dev": true,
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/errno": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
- "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
- "dev": true,
- "dependencies": {
- "prr": "~1.0.1"
- },
- "bin": {
- "errno": "cli.js"
- }
- },
- "node_modules/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,
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/es-abstract": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
- "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "get-symbol-description": "^1.0.0",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.1",
- "is-string": "^1.0.7",
- "is-weakref": "^1.0.1",
- "object-inspect": "^1.11.0",
- "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"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-array-method-boxes-properly": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
- "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
- "dev": true
- },
- "node_modules/es-get-iterator": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz",
- "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.0",
- "has-symbols": "^1.0.1",
- "is-arguments": "^1.1.0",
- "is-map": "^2.0.2",
- "is-set": "^2.0.2",
- "is-string": "^1.0.5",
- "isarray": "^2.0.5"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es5-shim": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.2.tgz",
- "integrity": "sha512-n0XTVMGps+Deyr38jtqKPR5F5hb9owYeRQcKJW39eFvzUk/u/9Ww315werRzbiNMnHCUw/YHDPBphTlEnzdi+A==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/es6-shim": {
- "version": "0.35.6",
- "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz",
- "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==",
- "dev": true
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
- "dev": true
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esrecurse/node_modules/estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "dev": true,
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "dependencies": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "node_modules/expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "dependencies": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/expand-brackets/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/expand-brackets/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "node_modules/express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
- "dev": true,
- "dependencies": {
- "accepts": "~1.3.7",
- "array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
- "content-type": "~1.0.4",
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.1.2",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/express/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/express/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "node_modules/express/node_modules/qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "dev": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "node_modules/extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "dependencies": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "dependencies": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "node_modules/fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
- "dev": true,
- "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"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/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
- },
- "node_modules/fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "dev": true,
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fault": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
- "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
- "dev": true,
- "dependencies": {
- "format": "^0.2.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/figgy-pudding": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
- "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
- "dev": true
- },
- "node_modules/file-loader": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
- "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
- "dev": true,
- "dependencies": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/file-loader/node_modules/loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- },
- "engines": {
- "node": ">=8.9.0"
- }
- },
- "node_modules/file-loader/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/file-system-cache": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.0.5.tgz",
- "integrity": "sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08=",
- "dev": true,
- "dependencies": {
- "bluebird": "^3.3.5",
- "fs-extra": "^0.30.0",
- "ramda": "^0.21.0"
- }
- },
- "node_modules/file-system-cache/node_modules/fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "node_modules/file-system-cache/node_modules/jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "dev": true,
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/file-system-cache/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/filesize": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz",
- "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==",
- "dev": true,
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/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,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "dev": true,
- "dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/finalhandler/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/finalhandler/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "node_modules/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,
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/node_modules/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,
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/node_modules/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,
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/find-cache-dir/node_modules/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,
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/node_modules/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,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/find-cache-dir/node_modules/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,
- "dependencies": {
- "find-up": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-root": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
- "dev": true
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flush-write-stream": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
- "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.3.6"
- }
- },
- "node_modules/for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.4.0.tgz",
- "integrity": "sha512-3I3wFkc4DbzaUDPWEi96wdYGu4EKtxBafhZYm0o4mX51d9bphAY4P3mBl8K5mFXFJqVzHfmdbm9kLGnm7vwwBg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.8.3",
- "@types/json-schema": "^7.0.5",
- "chalk": "^4.1.0",
- "chokidar": "^3.4.2",
- "cosmiconfig": "^6.0.0",
- "deepmerge": "^4.2.2",
- "fs-extra": "^9.0.0",
- "glob": "^7.1.6",
- "memfs": "^3.1.2",
- "minimatch": "^3.0.4",
- "schema-utils": "2.7.0",
- "semver": "^7.3.2",
- "tapable": "^1.0.0"
- },
- "engines": {
- "node": ">=10",
- "yarn": ">=1.0.0"
- },
- "peerDependencies": {
- "eslint": ">= 6",
- "typescript": ">= 2.7",
- "vue-template-compiler": "*",
- "webpack": ">= 4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- },
- "vue-template-compiler": {
- "optional": true
- }
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
- "dev": true,
- "dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
- "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.4",
- "ajv": "^6.12.2",
- "ajv-keywords": "^3.4.1"
- },
- "engines": {
- "node": ">= 8.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "dev": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/format": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
- "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=",
- "dev": true,
- "engines": {
- "node": ">=0.4.x"
- }
- },
- "node_modules/forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "dependencies": {
- "map-cache": "^0.2.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/from2": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "dev": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/fs-monkey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
- "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
- "dev": true
- },
- "node_modules/fs-write-stream-atomic": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
- "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "node_modules/function.prototype.name": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
- "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.0",
- "functions-have-names": "^1.2.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/functions-have-names": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz",
- "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/fuse.js": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz",
- "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "dev": true,
- "dependencies": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "node_modules/gauge/node_modules/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,
- "dependencies": {
- "number-is-nan": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/gauge/node_modules/string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "dependencies": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dev": true,
- "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/glob-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
- "dependencies": {
- "glob-parent": "^2.0.0",
- "is-glob": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/glob-base/node_modules/glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "dependencies": {
- "is-glob": "^2.0.0"
- }
- },
- "node_modules/glob-base/node_modules/is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/glob-base/node_modules/is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "dependencies": {
- "is-extglob": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/glob-promise": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz",
- "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==",
- "dev": true,
- "dependencies": {
- "@types/glob": "*"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "glob": "*"
- }
- },
- "node_modules/glob-to-regexp": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
- "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
- "dev": true
- },
- "node_modules/global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "dev": true,
- "dependencies": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
- "node_modules/global-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
- "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
- "dev": true,
- "dependencies": {
- "global-prefix": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/global-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
- "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
- "dev": true,
- "dependencies": {
- "ini": "^1.3.5",
- "kind-of": "^6.0.2",
- "which": "^1.3.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/global-prefix/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/globalthis": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz",
- "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==",
- "dev": true,
- "dependencies": {
- "define-properties": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
- "dev": true,
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
- "dev": true
- },
- "node_modules/gud": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz",
- "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==",
- "dev": true
- },
- "node_modules/gzip-size": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
- "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==",
- "dev": true,
- "dependencies": {
- "duplexer": "^0.1.1",
- "pify": "^4.0.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/has-glob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz",
- "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=",
- "dev": true,
- "dependencies": {
- "is-glob": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-glob/node_modules/is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
- "dev": true,
- "dependencies": {
- "has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true
- },
- "node_modules/has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "dependencies": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-value/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/has-values/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/hash-base": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
- "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/hash-base/node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/hash-base/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "node_modules/hast-to-hyperscript": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz",
- "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.3",
- "comma-separated-tokens": "^1.0.0",
- "property-information": "^5.3.0",
- "space-separated-tokens": "^1.0.0",
- "style-to-object": "^0.3.0",
- "unist-util-is": "^4.0.0",
- "web-namespaces": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-from-parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz",
- "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==",
- "dev": true,
- "dependencies": {
- "@types/parse5": "^5.0.0",
- "hastscript": "^6.0.0",
- "property-information": "^5.0.0",
- "vfile": "^4.0.0",
- "vfile-location": "^3.2.0",
- "web-namespaces": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-parse-selector": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
- "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-raw": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz",
- "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==",
- "dev": true,
- "dependencies": {
- "@types/hast": "^2.0.0",
- "hast-util-from-parse5": "^6.0.0",
- "hast-util-to-parse5": "^6.0.0",
- "html-void-elements": "^1.0.0",
- "parse5": "^6.0.0",
- "unist-util-position": "^3.0.0",
- "vfile": "^4.0.0",
- "web-namespaces": "^1.0.0",
- "xtend": "^4.0.0",
- "zwitch": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-parse5": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz",
- "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==",
- "dev": true,
- "dependencies": {
- "hast-to-hyperscript": "^9.0.0",
- "property-information": "^5.0.0",
- "web-namespaces": "^1.0.0",
- "xtend": "^4.0.0",
- "zwitch": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hastscript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
- "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
- "dev": true,
- "dependencies": {
- "@types/hast": "^2.0.0",
- "comma-separated-tokens": "^1.0.0",
- "hast-util-parse-selector": "^2.0.0",
- "property-information": "^5.0.0",
- "space-separated-tokens": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/highlight.js": {
- "version": "10.7.3",
- "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
- "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "dev": true,
- "dependencies": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/hoist-non-react-statics": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
- "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
- "dev": true,
- "dependencies": {
- "react-is": "^16.7.0"
- }
- },
- "node_modules/hoist-non-react-statics/node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
- },
- "node_modules/hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
- },
- "node_modules/html-entities": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
- "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==",
- "dev": true
- },
- "node_modules/html-minifier-terser": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
- "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
- "dev": true,
- "dependencies": {
- "camel-case": "^4.1.1",
- "clean-css": "^4.2.3",
- "commander": "^4.1.1",
- "he": "^1.2.0",
- "param-case": "^3.0.3",
- "relateurl": "^0.2.7",
- "terser": "^4.6.3"
- },
- "bin": {
- "html-minifier-terser": "cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/html-minifier-terser/node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/html-void-elements": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz",
- "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/html-webpack-plugin": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz",
- "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==",
- "dev": true,
- "dependencies": {
- "@types/html-minifier-terser": "^5.0.0",
- "@types/tapable": "^1.0.5",
- "@types/webpack": "^4.41.8",
- "html-minifier-terser": "^5.0.1",
- "loader-utils": "^1.2.3",
- "lodash": "^4.17.20",
- "pretty-error": "^2.1.1",
- "tapable": "^1.1.3",
- "util.promisify": "1.0.0"
- },
- "engines": {
- "node": ">=6.9"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/htmlparser2": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
- "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
- "dev": true,
- "funding": [
- "https://github.com/fb55/htmlparser2?sponsor=1",
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ],
- "dependencies": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.0.0",
- "domutils": "^2.5.2",
- "entities": "^2.0.0"
- }
- },
- "node_modules/http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "dev": true,
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/http-errors/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- },
- "node_modules/https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
- "dev": true
- },
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/icss-utils": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
- "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
- "dev": true,
- "dependencies": {
- "postcss": "^7.0.14"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/iferr": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
- "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
- "dev": true
- },
- "node_modules/ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/immer": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz",
- "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/immer"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/import-fresh/node_modules/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,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true,
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
- "dev": true
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "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==",
- "dev": true
- },
- "node_modules/ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true
- },
- "node_modules/inline-style-parser": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
- "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==",
- "dev": true
- },
- "node_modules/internal-slot": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
- "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
- "dev": true,
- "dependencies": {
- "get-intrinsic": "^1.1.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/interpret": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
- "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
- "dev": true,
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/invariant": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
- "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
- "dev": true,
- "dependencies": {
- "loose-envify": "^1.0.0"
- }
- },
- "node_modules/ip": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
- "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
- "dev": true
- },
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "dev": true,
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-alphabetical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
- "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-alphanumerical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
- "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
- "dev": true,
- "dependencies": {
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-arguments": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
- "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "node_modules/is-bigint": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
- "dev": true,
- "dependencies": {
- "has-bigints": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/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,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
- "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
- "dev": true,
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
- "dev": true,
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-decimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
- "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
- "dev": true,
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-extendable/node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-extendable/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
- "dev": true
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-hexadecimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
- "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-map": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
- "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
- "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
- "dev": true,
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-regex": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-root": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz",
- "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/is-set": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
- "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
- "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-string": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
- "dev": true,
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "dev": true,
- "dependencies": {
- "has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakref": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz",
- "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-whitespace-character": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz",
- "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-word-character": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz",
- "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "dependencies": {
- "is-docker": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "node_modules/isobject": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
- "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/iterate-iterator": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz",
- "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/iterate-value": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz",
- "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==",
- "dev": true,
- "dependencies": {
- "es-get-iterator": "^1.0.2",
- "iterate-iterator": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/jest-worker": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
- "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^7.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- }
- },
- "node_modules/jest-worker/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-worker/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/js-string-escape": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
- "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/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
- },
- "node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true,
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/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
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- },
- "node_modules/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
- },
- "node_modules/json5": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
- "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/junk": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
- "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/klaw": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
- "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
- "dev": true,
- "optionalDependencies": {
- "graceful-fs": "^4.1.9"
- }
- },
- "node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/klona": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz",
- "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/lazy-universal-dotenv": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz",
- "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.5.0",
- "app-root-dir": "^1.0.2",
- "core-js": "^3.0.4",
- "dotenv": "^8.0.0",
- "dotenv-expand": "^5.1.0"
- },
- "engines": {
- "node": ">=6.0.0",
- "npm": ">=6.0.0",
- "yarn": ">=1.0.0"
- }
- },
- "node_modules/lazy-universal-dotenv/node_modules/dotenv": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
- "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
- "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
- "dev": true
- },
- "node_modules/loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
- "dev": true,
- "engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
- }
- },
- "node_modules/loader-utils": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
- "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/loader-utils/node_modules/json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "node_modules/lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
- "dev": true
- },
- "node_modules/lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
- "dev": true
- },
- "node_modules/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,
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/lower-case": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
- "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.0.3"
- }
- },
- "node_modules/lowlight": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
- "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
- "dev": true,
- "dependencies": {
- "fault": "^1.0.0",
- "highlight.js": "~10.7.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/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,
- "dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/map-or-similar": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz",
- "integrity": "sha1-beJlMXSt+12e3DPGnT6Sobdvrwg=",
- "dev": true
- },
- "node_modules/map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "dependencies": {
- "object-visit": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/markdown-escapes": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz",
- "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/markdown-to-jsx": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.3.tgz",
- "integrity": "sha512-jtQ6VyT7rMT5tPV0g2EJakEnXLiPksnvlYtwQsVVZ611JsWGN8bQ1tVSDX4s6JllfEH6wmsYxNjTUAMrPmNA8w==",
- "dev": true,
- "engines": {
- "node": ">= 10"
- },
- "peerDependencies": {
- "react": ">= 0.14.0"
- }
- },
- "node_modules/md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dev": true,
- "dependencies": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/mdast-squeeze-paragraphs": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz",
- "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==",
- "dev": true,
- "dependencies": {
- "unist-util-remove": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-definitions": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz",
- "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==",
- "dev": true,
- "dependencies": {
- "unist-util-visit": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-to-hast": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz",
- "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==",
- "dev": true,
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "@types/unist": "^2.0.0",
- "mdast-util-definitions": "^4.0.0",
- "mdurl": "^1.0.0",
- "unist-builder": "^2.0.0",
- "unist-util-generated": "^1.0.0",
- "unist-util-position": "^3.0.0",
- "unist-util-visit": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdurl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
- "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
- "dev": true
- },
- "node_modules/media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/memfs": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz",
- "integrity": "sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==",
- "dev": true,
- "dependencies": {
- "fs-monkey": "1.0.3"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/memoize-one": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
- "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==",
- "dev": true
- },
- "node_modules/memoizerific": {
- "version": "1.11.3",
- "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz",
- "integrity": "sha1-fIekZGREwy11Q4VwkF8tvRsagFo=",
- "dev": true,
- "dependencies": {
- "map-or-similar": "^1.5.0"
- }
- },
- "node_modules/memory-fs": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
- "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
- "dev": true,
- "dependencies": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- },
- "node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
- "dev": true
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/microevent.ts": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz",
- "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==",
- "dev": true
- },
- "node_modules/micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dev": true,
- "dependencies": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- },
- "bin": {
- "miller-rabin": "bin/miller-rabin"
- }
- },
- "node_modules/miller-rabin/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true,
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mime-db": {
- "version": "1.50.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
- "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.33",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz",
- "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==",
- "dev": true,
- "dependencies": {
- "mime-db": "1.50.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
- "dev": true,
- "dependencies": {
- "dom-walk": "^0.1.0"
- }
- },
- "node_modules/minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
- },
- "node_modules/minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
- "dev": true
- },
- "node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
- },
- "node_modules/minipass": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz",
- "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minipass-collect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
- "dev": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minipass-flush": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
- "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
- "dev": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minipass-pipeline": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
- "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
- "dev": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "dev": true,
- "dependencies": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/mississippi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
- "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
- "dev": true,
- "dependencies": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "dependencies": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/move-concurrently": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
- "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
- "dev": true,
- "dependencies": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- }
- },
- "node_modules/move-concurrently/node_modules/mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/move-concurrently/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/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
- },
- "node_modules/nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "dev": true
- },
- "node_modules/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
- },
- "node_modules/no-case": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
- "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
- "dev": true,
- "dependencies": {
- "lower-case": "^2.0.2",
- "tslib": "^2.0.3"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
- "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
- "dev": true,
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- }
- },
- "node_modules/node-libs-browser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
- "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
- "dev": true,
- "dependencies": {
- "assert": "^1.1.1",
- "browserify-zlib": "^0.2.0",
- "buffer": "^4.3.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "^1.0.0",
- "crypto-browserify": "^3.11.0",
- "domain-browser": "^1.1.1",
- "events": "^3.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "0.0.1",
- "process": "^0.11.10",
- "punycode": "^1.2.4",
- "querystring-es3": "^0.2.0",
- "readable-stream": "^2.3.3",
- "stream-browserify": "^2.0.1",
- "stream-http": "^2.7.2",
- "string_decoder": "^1.0.0",
- "timers-browserify": "^2.0.4",
- "tty-browserify": "0.0.0",
- "url": "^0.11.0",
- "util": "^0.11.0",
- "vm-browserify": "^1.0.1"
- }
- },
- "node_modules/node-libs-browser/node_modules/punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
- "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
- "dev": true
- },
- "node_modules/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,
- "dependencies": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "node_modules/normalize-package-data/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "dev": true,
- "dependencies": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "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==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
- }
- },
- "node_modules/num2fraction": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
- "dev": true
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "dependencies": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/object-copy/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
- "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-visit/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.entries": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
- "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.fromentries": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
- "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.getownpropertydescriptors": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz",
- "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- },
- "engines": {
- "node": ">= 0.8"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object.pick/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object.values": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
- "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dev": true,
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/open": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
- "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
- "dev": true,
- "dependencies": {
- "is-docker": "^2.0.0",
- "is-wsl": "^2.1.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
- "dev": true
- },
- "node_modules/overlayscrollbars": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-1.13.1.tgz",
- "integrity": "sha512-gIQfzgGgu1wy80EB4/6DaJGHMEGmizq27xHIESrzXq0Y/J0Ay1P3DWk6tuVmEPIZH15zaBlxeEJOqdJKmowHCQ==",
- "dev": true
- },
- "node_modules/p-all": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz",
- "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==",
- "dev": true,
- "dependencies": {
- "p-map": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/p-all/node_modules/p-map": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/p-event": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
- "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==",
- "dev": true,
- "dependencies": {
- "p-timeout": "^3.1.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-filter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz",
- "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==",
- "dev": true,
- "dependencies": {
- "p-map": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-filter/node_modules/p-map": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "dev": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-timeout": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
- "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
- "dev": true,
- "dependencies": {
- "p-finally": "^1.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
- "dev": true
- },
- "node_modules/parallel-transform": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
- "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
- "dev": true,
- "dependencies": {
- "cyclist": "^1.0.1",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- }
- },
- "node_modules/param-case": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
- "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
- "dev": true,
- "dependencies": {
- "dot-case": "^3.0.4",
- "tslib": "^2.0.3"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-asn1": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
- "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
- "dev": true,
- "dependencies": {
- "asn1.js": "^5.2.0",
- "browserify-aes": "^1.0.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
- }
- },
- "node_modules/parse-entities": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
- "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
- "dev": true,
- "dependencies": {
- "character-entities": "^1.0.0",
- "character-entities-legacy": "^1.0.0",
- "character-reference-invalid": "^1.0.0",
- "is-alphanumerical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-hexadecimal": "^1.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/pascal-case": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
- "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
- "dev": true,
- "dependencies": {
- "no-case": "^3.0.4",
- "tslib": "^2.0.3"
- }
- },
- "node_modules/pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
- "dev": true
- },
- "node_modules/path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
- "dev": true
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "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=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "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==",
- "dev": true
- },
- "node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
- "dev": true
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pbkdf2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
- "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
- "dev": true,
- "dependencies": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/picocolors": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
- "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
- "dev": true,
- "dependencies": {
- "node-modules-regexp": "^1.0.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pkg-dir": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
- "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
- "dev": true,
- "dependencies": {
- "find-up": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/pkg-up": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
- "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
- "dev": true,
- "dependencies": {
- "find-up": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-up/node_modules/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,
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-up/node_modules/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,
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-up/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-up/node_modules/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,
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-up/node_modules/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,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pnp-webpack-plugin": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz",
- "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==",
- "dev": true,
- "dependencies": {
- "ts-pnp": "^1.1.6"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/polished": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.3.tgz",
- "integrity": "sha512-ocPAcVBUOryJEKe0z2KLd1l9EBa1r5mSwlKpExmrLzsnIzJo4axsoU9O2BjOTkDGDT4mZ0WFE5XKTlR3nLnZOA==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.14.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss": {
- "version": "7.0.39",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
- "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
- "dev": true,
- "dependencies": {
- "picocolors": "^0.2.1",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-flexbugs-fixes": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz",
- "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==",
- "dev": true,
- "dependencies": {
- "postcss": "^7.0.26"
- }
- },
- "node_modules/postcss-loader": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz",
- "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==",
- "dev": true,
- "dependencies": {
- "cosmiconfig": "^7.0.0",
- "klona": "^2.0.4",
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0",
- "semver": "^7.3.4"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "postcss": "^7.0.0 || ^8.0.1",
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/postcss-loader/node_modules/loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- },
- "engines": {
- "node": ">=8.9.0"
- }
- },
- "node_modules/postcss-loader/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/postcss-loader/node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/postcss-modules-extract-imports": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
- "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
- "dev": true,
- "dependencies": {
- "postcss": "^7.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/postcss-modules-local-by-default": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz",
- "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==",
- "dev": true,
- "dependencies": {
- "icss-utils": "^4.1.1",
- "postcss": "^7.0.32",
- "postcss-selector-parser": "^6.0.2",
- "postcss-value-parser": "^4.1.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/postcss-modules-scope": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
- "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
- "dev": true,
- "dependencies": {
- "postcss": "^7.0.6",
- "postcss-selector-parser": "^6.0.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/postcss-modules-values": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
- "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
- "dev": true,
- "dependencies": {
- "icss-utils": "^4.0.0",
- "postcss": "^7.0.6"
- }
- },
- "node_modules/postcss-selector-parser": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
- "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
- "dev": true,
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
- "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
- "dev": true
- },
- "node_modules/postcss/node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/preact": {
- "version": "10.5.15",
- "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.15.tgz",
- "integrity": "sha512-5chK29n6QcJc3m1lVrKQSQ+V7K1Gb8HeQY6FViQ5AxCAEGu3DaHffWNDkC9+miZgsLvbvU9rxbV1qinGHMHzqA==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/preact"
- }
- },
- "node_modules/preact-render-to-string": {
- "version": "5.1.19",
- "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.1.19.tgz",
- "integrity": "sha512-bj8sn/oytIKO6RtOGSS/1+5CrQyRSC99eLUnEVbqUa6MzJX5dYh7wu9bmT0d6lm/Vea21k9KhCQwvr2sYN3rrQ==",
- "dev": true,
- "dependencies": {
- "pretty-format": "^3.8.0"
- },
- "peerDependencies": {
- "preact": ">=10"
- }
- },
- "node_modules/prettier": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
- "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
- "dev": true,
- "bin": {
- "prettier": "bin-prettier.js"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/pretty-error": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
- "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.20",
- "renderkid": "^2.0.4"
- }
- },
- "node_modules/pretty-format": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
- "integrity": "sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U=",
- "dev": true
- },
- "node_modules/pretty-hrtime": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/prismjs": {
- "version": "1.25.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz",
- "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==",
- "dev": true
- },
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true,
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/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
- },
- "node_modules/promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
- "dev": true
- },
- "node_modules/promise.allsettled": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.5.tgz",
- "integrity": "sha512-tVDqeZPoBC0SlzJHzWGZ2NKAguVq2oiYj7gbggbiTvH2itHohijTp7njOUA0aQ/nl+0lr/r6egmhoYu63UZ/pQ==",
- "dev": true,
- "dependencies": {
- "array.prototype.map": "^1.0.4",
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1",
- "get-intrinsic": "^1.1.1",
- "iterate-value": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/promise.prototype.finally": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz",
- "integrity": "sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "dev": true,
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/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,
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.8.1"
- }
- },
- "node_modules/prop-types/node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
- },
- "node_modules/property-information": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
- "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
- "dev": true,
- "dependencies": {
- "xtend": "^4.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "dev": true,
- "dependencies": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
- "dev": true
- },
- "node_modules/public-encrypt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
- "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/public-encrypt/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "dev": true,
- "dependencies": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- }
- },
- "node_modules/pumpify/node_modules/pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/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,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qs": {
- "version": "6.10.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
- "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
- "dev": true,
- "dependencies": {
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
- "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
- "dev": true,
- "engines": {
- "node": ">=0.4.x"
- }
- },
- "node_modules/querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
- "dev": true,
- "engines": {
- "node": ">=0.4.x"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/ramda": {
- "version": "0.21.0",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz",
- "integrity": "sha1-oAGr7bP/YQd9T/HVd9RN536NCjU=",
- "dev": true
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
- "dev": true,
- "dependencies": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/raw-body/node_modules/bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/raw-loader": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz",
- "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==",
- "dev": true,
- "dependencies": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/raw-loader/node_modules/loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- },
- "engines": {
- "node": ">=8.9.0"
- }
- },
- "node_modules/raw-loader/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/react": {
- "version": "16.14.0",
- "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
- "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
- "dev": true,
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-colorful": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.5.0.tgz",
- "integrity": "sha512-BuzrlrM0ylg7coPkXOrRqlf2BgHLw5L44sybbr9Lg4xy7w9e5N7fGYbojOO0s8J0nvrM3PERN2rVFkvSa24lnQ==",
- "dev": true,
- "peerDependencies": {
- "react": ">=16.8.0",
- "react-dom": ">=16.8.0"
- }
- },
- "node_modules/react-dev-utils": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz",
- "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "7.10.4",
- "address": "1.1.2",
- "browserslist": "4.14.2",
- "chalk": "2.4.2",
- "cross-spawn": "7.0.3",
- "detect-port-alt": "1.1.6",
- "escape-string-regexp": "2.0.0",
- "filesize": "6.1.0",
- "find-up": "4.1.0",
- "fork-ts-checker-webpack-plugin": "4.1.6",
- "global-modules": "2.0.0",
- "globby": "11.0.1",
- "gzip-size": "5.1.1",
- "immer": "8.0.1",
- "is-root": "2.1.0",
- "loader-utils": "2.0.0",
- "open": "^7.0.2",
- "pkg-up": "3.1.0",
- "prompts": "2.4.0",
- "react-error-overlay": "^6.0.9",
- "recursive-readdir": "2.2.2",
- "shell-quote": "1.7.2",
- "strip-ansi": "6.0.0",
- "text-table": "0.2.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/react-dev-utils/node_modules/@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "node_modules/react-dev-utils/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/react-dev-utils/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "dependencies": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/browserslist": {
- "version": "4.14.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz",
- "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==",
- "dev": true,
- "dependencies": {
- "caniuse-lite": "^1.0.30001125",
- "electron-to-chromium": "^1.3.564",
- "escalade": "^3.0.2",
- "node-releases": "^1.1.61"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- },
- "funding": {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- }
- },
- "node_modules/react-dev-utils/node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/react-dev-utils/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/react-dev-utils/node_modules/fork-ts-checker-webpack-plugin": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
- "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.5.5",
- "chalk": "^2.4.1",
- "micromatch": "^3.1.10",
- "minimatch": "^3.0.4",
- "semver": "^5.6.0",
- "tapable": "^1.0.0",
- "worker-rpc": "^0.1.0"
- },
- "engines": {
- "node": ">=6.11.5",
- "yarn": ">=1.0.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/globby": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
- "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
- "dev": true,
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-dev-utils/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/react-dev-utils/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- },
- "engines": {
- "node": ">=8.9.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/react-dev-utils/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/node-releases": {
- "version": "1.1.77",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz",
- "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==",
- "dev": true
- },
- "node_modules/react-dev-utils/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-dev-utils/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/react-dev-utils/node_modules/prompts": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
- "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
- "dev": true,
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/react-dev-utils/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/react-dev-utils/node_modules/strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/react-dev-utils/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "16.14.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz",
- "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==",
- "dev": true,
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.19.1"
- },
- "peerDependencies": {
- "react": "^16.14.0"
- }
- },
- "node_modules/react-draggable": {
- "version": "4.4.4",
- "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.4.tgz",
- "integrity": "sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA==",
- "dev": true,
- "dependencies": {
- "clsx": "^1.1.1",
- "prop-types": "^15.6.0"
- },
- "peerDependencies": {
- "react": ">= 16.3.0",
- "react-dom": ">= 16.3.0"
- }
- },
- "node_modules/react-error-overlay": {
- "version": "6.0.9",
- "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz",
- "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==",
- "dev": true
- },
- "node_modules/react-fast-compare": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz",
- "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==",
- "dev": true
- },
- "node_modules/react-helmet-async": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.1.2.tgz",
- "integrity": "sha512-LTTzDDkyIleT/JJ6T/uqx7Y8qi1EuPPSiJawQY/nHHz0h7SPDT6HxP1YDDQx/fzcVxCqpWEEMS3QdrSrNkJYhg==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "invariant": "^2.2.4",
- "prop-types": "^15.7.2",
- "react-fast-compare": "^3.2.0",
- "shallowequal": "^1.1.0"
- },
- "peerDependencies": {
- "react": "^16.6.0 || ^17.0.0",
- "react-dom": "^16.6.0 || ^17.0.0"
- }
- },
- "node_modules/react-input-autosize": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-3.0.0.tgz",
- "integrity": "sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg==",
- "dev": true,
- "dependencies": {
- "prop-types": "^15.5.8"
- },
- "peerDependencies": {
- "react": "^16.3.0 || ^17.0.0"
- }
- },
- "node_modules/react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
- "dev": true
- },
- "node_modules/react-lifecycles-compat": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
- "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==",
- "dev": true
- },
- "node_modules/react-popper": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz",
- "integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==",
- "dev": true,
- "dependencies": {
- "react-fast-compare": "^3.0.1",
- "warning": "^4.0.2"
- },
- "peerDependencies": {
- "@popperjs/core": "^2.0.0",
- "react": "^16.8.0 || ^17"
- }
- },
- "node_modules/react-popper-tooltip": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz",
- "integrity": "sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@popperjs/core": "^2.5.4",
- "react-popper": "^2.2.4"
- },
- "peerDependencies": {
- "react": "^16.6.0 || ^17.0.0",
- "react-dom": "^16.6.0 || ^17.0.0"
- }
- },
- "node_modules/react-select": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/react-select/-/react-select-3.2.0.tgz",
- "integrity": "sha512-B/q3TnCZXEKItO0fFN/I0tWOX3WJvi/X2wtdffmwSQVRwg5BpValScTO1vdic9AxlUgmeSzib2hAZAwIUQUZGQ==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.4.4",
- "@emotion/cache": "^10.0.9",
- "@emotion/core": "^10.0.9",
- "@emotion/css": "^10.0.9",
- "memoize-one": "^5.0.0",
- "prop-types": "^15.6.0",
- "react-input-autosize": "^3.0.0",
- "react-transition-group": "^4.3.0"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0",
- "react-dom": "^16.8.0 || ^17.0.0"
- }
- },
- "node_modules/react-sizeme": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.2.tgz",
- "integrity": "sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==",
- "dev": true,
- "dependencies": {
- "element-resize-detector": "^1.2.2",
- "invariant": "^2.2.4",
- "shallowequal": "^1.1.0",
- "throttle-debounce": "^3.0.1"
- }
- },
- "node_modules/react-syntax-highlighter": {
- "version": "13.5.3",
- "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-13.5.3.tgz",
- "integrity": "sha512-crPaF+QGPeHNIblxxCdf2Lg936NAHKhNhuMzRL3F9ct6aYXL3NcZtCL0Rms9+qVo6Y1EQLdXGypBNSbPL/r+qg==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.3.1",
- "highlight.js": "^10.1.1",
- "lowlight": "^1.14.0",
- "prismjs": "^1.21.0",
- "refractor": "^3.1.0"
- },
- "peerDependencies": {
- "react": ">= 0.14.0"
- }
- },
- "node_modules/react-textarea-autosize": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz",
- "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.10.2",
- "use-composed-ref": "^1.0.0",
- "use-latest": "^1.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0"
- }
- },
- "node_modules/react-transition-group": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
- "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.5.5",
- "dom-helpers": "^5.0.1",
- "loose-envify": "^1.4.0",
- "prop-types": "^15.6.2"
- },
- "peerDependencies": {
- "react": ">=16.6.0",
- "react-dom": ">=16.6.0"
- }
- },
- "node_modules/read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
- "dev": true,
- "dependencies": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/read-pkg-up/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/read-pkg-up/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/read-pkg-up/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/read-pkg-up/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/read-pkg/node_modules/type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "dependencies": {
- "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"
- }
- },
- "node_modules/readable-stream/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/recursive-readdir": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
- "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
- "dev": true,
- "dependencies": {
- "minimatch": "3.0.4"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/refractor": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.5.0.tgz",
- "integrity": "sha512-QwPJd3ferTZ4cSPPjdP5bsYHMytwWYnAN5EEnLtGvkqp/FCCnGsBgxrm9EuIDnjUC3Uc/kETtvVi7fSIVC74Dg==",
- "dev": true,
- "dependencies": {
- "hastscript": "^6.0.0",
- "parse-entities": "^2.0.0",
- "prismjs": "~1.25.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/regenerate": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
- "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
- "dev": true
- },
- "node_modules/regenerate-unicode-properties": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz",
- "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==",
- "dev": true,
- "dependencies": {
- "regenerate": "^1.4.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/regenerator-runtime": {
- "version": "0.13.9",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
- "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
- "dev": true
- },
- "node_modules/regenerator-transform": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
- "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.8.4"
- }
- },
- "node_modules/regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/regexp.prototype.flags": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz",
- "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/regexpu-core": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz",
- "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==",
- "dev": true,
- "dependencies": {
- "regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^9.0.0",
- "regjsgen": "^0.5.2",
- "regjsparser": "^0.7.0",
- "unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/regjsgen": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
- "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==",
- "dev": true
- },
- "node_modules/regjsparser": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz",
- "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==",
- "dev": true,
- "dependencies": {
- "jsesc": "~0.5.0"
- },
- "bin": {
- "regjsparser": "bin/parser"
- }
- },
- "node_modules/regjsparser/node_modules/jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
- "dev": true,
- "bin": {
- "jsesc": "bin/jsesc"
- }
- },
- "node_modules/relateurl": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
- "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
- "dev": true,
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/remark-footnotes": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz",
- "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-mdx": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz",
- "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==",
- "dev": true,
- "dependencies": {
- "@babel/core": "7.12.9",
- "@babel/helper-plugin-utils": "7.10.4",
- "@babel/plugin-proposal-object-rest-spread": "7.12.1",
- "@babel/plugin-syntax-jsx": "7.12.1",
- "@mdx-js/util": "1.6.22",
- "is-alphabetical": "1.0.4",
- "remark-parse": "8.0.3",
- "unified": "9.2.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-mdx/node_modules/@babel/core": {
- "version": "7.12.9",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz",
- "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helpers": "^7.12.5",
- "@babel/parser": "^7.12.7",
- "@babel/template": "^7.12.7",
- "@babel/traverse": "^7.12.9",
- "@babel/types": "^7.12.7",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- },
- "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz",
- "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
- "@babel/plugin-transform-parameters": "^7.12.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
- "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/remark-mdx/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/remark-parse": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz",
- "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==",
- "dev": true,
- "dependencies": {
- "ccount": "^1.0.0",
- "collapse-white-space": "^1.0.2",
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-whitespace-character": "^1.0.0",
- "is-word-character": "^1.0.0",
- "markdown-escapes": "^1.0.0",
- "parse-entities": "^2.0.0",
- "repeat-string": "^1.5.4",
- "state-toggle": "^1.0.0",
- "trim": "0.0.1",
- "trim-trailing-lines": "^1.0.0",
- "unherit": "^1.0.4",
- "unist-util-remove-position": "^2.0.0",
- "vfile-location": "^3.0.0",
- "xtend": "^4.0.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-squeeze-paragraphs": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz",
- "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==",
- "dev": true,
- "dependencies": {
- "mdast-squeeze-paragraphs": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true,
- "optional": true
- },
- "node_modules/renderkid": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz",
- "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==",
- "dev": true,
- "dependencies": {
- "css-select": "^4.1.3",
- "dom-converter": "^0.2.0",
- "htmlparser2": "^6.1.0",
- "lodash": "^4.17.21",
- "strip-ansi": "^3.0.1"
- }
- },
- "node_modules/repeat-element": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true,
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
- "dev": true,
- "dependencies": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "deprecated": "https://github.com/lydell/resolve-url#deprecated",
- "dev": true
- },
- "node_modules/ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "dev": true,
- "dependencies": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/run-queue": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
- "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
- "dev": true,
- "dependencies": {
- "aproba": "^1.1.1"
- }
- },
- "node_modules/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
- },
- "node_modules/safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "dependencies": {
- "ret": "~0.1.10"
- }
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "node_modules/scheduler": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
- "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
- "dev": true,
- "dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "node_modules/schema-utils": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
- "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.5",
- "ajv": "^6.12.4",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 8.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "dev": true,
- "dependencies": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/send/node_modules/debug/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "node_modules/send/node_modules/ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
- },
- "node_modules/serialize-javascript": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
- "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/serve-favicon": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz",
- "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=",
- "dev": true,
- "dependencies": {
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "ms": "2.1.1",
- "parseurl": "~1.3.2",
- "safe-buffer": "5.1.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/serve-favicon/node_modules/ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
- },
- "node_modules/serve-favicon/node_modules/safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
- "dev": true
- },
- "node_modules/serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
- "dev": true,
- "dependencies": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/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
- },
- "node_modules/set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/set-value/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/set-value/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/set-value/node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/set-value/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
- "dev": true
- },
- "node_modules/setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
- "dev": true
- },
- "node_modules/sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- },
- "bin": {
- "sha.js": "bin.js"
- }
- },
- "node_modules/shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shallowequal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
- "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==",
- "dev": true
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shell-quote": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
- "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
- "dev": true
- },
- "node_modules/side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz",
- "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==",
- "dev": true
- },
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "dependencies": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "dependencies": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.2.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-util/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/snapdragon-util/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/snapdragon/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/snapdragon/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "node_modules/source-list-map": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
- "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
- "dev": true
- },
- "node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "dev": true,
- "dependencies": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.20",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
- "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
- "dev": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/source-map-support/node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-url": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
- "dev": true
- },
- "node_modules/space-separated-tokens": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
- "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
- "dev": true,
- "dependencies": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
- },
- "node_modules/spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-license-ids": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz",
- "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==",
- "dev": true
- },
- "node_modules/split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ssri": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
- "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
- "dev": true,
- "dependencies": {
- "minipass": "^3.1.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/stable": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
- "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
- "dev": true
- },
- "node_modules/state-toggle": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz",
- "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "dependencies": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/static-extend/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/store2": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/store2/-/store2-2.12.0.tgz",
- "integrity": "sha512-7t+/wpKLanLzSnQPX8WAcuLCCeuSHoWdQuh9SB3xD0kNOM38DNf+0Oa+wmvxmYueRzkmh6IcdKFtvTa+ecgPDw==",
- "dev": true
- },
- "node_modules/stream-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
- "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
- "dev": true,
- "dependencies": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "node_modules/stream-each": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
- "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
- "dev": true,
- "dependencies": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
- }
- },
- "node_modules/stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
- },
- "node_modules/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,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/string-hash": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",
- "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=",
- "dev": true
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string.prototype.matchall": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz",
- "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1",
- "get-intrinsic": "^1.1.1",
- "has-symbols": "^1.0.2",
- "internal-slot": "^1.0.3",
- "regexp.prototype.flags": "^1.3.1",
- "side-channel": "^1.0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.padend": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz",
- "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.padstart": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.3.tgz",
- "integrity": "sha512-NZydyOMtYxpTjGqp0VN5PYUF/tsU15yDMZnUdj16qRUIUiMJkHHSDElYyQFrMu+/WloTpA7MQSiADhBicDfaoA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/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,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/style-loader": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz",
- "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==",
- "dev": true,
- "dependencies": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^2.7.0"
- },
- "engines": {
- "node": ">= 8.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/style-loader/node_modules/loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- },
- "engines": {
- "node": ">=8.9.0"
- }
- },
- "node_modules/style-to-object": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
- "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==",
- "dev": true,
- "dependencies": {
- "inline-style-parser": "0.1.1"
- }
- },
- "node_modules/styled-jsx": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-4.0.1.tgz",
- "integrity": "sha512-Gcb49/dRB1k8B4hdK8vhW27Rlb2zujCk1fISrizCcToIs+55B4vmUM0N9Gi4nnVfFZWe55jRdWpAqH1ldAKWvQ==",
- "dev": true,
- "dependencies": {
- "@babel/plugin-syntax-jsx": "7.14.5",
- "@babel/types": "7.15.0",
- "convert-source-map": "1.7.0",
- "loader-utils": "1.2.3",
- "source-map": "0.7.3",
- "string-hash": "1.1.3",
- "stylis": "3.5.4",
- "stylis-rule-sheet": "0.0.10"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "peerDependencies": {
- "react": ">= 16.8.0 || 17.x.x || 18.x.x"
- },
- "peerDependenciesMeta": {
- "@babel/core": {
- "optional": true
- }
- }
- },
- "node_modules/styled-jsx/node_modules/@babel/types": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz",
- "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.14.9",
- "to-fast-properties": "^2.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/styled-jsx/node_modules/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,
- "dependencies": {
- "safe-buffer": "~5.1.1"
- }
- },
- "node_modules/styled-jsx/node_modules/emojis-list": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
- "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
- "dev": true,
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/styled-jsx/node_modules/json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/styled-jsx/node_modules/loader-utils": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
- "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^2.0.0",
- "json5": "^1.0.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/styled-jsx/node_modules/source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/stylis": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz",
- "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==",
- "dev": true
- },
- "node_modules/stylis-rule-sheet": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz",
- "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==",
- "dev": true,
- "peerDependencies": {
- "stylis": "^3.5.0"
- }
- },
- "node_modules/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,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/symbol.prototype.description": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz",
- "integrity": "sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-symbol-description": "^1.0.0",
- "has-symbols": "^1.0.2",
- "object.getownpropertydescriptors": "^2.1.2"
- },
- "engines": {
- "node": ">= 0.11.15"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/tapable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
- "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
- "dev": true,
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/telejson": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.3.3.tgz",
- "integrity": "sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==",
- "dev": true,
- "dependencies": {
- "@types/is-function": "^1.0.0",
- "global": "^4.4.0",
- "is-function": "^1.0.2",
- "is-regex": "^1.1.2",
- "is-symbol": "^1.0.3",
- "isobject": "^4.0.0",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3"
- }
- },
- "node_modules/term-size": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
- "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/terser": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
- "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
- "dev": true,
- "dependencies": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/terser-webpack-plugin": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz",
- "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==",
- "dev": true,
- "dependencies": {
- "cacache": "^15.0.5",
- "find-cache-dir": "^3.3.1",
- "jest-worker": "^26.5.0",
- "p-limit": "^3.0.2",
- "schema-utils": "^3.0.0",
- "serialize-javascript": "^5.0.1",
- "source-map": "^0.6.1",
- "terser": "^5.3.4",
- "webpack-sources": "^1.4.3"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/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
- },
- "node_modules/terser-webpack-plugin/node_modules/find-cache-dir": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
- "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
- "dev": true,
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/p-locate/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/terser": {
- "version": "5.9.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz",
- "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==",
- "dev": true,
- "dependencies": {
- "commander": "^2.20.0",
- "source-map": "~0.7.2",
- "source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/terser/node_modules/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
- },
- "node_modules/terser/node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "node_modules/throttle-debounce": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz",
- "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "dependencies": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- },
- "node_modules/timers-browserify": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
- "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
- "dev": true,
- "dependencies": {
- "setimmediate": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
- "dev": true
- },
- "node_modules/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,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-object-path/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/to-object-path/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "dependencies": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/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,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toggle-selection": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
- "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=",
- "dev": true
- },
- "node_modules/toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
- "dev": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
- "dev": true
- },
- "node_modules/trim": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
- "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
- "dev": true
- },
- "node_modules/trim-trailing-lines": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz",
- "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/trough": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
- "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/ts-dedent": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
- "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
- "dev": true,
- "engines": {
- "node": ">=6.10"
- }
- },
- "node_modules/ts-essentials": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz",
- "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==",
- "dev": true
- },
- "node_modules/ts-pnp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz",
- "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/tslib": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
- "dev": true
- },
- "node_modules/tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
- "dev": true
- },
- "node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dev": true,
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
- "node_modules/unbox-primitive": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
- "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
- "which-boxed-primitive": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/unfetch": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz",
- "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==",
- "dev": true
- },
- "node_modules/unherit": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz",
- "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.0",
- "xtend": "^4.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/unicode-canonical-property-names-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
- "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-match-property-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
- "dev": true,
- "dependencies": {
- "unicode-canonical-property-names-ecmascript": "^2.0.0",
- "unicode-property-aliases-ecmascript": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-match-property-value-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
- "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-property-aliases-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unified": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz",
- "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==",
- "dev": true,
- "dependencies": {
- "bail": "^1.0.0",
- "extend": "^3.0.0",
- "is-buffer": "^2.0.0",
- "is-plain-obj": "^2.0.0",
- "trough": "^1.0.0",
- "vfile": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "dependencies": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/union-value/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unique-filename": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
- "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
- "dev": true,
- "dependencies": {
- "unique-slug": "^2.0.0"
- }
- },
- "node_modules/unique-slug": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
- "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
- "dev": true,
- "dependencies": {
- "imurmurhash": "^0.1.4"
- }
- },
- "node_modules/unist-builder": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz",
- "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-generated": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz",
- "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-is": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
- "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-position": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz",
- "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-remove": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz",
- "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==",
- "dev": true,
- "dependencies": {
- "unist-util-is": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-remove-position": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz",
- "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==",
- "dev": true,
- "dependencies": {
- "unist-util-visit": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-stringify-position": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
- "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-visit": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
- "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^4.0.0",
- "unist-util-visit-parents": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-visit-parents": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
- "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true,
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/unquote": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
- "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
- "dev": true
- },
- "node_modules/unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "dependencies": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "dependencies": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "dependencies": {
- "isarray": "1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "node_modules/unset-value/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/upath": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
- "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=4",
- "yarn": "*"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "deprecated": "Please see https://github.com/lydell/urix#deprecated",
- "dev": true
- },
- "node_modules/url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "dev": true,
- "dependencies": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- }
- },
- "node_modules/url-loader": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz",
- "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==",
- "dev": true,
- "dependencies": {
- "loader-utils": "^2.0.0",
- "mime-types": "^2.1.27",
- "schema-utils": "^3.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "file-loader": "*",
- "webpack": "^4.0.0 || ^5.0.0"
- },
- "peerDependenciesMeta": {
- "file-loader": {
- "optional": true
- }
- }
- },
- "node_modules/url-loader/node_modules/loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- },
- "engines": {
- "node": ">=8.9.0"
- }
- },
- "node_modules/url-loader/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/url/node_modules/punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
- "dev": true
- },
- "node_modules/use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/use-composed-ref": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz",
- "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==",
- "dev": true,
- "dependencies": {
- "ts-essentials": "^2.0.3"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0"
- }
- },
- "node_modules/use-isomorphic-layout-effect": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz",
- "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==",
- "dev": true,
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/use-latest": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz",
- "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==",
- "dev": true,
- "dependencies": {
- "use-isomorphic-layout-effect": "^1.0.0"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
- "dev": true,
- "dependencies": {
- "inherits": "2.0.3"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "node_modules/util.promisify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
- "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
- "dev": true,
- "dependencies": {
- "define-properties": "^1.1.2",
- "object.getownpropertydescriptors": "^2.0.3"
- }
- },
- "node_modules/util/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- },
- "node_modules/utila": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
- "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
- "dev": true
- },
- "node_modules/utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
- "dev": true,
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
- "dev": true,
- "bin": {
- "uuid": "bin/uuid"
- }
- },
- "node_modules/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,
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/vfile": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
- "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0",
- "vfile-message": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-location": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz",
- "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-message": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
- "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vm-browserify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
- "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
- "dev": true
- },
- "node_modules/warning": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
- "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
- "dev": true,
- "dependencies": {
- "loose-envify": "^1.0.0"
- }
- },
- "node_modules/watchpack": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
- "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
- },
- "optionalDependencies": {
- "chokidar": "^3.4.1",
- "watchpack-chokidar2": "^2.0.1"
- }
- },
- "node_modules/watchpack-chokidar2": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
- "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "chokidar": "^2.1.8"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "optional": true,
- "dependencies": {
- "remove-trailing-separator": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/binary-extensions": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/chokidar": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
- "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
- "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.",
- "dev": true,
- "optional": true,
- "dependencies": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.1",
- "braces": "^2.3.2",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.3",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "normalize-path": "^3.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.2.1",
- "upath": "^1.1.1"
- },
- "optionalDependencies": {
- "fsevents": "^1.2.7"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "optional": true,
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-extglob": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/is-binary-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
- "dev": true,
- "optional": true,
- "dependencies": {
- "binary-extensions": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true,
- "optional": true
- },
- "node_modules/watchpack-chokidar2/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "optional": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/web-namespaces": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz",
- "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
- "dev": true
- },
- "node_modules/webpack": {
- "version": "4.46.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
- "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/wasm-edit": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "acorn": "^6.4.1",
- "ajv": "^6.10.2",
- "ajv-keywords": "^3.4.1",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^4.5.0",
- "eslint-scope": "^4.0.3",
- "json-parse-better-errors": "^1.0.2",
- "loader-runner": "^2.4.0",
- "loader-utils": "^1.2.3",
- "memory-fs": "^0.4.1",
- "micromatch": "^3.1.10",
- "mkdirp": "^0.5.3",
- "neo-async": "^2.6.1",
- "node-libs-browser": "^2.2.1",
- "schema-utils": "^1.0.0",
- "tapable": "^1.1.3",
- "terser-webpack-plugin": "^1.4.3",
- "watchpack": "^1.7.4",
- "webpack-sources": "^1.4.1"
- },
- "bin": {
- "webpack": "bin/webpack.js"
- },
- "engines": {
- "node": ">=6.11.5"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependenciesMeta": {
- "webpack-cli": {
- "optional": true
- },
- "webpack-command": {
- "optional": true
- }
- }
- },
- "node_modules/webpack-dev-middleware": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
- "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==",
- "dev": true,
- "dependencies": {
- "memory-fs": "^0.4.1",
- "mime": "^2.4.4",
- "mkdirp": "^0.5.1",
- "range-parser": "^1.2.1",
- "webpack-log": "^2.0.0"
- },
- "engines": {
- "node": ">= 6"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/mime": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
- "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
- "dev": true,
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/webpack-filter-warnings-plugin": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz",
- "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==",
- "dev": true,
- "engines": {
- "node": ">= 4.3 < 5.0.0 || >= 5.10"
- },
- "peerDependencies": {
- "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0"
- }
- },
- "node_modules/webpack-hot-middleware": {
- "version": "2.25.1",
- "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz",
- "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==",
- "dev": true,
- "dependencies": {
- "ansi-html-community": "0.0.8",
- "html-entities": "^2.1.0",
- "querystring": "^0.2.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "node_modules/webpack-hot-middleware/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/webpack-hot-middleware/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/webpack-log": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
- "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "^3.0.0",
- "uuid": "^3.3.2"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "dependencies": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
- },
- "node_modules/webpack-sources/node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack-virtual-modules": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz",
- "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==",
- "dev": true,
- "dependencies": {
- "debug": "^3.0.0"
- }
- },
- "node_modules/webpack-virtual-modules/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/webpack/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "dependencies": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack/node_modules/cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "dev": true,
- "dependencies": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- }
- },
- "node_modules/webpack/node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "node_modules/webpack/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/webpack/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack/node_modules/is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/webpack/node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack/node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/webpack/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack/node_modules/mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/webpack/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/webpack/node_modules/schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/webpack/node_modules/serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/webpack/node_modules/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,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack/node_modules/ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
- "dev": true,
- "dependencies": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "node_modules/webpack/node_modules/terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
- "dev": true,
- "dependencies": {
- "cacache": "^12.0.2",
- "find-cache-dir": "^2.1.0",
- "is-wsl": "^1.1.0",
- "schema-utils": "^1.0.0",
- "serialize-javascript": "^4.0.0",
- "source-map": "^0.6.1",
- "terser": "^4.1.2",
- "webpack-sources": "^1.4.0",
- "worker-farm": "^1.7.0"
- },
- "engines": {
- "node": ">= 6.9.0"
- },
- "peerDependencies": {
- "webpack": "^4.0.0"
- }
- },
- "node_modules/webpack/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/webpack/node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "dev": true,
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "dev": true,
- "dependencies": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/wide-align": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
- "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
- "dev": true,
- "dependencies": {
- "string-width": "^1.0.2 || 2 || 3 || 4"
- }
- },
- "node_modules/widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/worker-farm": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
- "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
- "dev": true,
- "dependencies": {
- "errno": "~0.1.7"
- }
- },
- "node_modules/worker-rpc": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz",
- "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==",
- "dev": true,
- "dependencies": {
- "microevent.ts": "~0.1.1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true,
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
- "node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/zwitch": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
- "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- }
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
- "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.14.5"
- }
- },
- "@babel/compat-data": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz",
- "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==",
- "dev": true
- },
- "@babel/core": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz",
- "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.15.8",
- "@babel/generator": "^7.15.8",
- "@babel/helper-compilation-targets": "^7.15.4",
- "@babel/helper-module-transforms": "^7.15.8",
- "@babel/helpers": "^7.15.4",
- "@babel/parser": "^7.15.8",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.6",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.1.2",
- "semver": "^6.3.0",
- "source-map": "^0.5.0"
- }
- },
- "@babel/generator": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz",
- "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.6",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-annotate-as-pure": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz",
- "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz",
- "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==",
- "dev": true,
- "requires": {
- "@babel/helper-explode-assignable-expression": "^7.15.4",
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-compilation-targets": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz",
- "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.15.0",
- "@babel/helper-validator-option": "^7.14.5",
- "browserslist": "^4.16.6",
- "semver": "^6.3.0"
- }
- },
- "@babel/helper-create-class-features-plugin": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz",
- "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.15.4",
- "@babel/helper-function-name": "^7.15.4",
- "@babel/helper-member-expression-to-functions": "^7.15.4",
- "@babel/helper-optimise-call-expression": "^7.15.4",
- "@babel/helper-replace-supers": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4"
- }
- },
- "@babel/helper-create-regexp-features-plugin": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz",
- "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.14.5",
- "regexpu-core": "^4.7.1"
- }
- },
- "@babel/helper-define-polyfill-provider": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz",
- "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==",
- "dev": true,
- "requires": {
- "@babel/helper-compilation-targets": "^7.13.0",
- "@babel/helper-module-imports": "^7.12.13",
- "@babel/helper-plugin-utils": "^7.13.0",
- "@babel/traverse": "^7.13.0",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2",
- "semver": "^6.1.2"
- }
- },
- "@babel/helper-explode-assignable-expression": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz",
- "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-function-name": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz",
- "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==",
- "dev": true,
- "requires": {
- "@babel/helper-get-function-arity": "^7.15.4",
- "@babel/template": "^7.15.4",
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz",
- "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-hoist-variables": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz",
- "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz",
- "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz",
- "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz",
- "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.15.4",
- "@babel/helper-replace-supers": "^7.15.4",
- "@babel/helper-simple-access": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
- "@babel/helper-validator-identifier": "^7.15.7",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.6"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz",
- "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
- "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
- "dev": true
- },
- "@babel/helper-remap-async-to-generator": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz",
- "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.15.4",
- "@babel/helper-wrap-function": "^7.15.4",
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-replace-supers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz",
- "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==",
- "dev": true,
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.15.4",
- "@babel/helper-optimise-call-expression": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz",
- "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz",
- "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz",
- "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.15.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
- "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
- "dev": true
- },
- "@babel/helper-validator-option": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
- "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
- "dev": true
- },
- "@babel/helper-wrap-function": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz",
- "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==",
- "dev": true,
- "requires": {
- "@babel/helper-function-name": "^7.15.4",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/helpers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz",
- "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/highlight": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
- "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.14.5",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz",
- "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==",
- "dev": true
- },
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz",
- "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4",
- "@babel/plugin-proposal-optional-chaining": "^7.14.5"
- }
- },
- "@babel/plugin-proposal-async-generator-functions": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz",
- "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-remap-async-to-generator": "^7.15.4",
- "@babel/plugin-syntax-async-generators": "^7.8.4"
- }
- },
- "@babel/plugin-proposal-class-properties": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz",
- "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-proposal-class-static-block": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz",
- "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-class-static-block": "^7.14.5"
- }
- },
- "@babel/plugin-proposal-decorators": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.15.8.tgz",
- "integrity": "sha512-5n8+xGK7YDrXF+WAORg3P7LlCCdiaAyKLZi22eP2BwTy4kJ0kFUMMDCj4nQ8YrKyNZgjhU/9eRVqONnjB3us8g==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-decorators": "^7.14.5"
- }
- },
- "@babel/plugin-proposal-dynamic-import": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz",
- "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-export-default-from": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.14.5.tgz",
- "integrity": "sha512-T8KZ5abXvKMjF6JcoXjgac3ElmXf0AWzJwi2O/42Jk+HmCky3D9+i1B7NPP1FblyceqTevKeV/9szeikFoaMDg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-export-default-from": "^7.14.5"
- }
- },
- "@babel/plugin-proposal-export-namespace-from": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz",
- "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-json-strings": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz",
- "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-json-strings": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-logical-assignment-operators": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz",
- "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
- }
- },
- "@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz",
- "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-numeric-separator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz",
- "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4"
- }
- },
- "@babel/plugin-proposal-object-rest-spread": {
- "version": "7.15.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz",
- "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.15.0",
- "@babel/helper-compilation-targets": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.15.4"
- }
- },
- "@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz",
- "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-optional-chaining": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz",
- "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-private-methods": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz",
- "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-proposal-private-property-in-object": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz",
- "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.15.4",
- "@babel/helper-create-class-features-plugin": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
- }
- },
- "@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz",
- "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.12.13"
- }
- },
- "@babel/plugin-syntax-class-static-block": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
- "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-decorators": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz",
- "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-dynamic-import": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
- "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-export-default-from": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.14.5.tgz",
- "integrity": "sha512-snWDxjuaPEobRBnhpqEfZ8RMxDbHt8+87fiEioGuE+Uc0xAKgSD8QiuL3lF93hPVQfZFAcYwrrf+H5qUhike3Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-export-namespace-from": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
- "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
- }
- },
- "@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz",
- "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-private-property-in-object": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
- "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-syntax-typescript": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz",
- "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-arrow-functions": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz",
- "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-async-to-generator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz",
- "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-remap-async-to-generator": "^7.14.5"
- }
- },
- "@babel/plugin-transform-block-scoped-functions": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz",
- "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-block-scoping": {
- "version": "7.15.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz",
- "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-classes": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz",
- "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.15.4",
- "@babel/helper-function-name": "^7.15.4",
- "@babel/helper-optimise-call-expression": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-replace-supers": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
- "globals": "^11.1.0"
- }
- },
- "@babel/plugin-transform-computed-properties": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz",
- "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-destructuring": {
- "version": "7.14.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz",
- "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-dotall-regex": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz",
- "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-duplicate-keys": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz",
- "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-exponentiation-operator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz",
- "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==",
- "dev": true,
- "requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-for-of": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz",
- "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-function-name": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz",
- "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==",
- "dev": true,
- "requires": {
- "@babel/helper-function-name": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-literals": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz",
- "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-member-expression-literals": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz",
- "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-modules-amd": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz",
- "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5",
- "babel-plugin-dynamic-import-node": "^2.3.3"
- }
- },
- "@babel/plugin-transform-modules-commonjs": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz",
- "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-simple-access": "^7.15.4",
- "babel-plugin-dynamic-import-node": "^2.3.3"
- }
- },
- "@babel/plugin-transform-modules-systemjs": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz",
- "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==",
- "dev": true,
- "requires": {
- "@babel/helper-hoist-variables": "^7.15.4",
- "@babel/helper-module-transforms": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-identifier": "^7.14.9",
- "babel-plugin-dynamic-import-node": "^2.3.3"
- }
- },
- "@babel/plugin-transform-modules-umd": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz",
- "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==",
- "dev": true,
- "requires": {
- "@babel/helper-module-transforms": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.14.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz",
- "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.14.5"
- }
- },
- "@babel/plugin-transform-new-target": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz",
- "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-object-super": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz",
- "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-replace-supers": "^7.14.5"
- }
- },
- "@babel/plugin-transform-parameters": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz",
- "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-property-literals": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz",
- "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-react-display-name": {
- "version": "7.15.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz",
- "integrity": "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-react-jsx": {
- "version": "7.14.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz",
- "integrity": "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.14.5",
- "@babel/helper-module-imports": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-jsx": "^7.14.5",
- "@babel/types": "^7.14.9"
- }
- },
- "@babel/plugin-transform-react-jsx-development": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz",
- "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==",
- "dev": true,
- "requires": {
- "@babel/plugin-transform-react-jsx": "^7.14.5"
- }
- },
- "@babel/plugin-transform-react-pure-annotations": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz",
- "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-regenerator": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz",
- "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==",
- "dev": true,
- "requires": {
- "regenerator-transform": "^0.14.2"
- }
- },
- "@babel/plugin-transform-reserved-words": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz",
- "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-shorthand-properties": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz",
- "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-spread": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz",
- "integrity": "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4"
- }
- },
- "@babel/plugin-transform-sticky-regex": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz",
- "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-template-literals": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz",
- "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-typeof-symbol": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz",
- "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-typescript": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.8.tgz",
- "integrity": "sha512-ZXIkJpbaf6/EsmjeTbiJN/yMxWPFWvlr7sEG1P95Xb4S4IBcrf2n7s/fItIhsAmOf8oSh3VJPDppO6ExfAfKRQ==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/plugin-syntax-typescript": "^7.14.5"
- }
- },
- "@babel/plugin-transform-unicode-escapes": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz",
- "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/plugin-transform-unicode-regex": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz",
- "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==",
- "dev": true,
- "requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.14.5",
- "@babel/helper-plugin-utils": "^7.14.5"
- }
- },
- "@babel/preset-env": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz",
- "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.15.0",
- "@babel/helper-compilation-targets": "^7.15.4",
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4",
- "@babel/plugin-proposal-async-generator-functions": "^7.15.8",
- "@babel/plugin-proposal-class-properties": "^7.14.5",
- "@babel/plugin-proposal-class-static-block": "^7.15.4",
- "@babel/plugin-proposal-dynamic-import": "^7.14.5",
- "@babel/plugin-proposal-export-namespace-from": "^7.14.5",
- "@babel/plugin-proposal-json-strings": "^7.14.5",
- "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5",
- "@babel/plugin-proposal-numeric-separator": "^7.14.5",
- "@babel/plugin-proposal-object-rest-spread": "^7.15.6",
- "@babel/plugin-proposal-optional-catch-binding": "^7.14.5",
- "@babel/plugin-proposal-optional-chaining": "^7.14.5",
- "@babel/plugin-proposal-private-methods": "^7.14.5",
- "@babel/plugin-proposal-private-property-in-object": "^7.15.4",
- "@babel/plugin-proposal-unicode-property-regex": "^7.14.5",
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5",
- "@babel/plugin-transform-arrow-functions": "^7.14.5",
- "@babel/plugin-transform-async-to-generator": "^7.14.5",
- "@babel/plugin-transform-block-scoped-functions": "^7.14.5",
- "@babel/plugin-transform-block-scoping": "^7.15.3",
- "@babel/plugin-transform-classes": "^7.15.4",
- "@babel/plugin-transform-computed-properties": "^7.14.5",
- "@babel/plugin-transform-destructuring": "^7.14.7",
- "@babel/plugin-transform-dotall-regex": "^7.14.5",
- "@babel/plugin-transform-duplicate-keys": "^7.14.5",
- "@babel/plugin-transform-exponentiation-operator": "^7.14.5",
- "@babel/plugin-transform-for-of": "^7.15.4",
- "@babel/plugin-transform-function-name": "^7.14.5",
- "@babel/plugin-transform-literals": "^7.14.5",
- "@babel/plugin-transform-member-expression-literals": "^7.14.5",
- "@babel/plugin-transform-modules-amd": "^7.14.5",
- "@babel/plugin-transform-modules-commonjs": "^7.15.4",
- "@babel/plugin-transform-modules-systemjs": "^7.15.4",
- "@babel/plugin-transform-modules-umd": "^7.14.5",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9",
- "@babel/plugin-transform-new-target": "^7.14.5",
- "@babel/plugin-transform-object-super": "^7.14.5",
- "@babel/plugin-transform-parameters": "^7.15.4",
- "@babel/plugin-transform-property-literals": "^7.14.5",
- "@babel/plugin-transform-regenerator": "^7.14.5",
- "@babel/plugin-transform-reserved-words": "^7.14.5",
- "@babel/plugin-transform-shorthand-properties": "^7.14.5",
- "@babel/plugin-transform-spread": "^7.15.8",
- "@babel/plugin-transform-sticky-regex": "^7.14.5",
- "@babel/plugin-transform-template-literals": "^7.14.5",
- "@babel/plugin-transform-typeof-symbol": "^7.14.5",
- "@babel/plugin-transform-unicode-escapes": "^7.14.5",
- "@babel/plugin-transform-unicode-regex": "^7.14.5",
- "@babel/preset-modules": "^0.1.4",
- "@babel/types": "^7.15.6",
- "babel-plugin-polyfill-corejs2": "^0.2.2",
- "babel-plugin-polyfill-corejs3": "^0.2.5",
- "babel-plugin-polyfill-regenerator": "^0.2.2",
- "core-js-compat": "^3.16.0",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "babel-plugin-polyfill-corejs3": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz",
- "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==",
- "dev": true,
- "requires": {
- "@babel/helper-define-polyfill-provider": "^0.2.2",
- "core-js-compat": "^3.16.2"
- }
- }
- }
- },
- "@babel/preset-modules": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
- "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
- "@babel/plugin-transform-dotall-regex": "^7.4.4",
- "@babel/types": "^7.4.4",
- "esutils": "^2.0.2"
- }
- },
- "@babel/preset-react": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz",
- "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-react-display-name": "^7.14.5",
- "@babel/plugin-transform-react-jsx": "^7.14.5",
- "@babel/plugin-transform-react-jsx-development": "^7.14.5",
- "@babel/plugin-transform-react-pure-annotations": "^7.14.5"
- }
- },
- "@babel/preset-typescript": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz",
- "integrity": "sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-typescript": "^7.15.0"
- }
- },
- "@babel/register": {
- "version": "7.15.3",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.15.3.tgz",
- "integrity": "sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==",
- "dev": true,
- "requires": {
- "clone-deep": "^4.0.1",
- "find-cache-dir": "^2.0.0",
- "make-dir": "^2.1.0",
- "pirates": "^4.0.0",
- "source-map-support": "^0.5.16"
- }
- },
- "@babel/runtime": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz",
- "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==",
- "dev": true,
- "requires": {
- "regenerator-runtime": "^0.13.4"
- }
- },
- "@babel/runtime-corejs3": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz",
- "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==",
- "dev": true,
- "requires": {
- "core-js-pure": "^3.16.0",
- "regenerator-runtime": "^0.13.4"
- }
- },
- "@babel/template": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
- "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.14.5",
- "@babel/parser": "^7.15.4",
- "@babel/types": "^7.15.4"
- }
- },
- "@babel/traverse": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz",
- "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.15.4",
- "@babel/helper-function-name": "^7.15.4",
- "@babel/helper-hoist-variables": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
- "@babel/parser": "^7.15.4",
- "@babel/types": "^7.15.4",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- }
- },
- "@babel/types": {
- "version": "7.15.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz",
- "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.14.9",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@discoveryjs/json-ext": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz",
- "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==",
- "dev": true
- },
- "@emotion/cache": {
- "version": "10.0.29",
- "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz",
- "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==",
- "dev": true,
- "requires": {
- "@emotion/sheet": "0.9.4",
- "@emotion/stylis": "0.8.5",
- "@emotion/utils": "0.11.3",
- "@emotion/weak-memoize": "0.2.5"
- }
- },
- "@emotion/core": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.1.1.tgz",
- "integrity": "sha512-ZMLG6qpXR8x031NXD8HJqugy/AZSkAuMxxqB46pmAR7ze47MhNJ56cdoX243QPZdGctrdfo+s08yZTiwaUcRKA==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.5.5",
- "@emotion/cache": "^10.0.27",
- "@emotion/css": "^10.0.27",
- "@emotion/serialize": "^0.11.15",
- "@emotion/sheet": "0.9.4",
- "@emotion/utils": "0.11.3"
- }
- },
- "@emotion/css": {
- "version": "10.0.27",
- "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz",
- "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==",
- "dev": true,
- "requires": {
- "@emotion/serialize": "^0.11.15",
- "@emotion/utils": "0.11.3",
- "babel-plugin-emotion": "^10.0.27"
- }
- },
- "@emotion/hash": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
- "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==",
- "dev": true
- },
- "@emotion/is-prop-valid": {
- "version": "0.8.8",
- "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz",
- "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==",
- "dev": true,
- "requires": {
- "@emotion/memoize": "0.7.4"
- }
- },
- "@emotion/memoize": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz",
- "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==",
- "dev": true
- },
- "@emotion/serialize": {
- "version": "0.11.16",
- "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz",
- "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==",
- "dev": true,
- "requires": {
- "@emotion/hash": "0.8.0",
- "@emotion/memoize": "0.7.4",
- "@emotion/unitless": "0.7.5",
- "@emotion/utils": "0.11.3",
- "csstype": "^2.5.7"
- }
- },
- "@emotion/sheet": {
- "version": "0.9.4",
- "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz",
- "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==",
- "dev": true
- },
- "@emotion/styled": {
- "version": "10.0.27",
- "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.27.tgz",
- "integrity": "sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==",
- "dev": true,
- "requires": {
- "@emotion/styled-base": "^10.0.27",
- "babel-plugin-emotion": "^10.0.27"
- }
- },
- "@emotion/styled-base": {
- "version": "10.0.31",
- "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.31.tgz",
- "integrity": "sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.5.5",
- "@emotion/is-prop-valid": "0.8.8",
- "@emotion/serialize": "^0.11.15",
- "@emotion/utils": "0.11.3"
- }
- },
- "@emotion/stylis": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz",
- "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==",
- "dev": true
- },
- "@emotion/unitless": {
- "version": "0.7.5",
- "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
- "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==",
- "dev": true
- },
- "@emotion/utils": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz",
- "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==",
- "dev": true
- },
- "@emotion/weak-memoize": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz",
- "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==",
- "dev": true
- },
- "@gar/promisify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz",
- "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==",
- "dev": true
- },
- "@mdx-js/mdx": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz",
- "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==",
- "dev": true,
- "requires": {
- "@babel/core": "7.12.9",
- "@babel/plugin-syntax-jsx": "7.12.1",
- "@babel/plugin-syntax-object-rest-spread": "7.8.3",
- "@mdx-js/util": "1.6.22",
- "babel-plugin-apply-mdx-type-prop": "1.6.22",
- "babel-plugin-extract-import-names": "1.6.22",
- "camelcase-css": "2.0.1",
- "detab": "2.0.4",
- "hast-util-raw": "6.0.1",
- "lodash.uniq": "4.5.0",
- "mdast-util-to-hast": "10.0.1",
- "remark-footnotes": "2.0.0",
- "remark-mdx": "1.6.22",
- "remark-parse": "8.0.3",
- "remark-squeeze-paragraphs": "4.0.0",
- "style-to-object": "0.3.0",
- "unified": "9.2.0",
- "unist-builder": "2.0.3",
- "unist-util-visit": "2.0.3"
- },
- "dependencies": {
- "@babel/core": {
- "version": "7.12.9",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz",
- "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helpers": "^7.12.5",
- "@babel/parser": "^7.12.7",
- "@babel/template": "^7.12.7",
- "@babel/traverse": "^7.12.9",
- "@babel/types": "^7.12.7",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
- "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "@mdx-js/util": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz",
- "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==",
- "dev": true
- },
- "@mrmlnc/readdir-enhanced": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
- "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
- "dev": true,
- "requires": {
- "call-me-maybe": "^1.0.1",
- "glob-to-regexp": "^0.3.0"
- }
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "requires": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
- },
- "@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "requires": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- }
- },
- "@npmcli/fs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz",
- "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==",
- "dev": true,
- "requires": {
- "@gar/promisify": "^1.0.1",
- "semver": "^7.3.5"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "@npmcli/move-file": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
- "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
- "dev": true,
- "requires": {
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2"
- }
- },
- "@popperjs/core": {
- "version": "2.10.2",
- "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.2.tgz",
- "integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==",
- "dev": true
- },
- "@reach/router": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.3.4.tgz",
- "integrity": "sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==",
- "dev": true,
- "requires": {
- "create-react-context": "0.3.0",
- "invariant": "^2.2.3",
- "prop-types": "^15.6.1",
- "react-lifecycles-compat": "^3.0.4"
- }
- },
- "@storybook/addon-a11y": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-6.3.12.tgz",
- "integrity": "sha512-q1NdRHFJV6sLEEJw0hatCc5ZIthELqM/AWdrEWDyhcJNyiq7Tq4nKqQBMTQSYwHiUAmxVgw7i4oa1vM2M51/3g==",
- "dev": true,
- "requires": {
- "@storybook/addons": "6.3.12",
- "@storybook/api": "6.3.12",
- "@storybook/channels": "6.3.12",
- "@storybook/client-api": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/components": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/theming": "6.3.12",
- "axe-core": "^4.2.0",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "react-sizeme": "^3.0.1",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "@storybook/addon-controls": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.3.12.tgz",
- "integrity": "sha512-WO/PbygE4sDg3BbstJ49q0uM3Xu5Nw4lnHR5N4hXSvRAulZt1d1nhphRTHjfX+CW+uBcfzkq9bksm6nKuwmOyw==",
- "dev": true,
- "requires": {
- "@storybook/addons": "6.3.12",
- "@storybook/api": "6.3.12",
- "@storybook/client-api": "6.3.12",
- "@storybook/components": "6.3.12",
- "@storybook/node-logger": "6.3.12",
- "@storybook/theming": "6.3.12",
- "core-js": "^3.8.2",
- "ts-dedent": "^2.0.0"
- }
- },
- "@storybook/addon-knobs": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/@storybook/addon-knobs/-/addon-knobs-6.3.1.tgz",
- "integrity": "sha512-2GGGnQSPXXUhHHYv4IW6pkyQlCPYXKYiyGzfhV7Zhs95M2Ban08OA6KLmliMptWCt7U9tqTO8dB5u0C2cWmCTw==",
- "dev": true,
- "requires": {
- "copy-to-clipboard": "^3.3.1",
- "core-js": "^3.8.2",
- "escape-html": "^1.0.3",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "prop-types": "^15.7.2",
- "qs": "^6.10.0",
- "react-colorful": "^5.1.2",
- "react-lifecycles-compat": "^3.0.4",
- "react-select": "^3.2.0"
- }
- },
- "@storybook/addon-viewport": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.3.12.tgz",
- "integrity": "sha512-TRjyfm85xouOPmXxeLdEIzXLfJZZ1ePQ7p/5yphDGBHdxMU4m4qiZr8wYpUaxHsRu/UB3dKfaOyGT+ivogbnbw==",
- "dev": true,
- "requires": {
- "@storybook/addons": "6.3.12",
- "@storybook/api": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/components": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/theming": "6.3.12",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "memoizerific": "^1.11.3",
- "prop-types": "^15.7.2",
- "regenerator-runtime": "^0.13.7"
- }
- },
- "@storybook/addons": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.3.12.tgz",
- "integrity": "sha512-UgoMyr7Qr0FS3ezt8u6hMEcHgyynQS9ucr5mAwZky3wpXRPFyUTmMto9r4BBUdqyUvTUj/LRKIcmLBfj+/l0Fg==",
- "dev": true,
- "requires": {
- "@storybook/api": "6.3.12",
- "@storybook/channels": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/router": "6.3.12",
- "@storybook/theming": "6.3.12",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "regenerator-runtime": "^0.13.7"
- }
- },
- "@storybook/api": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.3.12.tgz",
- "integrity": "sha512-LScRXUeCWEW/OP+jiooNMQICVdusv7azTmULxtm72fhkXFRiQs2CdRNTiqNg46JLLC9z95f1W+pGK66X6HiiQA==",
- "dev": true,
- "requires": {
- "@reach/router": "^1.3.4",
- "@storybook/channels": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/csf": "0.0.1",
- "@storybook/router": "6.3.12",
- "@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.3.12",
- "@types/reach__router": "^1.3.7",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "store2": "^2.12.0",
- "telejson": "^5.3.2",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "@storybook/builder-webpack4": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.3.12.tgz",
- "integrity": "sha512-Dlm5Fc1svqpFDnVPZdAaEBiM/IDZHMV3RfEGbUTY/ZC0q8b/Ug1czzp/w0aTIjOFRuBDcG6IcplikaqHL8CJLg==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.10",
- "@babel/plugin-proposal-class-properties": "^7.12.1",
- "@babel/plugin-proposal-decorators": "^7.12.12",
- "@babel/plugin-proposal-export-default-from": "^7.12.1",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
- "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
- "@babel/plugin-proposal-optional-chaining": "^7.12.7",
- "@babel/plugin-proposal-private-methods": "^7.12.1",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-transform-arrow-functions": "^7.12.1",
- "@babel/plugin-transform-block-scoping": "^7.12.12",
- "@babel/plugin-transform-classes": "^7.12.1",
- "@babel/plugin-transform-destructuring": "^7.12.1",
- "@babel/plugin-transform-for-of": "^7.12.1",
- "@babel/plugin-transform-parameters": "^7.12.1",
- "@babel/plugin-transform-shorthand-properties": "^7.12.1",
- "@babel/plugin-transform-spread": "^7.12.1",
- "@babel/plugin-transform-template-literals": "^7.12.1",
- "@babel/preset-env": "^7.12.11",
- "@babel/preset-react": "^7.12.10",
- "@babel/preset-typescript": "^7.12.7",
- "@storybook/addons": "6.3.12",
- "@storybook/api": "6.3.12",
- "@storybook/channel-postmessage": "6.3.12",
- "@storybook/channels": "6.3.12",
- "@storybook/client-api": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/components": "6.3.12",
- "@storybook/core-common": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/node-logger": "6.3.12",
- "@storybook/router": "6.3.12",
- "@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.3.12",
- "@storybook/ui": "6.3.12",
- "@types/node": "^14.0.10",
- "@types/webpack": "^4.41.26",
- "autoprefixer": "^9.8.6",
- "babel-loader": "^8.2.2",
- "babel-plugin-macros": "^2.8.0",
- "babel-plugin-polyfill-corejs3": "^0.1.0",
- "case-sensitive-paths-webpack-plugin": "^2.3.0",
- "core-js": "^3.8.2",
- "css-loader": "^3.6.0",
- "dotenv-webpack": "^1.8.0",
- "file-loader": "^6.2.0",
- "find-up": "^5.0.0",
- "fork-ts-checker-webpack-plugin": "^4.1.6",
- "fs-extra": "^9.0.1",
- "glob": "^7.1.6",
- "glob-promise": "^3.4.0",
- "global": "^4.4.0",
- "html-webpack-plugin": "^4.0.0",
- "pnp-webpack-plugin": "1.6.4",
- "postcss": "^7.0.36",
- "postcss-flexbugs-fixes": "^4.2.1",
- "postcss-loader": "^4.2.0",
- "raw-loader": "^4.0.2",
- "react-dev-utils": "^11.0.3",
- "stable": "^0.1.8",
- "style-loader": "^1.3.0",
- "terser-webpack-plugin": "^4.2.3",
- "ts-dedent": "^2.0.0",
- "url-loader": "^4.1.1",
- "util-deprecate": "^1.0.2",
- "webpack": "4",
- "webpack-dev-middleware": "^3.7.3",
- "webpack-filter-warnings-plugin": "^1.2.1",
- "webpack-hot-middleware": "^2.25.0",
- "webpack-virtual-modules": "^0.2.2"
- },
- "dependencies": {
- "babel-plugin-macros": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
- "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.7.2",
- "cosmiconfig": "^6.0.0",
- "resolve": "^1.12.0"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
- "dev": true,
- "requires": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fork-ts-checker-webpack-plugin": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
- "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.5.5",
- "chalk": "^2.4.1",
- "micromatch": "^3.1.10",
- "minimatch": "^3.0.4",
- "semver": "^5.6.0",
- "tapable": "^1.0.0",
- "worker-rpc": "^0.1.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
- "@storybook/channel-postmessage": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.3.12.tgz",
- "integrity": "sha512-Ou/2Ga3JRTZ/4sSv7ikMgUgLTeZMsXXWLXuscz4oaYhmOqAU9CrJw0G1NitwBgK/+qC83lEFSLujHkWcoQDOKg==",
- "dev": true,
- "requires": {
- "@storybook/channels": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "qs": "^6.10.0",
- "telejson": "^5.3.2"
- }
- },
- "@storybook/channels": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.3.12.tgz",
- "integrity": "sha512-l4sA+g1PdUV8YCbgs47fIKREdEQAKNdQIZw0b7BfTvY9t0x5yfBywgQhYON/lIeiNGz2OlIuD+VUtqYfCtNSyw==",
- "dev": true,
- "requires": {
- "core-js": "^3.8.2",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "@storybook/client-api": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.3.12.tgz",
- "integrity": "sha512-xnW+lKKK2T774z+rOr9Wopt1aYTStfb86PSs9p3Fpnc2Btcftln+C3NtiHZl8Ccqft8Mz/chLGgewRui6tNI8g==",
- "dev": true,
- "requires": {
- "@storybook/addons": "6.3.12",
- "@storybook/channel-postmessage": "6.3.12",
- "@storybook/channels": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/csf": "0.0.1",
- "@types/qs": "^6.9.5",
- "@types/webpack-env": "^1.16.0",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "stable": "^0.1.8",
- "store2": "^2.12.0",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "@storybook/client-logger": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.3.12.tgz",
- "integrity": "sha512-zNDsamZvHnuqLznDdP9dUeGgQ9TyFh4ray3t1VGO7ZqWVZ2xtVCCXjDvMnOXI2ifMpX5UsrOvshIPeE9fMBmiQ==",
- "dev": true,
- "requires": {
- "core-js": "^3.8.2",
- "global": "^4.4.0"
- }
- },
- "@storybook/components": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.3.12.tgz",
- "integrity": "sha512-kdQt8toUjynYAxDLrJzuG7YSNL6as1wJoyzNUaCfG06YPhvIAlKo7le9tS2mThVFN5e9nbKrW3N1V1sp6ypZXQ==",
- "dev": true,
- "requires": {
- "@popperjs/core": "^2.6.0",
- "@storybook/client-logger": "6.3.12",
- "@storybook/csf": "0.0.1",
- "@storybook/theming": "6.3.12",
- "@types/color-convert": "^2.0.0",
- "@types/overlayscrollbars": "^1.12.0",
- "@types/react-syntax-highlighter": "11.0.5",
- "color-convert": "^2.0.1",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "markdown-to-jsx": "^7.1.3",
- "memoizerific": "^1.11.3",
- "overlayscrollbars": "^1.13.1",
- "polished": "^4.0.5",
- "prop-types": "^15.7.2",
- "react-colorful": "^5.1.2",
- "react-popper-tooltip": "^3.1.1",
- "react-syntax-highlighter": "^13.5.3",
- "react-textarea-autosize": "^8.3.0",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "@storybook/core": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.3.12.tgz",
- "integrity": "sha512-FJm2ns8wk85hXWKslLWiUWRWwS9KWRq7jlkN6M9p57ghFseSGr4W71Orcoab4P3M7jI97l5yqBfppbscinE74g==",
- "dev": true,
- "requires": {
- "@storybook/core-client": "6.3.12",
- "@storybook/core-server": "6.3.12"
- }
- },
- "@storybook/core-client": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.3.12.tgz",
- "integrity": "sha512-8Smd9BgZHJpAdevLKQYinwtjSyCZAuBMoetP4P5hnn53mWl0NFbrHFaAdT+yNchDLZQUbf7Y18VmIqEH+RCR5w==",
- "dev": true,
- "requires": {
- "@storybook/addons": "6.3.12",
- "@storybook/channel-postmessage": "6.3.12",
- "@storybook/client-api": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/csf": "0.0.1",
- "@storybook/ui": "6.3.12",
- "airbnb-js-shims": "^2.2.1",
- "ansi-to-html": "^0.6.11",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0",
- "unfetch": "^4.2.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "@storybook/core-common": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.3.12.tgz",
- "integrity": "sha512-xlHs2QXELq/moB4MuXjYOczaxU64BIseHsnFBLyboJYN6Yso3qihW5RB7cuJlGohkjb4JwY74dvfT4Ww66rkBA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.10",
- "@babel/plugin-proposal-class-properties": "^7.12.1",
- "@babel/plugin-proposal-decorators": "^7.12.12",
- "@babel/plugin-proposal-export-default-from": "^7.12.1",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
- "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
- "@babel/plugin-proposal-optional-chaining": "^7.12.7",
- "@babel/plugin-proposal-private-methods": "^7.12.1",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-transform-arrow-functions": "^7.12.1",
- "@babel/plugin-transform-block-scoping": "^7.12.12",
- "@babel/plugin-transform-classes": "^7.12.1",
- "@babel/plugin-transform-destructuring": "^7.12.1",
- "@babel/plugin-transform-for-of": "^7.12.1",
- "@babel/plugin-transform-parameters": "^7.12.1",
- "@babel/plugin-transform-shorthand-properties": "^7.12.1",
- "@babel/plugin-transform-spread": "^7.12.1",
- "@babel/preset-env": "^7.12.11",
- "@babel/preset-react": "^7.12.10",
- "@babel/preset-typescript": "^7.12.7",
- "@babel/register": "^7.12.1",
- "@storybook/node-logger": "6.3.12",
- "@storybook/semver": "^7.3.2",
- "@types/glob-base": "^0.3.0",
- "@types/micromatch": "^4.0.1",
- "@types/node": "^14.0.10",
- "@types/pretty-hrtime": "^1.0.0",
- "babel-loader": "^8.2.2",
- "babel-plugin-macros": "^3.0.1",
- "babel-plugin-polyfill-corejs3": "^0.1.0",
- "chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "express": "^4.17.1",
- "file-system-cache": "^1.0.5",
- "find-up": "^5.0.0",
- "fork-ts-checker-webpack-plugin": "^6.0.4",
- "glob": "^7.1.6",
- "glob-base": "^0.3.0",
- "interpret": "^2.2.0",
- "json5": "^2.1.3",
- "lazy-universal-dotenv": "^3.0.1",
- "micromatch": "^4.0.2",
- "pkg-dir": "^5.0.0",
- "pretty-hrtime": "^1.0.3",
- "resolve-from": "^5.0.0",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2",
- "webpack": "4"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@storybook/core-events": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.3.12.tgz",
- "integrity": "sha512-SXfD7xUUMazaeFkB92qOTUV8Y/RghE4SkEYe5slAdjeocSaH7Nz2WV0rqNEgChg0AQc+JUI66no8L9g0+lw4Gw==",
- "dev": true,
- "requires": {
- "core-js": "^3.8.2"
- }
- },
- "@storybook/core-server": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.3.12.tgz",
- "integrity": "sha512-T/Mdyi1FVkUycdyOnhXvoo3d9nYXLQFkmaJkltxBFLzAePAJUSgAsPL9odNC3+p8Nr2/UDsDzvu/Ow0IF0mzLQ==",
- "dev": true,
- "requires": {
- "@discoveryjs/json-ext": "^0.5.3",
- "@storybook/builder-webpack4": "6.3.12",
- "@storybook/core-client": "6.3.12",
- "@storybook/core-common": "6.3.12",
- "@storybook/csf-tools": "6.3.12",
- "@storybook/manager-webpack4": "6.3.12",
- "@storybook/node-logger": "6.3.12",
- "@storybook/semver": "^7.3.2",
- "@types/node": "^14.0.10",
- "@types/node-fetch": "^2.5.7",
- "@types/pretty-hrtime": "^1.0.0",
- "@types/webpack": "^4.41.26",
- "better-opn": "^2.1.1",
- "boxen": "^4.2.0",
- "chalk": "^4.1.0",
- "cli-table3": "0.6.0",
- "commander": "^6.2.1",
- "compression": "^1.7.4",
- "core-js": "^3.8.2",
- "cpy": "^8.1.1",
- "detect-port": "^1.3.0",
- "express": "^4.17.1",
- "file-system-cache": "^1.0.5",
- "fs-extra": "^9.0.1",
- "globby": "^11.0.2",
- "ip": "^1.1.5",
- "node-fetch": "^2.6.1",
- "pretty-hrtime": "^1.0.3",
- "prompts": "^2.4.0",
- "regenerator-runtime": "^0.13.7",
- "serve-favicon": "^2.5.0",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2",
- "webpack": "4"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@storybook/csf": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz",
- "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.15"
- }
- },
- "@storybook/csf-tools": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.3.12.tgz",
- "integrity": "sha512-wNrX+99ajAXxLo0iRwrqw65MLvCV6SFC0XoPLYrtBvyKr+hXOOnzIhO2f5BNEii8velpC2gl2gcLKeacpVYLqA==",
- "dev": true,
- "requires": {
- "@babel/generator": "^7.12.11",
- "@babel/parser": "^7.12.11",
- "@babel/plugin-transform-react-jsx": "^7.12.12",
- "@babel/preset-env": "^7.12.11",
- "@babel/traverse": "^7.12.11",
- "@babel/types": "^7.12.11",
- "@mdx-js/mdx": "^1.6.22",
- "@storybook/csf": "^0.0.1",
- "core-js": "^3.8.2",
- "fs-extra": "^9.0.1",
- "js-string-escape": "^1.0.1",
- "lodash": "^4.17.20",
- "prettier": "~2.2.1",
- "regenerator-runtime": "^0.13.7"
- }
- },
- "@storybook/manager-webpack4": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.3.12.tgz",
- "integrity": "sha512-OkPYNrHXg2yZfKmEfTokP6iKx4OLTr0gdI5yehi/bLEuQCSHeruxBc70Dxm1GBk1Mrf821wD9WqMXNDjY5Qtug==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.10",
- "@babel/plugin-transform-template-literals": "^7.12.1",
- "@babel/preset-react": "^7.12.10",
- "@storybook/addons": "6.3.12",
- "@storybook/core-client": "6.3.12",
- "@storybook/core-common": "6.3.12",
- "@storybook/node-logger": "6.3.12",
- "@storybook/theming": "6.3.12",
- "@storybook/ui": "6.3.12",
- "@types/node": "^14.0.10",
- "@types/webpack": "^4.41.26",
- "babel-loader": "^8.2.2",
- "case-sensitive-paths-webpack-plugin": "^2.3.0",
- "chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "css-loader": "^3.6.0",
- "dotenv-webpack": "^1.8.0",
- "express": "^4.17.1",
- "file-loader": "^6.2.0",
- "file-system-cache": "^1.0.5",
- "find-up": "^5.0.0",
- "fs-extra": "^9.0.1",
- "html-webpack-plugin": "^4.0.0",
- "node-fetch": "^2.6.1",
- "pnp-webpack-plugin": "1.6.4",
- "read-pkg-up": "^7.0.1",
- "regenerator-runtime": "^0.13.7",
- "resolve-from": "^5.0.0",
- "style-loader": "^1.3.0",
- "telejson": "^5.3.2",
- "terser-webpack-plugin": "^4.2.3",
- "ts-dedent": "^2.0.0",
- "url-loader": "^4.1.1",
- "util-deprecate": "^1.0.2",
- "webpack": "4",
- "webpack-dev-middleware": "^3.7.3",
- "webpack-virtual-modules": "^0.2.2"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@storybook/node-logger": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.3.12.tgz",
- "integrity": "sha512-iktOem/Ls2+dsZY9PhPeC6T1QhX/y7OInP88neLsqEPEbB2UXca3Ydv7OZBhBVbvN25W45b05MRzbtNUxYLNRw==",
- "dev": true,
- "requires": {
- "@types/npmlog": "^4.1.2",
- "chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "npmlog": "^4.1.2",
- "pretty-hrtime": "^1.0.3"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "@storybook/preact": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/preact/-/preact-6.3.12.tgz",
- "integrity": "sha512-okP4Y1Zf26AdjK/5sFJGoF1Ce2WPK/3w+x0WgMdEOs7K7/pnKNQ1Ck8KLXmPyjTN+6bVoIMP8NcS8ZqHJu25lw==",
- "dev": true,
- "requires": {
- "@babel/plugin-transform-react-jsx": "^7.12.12",
- "@storybook/addons": "6.3.12",
- "@storybook/core": "6.3.12",
- "@storybook/core-common": "6.3.12",
- "@types/webpack-env": "^1.16.0",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "react": "16.14.0",
- "react-dom": "16.14.0",
- "read-pkg-up": "^7.0.1",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
- }
- },
- "@storybook/router": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.3.12.tgz",
- "integrity": "sha512-G/pNGCnrJRetCwyEZulHPT+YOcqEj/vkPVDTUfii2qgqukup6K0cjwgd7IukAURnAnnzTi1gmgFuEKUi8GE/KA==",
- "dev": true,
- "requires": {
- "@reach/router": "^1.3.4",
- "@storybook/client-logger": "6.3.12",
- "@types/reach__router": "^1.3.7",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "ts-dedent": "^2.0.0"
- }
- },
- "@storybook/semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==",
- "dev": true,
- "requires": {
- "core-js": "^3.6.5",
- "find-up": "^4.1.0"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- }
- }
- },
- "@storybook/theming": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.3.12.tgz",
- "integrity": "sha512-wOJdTEa/VFyFB2UyoqyYGaZdym6EN7RALuQOAMT6zHA282FBmKw8nL5DETHEbctpnHdcrMC/391teK4nNSrdOA==",
- "dev": true,
- "requires": {
- "@emotion/core": "^10.1.1",
- "@emotion/is-prop-valid": "^0.8.6",
- "@emotion/styled": "^10.0.27",
- "@storybook/client-logger": "6.3.12",
- "core-js": "^3.8.2",
- "deep-object-diff": "^1.1.0",
- "emotion-theming": "^10.0.27",
- "global": "^4.4.0",
- "memoizerific": "^1.11.3",
- "polished": "^4.0.5",
- "resolve-from": "^5.0.0",
- "ts-dedent": "^2.0.0"
- }
- },
- "@storybook/ui": {
- "version": "6.3.12",
- "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.3.12.tgz",
- "integrity": "sha512-PC2yEz4JMfarq7rUFbeA3hCA+31p5es7YPEtxLRvRwIZhtL0P4zQUfHpotb3KgWdoAIfZesAuoIQwMPQmEFYrw==",
- "dev": true,
- "requires": {
- "@emotion/core": "^10.1.1",
- "@storybook/addons": "6.3.12",
- "@storybook/api": "6.3.12",
- "@storybook/channels": "6.3.12",
- "@storybook/client-logger": "6.3.12",
- "@storybook/components": "6.3.12",
- "@storybook/core-events": "6.3.12",
- "@storybook/router": "6.3.12",
- "@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.3.12",
- "@types/markdown-to-jsx": "^6.11.3",
- "copy-to-clipboard": "^3.3.1",
- "core-js": "^3.8.2",
- "core-js-pure": "^3.8.2",
- "downshift": "^6.0.15",
- "emotion-theming": "^10.0.27",
- "fuse.js": "^3.6.1",
- "global": "^4.4.0",
- "lodash": "^4.17.20",
- "markdown-to-jsx": "^6.11.4",
- "memoizerific": "^1.11.3",
- "polished": "^4.0.5",
- "qs": "^6.10.0",
- "react-draggable": "^4.4.3",
- "react-helmet-async": "^1.0.7",
- "react-sizeme": "^3.0.1",
- "regenerator-runtime": "^0.13.7",
- "resolve-from": "^5.0.0",
- "store2": "^2.12.0"
- },
- "dependencies": {
- "markdown-to-jsx": {
- "version": "6.11.4",
- "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz",
- "integrity": "sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw==",
- "dev": true,
- "requires": {
- "prop-types": "^15.6.2",
- "unquote": "^1.1.0"
- }
- }
- }
- },
- "@types/braces": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/braces/-/braces-3.0.1.tgz",
- "integrity": "sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==",
- "dev": true
- },
- "@types/color-convert": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz",
- "integrity": "sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==",
- "dev": true,
- "requires": {
- "@types/color-name": "*"
- }
- },
- "@types/color-name": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
- "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
- "dev": true
- },
- "@types/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
- "dev": true,
- "requires": {
- "@types/minimatch": "*",
- "@types/node": "*"
- }
- },
- "@types/glob-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@types/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-pYHWiDR+EOUN18F9byiAoQNUMZ0=",
- "dev": true
- },
- "@types/hast": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
- "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
- "dev": true,
- "requires": {
- "@types/unist": "*"
- }
- },
- "@types/html-minifier-terser": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz",
- "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==",
- "dev": true
- },
- "@types/is-function": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz",
- "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==",
- "dev": true
- },
- "@types/json-schema": {
- "version": "7.0.9",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
- "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==",
- "dev": true
- },
- "@types/markdown-to-jsx": {
- "version": "6.11.3",
- "resolved": "https://registry.npmjs.org/@types/markdown-to-jsx/-/markdown-to-jsx-6.11.3.tgz",
- "integrity": "sha512-30nFYpceM/ZEvhGiqWjm5quLUxNeld0HCzJEXMZZDpq53FPkS85mTwkWtCXzCqq8s5JYLgM5W392a02xn8Bdaw==",
- "dev": true,
- "requires": {
- "@types/react": "*"
- }
- },
- "@types/mdast": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
- "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
- "dev": true,
- "requires": {
- "@types/unist": "*"
- }
- },
- "@types/micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==",
- "dev": true,
- "requires": {
- "@types/braces": "*"
- }
- },
- "@types/minimatch": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
- "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
- "dev": true
- },
- "@types/node": {
- "version": "14.17.32",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.32.tgz",
- "integrity": "sha512-JcII3D5/OapPGx+eJ+Ik1SQGyt6WvuqdRfh9jUwL6/iHGjmyOriBDciBUu7lEIBTL2ijxwrR70WUnw5AEDmFvQ==",
- "dev": true
- },
- "@types/node-fetch": {
- "version": "2.5.12",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz",
- "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "form-data": "^3.0.0"
- }
- },
- "@types/normalize-package-data": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
- "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
- "dev": true
- },
- "@types/npmlog": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.3.tgz",
- "integrity": "sha512-1TcL7YDYCtnHmLhTWbum+IIwLlvpaHoEKS2KNIngEwLzwgDeHaebaEHHbQp8IqzNQ9IYiboLKUjAf7MZqG63+w==",
- "dev": true
- },
- "@types/overlayscrollbars": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.1.tgz",
- "integrity": "sha512-V25YHbSoKQN35UasHf0EKD9U2vcmexRSp78qa8UglxFH8H3D+adEa9zGZwrqpH4TdvqeMrgMqVqsLB4woAryrQ==",
- "dev": true
- },
- "@types/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
- "dev": true
- },
- "@types/parse5": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz",
- "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==",
- "dev": true
- },
- "@types/pretty-hrtime": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz",
- "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==",
- "dev": true
- },
- "@types/prop-types": {
- "version": "15.7.4",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz",
- "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==",
- "dev": true
- },
- "@types/qs": {
- "version": "6.9.7",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
- "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==",
- "dev": true
- },
- "@types/reach__router": {
- "version": "1.3.9",
- "resolved": "https://registry.npmjs.org/@types/reach__router/-/reach__router-1.3.9.tgz",
- "integrity": "sha512-N6rqQqTTAV/zKLfK3iq9Ww3wqCEhTZvsilhl0zI09zETdVq1QGmJH6+/xnj8AFUWIrle2Cqo+PGM/Ltr1vBb9w==",
- "dev": true,
- "requires": {
- "@types/react": "*"
- }
- },
- "@types/react": {
- "version": "17.0.33",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.33.tgz",
- "integrity": "sha512-pLWntxXpDPaU+RTAuSGWGSEL2FRTNyRQOjSWDke/rxRg14ncsZvx8AKWMWZqvc1UOaJIAoObdZhAWvRaHFi5rw==",
- "dev": true,
- "requires": {
- "@types/prop-types": "*",
- "@types/scheduler": "*",
- "csstype": "^3.0.2"
- },
- "dependencies": {
- "csstype": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz",
- "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==",
- "dev": true
- }
- }
- },
- "@types/react-syntax-highlighter": {
- "version": "11.0.5",
- "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.5.tgz",
- "integrity": "sha512-VIOi9i2Oj5XsmWWoB72p3KlZoEbdRAcechJa8Ztebw7bDl2YmR+odxIqhtJGp1q2EozHs02US+gzxJ9nuf56qg==",
- "dev": true,
- "requires": {
- "@types/react": "*"
- }
- },
- "@types/scheduler": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
- "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
- "dev": true
- },
- "@types/source-list-map": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
- "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
- "dev": true
- },
- "@types/tapable": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz",
- "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==",
- "dev": true
- },
- "@types/uglify-js": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz",
- "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==",
- "dev": true,
- "requires": {
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "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
- }
- }
- },
- "@types/unist": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
- "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==",
- "dev": true
- },
- "@types/webpack": {
- "version": "4.41.31",
- "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.31.tgz",
- "integrity": "sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "@types/tapable": "^1",
- "@types/uglify-js": "*",
- "@types/webpack-sources": "*",
- "anymatch": "^3.0.0",
- "source-map": "^0.6.0"
- },
- "dependencies": {
- "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
- }
- }
- },
- "@types/webpack-env": {
- "version": "1.16.3",
- "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.3.tgz",
- "integrity": "sha512-9gtOPPkfyNoEqCQgx4qJKkuNm/x0R2hKR7fdl7zvTJyHnIisuE/LfvXOsYWL0o3qq6uiBnKZNNNzi3l0y/X+xw==",
- "dev": true
- },
- "@types/webpack-sources": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz",
- "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "@types/source-list-map": "*",
- "source-map": "^0.7.3"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
- }
- },
- "@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "@webassemblyjs/floating-point-hex-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
- "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
- "dev": true
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "@webassemblyjs/helper-code-frame": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
- "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "@webassemblyjs/helper-fsm": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
- "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
- "dev": true
- },
- "@webassemblyjs/helper-module-context": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
- "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0"
- }
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
- "dev": true,
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
- "dev": true,
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
- "dev": true
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/helper-wasm-section": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-opt": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "@webassemblyjs/wast-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
- "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/floating-point-hex-parser": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-code-frame": "1.9.0",
- "@webassemblyjs/helper-fsm": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "@xtuc/ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
- "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
- "dev": true
- },
- "@xtuc/long": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
- "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
- "dev": true
- },
- "accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "dev": true,
- "requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- }
- },
- "acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true
- },
- "address": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz",
- "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==",
- "dev": true
- },
- "aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "requires": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- }
- },
- "airbnb-js-shims": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz",
- "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==",
- "dev": true,
- "requires": {
- "array-includes": "^3.0.3",
- "array.prototype.flat": "^1.2.1",
- "array.prototype.flatmap": "^1.2.1",
- "es5-shim": "^4.5.13",
- "es6-shim": "^0.35.5",
- "function.prototype.name": "^1.1.0",
- "globalthis": "^1.0.0",
- "object.entries": "^1.1.0",
- "object.fromentries": "^2.0.0 || ^1.0.0",
- "object.getownpropertydescriptors": "^2.0.3",
- "object.values": "^1.1.0",
- "promise.allsettled": "^1.0.0",
- "promise.prototype.finally": "^3.1.0",
- "string.prototype.matchall": "^4.0.0 || ^3.0.1",
- "string.prototype.padend": "^3.0.0",
- "string.prototype.padstart": "^3.0.0",
- "symbol.prototype.description": "^1.0.0"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ajv-errors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
- "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
- "dev": true,
- "requires": {}
- },
- "ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true,
- "requires": {}
- },
- "ansi-align": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
- "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
- "dev": true,
- "requires": {
- "string-width": "^4.1.0"
- }
- },
- "ansi-colors": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
- "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
- "dev": true
- },
- "ansi-html-community": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
- "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
- "dev": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "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"
- },
- "dependencies": {
- "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
- }
- }
- },
- "ansi-to-html": {
- "version": "0.6.15",
- "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz",
- "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==",
- "dev": true,
- "requires": {
- "entities": "^2.0.0"
- }
- },
- "anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "app-root-dir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz",
- "integrity": "sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg=",
- "dev": true
- },
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true
- },
- "are-we-there-yet": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
- "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
- "dev": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
- "array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
- "dev": true
- },
- "array-includes": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
- "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1",
- "get-intrinsic": "^1.1.1",
- "is-string": "^1.0.7"
- }
- },
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true
- },
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "array.prototype.flat": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
- "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.0"
- }
- },
- "array.prototype.flatmap": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz",
- "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.0"
- }
- },
- "array.prototype.map": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.4.tgz",
- "integrity": "sha512-Qds9QnX7A0qISY7JT5WuJO0NJPE9CMlC6JzHQfhpqAAQQzufVRoeH7EzUY5GcPTx72voG8LV/5eo+b8Qi8hmhA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.0",
- "es-array-method-boxes-properly": "^1.0.0",
- "is-string": "^1.0.7"
- }
- },
- "arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "dev": true
- },
- "asn1.js": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
- "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "safer-buffer": "^2.1.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
- "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
- "dev": true,
- "requires": {
- "object-assign": "^4.1.1",
- "util": "0.10.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
- "dev": true
- },
- "util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
- "dev": true,
- "requires": {
- "inherits": "2.0.1"
- }
- }
- }
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
- },
- "async-each": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
- "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
- "dev": true,
- "optional": true
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
- "autoprefixer": {
- "version": "9.8.8",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz",
- "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==",
- "dev": true,
- "requires": {
- "browserslist": "^4.12.0",
- "caniuse-lite": "^1.0.30001109",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "picocolors": "^0.2.1",
- "postcss": "^7.0.32",
- "postcss-value-parser": "^4.1.0"
- }
- },
- "axe-core": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.4.tgz",
- "integrity": "sha512-4Hk6iSA/H90rtiPoCpSkeJxNWCPBf7szwVvaUqrPdxo0j2Y04suHK9jPKXaE3WI7OET6wBSwsWw7FDc1DBq7iQ==",
- "dev": true
- },
- "babel-loader": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
- "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==",
- "dev": true,
- "requires": {
- "find-cache-dir": "^3.3.1",
- "loader-utils": "^1.4.0",
- "make-dir": "^3.1.0",
- "schema-utils": "^2.6.5"
- },
- "dependencies": {
- "find-cache-dir": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
- "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- }
- }
- },
- "babel-plugin-apply-mdx-type-prop": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz",
- "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "7.10.4",
- "@mdx-js/util": "1.6.22"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- }
- }
- },
- "babel-plugin-dynamic-import-node": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
- "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
- "dev": true,
- "requires": {
- "object.assign": "^4.1.0"
- }
- },
- "babel-plugin-emotion": {
- "version": "10.2.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz",
- "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.0.0",
- "@emotion/hash": "0.8.0",
- "@emotion/memoize": "0.7.4",
- "@emotion/serialize": "^0.11.16",
- "babel-plugin-macros": "^2.0.0",
- "babel-plugin-syntax-jsx": "^6.18.0",
- "convert-source-map": "^1.5.0",
- "escape-string-regexp": "^1.0.5",
- "find-root": "^1.1.0",
- "source-map": "^0.5.7"
- },
- "dependencies": {
- "babel-plugin-macros": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
- "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.7.2",
- "cosmiconfig": "^6.0.0",
- "resolve": "^1.12.0"
- }
- },
- "cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
- "dev": true,
- "requires": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
- }
- }
- }
- },
- "babel-plugin-extract-import-names": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz",
- "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- }
- }
- },
- "babel-plugin-macros": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
- "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.12.5",
- "cosmiconfig": "^7.0.0",
- "resolve": "^1.19.0"
- }
- },
- "babel-plugin-polyfill-corejs2": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz",
- "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.13.11",
- "@babel/helper-define-polyfill-provider": "^0.2.2",
- "semver": "^6.1.1"
- }
- },
- "babel-plugin-polyfill-corejs3": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz",
- "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==",
- "dev": true,
- "requires": {
- "@babel/helper-define-polyfill-provider": "^0.1.5",
- "core-js-compat": "^3.8.1"
- },
- "dependencies": {
- "@babel/helper-define-polyfill-provider": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz",
- "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==",
- "dev": true,
- "requires": {
- "@babel/helper-compilation-targets": "^7.13.0",
- "@babel/helper-module-imports": "^7.12.13",
- "@babel/helper-plugin-utils": "^7.13.0",
- "@babel/traverse": "^7.13.0",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2",
- "semver": "^6.1.2"
- }
- }
- }
- },
- "babel-plugin-polyfill-regenerator": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz",
- "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==",
- "dev": true,
- "requires": {
- "@babel/helper-define-polyfill-provider": "^0.2.2"
- }
- },
- "babel-plugin-syntax-jsx": {
- "version": "6.18.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
- "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
- "dev": true
- },
- "bail": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
- "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true
- },
- "batch-processor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz",
- "integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg=",
- "dev": true
- },
- "better-opn": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz",
- "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==",
- "dev": true,
- "requires": {
- "open": "^7.0.3"
- }
- },
- "big.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
- "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
- "dev": true
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true
- },
- "bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
- },
- "bn.js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
- "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==",
- "dev": true
- },
- "body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
- "dev": true,
- "requires": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
- },
- "dependencies": {
- "bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
- "dev": true
- },
- "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"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "dev": true
- }
- }
- },
- "boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
- "dev": true
- },
- "boxen": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz",
- "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==",
- "dev": true,
- "requires": {
- "ansi-align": "^3.0.0",
- "camelcase": "^5.3.1",
- "chalk": "^3.0.0",
- "cli-boxes": "^2.2.0",
- "string-width": "^4.1.0",
- "term-size": "^2.1.0",
- "type-fest": "^0.8.1",
- "widest-line": "^3.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
- "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "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"
- }
- },
- "brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
- "dev": true
- },
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
- "requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "browserify-cipher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "dev": true,
- "requires": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "browserify-rsa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
- "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
- "dev": true,
- "requires": {
- "bn.js": "^5.0.0",
- "randombytes": "^2.0.1"
- }
- },
- "browserify-sign": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
- "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
- "dev": true,
- "requires": {
- "bn.js": "^5.1.1",
- "browserify-rsa": "^4.0.1",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "elliptic": "^6.5.3",
- "inherits": "^2.0.4",
- "parse-asn1": "^5.1.5",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- }
- }
- },
- "browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "dev": true,
- "requires": {
- "pako": "~1.0.5"
- }
- },
- "browserslist": {
- "version": "4.17.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz",
- "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001271",
- "electron-to-chromium": "^1.3.878",
- "escalade": "^3.1.1",
- "node-releases": "^2.0.1",
- "picocolors": "^1.0.0"
- },
- "dependencies": {
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- }
- }
- },
- "buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
- "dev": true,
- "requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- }
- }
- },
- "buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
- "dev": true
- },
- "builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
- "dev": true
- },
- "bytes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
- "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
- "dev": true
- },
- "cacache": {
- "version": "15.3.0",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
- "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
- "dev": true,
- "requires": {
- "@npmcli/fs": "^1.0.0",
- "@npmcli/move-file": "^1.0.1",
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "glob": "^7.1.4",
- "infer-owner": "^1.0.4",
- "lru-cache": "^6.0.0",
- "minipass": "^3.1.1",
- "minipass-collect": "^1.0.2",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.2",
- "mkdirp": "^1.0.3",
- "p-map": "^4.0.0",
- "promise-inflight": "^1.0.1",
- "rimraf": "^3.0.2",
- "ssri": "^8.0.1",
- "tar": "^6.0.2",
- "unique-filename": "^1.1.1"
- },
- "dependencies": {
- "p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- }
- }
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- }
- },
- "call-me-maybe": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
- "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=",
- "dev": true
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camel-case": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
- "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
- "dev": true,
- "requires": {
- "pascal-case": "^3.1.2",
- "tslib": "^2.0.3"
- }
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "camelcase-css": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30001271",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz",
- "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==",
- "dev": true
- },
- "case-sensitive-paths-webpack-plugin": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
- "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==",
- "dev": true
- },
- "ccount": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
- "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==",
- "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"
- }
- },
- "character-entities": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
- "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
- "dev": true
- },
- "character-entities-legacy": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
- "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
- "dev": true
- },
- "character-reference-invalid": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
- "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
- "dev": true
- },
- "chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- }
- },
- "chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "dev": true
- },
- "chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
- "dev": true
- },
- "cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "clean-css": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz",
- "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==",
- "dev": true,
- "requires": {
- "source-map": "~0.6.0"
- },
- "dependencies": {
- "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
- }
- }
- },
- "clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true
- },
- "cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
- "dev": true
- },
- "cli-table3": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz",
- "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==",
- "dev": true,
- "requires": {
- "colors": "^1.1.2",
- "object-assign": "^4.1.0",
- "string-width": "^4.2.0"
- }
- },
- "clone-deep": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
- "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
- },
- "dependencies": {
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "clsx": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
- "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==",
- "dev": true
- },
- "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
- },
- "collapse-white-space": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz",
- "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==",
- "dev": true
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "colors": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
- "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
- "dev": true,
- "optional": 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"
- }
- },
- "comma-separated-tokens": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
- "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
- "dev": true
- },
- "commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
- "dev": true
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
- "dev": true
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "compressible": {
- "version": "2.0.18",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
- "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
- "dev": true,
- "requires": {
- "mime-db": ">= 1.43.0 < 2"
- }
- },
- "compression": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
- "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.5",
- "bytes": "3.0.0",
- "compressible": "~2.0.16",
- "debug": "2.6.9",
- "on-headers": "~1.0.2",
- "safe-buffer": "5.1.2",
- "vary": "~1.1.2"
- },
- "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"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "compute-scroll-into-view": {
- "version": "1.0.17",
- "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.17.tgz",
- "integrity": "sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==",
- "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
- },
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- }
- },
- "console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
- "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
- "dev": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
- "dev": true
- },
- "constants-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
- "dev": true
- },
- "content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
- "dev": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
- "dev": true
- },
- "convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
- },
- "cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
- "dev": true
- },
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
- "dev": true
- },
- "copy-concurrently": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
- "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- },
- "dependencies": {
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "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"
- }
- }
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
- },
- "copy-to-clipboard": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz",
- "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==",
- "dev": true,
- "requires": {
- "toggle-selection": "^1.0.6"
- }
- },
- "core-js": {
- "version": "3.19.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.19.0.tgz",
- "integrity": "sha512-L1TpFRWXZ76vH1yLM+z6KssLZrP8Z6GxxW4auoCj+XiViOzNPJCAuTIkn03BGdFe6Z5clX5t64wRIRypsZQrUg==",
- "dev": true
- },
- "core-js-compat": {
- "version": "3.19.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.19.0.tgz",
- "integrity": "sha512-R09rKZ56ccGBebjTLZHvzDxhz93YPT37gBm6qUhnwj3Kt7aCjjZWD1injyNbyeFHxNKfeZBSyds6O9n3MKq1sw==",
- "dev": true,
- "requires": {
- "browserslist": "^4.17.5",
- "semver": "7.0.0"
- },
- "dependencies": {
- "semver": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
- "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
- "dev": true
- }
- }
- },
- "core-js-pure": {
- "version": "3.19.0",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.0.tgz",
- "integrity": "sha512-UEQk8AxyCYvNAs6baNoPqDADv7BX0AmBLGxVsrAifPPx/C8EAzV4Q+2ZUJqVzfI2TQQEZITnwUkWcHpgc/IubQ==",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true
- },
- "cosmiconfig": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
- "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
- "dev": true,
- "requires": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.2.1",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.10.0"
- }
- },
- "cp-file": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz",
- "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "nested-error-stacks": "^2.0.0",
- "p-event": "^4.1.0"
- },
- "dependencies": {
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- }
- }
- },
- "cpy": {
- "version": "8.1.2",
- "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz",
- "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==",
- "dev": true,
- "requires": {
- "arrify": "^2.0.1",
- "cp-file": "^7.0.0",
- "globby": "^9.2.0",
- "has-glob": "^1.0.0",
- "junk": "^3.1.0",
- "nested-error-stacks": "^2.1.0",
- "p-all": "^2.1.0",
- "p-filter": "^2.1.0",
- "p-map": "^3.0.0"
- },
- "dependencies": {
- "@nodelib/fs.stat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
- "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
- "dev": true
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true,
- "requires": {
- "array-uniq": "^1.0.1"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "dir-glob": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
- "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
- "dev": true,
- "requires": {
- "path-type": "^3.0.0"
- }
- },
- "fast-glob": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
- "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
- "dev": true,
- "requires": {
- "@mrmlnc/readdir-enhanced": "^2.2.1",
- "@nodelib/fs.stat": "^1.1.2",
- "glob-parent": "^3.1.0",
- "is-glob": "^4.0.0",
- "merge2": "^1.2.3",
- "micromatch": "^3.1.10"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- },
- "globby": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz",
- "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==",
- "dev": true,
- "requires": {
- "@types/glob": "^7.1.1",
- "array-union": "^1.0.2",
- "dir-glob": "^2.2.2",
- "fast-glob": "^2.2.6",
- "glob": "^7.1.3",
- "ignore": "^4.0.3",
- "pify": "^4.0.1",
- "slash": "^2.0.0"
- }
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "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
- }
- }
- },
- "slash": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
- "dev": true
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
- "create-ecdh": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
- "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.5.3"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "create-react-context": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz",
- "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==",
- "dev": true,
- "requires": {
- "gud": "^1.0.0",
- "warning": "^4.0.3"
- }
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "dev": true,
- "requires": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- }
- },
- "css-loader": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
- "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "cssesc": "^3.0.0",
- "icss-utils": "^4.1.1",
- "loader-utils": "^1.2.3",
- "normalize-path": "^3.0.0",
- "postcss": "^7.0.32",
- "postcss-modules-extract-imports": "^2.0.0",
- "postcss-modules-local-by-default": "^3.0.2",
- "postcss-modules-scope": "^2.2.0",
- "postcss-modules-values": "^3.0.0",
- "postcss-value-parser": "^4.1.0",
- "schema-utils": "^2.7.0",
- "semver": "^6.3.0"
- }
- },
- "css-select": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz",
- "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==",
- "dev": true,
- "requires": {
- "boolbase": "^1.0.0",
- "css-what": "^5.0.0",
- "domhandler": "^4.2.0",
- "domutils": "^2.6.0",
- "nth-check": "^2.0.0"
- }
- },
- "css-what": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz",
- "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==",
- "dev": true
- },
- "cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true
- },
- "csstype": {
- "version": "2.6.18",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.18.tgz",
- "integrity": "sha512-RSU6Hyeg14am3Ah4VZEmeX8H7kLwEEirXe6aU2IPfKNvhXwTflK5HQRDNI0ypQXoqmm+QPyG2IaPuQE5zMwSIQ==",
- "dev": true
- },
- "cyclist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
- "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=",
- "dev": true
- },
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- }
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
- "deep-object-diff": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz",
- "integrity": "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==",
- "dev": true
- },
- "deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
- "dev": true
- },
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dev": true,
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "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
- },
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
- "dev": true
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "dev": true
- },
- "des.js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
- "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
- "dev": true
- },
- "detab": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz",
- "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==",
- "dev": true,
- "requires": {
- "repeat-string": "^1.5.4"
- }
- },
- "detect-port": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz",
- "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==",
- "dev": true,
- "requires": {
- "address": "^1.0.1",
- "debug": "^2.6.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"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "detect-port-alt": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz",
- "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==",
- "dev": true,
- "requires": {
- "address": "^1.0.1",
- "debug": "^2.6.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"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "diffie-hellman": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "requires": {
- "path-type": "^4.0.0"
- }
- },
- "dom-converter": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
- "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
- "dev": true,
- "requires": {
- "utila": "~0.4"
- }
- },
- "dom-helpers": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
- "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.8.7",
- "csstype": "^3.0.2"
- },
- "dependencies": {
- "csstype": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz",
- "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==",
- "dev": true
- }
- }
- },
- "dom-serializer": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
- "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
- "dev": true,
- "requires": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.2.0",
- "entities": "^2.0.0"
- }
- },
- "dom-walk": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
- "dev": true
- },
- "domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true
- },
- "domelementtype": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
- "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==",
- "dev": true
- },
- "domhandler": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
- "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
- "dev": true,
- "requires": {
- "domelementtype": "^2.2.0"
- }
- },
- "domutils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
- "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
- "dev": true,
- "requires": {
- "dom-serializer": "^1.0.1",
- "domelementtype": "^2.2.0",
- "domhandler": "^4.2.0"
- }
- },
- "dot-case": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
- "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
- "dev": true,
- "requires": {
- "no-case": "^3.0.4",
- "tslib": "^2.0.3"
- }
- },
- "dotenv": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz",
- "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==",
- "dev": true
- },
- "dotenv-defaults": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-1.1.1.tgz",
- "integrity": "sha512-6fPRo9o/3MxKvmRZBD3oNFdxODdhJtIy1zcJeUSCs6HCy4tarUpd+G67UTU9tF6OWXeSPqsm4fPAB+2eY9Rt9Q==",
- "dev": true,
- "requires": {
- "dotenv": "^6.2.0"
- }
- },
- "dotenv-expand": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
- "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
- "dev": true
- },
- "dotenv-webpack": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/dotenv-webpack/-/dotenv-webpack-1.8.0.tgz",
- "integrity": "sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg==",
- "dev": true,
- "requires": {
- "dotenv-defaults": "^1.0.2"
- }
- },
- "downshift": {
- "version": "6.1.7",
- "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.7.tgz",
- "integrity": "sha512-cVprZg/9Lvj/uhYRxELzlu1aezRcgPWBjTvspiGTVEU64gF5pRdSRKFVLcxqsZC637cLAGMbL40JavEfWnqgNg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.14.8",
- "compute-scroll-into-view": "^1.0.17",
- "prop-types": "^15.7.2",
- "react-is": "^17.0.2",
- "tslib": "^2.3.0"
- }
- },
- "duplexer": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
- "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
- "dev": true
- },
- "duplexify": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
- "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- }
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
- "dev": true
- },
- "electron-to-chromium": {
- "version": "1.3.879",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.879.tgz",
- "integrity": "sha512-zJo+D9GwbJvM31IdFmwcGvychhk4KKbKYo2GWlsn+C/dxz2NwmbhGJjWwTfFSF2+eFH7VvfA8MCZ8SOqTrlnpw==",
- "dev": true
- },
- "element-resize-detector": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.3.tgz",
- "integrity": "sha512-+dhNzUgLpq9ol5tyhoG7YLoXL3ssjfFW+0gpszXPwRU6NjGr1fVHMEAF8fVzIiRJq57Nre0RFeIjJwI8Nh2NmQ==",
- "dev": true,
- "requires": {
- "batch-processor": "1.0.0"
- }
- },
- "elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "emojis-list": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
- "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
- "dev": true
- },
- "emotion-theming": {
- "version": "10.0.27",
- "resolved": "https://registry.npmjs.org/emotion-theming/-/emotion-theming-10.0.27.tgz",
- "integrity": "sha512-MlF1yu/gYh8u+sLUqA0YuA9JX0P4Hb69WlKc/9OLo+WCXuX6sy/KoIa+qJimgmr2dWqnypYKYPX37esjDBbhdw==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.5.5",
- "@emotion/weak-memoize": "0.2.5",
- "hoist-non-react-statics": "^3.3.0"
- }
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
- "dev": true
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "enhanced-resolve": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
- "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "dependencies": {
- "memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- }
- }
- },
- "entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
- "dev": true
- },
- "errno": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
- "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
- "dev": true,
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "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"
- }
- },
- "es-abstract": {
- "version": "1.19.1",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
- "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "get-symbol-description": "^1.0.0",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "internal-slot": "^1.0.3",
- "is-callable": "^1.2.4",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.1",
- "is-string": "^1.0.7",
- "is-weakref": "^1.0.1",
- "object-inspect": "^1.11.0",
- "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"
- }
- },
- "es-array-method-boxes-properly": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
- "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
- "dev": true
- },
- "es-get-iterator": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz",
- "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.0",
- "has-symbols": "^1.0.1",
- "is-arguments": "^1.1.0",
- "is-map": "^2.0.2",
- "is-set": "^2.0.2",
- "is-string": "^1.0.5",
- "isarray": "^2.0.5"
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "es5-shim": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.2.tgz",
- "integrity": "sha512-n0XTVMGps+Deyr38jtqKPR5F5hb9owYeRQcKJW39eFvzUk/u/9Ww315werRzbiNMnHCUw/YHDPBphTlEnzdi+A==",
- "dev": true
- },
- "es6-shim": {
- "version": "0.35.6",
- "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.6.tgz",
- "integrity": "sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA==",
- "dev": true
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
- "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
- },
- "eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "requires": {
- "estraverse": "^5.2.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
- "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "dev": true
- }
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "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
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "dev": true
- },
- "events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "dev": true
- },
- "evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "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"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.7",
- "array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
- "content-type": "~1.0.4",
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.1.2",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
- "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"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "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
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- }
- }
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "fast-glob": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
- "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
- "dev": true,
- "requires": {
- "@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"
- }
- },
- "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
- },
- "fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
- "dev": true,
- "requires": {
- "reusify": "^1.0.4"
- }
- },
- "fault": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
- "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
- "dev": true,
- "requires": {
- "format": "^0.2.0"
- }
- },
- "figgy-pudding": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
- "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
- "dev": true
- },
- "file-loader": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
- "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
- "dev": true,
- "requires": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0"
- },
- "dependencies": {
- "loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
- "file-system-cache": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.0.5.tgz",
- "integrity": "sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08=",
- "dev": true,
- "requires": {
- "bluebird": "^3.3.5",
- "fs-extra": "^0.30.0",
- "ramda": "^0.21.0"
- },
- "dependencies": {
- "fs-extra": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
- "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^2.1.0",
- "klaw": "^1.0.0",
- "path-is-absolute": "^1.0.0",
- "rimraf": "^2.2.8"
- }
- },
- "jsonfile": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
- "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "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"
- }
- }
- }
- },
- "filesize": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz",
- "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==",
- "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"
- }
- },
- "finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~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"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "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"
- },
- "dependencies": {
- "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"
- }
- },
- "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"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "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"
- }
- },
- "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
- },
- "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"
- }
- }
- }
- },
- "find-root": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
- "dev": true
- },
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flush-write-stream": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
- "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.3.6"
- }
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "fork-ts-checker-webpack-plugin": {
- "version": "6.4.0",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.4.0.tgz",
- "integrity": "sha512-3I3wFkc4DbzaUDPWEi96wdYGu4EKtxBafhZYm0o4mX51d9bphAY4P3mBl8K5mFXFJqVzHfmdbm9kLGnm7vwwBg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@types/json-schema": "^7.0.5",
- "chalk": "^4.1.0",
- "chokidar": "^3.4.2",
- "cosmiconfig": "^6.0.0",
- "deepmerge": "^4.2.2",
- "fs-extra": "^9.0.0",
- "glob": "^7.1.6",
- "memfs": "^3.1.2",
- "minimatch": "^3.0.4",
- "schema-utils": "2.7.0",
- "semver": "^7.3.2",
- "tapable": "^1.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
- "dev": true,
- "requires": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "schema-utils": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
- "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.4",
- "ajv": "^6.12.2",
- "ajv-keywords": "^3.4.1"
- }
- },
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "dev": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
- "format": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
- "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=",
- "dev": true
- },
- "forwarded": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
- "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
- "dev": true
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "dev": true
- },
- "from2": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dev": true,
- "requires": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- }
- },
- "fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "fs-monkey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
- "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
- "dev": true
- },
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
- "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "function.prototype.name": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
- "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.0",
- "functions-have-names": "^1.2.2"
- }
- },
- "functions-have-names": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz",
- "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==",
- "dev": true
- },
- "fuse.js": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.6.1.tgz",
- "integrity": "sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw==",
- "dev": true
- },
- "gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "dev": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- }
- },
- "get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
- },
- "glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "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-base": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
- "dev": true,
- "requires": {
- "glob-parent": "^2.0.0",
- "is-glob": "^2.0.0"
- },
- "dependencies": {
- "glob-parent": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
- "dev": true,
- "requires": {
- "is-glob": "^2.0.0"
- }
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dev": true,
- "requires": {
- "is-extglob": "^1.0.0"
- }
- }
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "glob-promise": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz",
- "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==",
- "dev": true,
- "requires": {
- "@types/glob": "*"
- }
- },
- "glob-to-regexp": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
- "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
- "dev": true
- },
- "global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "dev": true,
- "requires": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
- "global-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
- "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
- "dev": true,
- "requires": {
- "global-prefix": "^3.0.0"
- }
- },
- "global-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
- "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
- "dev": true,
- "requires": {
- "ini": "^1.3.5",
- "kind-of": "^6.0.2",
- "which": "^1.3.1"
- },
- "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"
- }
- }
- }
- },
- "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
- },
- "globalthis": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz",
- "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3"
- }
- },
- "globby": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
- "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.8",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
- "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
- "dev": true
- },
- "gud": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz",
- "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==",
- "dev": true
- },
- "gzip-size": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
- "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==",
- "dev": true,
- "requires": {
- "duplexer": "^0.1.1",
- "pify": "^4.0.1"
- }
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
- "dev": true
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "has-glob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz",
- "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=",
- "dev": true,
- "requires": {
- "is-glob": "^3.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- },
- "has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
- "dev": true
- },
- "has-tostringtag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
- "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.2"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "hash-base": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
- "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- }
- }
- },
- "hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "hast-to-hyperscript": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz",
- "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.3",
- "comma-separated-tokens": "^1.0.0",
- "property-information": "^5.3.0",
- "space-separated-tokens": "^1.0.0",
- "style-to-object": "^0.3.0",
- "unist-util-is": "^4.0.0",
- "web-namespaces": "^1.0.0"
- }
- },
- "hast-util-from-parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz",
- "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==",
- "dev": true,
- "requires": {
- "@types/parse5": "^5.0.0",
- "hastscript": "^6.0.0",
- "property-information": "^5.0.0",
- "vfile": "^4.0.0",
- "vfile-location": "^3.2.0",
- "web-namespaces": "^1.0.0"
- }
- },
- "hast-util-parse-selector": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
- "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
- "dev": true
- },
- "hast-util-raw": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz",
- "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==",
- "dev": true,
- "requires": {
- "@types/hast": "^2.0.0",
- "hast-util-from-parse5": "^6.0.0",
- "hast-util-to-parse5": "^6.0.0",
- "html-void-elements": "^1.0.0",
- "parse5": "^6.0.0",
- "unist-util-position": "^3.0.0",
- "vfile": "^4.0.0",
- "web-namespaces": "^1.0.0",
- "xtend": "^4.0.0",
- "zwitch": "^1.0.0"
- }
- },
- "hast-util-to-parse5": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz",
- "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==",
- "dev": true,
- "requires": {
- "hast-to-hyperscript": "^9.0.0",
- "property-information": "^5.0.0",
- "web-namespaces": "^1.0.0",
- "xtend": "^4.0.0",
- "zwitch": "^1.0.0"
- }
- },
- "hastscript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
- "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
- "dev": true,
- "requires": {
- "@types/hast": "^2.0.0",
- "comma-separated-tokens": "^1.0.0",
- "hast-util-parse-selector": "^2.0.0",
- "property-information": "^5.0.0",
- "space-separated-tokens": "^1.0.0"
- }
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "highlight.js": {
- "version": "10.7.3",
- "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
- "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
- "dev": true
- },
- "hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "dev": true,
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "hoist-non-react-statics": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
- "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
- "dev": true,
- "requires": {
- "react-is": "^16.7.0"
- },
- "dependencies": {
- "react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
- }
- }
- },
- "hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
- },
- "html-entities": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz",
- "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==",
- "dev": true
- },
- "html-minifier-terser": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
- "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
- "dev": true,
- "requires": {
- "camel-case": "^4.1.1",
- "clean-css": "^4.2.3",
- "commander": "^4.1.1",
- "he": "^1.2.0",
- "param-case": "^3.0.3",
- "relateurl": "^0.2.7",
- "terser": "^4.6.3"
- },
- "dependencies": {
- "commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true
- }
- }
- },
- "html-void-elements": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz",
- "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==",
- "dev": true
- },
- "html-webpack-plugin": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz",
- "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==",
- "dev": true,
- "requires": {
- "@types/html-minifier-terser": "^5.0.0",
- "@types/tapable": "^1.0.5",
- "@types/webpack": "^4.41.8",
- "html-minifier-terser": "^5.0.1",
- "loader-utils": "^1.2.3",
- "lodash": "^4.17.20",
- "pretty-error": "^2.1.1",
- "tapable": "^1.1.3",
- "util.promisify": "1.0.0"
- }
- },
- "htmlparser2": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
- "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
- "dev": true,
- "requires": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.0.0",
- "domutils": "^2.5.2",
- "entities": "^2.0.0"
- }
- },
- "http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- }
- }
- },
- "https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
- "dev": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "icss-utils": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
- "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
- "dev": true,
- "requires": {
- "postcss": "^7.0.14"
- }
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true
- },
- "iferr": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
- "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
- "dev": true
- },
- "ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "dev": true
- },
- "immer": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz",
- "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==",
- "dev": true
- },
- "import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "dependencies": {
- "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
- }
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true
- },
- "infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
- "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
- },
- "ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true
- },
- "inline-style-parser": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
- "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==",
- "dev": true
- },
- "internal-slot": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
- "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.1.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- }
- },
- "interpret": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
- "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
- "dev": true
- },
- "invariant": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
- "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.0.0"
- }
- },
- "ip": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
- "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
- "dev": true
- },
- "ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "dev": true
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-alphabetical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
- "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
- "dev": true
- },
- "is-alphanumerical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
- "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
- "dev": true,
- "requires": {
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0"
- }
- },
- "is-arguments": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
- "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- }
- },
- "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-bigint": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
- "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
- "dev": true,
- "requires": {
- "has-bigints": "^1.0.1"
- }
- },
- "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-boolean-object": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
- "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
- "dev": true
- },
- "is-callable": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
- "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
- "dev": true
- },
- "is-core-module": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
- "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-date-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
- "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
- "dev": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-decimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
- "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
- "dev": true
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
- "is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
- "dev": true
- },
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- },
- "dependencies": {
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "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": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
- },
- "is-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-hexadecimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
- "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
- "dev": true
- },
- "is-map": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
- "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
- "dev": true
- },
- "is-negative-zero": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
- "dev": true
- },
- "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-number-object": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
- "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
- "dev": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
- },
- "is-regex": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
- "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-root": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz",
- "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==",
- "dev": true
- },
- "is-set": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
- "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
- "dev": true
- },
- "is-shared-array-buffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
- "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
- "dev": true
- },
- "is-string": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
- "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
- "dev": true,
- "requires": {
- "has-tostringtag": "^1.0.0"
- }
- },
- "is-symbol": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
- "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
- "dev": true,
- "requires": {
- "has-symbols": "^1.0.2"
- }
- },
- "is-weakref": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz",
- "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0"
- }
- },
- "is-whitespace-character": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz",
- "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==",
- "dev": true
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
- "is-word-character": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz",
- "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==",
- "dev": true
- },
- "is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "requires": {
- "is-docker": "^2.0.0"
- }
- },
- "isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isobject": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
- "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==",
- "dev": true
- },
- "iterate-iterator": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz",
- "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==",
- "dev": true
- },
- "iterate-value": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz",
- "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==",
- "dev": true,
- "requires": {
- "es-get-iterator": "^1.0.2",
- "iterate-iterator": "^1.0.1"
- }
- },
- "jest-worker": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
- "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^7.0.0"
- },
- "dependencies": {
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "js-string-escape": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
- "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=",
- "dev": true
- },
- "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
- },
- "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-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "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
- },
- "json5": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
- "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- }
- },
- "junk": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
- "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
- "dev": true
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "klaw": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
- "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.9"
- }
- },
- "kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true
- },
- "klona": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz",
- "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==",
- "dev": true
- },
- "lazy-universal-dotenv": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz",
- "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.5.0",
- "app-root-dir": "^1.0.2",
- "core-js": "^3.0.4",
- "dotenv": "^8.0.0",
- "dotenv-expand": "^5.1.0"
- },
- "dependencies": {
- "dotenv": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
- "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
- "dev": true
- }
- }
- },
- "lines-and-columns": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
- "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
- "dev": true
- },
- "loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
- "dev": true
- },
- "loader-utils": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
- "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- },
- "dependencies": {
- "json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- }
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
- "dev": true
- },
- "lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
- "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"
- }
- },
- "lower-case": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
- "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
- "dev": true,
- "requires": {
- "tslib": "^2.0.3"
- }
- },
- "lowlight": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
- "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
- "dev": true,
- "requires": {
- "fault": "^1.0.0",
- "highlight.js": "~10.7.0"
- }
- },
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "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"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
- },
- "map-or-similar": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz",
- "integrity": "sha1-beJlMXSt+12e3DPGnT6Sobdvrwg=",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "markdown-escapes": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz",
- "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==",
- "dev": true
- },
- "markdown-to-jsx": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.3.tgz",
- "integrity": "sha512-jtQ6VyT7rMT5tPV0g2EJakEnXLiPksnvlYtwQsVVZ611JsWGN8bQ1tVSDX4s6JllfEH6wmsYxNjTUAMrPmNA8w==",
- "dev": true,
- "requires": {}
- },
- "md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "mdast-squeeze-paragraphs": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz",
- "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==",
- "dev": true,
- "requires": {
- "unist-util-remove": "^2.0.0"
- }
- },
- "mdast-util-definitions": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz",
- "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==",
- "dev": true,
- "requires": {
- "unist-util-visit": "^2.0.0"
- }
- },
- "mdast-util-to-hast": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz",
- "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0",
- "@types/unist": "^2.0.0",
- "mdast-util-definitions": "^4.0.0",
- "mdurl": "^1.0.0",
- "unist-builder": "^2.0.0",
- "unist-util-generated": "^1.0.0",
- "unist-util-position": "^3.0.0",
- "unist-util-visit": "^2.0.0"
- }
- },
- "mdurl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
- "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
- "dev": true
- },
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
- "dev": true
- },
- "memfs": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz",
- "integrity": "sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==",
- "dev": true,
- "requires": {
- "fs-monkey": "1.0.3"
- }
- },
- "memoize-one": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
- "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==",
- "dev": true
- },
- "memoizerific": {
- "version": "1.11.3",
- "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz",
- "integrity": "sha1-fIekZGREwy11Q4VwkF8tvRsagFo=",
- "dev": true,
- "requires": {
- "map-or-similar": "^1.5.0"
- }
- },
- "memory-fs": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
- "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- },
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
- "dev": true
- },
- "merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
- "dev": true
- },
- "microevent.ts": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz",
- "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==",
- "dev": true
- },
- "micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- }
- },
- "miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true
- },
- "mime-db": {
- "version": "1.50.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
- "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.33",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz",
- "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==",
- "dev": true,
- "requires": {
- "mime-db": "1.50.0"
- }
- },
- "min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
- "dev": true,
- "requires": {
- "dom-walk": "^0.1.0"
- }
- },
- "minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true
- },
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
- "dev": true
- },
- "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.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
- },
- "minipass": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz",
- "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- },
- "minipass-collect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minipass-flush": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
- "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minipass-pipeline": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
- "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "dev": true,
- "requires": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- }
- },
- "mississippi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
- "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
- "dev": true,
- "requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- }
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- }
- },
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
- },
- "move-concurrently": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
- "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- },
- "dependencies": {
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "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"
- }
- }
- }
- },
- "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
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- }
- },
- "negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
- "dev": true
- },
- "neo-async": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
- "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
- "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
- },
- "no-case": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
- "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
- "dev": true,
- "requires": {
- "lower-case": "^2.0.2",
- "tslib": "^2.0.3"
- }
- },
- "node-fetch": {
- "version": "2.6.5",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
- "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
- "dev": true,
- "requires": {
- "whatwg-url": "^5.0.0"
- }
- },
- "node-libs-browser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
- "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
- "dev": true,
- "requires": {
- "assert": "^1.1.1",
- "browserify-zlib": "^0.2.0",
- "buffer": "^4.3.0",
- "console-browserify": "^1.1.0",
- "constants-browserify": "^1.0.0",
- "crypto-browserify": "^3.11.0",
- "domain-browser": "^1.1.1",
- "events": "^3.0.0",
- "https-browserify": "^1.0.0",
- "os-browserify": "^0.3.0",
- "path-browserify": "0.0.1",
- "process": "^0.11.10",
- "punycode": "^1.2.4",
- "querystring-es3": "^0.2.0",
- "readable-stream": "^2.3.3",
- "stream-browserify": "^2.0.1",
- "stream-http": "^2.7.2",
- "string_decoder": "^1.0.0",
- "timers-browserify": "^2.0.4",
- "tty-browserify": "0.0.0",
- "url": "^0.11.0",
- "util": "^0.11.0",
- "vm-browserify": "^1.0.1"
- },
- "dependencies": {
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "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
- },
- "node-releases": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
- "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
- "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"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "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
- },
- "normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
- "dev": true
- },
- "npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "dev": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "nth-check": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
- "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==",
- "dev": true,
- "requires": {
- "boolbase": "^1.0.0"
- }
- },
- "num2fraction": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
- "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
- },
- "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
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-inspect": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
- "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==",
- "dev": true
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- }
- },
- "object.entries": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
- "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- }
- },
- "object.fromentries": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
- "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- }
- },
- "object.getownpropertydescriptors": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz",
- "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "object.values": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
- "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- }
- },
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dev": true,
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "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"
- }
- },
- "open": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
- "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
- "dev": true,
- "requires": {
- "is-docker": "^2.0.0",
- "is-wsl": "^2.1.1"
- }
- },
- "os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
- "dev": true
- },
- "overlayscrollbars": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/overlayscrollbars/-/overlayscrollbars-1.13.1.tgz",
- "integrity": "sha512-gIQfzgGgu1wy80EB4/6DaJGHMEGmizq27xHIESrzXq0Y/J0Ay1P3DWk6tuVmEPIZH15zaBlxeEJOqdJKmowHCQ==",
- "dev": true
- },
- "p-all": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz",
- "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==",
- "dev": true,
- "requires": {
- "p-map": "^2.0.0"
- },
- "dependencies": {
- "p-map": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
- "dev": true
- }
- }
- },
- "p-event": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
- "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==",
- "dev": true,
- "requires": {
- "p-timeout": "^3.1.0"
- }
- },
- "p-filter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz",
- "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==",
- "dev": true,
- "requires": {
- "p-map": "^2.0.0"
- },
- "dependencies": {
- "p-map": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
- "dev": true
- }
- }
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
- "dev": true,
- "requires": {
- "aggregate-error": "^3.0.0"
- }
- },
- "p-timeout": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
- "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
- "dev": true,
- "requires": {
- "p-finally": "^1.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
- },
- "pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
- "dev": true
- },
- "parallel-transform": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
- "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
- "dev": true,
- "requires": {
- "cyclist": "^1.0.1",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- }
- },
- "param-case": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
- "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
- "dev": true,
- "requires": {
- "dot-case": "^3.0.4",
- "tslib": "^2.0.3"
- }
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "parse-asn1": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
- "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
- "dev": true,
- "requires": {
- "asn1.js": "^5.2.0",
- "browserify-aes": "^1.0.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
- }
- },
- "parse-entities": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
- "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
- "dev": true,
- "requires": {
- "character-entities": "^1.0.0",
- "character-entities-legacy": "^1.0.0",
- "character-reference-invalid": "^1.0.0",
- "is-alphanumerical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-hexadecimal": "^1.0.0"
- }
- },
- "parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- }
- },
- "parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
- "parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true
- },
- "pascal-case": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
- "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
- "dev": true,
- "requires": {
- "no-case": "^3.0.4",
- "tslib": "^2.0.3"
- }
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
- "dev": true
- },
- "path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
- "dev": true
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "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": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "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==",
- "dev": true
- },
- "path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
- "dev": true
- },
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true
- },
- "pbkdf2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
- "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
- "dev": true,
- "requires": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "picocolors": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
- "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
- "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
- "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": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
- "dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
- }
- },
- "pkg-dir": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
- "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
- "dev": true,
- "requires": {
- "find-up": "^5.0.0"
- }
- },
- "pkg-up": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
- "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0"
- },
- "dependencies": {
- "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"
- }
- },
- "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"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "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"
- }
- },
- "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
- }
- }
- },
- "pnp-webpack-plugin": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz",
- "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==",
- "dev": true,
- "requires": {
- "ts-pnp": "^1.1.6"
- }
- },
- "polished": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/polished/-/polished-4.1.3.tgz",
- "integrity": "sha512-ocPAcVBUOryJEKe0z2KLd1l9EBa1r5mSwlKpExmrLzsnIzJo4axsoU9O2BjOTkDGDT4mZ0WFE5XKTlR3nLnZOA==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.14.0"
- }
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
- },
- "postcss": {
- "version": "7.0.39",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
- "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
- "dev": true,
- "requires": {
- "picocolors": "^0.2.1",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "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
- }
- }
- },
- "postcss-flexbugs-fixes": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz",
- "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==",
- "dev": true,
- "requires": {
- "postcss": "^7.0.26"
- }
- },
- "postcss-loader": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz",
- "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==",
- "dev": true,
- "requires": {
- "cosmiconfig": "^7.0.0",
- "klona": "^2.0.4",
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0",
- "semver": "^7.3.4"
- },
- "dependencies": {
- "loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- },
- "semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "postcss-modules-extract-imports": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
- "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
- "dev": true,
- "requires": {
- "postcss": "^7.0.5"
- }
- },
- "postcss-modules-local-by-default": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz",
- "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==",
- "dev": true,
- "requires": {
- "icss-utils": "^4.1.1",
- "postcss": "^7.0.32",
- "postcss-selector-parser": "^6.0.2",
- "postcss-value-parser": "^4.1.0"
- }
- },
- "postcss-modules-scope": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
- "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
- "dev": true,
- "requires": {
- "postcss": "^7.0.6",
- "postcss-selector-parser": "^6.0.0"
- }
- },
- "postcss-modules-values": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
- "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
- "dev": true,
- "requires": {
- "icss-utils": "^4.0.0",
- "postcss": "^7.0.6"
- }
- },
- "postcss-selector-parser": {
- "version": "6.0.6",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
- "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
- "dev": true,
- "requires": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- }
- },
- "postcss-value-parser": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
- "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
- "dev": true
- },
- "preact": {
- "version": "10.5.15",
- "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.15.tgz",
- "integrity": "sha512-5chK29n6QcJc3m1lVrKQSQ+V7K1Gb8HeQY6FViQ5AxCAEGu3DaHffWNDkC9+miZgsLvbvU9rxbV1qinGHMHzqA==",
- "dev": true
- },
- "preact-render-to-string": {
- "version": "5.1.19",
- "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.1.19.tgz",
- "integrity": "sha512-bj8sn/oytIKO6RtOGSS/1+5CrQyRSC99eLUnEVbqUa6MzJX5dYh7wu9bmT0d6lm/Vea21k9KhCQwvr2sYN3rrQ==",
- "dev": true,
- "requires": {
- "pretty-format": "^3.8.0"
- }
- },
- "prettier": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
- "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
- "dev": true
- },
- "pretty-error": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
- "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.20",
- "renderkid": "^2.0.4"
- }
- },
- "pretty-format": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
- "integrity": "sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U=",
- "dev": true
- },
- "pretty-hrtime": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
- "dev": true
- },
- "prismjs": {
- "version": "1.25.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz",
- "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==",
- "dev": true
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- },
- "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
- },
- "promise-inflight": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
- "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
- "dev": true
- },
- "promise.allsettled": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.5.tgz",
- "integrity": "sha512-tVDqeZPoBC0SlzJHzWGZ2NKAguVq2oiYj7gbggbiTvH2itHohijTp7njOUA0aQ/nl+0lr/r6egmhoYu63UZ/pQ==",
- "dev": true,
- "requires": {
- "array.prototype.map": "^1.0.4",
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1",
- "get-intrinsic": "^1.1.1",
- "iterate-value": "^1.0.2"
- }
- },
- "promise.prototype.finally": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.3.tgz",
- "integrity": "sha512-EXRF3fC9/0gz4qkt/f5EP5iW4kj9oFpBICNpCNOb/52+8nlHIX07FPLbi/q4qYBQ1xZqivMzTpNQSnArVASolQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- }
- },
- "prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "dev": true,
- "requires": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- }
- },
- "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"
- },
- "dependencies": {
- "react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
- }
- }
- },
- "property-information": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
- "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
- "dev": true,
- "requires": {
- "xtend": "^4.0.0"
- }
- },
- "proxy-addr": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
- "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
- "dev": true,
- "requires": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- }
- },
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
- "dev": true
- },
- "public-encrypt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
- "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "dev": true,
- "requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
- }
- },
- "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.10.1",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz",
- "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==",
- "dev": true,
- "requires": {
- "side-channel": "^1.0.4"
- }
- },
- "querystring": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
- "dev": true
- },
- "querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
- "dev": true
- },
- "queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
- },
- "ramda": {
- "version": "0.21.0",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.21.0.tgz",
- "integrity": "sha1-oAGr7bP/YQd9T/HVd9RN536NCjU=",
- "dev": true
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
- "range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "dev": true
- },
- "raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
- "dev": true,
- "requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "dependencies": {
- "bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
- "dev": true
- }
- }
- },
- "raw-loader": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz",
- "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==",
- "dev": true,
- "requires": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0"
- },
- "dependencies": {
- "loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
- "react": {
- "version": "16.14.0",
- "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
- "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2"
- }
- },
- "react-colorful": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.5.0.tgz",
- "integrity": "sha512-BuzrlrM0ylg7coPkXOrRqlf2BgHLw5L44sybbr9Lg4xy7w9e5N7fGYbojOO0s8J0nvrM3PERN2rVFkvSa24lnQ==",
- "dev": true,
- "requires": {}
- },
- "react-dev-utils": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz",
- "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "7.10.4",
- "address": "1.1.2",
- "browserslist": "4.14.2",
- "chalk": "2.4.2",
- "cross-spawn": "7.0.3",
- "detect-port-alt": "1.1.6",
- "escape-string-regexp": "2.0.0",
- "filesize": "6.1.0",
- "find-up": "4.1.0",
- "fork-ts-checker-webpack-plugin": "4.1.6",
- "global-modules": "2.0.0",
- "globby": "11.0.1",
- "gzip-size": "5.1.1",
- "immer": "8.0.1",
- "is-root": "2.1.0",
- "loader-utils": "2.0.0",
- "open": "^7.0.2",
- "pkg-up": "3.1.0",
- "prompts": "2.4.0",
- "react-error-overlay": "^6.0.9",
- "recursive-readdir": "2.2.2",
- "shell-quote": "1.7.2",
- "strip-ansi": "6.0.0",
- "text-table": "0.2.0"
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "browserslist": {
- "version": "4.14.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.2.tgz",
- "integrity": "sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001125",
- "electron-to-chromium": "^1.3.564",
- "escalade": "^3.0.2",
- "node-releases": "^1.1.61"
- }
- },
- "escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "fork-ts-checker-webpack-plugin": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
- "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.5.5",
- "chalk": "^2.4.1",
- "micromatch": "^3.1.10",
- "minimatch": "^3.0.4",
- "semver": "^5.6.0",
- "tapable": "^1.0.0",
- "worker-rpc": "^0.1.0"
- }
- },
- "globby": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz",
- "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
- "dev": true,
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "node-releases": {
- "version": "1.1.77",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz",
- "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==",
- "dev": true
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "prompts": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
- "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
- "dev": true,
- "requires": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
- "react-dom": {
- "version": "16.14.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz",
- "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.19.1"
- }
- },
- "react-draggable": {
- "version": "4.4.4",
- "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.4.tgz",
- "integrity": "sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA==",
- "dev": true,
- "requires": {
- "clsx": "^1.1.1",
- "prop-types": "^15.6.0"
- }
- },
- "react-error-overlay": {
- "version": "6.0.9",
- "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz",
- "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==",
- "dev": true
- },
- "react-fast-compare": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz",
- "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==",
- "dev": true
- },
- "react-helmet-async": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.1.2.tgz",
- "integrity": "sha512-LTTzDDkyIleT/JJ6T/uqx7Y8qi1EuPPSiJawQY/nHHz0h7SPDT6HxP1YDDQx/fzcVxCqpWEEMS3QdrSrNkJYhg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.12.5",
- "invariant": "^2.2.4",
- "prop-types": "^15.7.2",
- "react-fast-compare": "^3.2.0",
- "shallowequal": "^1.1.0"
- }
- },
- "react-input-autosize": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-3.0.0.tgz",
- "integrity": "sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg==",
- "dev": true,
- "requires": {
- "prop-types": "^15.5.8"
- }
- },
- "react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
- "dev": true
- },
- "react-lifecycles-compat": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
- "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==",
- "dev": true
- },
- "react-popper": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.2.5.tgz",
- "integrity": "sha512-kxGkS80eQGtLl18+uig1UIf9MKixFSyPxglsgLBxlYnyDf65BiY9B3nZSc6C9XUNDgStROB0fMQlTEz1KxGddw==",
- "dev": true,
- "requires": {
- "react-fast-compare": "^3.0.1",
- "warning": "^4.0.2"
- }
- },
- "react-popper-tooltip": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/react-popper-tooltip/-/react-popper-tooltip-3.1.1.tgz",
- "integrity": "sha512-EnERAnnKRptQBJyaee5GJScWNUKQPDD2ywvzZyUjst/wj5U64C8/CnSYLNEmP2hG0IJ3ZhtDxE8oDN+KOyavXQ==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.12.5",
- "@popperjs/core": "^2.5.4",
- "react-popper": "^2.2.4"
- }
- },
- "react-select": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/react-select/-/react-select-3.2.0.tgz",
- "integrity": "sha512-B/q3TnCZXEKItO0fFN/I0tWOX3WJvi/X2wtdffmwSQVRwg5BpValScTO1vdic9AxlUgmeSzib2hAZAwIUQUZGQ==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.4.4",
- "@emotion/cache": "^10.0.9",
- "@emotion/core": "^10.0.9",
- "@emotion/css": "^10.0.9",
- "memoize-one": "^5.0.0",
- "prop-types": "^15.6.0",
- "react-input-autosize": "^3.0.0",
- "react-transition-group": "^4.3.0"
- }
- },
- "react-sizeme": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.2.tgz",
- "integrity": "sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==",
- "dev": true,
- "requires": {
- "element-resize-detector": "^1.2.2",
- "invariant": "^2.2.4",
- "shallowequal": "^1.1.0",
- "throttle-debounce": "^3.0.1"
- }
- },
- "react-syntax-highlighter": {
- "version": "13.5.3",
- "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-13.5.3.tgz",
- "integrity": "sha512-crPaF+QGPeHNIblxxCdf2Lg936NAHKhNhuMzRL3F9ct6aYXL3NcZtCL0Rms9+qVo6Y1EQLdXGypBNSbPL/r+qg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.3.1",
- "highlight.js": "^10.1.1",
- "lowlight": "^1.14.0",
- "prismjs": "^1.21.0",
- "refractor": "^3.1.0"
- }
- },
- "react-textarea-autosize": {
- "version": "8.3.3",
- "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz",
- "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.10.2",
- "use-composed-ref": "^1.0.0",
- "use-latest": "^1.0.0"
- }
- },
- "react-transition-group": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
- "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.5.5",
- "dom-helpers": "^5.0.1",
- "loose-envify": "^1.4.0",
- "prop-types": "^15.6.2"
- }
- },
- "read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
- "dev": true,
- "requires": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true
- }
- }
- },
- "read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
- "dev": true,
- "requires": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
- }
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": 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": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- }
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "recursive-readdir": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
- "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
- "dev": true,
- "requires": {
- "minimatch": "3.0.4"
- }
- },
- "refractor": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.5.0.tgz",
- "integrity": "sha512-QwPJd3ferTZ4cSPPjdP5bsYHMytwWYnAN5EEnLtGvkqp/FCCnGsBgxrm9EuIDnjUC3Uc/kETtvVi7fSIVC74Dg==",
- "dev": true,
- "requires": {
- "hastscript": "^6.0.0",
- "parse-entities": "^2.0.0",
- "prismjs": "~1.25.0"
- }
- },
- "regenerate": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
- "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
- "dev": true
- },
- "regenerate-unicode-properties": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz",
- "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==",
- "dev": true,
- "requires": {
- "regenerate": "^1.4.2"
- }
- },
- "regenerator-runtime": {
- "version": "0.13.9",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
- "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
- "dev": true
- },
- "regenerator-transform": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
- "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.8.4"
- }
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "regexp.prototype.flags": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz",
- "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "regexpu-core": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz",
- "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==",
- "dev": true,
- "requires": {
- "regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^9.0.0",
- "regjsgen": "^0.5.2",
- "regjsparser": "^0.7.0",
- "unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.0.0"
- }
- },
- "regjsgen": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
- "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==",
- "dev": true
- },
- "regjsparser": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz",
- "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==",
- "dev": true,
- "requires": {
- "jsesc": "~0.5.0"
- },
- "dependencies": {
- "jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
- "dev": true
- }
- }
- },
- "relateurl": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
- "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
- "dev": true
- },
- "remark-footnotes": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz",
- "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==",
- "dev": true
- },
- "remark-mdx": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz",
- "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==",
- "dev": true,
- "requires": {
- "@babel/core": "7.12.9",
- "@babel/helper-plugin-utils": "7.10.4",
- "@babel/plugin-proposal-object-rest-spread": "7.12.1",
- "@babel/plugin-syntax-jsx": "7.12.1",
- "@mdx-js/util": "1.6.22",
- "is-alphabetical": "1.0.4",
- "remark-parse": "8.0.3",
- "unified": "9.2.0"
- },
- "dependencies": {
- "@babel/core": {
- "version": "7.12.9",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz",
- "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helpers": "^7.12.5",
- "@babel/parser": "^7.12.7",
- "@babel/template": "^7.12.7",
- "@babel/traverse": "^7.12.9",
- "@babel/types": "^7.12.7",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- },
- "@babel/plugin-proposal-object-rest-spread": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz",
- "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
- "@babel/plugin-transform-parameters": "^7.12.1"
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
- "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "remark-parse": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz",
- "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==",
- "dev": true,
- "requires": {
- "ccount": "^1.0.0",
- "collapse-white-space": "^1.0.2",
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-whitespace-character": "^1.0.0",
- "is-word-character": "^1.0.0",
- "markdown-escapes": "^1.0.0",
- "parse-entities": "^2.0.0",
- "repeat-string": "^1.5.4",
- "state-toggle": "^1.0.0",
- "trim": "0.0.1",
- "trim-trailing-lines": "^1.0.0",
- "unherit": "^1.0.4",
- "unist-util-remove-position": "^2.0.0",
- "vfile-location": "^3.0.0",
- "xtend": "^4.0.1"
- }
- },
- "remark-squeeze-paragraphs": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz",
- "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==",
- "dev": true,
- "requires": {
- "mdast-squeeze-paragraphs": "^4.0.0"
- }
- },
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true,
- "optional": true
- },
- "renderkid": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz",
- "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==",
- "dev": true,
- "requires": {
- "css-select": "^4.1.3",
- "dom-converter": "^0.2.0",
- "htmlparser2": "^6.1.0",
- "lodash": "^4.17.21",
- "strip-ansi": "^3.0.1"
- }
- },
- "repeat-element": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
- },
- "resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
- "dev": true,
- "requires": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
- }
- },
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "requires": {
- "queue-microtask": "^1.2.2"
- }
- },
- "run-queue": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
- "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1"
- }
- },
- "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
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "scheduler": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
- "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "schema-utils": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
- "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.5",
- "ajv": "^6.12.4",
- "ajv-keywords": "^3.5.2"
- }
- },
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- },
- "send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.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"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
- }
- }
- },
- "serialize-javascript": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
- "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "serve-favicon": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz",
- "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=",
- "dev": true,
- "requires": {
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "ms": "2.1.1",
- "parseurl": "~1.3.2",
- "safe-buffer": "5.1.1"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
- "dev": true
- }
- }
- },
- "serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
- "dev": true,
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- }
- },
- "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
- },
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
- "dev": true
- },
- "setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
- "dev": true
- },
- "sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "shallow-clone": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
- "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.2"
- }
- },
- "shallowequal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
- "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "shell-quote": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
- "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
- "dev": true
- },
- "side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- }
- },
- "signal-exit": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz",
- "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==",
- "dev": true
- },
- "sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.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"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "source-list-map": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
- "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "dev": true,
- "requires": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "source-map-support": {
- "version": "0.5.20",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz",
- "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- },
- "dependencies": {
- "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-url": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
- "dev": true
- },
- "space-separated-tokens": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
- "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
- "dev": true
- },
- "spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz",
- "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==",
- "dev": true
- },
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
- "ssri": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
- "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
- "dev": true,
- "requires": {
- "minipass": "^3.1.1"
- }
- },
- "stable": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
- "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
- "dev": true
- },
- "state-toggle": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz",
- "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==",
- "dev": true
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "dev": true
- },
- "store2": {
- "version": "2.12.0",
- "resolved": "https://registry.npmjs.org/store2/-/store2-2.12.0.tgz",
- "integrity": "sha512-7t+/wpKLanLzSnQPX8WAcuLCCeuSHoWdQuh9SB3xD0kNOM38DNf+0Oa+wmvxmYueRzkmh6IcdKFtvTa+ecgPDw==",
- "dev": true
- },
- "stream-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
- "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
- "dev": true,
- "requires": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "stream-each": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
- "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
- "dev": true,
- "requires": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
- }
- },
- "stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
- },
- "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,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "string-hash": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz",
- "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
- },
- "string.prototype.matchall": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz",
- "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1",
- "get-intrinsic": "^1.1.1",
- "has-symbols": "^1.0.2",
- "internal-slot": "^1.0.3",
- "regexp.prototype.flags": "^1.3.1",
- "side-channel": "^1.0.4"
- }
- },
- "string.prototype.padend": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz",
- "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- }
- },
- "string.prototype.padstart": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.3.tgz",
- "integrity": "sha512-NZydyOMtYxpTjGqp0VN5PYUF/tsU15yDMZnUdj16qRUIUiMJkHHSDElYyQFrMu+/WloTpA7MQSiADhBicDfaoA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
- }
- },
- "string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "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"
- }
- },
- "style-loader": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz",
- "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==",
- "dev": true,
- "requires": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^2.7.0"
- },
- "dependencies": {
- "loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- }
- }
- },
- "style-to-object": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
- "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==",
- "dev": true,
- "requires": {
- "inline-style-parser": "0.1.1"
- }
- },
- "styled-jsx": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-4.0.1.tgz",
- "integrity": "sha512-Gcb49/dRB1k8B4hdK8vhW27Rlb2zujCk1fISrizCcToIs+55B4vmUM0N9Gi4nnVfFZWe55jRdWpAqH1ldAKWvQ==",
- "dev": true,
- "requires": {
- "@babel/plugin-syntax-jsx": "7.14.5",
- "@babel/types": "7.15.0",
- "convert-source-map": "1.7.0",
- "loader-utils": "1.2.3",
- "source-map": "0.7.3",
- "string-hash": "1.1.3",
- "stylis": "3.5.4",
- "stylis-rule-sheet": "0.0.10"
- },
- "dependencies": {
- "@babel/types": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz",
- "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.14.9",
- "to-fast-properties": "^2.0.0"
- }
- },
- "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"
- }
- },
- "emojis-list": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
- "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
- "dev": true
- },
- "json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "loader-utils": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
- "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^2.0.0",
- "json5": "^1.0.1"
- }
- },
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
- }
- },
- "stylis": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz",
- "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==",
- "dev": true
- },
- "stylis-rule-sheet": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz",
- "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==",
- "dev": true,
- "requires": {}
- },
- "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"
- }
- },
- "symbol.prototype.description": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz",
- "integrity": "sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-symbol-description": "^1.0.0",
- "has-symbols": "^1.0.2",
- "object.getownpropertydescriptors": "^2.1.2"
- }
- },
- "tapable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
- "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
- "dev": true
- },
- "tar": {
- "version": "6.1.11",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
- "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
- "dev": true,
- "requires": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- }
- },
- "telejson": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/telejson/-/telejson-5.3.3.tgz",
- "integrity": "sha512-PjqkJZpzEggA9TBpVtJi1LVptP7tYtXB6rEubwlHap76AMjzvOdKX41CxyaW7ahhzDU1aftXnMCx5kAPDZTQBA==",
- "dev": true,
- "requires": {
- "@types/is-function": "^1.0.0",
- "global": "^4.4.0",
- "is-function": "^1.0.2",
- "is-regex": "^1.1.2",
- "is-symbol": "^1.0.3",
- "isobject": "^4.0.0",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3"
- }
- },
- "term-size": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
- "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
- "dev": true
- },
- "terser": {
- "version": "4.8.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
- "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
- "dev": true,
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- },
- "dependencies": {
- "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
- },
- "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
- }
- }
- },
- "terser-webpack-plugin": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz",
- "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==",
- "dev": true,
- "requires": {
- "cacache": "^15.0.5",
- "find-cache-dir": "^3.3.1",
- "jest-worker": "^26.5.0",
- "p-limit": "^3.0.2",
- "schema-utils": "^3.0.0",
- "serialize-javascript": "^5.0.1",
- "source-map": "^0.6.1",
- "terser": "^5.3.4",
- "webpack-sources": "^1.4.3"
- },
- "dependencies": {
- "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
- },
- "find-cache-dir": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
- "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- },
- "dependencies": {
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- }
- }
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- },
- "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
- },
- "terser": {
- "version": "5.9.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz",
- "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==",
- "dev": true,
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.7.2",
- "source-map-support": "~0.5.20"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
- }
- }
- }
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "throttle-debounce": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz",
- "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==",
- "dev": true
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- },
- "timers-browserify": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
- "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
- "dev": true,
- "requires": {
- "setimmediate": "^1.0.4"
- }
- },
- "to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
- "dev": true
- },
- "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-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "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"
- }
- },
- "toggle-selection": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
- "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=",
- "dev": true
- },
- "toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
- "dev": true
- },
- "tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
- "dev": true
- },
- "trim": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
- "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=",
- "dev": true
- },
- "trim-trailing-lines": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz",
- "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==",
- "dev": true
- },
- "trough": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
- "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
- "dev": true
- },
- "ts-dedent": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
- "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
- "dev": true
- },
- "ts-essentials": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-2.0.12.tgz",
- "integrity": "sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w==",
- "dev": true
- },
- "ts-pnp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz",
- "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==",
- "dev": true
- },
- "tslib": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
- "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
- "dev": true
- },
- "tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
- "dev": true
- },
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
- },
- "type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dev": true,
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- }
- },
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
- "unbox-primitive": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
- "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.1",
- "has-symbols": "^1.0.2",
- "which-boxed-primitive": "^1.0.2"
- }
- },
- "unfetch": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz",
- "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==",
- "dev": true
- },
- "unherit": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz",
- "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.0",
- "xtend": "^4.0.0"
- }
- },
- "unicode-canonical-property-names-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
- "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
- "dev": true
- },
- "unicode-match-property-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
- "dev": true,
- "requires": {
- "unicode-canonical-property-names-ecmascript": "^2.0.0",
- "unicode-property-aliases-ecmascript": "^2.0.0"
- }
- },
- "unicode-match-property-value-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
- "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
- "dev": true
- },
- "unicode-property-aliases-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
- "dev": true
- },
- "unified": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz",
- "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==",
- "dev": true,
- "requires": {
- "bail": "^1.0.0",
- "extend": "^3.0.0",
- "is-buffer": "^2.0.0",
- "is-plain-obj": "^2.0.0",
- "trough": "^1.0.0",
- "vfile": "^4.0.0"
- }
- },
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- }
- }
- },
- "unique-filename": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
- "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
- "dev": true,
- "requires": {
- "unique-slug": "^2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
- "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
- "dev": true,
- "requires": {
- "imurmurhash": "^0.1.4"
- }
- },
- "unist-builder": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz",
- "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==",
- "dev": true
- },
- "unist-util-generated": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz",
- "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==",
- "dev": true
- },
- "unist-util-is": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
- "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
- "dev": true
- },
- "unist-util-position": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz",
- "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==",
- "dev": true
- },
- "unist-util-remove": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz",
- "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==",
- "dev": true,
- "requires": {
- "unist-util-is": "^4.0.0"
- }
- },
- "unist-util-remove-position": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz",
- "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==",
- "dev": true,
- "requires": {
- "unist-util-visit": "^2.0.0"
- }
- },
- "unist-util-stringify-position": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
- "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.2"
- }
- },
- "unist-util-visit": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
- "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^4.0.0",
- "unist-util-visit-parents": "^3.0.0"
- }
- },
- "unist-util-visit-parents": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
- "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^4.0.0"
- }
- },
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "dev": true
- },
- "unquote": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
- "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
- "dev": true
- },
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- }
- }
- },
- "upath": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
- "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
- "dev": true,
- "optional": true
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "url": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
- "dev": true,
- "requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- },
- "dependencies": {
- "punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
- "dev": true
- }
- }
- },
- "url-loader": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz",
- "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==",
- "dev": true,
- "requires": {
- "loader-utils": "^2.0.0",
- "mime-types": "^2.1.27",
- "schema-utils": "^3.0.0"
- },
- "dependencies": {
- "loader-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
- "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
- },
- "use-composed-ref": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.1.0.tgz",
- "integrity": "sha512-my1lNHGWsSDAhhVAT4MKs6IjBUtG6ZG11uUqexPH9PptiIZDQOzaF4f5tEbJ2+7qvNbtXNBbU3SfmN+fXlWDhg==",
- "dev": true,
- "requires": {
- "ts-essentials": "^2.0.3"
- }
- },
- "use-isomorphic-layout-effect": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.1.tgz",
- "integrity": "sha512-L7Evj8FGcwo/wpbv/qvSfrkHFtOpCzvM5yl2KVyDJoylVuSvzphiiasmjgQPttIGBAy2WKiBNR98q8w7PiNgKQ==",
- "dev": true,
- "requires": {}
- },
- "use-latest": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.0.tgz",
- "integrity": "sha512-d2TEuG6nSLKQLAfW3By8mKr8HurOlTkul0sOpxbClIv4SQ4iOd7BYr7VIzdbktUCnv7dua/60xzd8igMU6jmyw==",
- "dev": true,
- "requires": {
- "use-isomorphic-layout-effect": "^1.0.0"
- }
- },
- "util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "node_modules/ws": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
"dev": true,
- "requires": {
- "inherits": "2.0.3"
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=10.0.0"
},
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- }
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "util.promisify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
- "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "object.getownpropertydescriptors": "^2.0.3"
- }
- },
- "utila": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
- "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=",
- "dev": true
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
- "dev": true
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "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"
- }
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
- "dev": true
- },
- "vfile": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
- "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0",
- "vfile-message": "^2.0.0"
- }
- },
- "vfile-location": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz",
- "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==",
- "dev": true
- },
- "vfile-message": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
- "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0"
- }
- },
- "vm-browserify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
- "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
- "dev": true
- },
- "warning": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
- "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.0.0"
- }
- },
- "watchpack": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
- "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
- "dev": true,
- "requires": {
- "chokidar": "^3.4.1",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0",
- "watchpack-chokidar2": "^2.0.1"
- }
- },
- "watchpack-chokidar2": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
- "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
- "dev": true,
- "optional": true,
- "requires": {
- "chokidar": "^2.1.8"
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
},
- "dependencies": {
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "optional": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- },
- "dependencies": {
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "optional": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- }
- }
- },
- "binary-extensions": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "dev": true,
- "optional": true
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "optional": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "chokidar": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
- "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
- "dev": true,
- "optional": true,
- "requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.1",
- "braces": "^2.3.2",
- "fsevents": "^1.2.7",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.3",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "normalize-path": "^3.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.2.1",
- "upath": "^1.1.1"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "optional": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- },
- "is-binary-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
- "dev": true,
- "optional": true,
- "requires": {
- "binary-extensions": "^1.0.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true,
- "optional": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true,
+ "peerDependenciesMeta": {
+ "bufferutil": {
"optional": true
},
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "optional": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
+ "utf-8-validate": {
"optional": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "optional": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "optional": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
- "web-namespaces": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz",
- "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==",
- "dev": true
- },
- "webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
- "dev": true
- },
- "webpack": {
- "version": "4.46.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
- "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/wasm-edit": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "acorn": "^6.4.1",
- "ajv": "^6.10.2",
- "ajv-keywords": "^3.4.1",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^4.5.0",
- "eslint-scope": "^4.0.3",
- "json-parse-better-errors": "^1.0.2",
- "loader-runner": "^2.4.0",
- "loader-utils": "^1.2.3",
- "memory-fs": "^0.4.1",
- "micromatch": "^3.1.10",
- "mkdirp": "^0.5.3",
- "neo-async": "^2.6.1",
- "node-libs-browser": "^2.2.1",
- "schema-utils": "^1.0.0",
- "tapable": "^1.1.3",
- "terser-webpack-plugin": "^1.4.3",
- "watchpack": "^1.7.4",
- "webpack-sources": "^1.4.1"
- },
- "dependencies": {
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "dev": true,
- "requires": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "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"
- }
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- },
- "serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "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
- },
- "ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
- "dev": true,
- "requires": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
- "dev": true,
- "requires": {
- "cacache": "^12.0.2",
- "find-cache-dir": "^2.1.0",
- "is-wsl": "^1.1.0",
- "schema-utils": "^1.0.0",
- "serialize-javascript": "^4.0.0",
- "source-map": "^0.6.1",
- "terser": "^4.1.2",
- "webpack-sources": "^1.4.0",
- "worker-farm": "^1.7.0"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- }
- }
- },
- "webpack-dev-middleware": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
- "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==",
- "dev": true,
- "requires": {
- "memory-fs": "^0.4.1",
- "mime": "^2.4.4",
- "mkdirp": "^0.5.1",
- "range-parser": "^1.2.1",
- "webpack-log": "^2.0.0"
- },
- "dependencies": {
- "mime": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
- "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- }
- }
- },
- "webpack-filter-warnings-plugin": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz",
- "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==",
- "dev": true,
- "requires": {}
- },
- "webpack-hot-middleware": {
- "version": "2.25.1",
- "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz",
- "integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==",
- "dev": true,
- "requires": {
- "ansi-html-community": "0.0.8",
- "html-entities": "^2.1.0",
- "querystring": "^0.2.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
- },
- "webpack-log": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
- "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
- "dev": true,
- "requires": {
- "ansi-colors": "^3.0.0",
- "uuid": "^3.3.2"
- }
- },
- "webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "requires": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- },
- "dependencies": {
- "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
- }
- }
- },
- "webpack-virtual-modules": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz",
- "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==",
- "dev": true,
- "requires": {
- "debug": "^3.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
}
}
},
- "whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
- "dev": true,
- "requires": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "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-boxed-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "dev": true,
- "requires": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- }
- },
- "wide-align": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
- "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
- "dev": true,
- "requires": {
- "string-width": "^1.0.2 || 2 || 3 || 4"
- }
- },
- "widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "dev": true,
- "requires": {
- "string-width": "^4.0.0"
- }
- },
- "worker-farm": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
- "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
- "dev": true,
- "requires": {
- "errno": "~0.1.7"
- }
- },
- "worker-rpc": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz",
- "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==",
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true,
- "requires": {
- "microevent.ts": "~0.1.1"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
- },
- "y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
- "yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "dev": true
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- },
- "zwitch": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
- "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
- "dev": true
+ "license": "ISC"
}
}
}
diff --git a/build-system/tasks/storybook/package.json b/build-system/tasks/storybook/package.json
index 8844930cf6f8..e562546be6d3 100644
--- a/build-system/tasks/storybook/package.json
+++ b/build-system/tasks/storybook/package.json
@@ -1,22 +1,13 @@
{
"name": "amp-storybook",
"version": "0.1.0",
- "description": "amp storybook tasks",
- "main": "index.js",
+ "description": "amp storybook task",
"devDependencies": {
- "@babel/core": "7.15.8",
- "@babel/preset-react": "7.14.5",
- "@babel/runtime-corejs3": "7.15.4",
- "@storybook/addon-a11y": "6.3.12",
- "@storybook/addon-controls": "6.3.12",
- "@storybook/addon-knobs": "6.3.1",
- "@storybook/addon-viewport": "6.3.12",
- "@storybook/client-api": "6.3.12",
- "@storybook/preact": "6.3.12",
- "babel-loader": "8.2.3",
- "core-js": "3.19.0",
- "preact": "10.5.15",
- "preact-render-to-string": "5.1.19",
- "styled-jsx": "4.0.1"
+ "@babel/core": "7.26.0",
+ "@babel/preset-react": "7.26.3",
+ "@storybook/addon-a11y": "8.4.7",
+ "@storybook/addon-controls": "8.4.7",
+ "@storybook/addon-viewport": "8.4.7",
+ "babel-loader": "9.2.1"
}
}
diff --git a/build-system/tasks/storybook/preact-env/main.js b/build-system/tasks/storybook/preact-env/main.js
deleted file mode 100644
index e5b8bf004b9d..000000000000
--- a/build-system/tasks/storybook/preact-env/main.js
+++ /dev/null
@@ -1,24 +0,0 @@
-const {webpackConfigNoChunkTilde} = require('../env-utils');
-
-module.exports = {
- stories: [
- '../../../../src/**/storybook/!(*.amp).js',
- '../../../../extensions/**/*.*/storybook/!(*.amp).js',
- ],
- addons: [
- '@storybook/addon-a11y',
- '@storybook/addon-viewport/register',
- '@storybook/addon-controls/register',
- // TODO(#35923): Remove addon-knobs once all stories are migrated to
- // addon-controls (args/argTypes).
- '@storybook/addon-knobs',
- ],
- managerWebpack: (config) => {
- return webpackConfigNoChunkTilde(config);
- },
- webpackFinal: async (config) => {
- // Disable entry point size warnings.
- config.performance.hints = false;
- return config;
- },
-};
diff --git a/build-system/tasks/storybook/preact-env/webpack.config.js b/build-system/tasks/storybook/preact-env/webpack.config.js
deleted file mode 100644
index 9119ae6b6f1b..000000000000
--- a/build-system/tasks/storybook/preact-env/webpack.config.js
+++ /dev/null
@@ -1,64 +0,0 @@
-const path = require('path');
-const {BUILD_CONSTANTS} = require('../../../compile/build-constants');
-const {DefinePlugin} = require('webpack');
-const {getRelativeAliasMap} = require('../../../babel-config/import-resolver');
-const {webpackConfigNoChunkTilde} = require('../env-utils');
-
-const rootDir = path.join(__dirname, '../../../..');
-
-module.exports = ({config}) => {
- config.resolveLoader = {
- modules: [
- path.join(__dirname, '../node_modules'),
- path.join(rootDir, 'node_modules'),
- ],
- };
- config.resolve = {
- modules: [
- path.join(__dirname, '../node_modules'),
- path.join(rootDir, 'node_modules'),
- ],
- alias: {
- 'react': 'preact/compat',
- 'react-dom': 'preact/compat',
- ...getRelativeAliasMap(rootDir),
- },
- };
- config.module = {
- rules: [
- {
- test: /\.jsx?$/,
- loader: 'babel-loader',
- exclude: /node_modules/,
- query: {
- presets: [
- [
- '@babel/preset-env',
- {
- bugfixes: true,
- targets: {'browsers': ['Last 2 versions']},
- },
- ],
- [
- '@babel/preset-react',
- {
- pragma: 'Preact.createElement',
- pragmaFrag: 'Preact.Fragment',
- useSpread: true,
- },
- ],
- ],
- },
- },
- {
- test: /\.css$/i,
- use: ['style-loader', 'css-loader'],
- },
- ],
- };
- // Replaced by minify-replace (babel) in the usual build pipeline
- // build-system/babel-config/helpers.js#getReplacePlugin
- config.plugins.push(new DefinePlugin(BUILD_CONSTANTS));
-
- return webpackConfigNoChunkTilde(config);
-};
diff --git a/build-system/tasks/sweep-experiments/README.md b/build-system/tasks/sweep-experiments/README.md
index 092a420a8b05..28e574f4b238 100644
--- a/build-system/tasks/sweep-experiments/README.md
+++ b/build-system/tasks/sweep-experiments/README.md
@@ -179,7 +179,7 @@ If a toggle flip matches the experiment launch value, the call has already been
- })
```
-Otherwise the the test is likely obsolete and will fail, since it requires a state not possible with the current launch value:
+Otherwise the test is likely obsolete and will fail, since it requires a state not possible with the current launch value:
```diff
- it('should fail if experiment is off', () => {
diff --git a/build-system/tasks/sweep-experiments/cleanup-branches.js b/build-system/tasks/sweep-experiments/cleanup-branches.js
new file mode 100644
index 000000000000..47dbcac19719
--- /dev/null
+++ b/build-system/tasks/sweep-experiments/cleanup-branches.js
@@ -0,0 +1,135 @@
+const argv = require('minimist')(process.argv.slice(2));
+const {cyan, red, yellow} = require('kleur/colors');
+const {exec} = require('../../common/exec');
+const {log} = require('../../common/logging');
+
+const org = 'ampproject';
+const repo = 'amphtml';
+
+// Must match .github/workflows/sweep-experiments.yml
+const prefix = 'sweep-experiments-';
+
+/**
+ * @param {string} key
+ * @return {string}
+ */
+function env(key) {
+ if (!(key in process.env)) {
+ throw new Error(`Missing env variable: ${key}`);
+ }
+ return /** @type {string} */ (process.env[key]);
+}
+
+/**
+ * @param {string} path
+ * @param {{[string: string]: string|Object}=} options
+ * @return {!Promise}
+ */
+async function githubFetch(path, options) {
+ const url = `https://api.github.com/repos/${org}/${repo}/${path}`;
+ const response = await fetch(url, {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'User-Agent': 'amphtml',
+ 'Accept': 'application/vnd.github.v3+json',
+ 'Authorization': `token ${env('GITHUB_TOKEN')}`,
+ },
+ ...options,
+ });
+ if (!response.ok) {
+ const text = await response.text();
+ throw new Error(`${url}\n${text}`);
+ }
+ return response.json();
+}
+
+/**
+ * @param {(number) => string} getPagePath
+ * @return {Promise}
+ */
+async function getAllPaginated(getPagePath) {
+ const result = [];
+ let page = 1;
+ let lastResult;
+ do {
+ lastResult = await githubFetch(getPagePath(++page));
+ result.push(...lastResult);
+ } while (lastResult.length);
+ return result;
+}
+
+/**
+ * @return {Promise}
+ */
+async function getOldBranches() {
+ return (await getAllPaginated((page) => `branches?per_page=100&page=${page}`))
+ .map(({name}) => name)
+ .filter((name) => name.startsWith(prefix));
+}
+
+/**
+ * @param {string} state
+ * @param {string} orgOrUser
+ * @param {string} branch
+ * @return {Promise}
+ */
+async function getBranchPull(state, orgOrUser, branch) {
+ const [pull] = await githubFetch(
+ `pulls?per_page=1&head=${orgOrUser}:${branch}&state=${state}`
+ );
+ return pull;
+}
+
+/**
+ * @param {number|string} number
+ * @return {Promise}
+ */
+async function closePullRequest(number) {
+ const path = `pulls/${number}`;
+ const method = 'PATCH';
+ const body = JSON.stringify({state: 'closed'});
+ log(`${method} ${path} ${body}`);
+ if (!argv.dry_run) {
+ await githubFetch(path, {method, body});
+ }
+}
+
+/**
+ * @param {string} branch
+ */
+function deleteBranch(branch) {
+ const command = `git push upstream --delete "${branch}"`;
+ log(command);
+ if (!argv.dry_run) {
+ exec(command, {stdio: 'inherit'});
+ }
+}
+
+/**
+ * @return {Promise}
+ */
+async function cleanupBranches() {
+ const {except} = argv;
+ if (except) {
+ log(yellow('Excluding branch:'), except);
+ }
+ const branches = (await getOldBranches()).filter((name) => name !== except);
+ log(cyan(`Cleaning up ${branches.length} branches...`));
+ for (const branch of branches) {
+ log(cyan(branch));
+ const pull = await getBranchPull('open', org, branch);
+ if (pull) {
+ try {
+ await closePullRequest(pull.number);
+ } catch (e) {
+ log(red(e.message));
+ log(yellow('Error closing pull request, will not delete branch.'));
+ continue;
+ }
+ }
+ deleteBranch(branch);
+ }
+}
+
+cleanupBranches();
diff --git a/build-system/tasks/sweep-experiments/index.js b/build-system/tasks/sweep-experiments/index.js
index a9640c3e601f..c627782b5f19 100644
--- a/build-system/tasks/sweep-experiments/index.js
+++ b/build-system/tasks/sweep-experiments/index.js
@@ -97,7 +97,7 @@ function removeFromExperimentsConfig(id, removedFromConfig) {
const reportLine = getJscodeshiftReport(line);
if (reportLine) {
const [
- // eslint-disable-next-line no-unused-vars
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
_,
report,
] = reportLine;
@@ -111,7 +111,7 @@ function removeFromExperimentsConfig(id, removedFromConfig) {
}
/**
- * @param {!Object} config
+ * @param {!{[key: string]: *}} config
* @param {string} path
* @param {string} id
* @return {Array} modified files
@@ -347,13 +347,13 @@ function summaryCommitMessage({
}
/**
- * @param {!Object} prodConfig
- * @param {!Object} canaryConfig
+ * @param {!{[key: string]: *}} prodConfig
+ * @param {!{[key: string]: *}} canaryConfig
* @param {string} cutoffDateFormatted
* @param {string=} removeExperiment
* @return {{
- * include?: Object,
- * exclude?: Object
+ * include?: {[key: string]: {percentage: number, previousHistory: Array}},
+ * exclude?: {[key: string]: {percentage: number, previousHistory: Array}}
* }}
*/
function collectWork(
@@ -373,16 +373,16 @@ function collectWork(
removeExperiment,
percentage
);
- /** @type {Object} */
+ /** @type {{[key: string]: {percentage: number, previousHistory: Array}}} */
const entries = {[removeExperiment]: {percentage, previousHistory}};
return isSpecialCannotBeRemoved(removeExperiment)
? {exclude: entries}
: {include: entries};
}
- /** @type {Object} */
+ /** @type {{[key: string]: {percentage: number, previousHistory: Array}}} */
const include = {};
- /** @type {Object} */
+ /** @type {{[key: string]: {percentage: number, previousHistory: Array}}} */
const exclude = {};
for (const [experiment, percentage] of Object.entries(prodConfig)) {
if (
diff --git a/build-system/tasks/test-report-upload.js b/build-system/tasks/test-report-upload.js
deleted file mode 100644
index 1ae0cd9988ac..000000000000
--- a/build-system/tasks/test-report-upload.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * @fileoverview This file implements the `amp test-report-upload` task, which POSTs test result reports
- * to an API endpoint that stores them in the database.
- */
-
-'use strict';
-
-const fetch = require('node-fetch');
-const fs = require('fs').promises;
-const path = require('path');
-const {
- ciBuildId,
- ciBuildUrl,
- ciCommitSha,
- ciJobId,
- ciJobUrl,
- ciRepoSlug,
-} = require('../common/ci');
-const {log} = require('../common/logging');
-
-const {cyan, green, red, yellow} = require('kleur/colors');
-
-const REPORTING_API_URL = 'https://amp-test-cases.appspot.com/report';
-
-/**
- * Parses a test report file and adds build & job info to it.
- * @param {('unit' | 'integration' | 'e2e')} testType The type of the tests whose result we want to report.
- * @return {Promise|null>} Object containing the build, job, and test results.
- */
-async function getReport(testType) {
- try {
- const report = JSON.parse(
- await fs.readFile(`result-reports/${testType}.json`, 'utf-8')
- );
-
- return addJobAndBuildInfo(testType, report);
- } catch (e) {
- log(red('ERROR:'), 'Error getting test result report.\n', e.toString());
-
- return null;
- }
-}
-
-/**
- * Adds job and build info to a report.
- * @param {('unit' | 'integration' | 'e2e')} testType The type of the tests whose result we want to report.
- * @param {Object} reportJson The Json report generated by Karma.
- * @return {Object.} Object containing the build, job, and test results.
- */
-function addJobAndBuildInfo(testType, reportJson) {
- const buildId = ciBuildId();
- const commitSha = ciCommitSha();
- const jobId = ciJobId();
-
- if (!buildId || !commitSha || !jobId) {
- throw new ReferenceError('CI fields are not defined.');
- }
-
- // (TODO ampproject/amp-github-apps/pull:1194) Update field names in database.
- return {
- repository: ciRepoSlug(),
- results: reportJson,
- build: {
- buildId,
- commitSha,
- url: ciBuildUrl(),
- },
- job: {
- jobId,
- testSuiteType: testType,
- url: ciJobUrl(),
- },
- };
-}
-
-/**
- * Sends a single report to the API endpoint for storage.
- * @param {('unit' | 'integration' | 'e2e')} testType The type of the tests whose result we want to report.
- * @return {Promise}
- */
-async function sendCiKarmaReport(testType) {
- const body = await getReport(testType);
-
- if (!body) {
- return;
- }
-
- const response = await fetch(REPORTING_API_URL, {
- method: 'post',
- body: JSON.stringify(body),
- headers: {'Content-Type': 'application/json'},
- });
-
- if (response.ok) {
- log(
- green('INFO:'),
- `Test results of type`,
- cyan(testType),
- 'reported to',
- cyan(REPORTING_API_URL)
- );
- } else {
- log(
- yellow('WARNING:'),
- 'failed to report results of type',
- cyan(testType),
- ': \n',
- yellow(/** @type {string} */ (await response.text()))
- );
- }
-}
-
-/**
- * Uploads every report to the API endpoint for storage.
- * @return {Promise}
- */
-async function testReportUpload() {
- const filenames = await fs.readdir('result-reports/');
- const testTypes = filenames.map((filename) => path.parse(filename).name);
-
- await Promise.all(testTypes.map(sendCiKarmaReport));
-}
-
-module.exports = {
- testReportUpload,
-};
-
-testReportUpload.description =
- 'Send results from a test run to the AMP test result database';
diff --git a/build-system/tasks/unit.js b/build-system/tasks/unit.js
index 715ec38728d9..6c34c6bab914 100644
--- a/build-system/tasks/unit.js
+++ b/build-system/tasks/unit.js
@@ -62,7 +62,6 @@ unit.flags = {
'local_changes':
'Run unit tests directly affected by the files changed in the local branch',
'nohelp': 'Silence help messages that are printed prior to test run',
- 'report': 'Write test result report to a local file',
'safari': 'Run tests on Safari',
'testnames': 'List the name of each test being run',
'verbose': 'Enable logging',
diff --git a/build-system/tasks/validate-html-fixtures.js b/build-system/tasks/validate-html-fixtures.js
index ec1b9ce29a11..d61a2f6249a6 100644
--- a/build-system/tasks/validate-html-fixtures.js
+++ b/build-system/tasks/validate-html-fixtures.js
@@ -12,7 +12,7 @@ const {cyan, green, red} = require('kleur/colors');
const {getFilesToCheck} = require('../common/utils');
const {getOutput} = require('../common/process');
const {htmlFixtureGlobs} = require('../test-configs/config');
-const {readFile} = require('fs-extra');
+const {pathExists, readFile} = require('fs-extra');
const defaultFormat = 'AMP';
@@ -72,6 +72,32 @@ async function getFileGroups(filesToCheck) {
return fileGroups;
}
+/**
+ * Checks for the existence of a local wasm / js validator binary and returns
+ * its location. Defaults to the wasm binary on the CDN.
+ * @return {Promise}
+ */
+async function getValidatorJs() {
+ const localWasmValidatorPath =
+ 'validator/bazel-bin/cpp/engine/wasm/validator_js_bin.js';
+ const localJsValidatorPath = 'validator/dist/validator_minified.js';
+ if (await pathExists(localWasmValidatorPath)) {
+ log('Using the', cyan('locally built wasm validator') + '...');
+ return localWasmValidatorPath;
+ }
+ if (await pathExists(localJsValidatorPath)) {
+ log('Using the', cyan('locally built js validator') + '...');
+ return localJsValidatorPath;
+ }
+ log('Using the', cyan('wasm validator from the CDN') + '...');
+ logLocalDev(
+ '⤷ To use a locally built wasm or js validator,',
+ 'run the build command from',
+ cyan('validator/README.md') + '.'
+ );
+ return 'https://cdn.ampproject.org/v0/validator_wasm.js'; // eslint-disable-line local/no-forbidden-terms
+}
+
/**
* Runs amphtml-validator on the given list of files and prints results.
*
@@ -79,6 +105,7 @@ async function getFileGroups(filesToCheck) {
* @return {Promise}
*/
async function runCheck(filesToCheck) {
+ const validatorJs = await getValidatorJs();
const fileGroups = await getFileGroups(filesToCheck);
const formats = Object.keys(fileGroups);
let foundValidationErrors = false;
@@ -88,7 +115,10 @@ async function runCheck(filesToCheck) {
}
const files = fileGroups[format].sort().join(' ');
logLocalDev(green('Validating'), cyan(format), green('fixtures...'));
- const validateFixturesCmd = `FORCE_COLOR=1 npx amphtml-validator --html_format ${format} ${files}`;
+ const validatorCmd = 'FORCE_COLOR=1 npx amphtml-validator';
+ const validatorJsArg = `--validator_js ${validatorJs}`;
+ const htmlFormatArg = `--html_format ${format}`;
+ const validateFixturesCmd = `${validatorCmd} ${validatorJsArg} ${htmlFormatArg} ${files}`;
const result = getOutput(validateFixturesCmd);
logWithoutTimestampLocalDev(result.stdout);
if (result.stderr) {
@@ -99,18 +129,6 @@ async function runCheck(filesToCheck) {
}
if (foundValidationErrors) {
log('Please address the errors listed above.');
- log(
- '⤷ If a failing fixture is a',
- cyan('Bento'),
- 'document, it is not meant to be valid AMP.'
- );
- log(
- '⤷ Place it under any directory named',
- cyan('bento'),
- 'like',
- cyan('examples/bento/'),
- 'so that it is not validated.'
- );
throw new Error('Validation failed.');
}
log(green('SUCCESS:'), 'All HTML fixtures are valid.');
diff --git a/build-system/tasks/validator.js b/build-system/tasks/validator.js
index 63e95700d4e1..405d18c0939f 100644
--- a/build-system/tasks/validator.js
+++ b/build-system/tasks/validator.js
@@ -25,19 +25,22 @@ async function validator() {
*/
async function validatorCpp() {
const bazelCmd = [
- 'bazel test',
+ 'bazel-5.4.0 test',
'--repo_env=CC=clang',
"--cxxopt='-std=c++17'",
+ '--discard_analysis_cache',
+ '--notrack_incremental_state',
+ '--nokeep_state_after_build',
'--test_output=errors',
'--ui_event_filters=INFO',
'--noshow_progress',
'--noshow_loading_progress',
'--test_summary=detailed',
'--verbose_failures',
- 'validator_test',
+ 'cpp/engine:validator_test',
].join(' ');
execOrDie(bazelCmd, {
- cwd: 'validator/cpp/engine',
+ cwd: 'validator',
stdio: 'inherit',
});
}
diff --git a/build-system/tasks/visual-diff/.npmrc b/build-system/tasks/visual-diff/.npmrc
index 5c6ff9df9dd2..bb47df101475 100644
--- a/build-system/tasks/visual-diff/.npmrc
+++ b/build-system/tasks/visual-diff/.npmrc
@@ -1 +1,2 @@
+puppeteer_skip_chrome_download=true
puppeteer_skip_chromium_download=true
diff --git a/build-system/tasks/visual-diff/browser.js b/build-system/tasks/visual-diff/browser.js
index f7fd722fc524..da543a8e6776 100644
--- a/build-system/tasks/visual-diff/browser.js
+++ b/build-system/tasks/visual-diff/browser.js
@@ -3,40 +3,48 @@
const argv = require('minimist')(process.argv.slice(2));
const fs = require('fs');
const path = require('path');
-const puppeteer = require('puppeteer');
-const PuppeteerExtraPluginUserPreferences = require('puppeteer-extra-plugin-user-preferences');
-const {addExtra} = require('puppeteer-extra');
const {cyan, yellow} = require('kleur/colors');
const {HOST} = require('./consts');
const {log} = require('./log');
+const puppeteer = require('puppeteer-core');
+const {getStdout} = require('../../common/process');
-// REPEATING TODO(@ampproject/wg-infra): Update this whenever the Percy backend
-// starts using a new version of Chrome to render DOM snapshots.
-//
-// Steps:
-// 1. Open a recent Percy build, and click the “ⓘ” icon
-// 2. Note the Chrome major version at the bottom
-// 3. Look up the full version at https://en.wikipedia.org/wiki/Google_Chrome_version_history
-// 4. Open https://omahaproxy.appspot.com in a browser
-// 5. Go to "Tools" -> "Version information"
-// 6. Paste the full version (add ".0" at the end) in the "Version" field and click "Lookup"
-// 7. Copy the value next to "Branch Base Position" and update the line below
-const PUPPETEER_CHROMIUM_REVISION = '870763'; // 91.0.4472.0
+const CHROME_BASENAMES = [
+ 'chrome',
+ 'google-chrome',
+ 'google-chrome-stable',
+ 'chromium',
+];
const VIEWPORT_WIDTH = 1400;
const VIEWPORT_HEIGHT = 100000;
+/**
+ * Attempts to locale the full executable path for Chrome/Chromium.
+ * @return {string}
+ */
+function locateChromeExecutablePath() {
+ if (argv.executablePath) {
+ return argv.executablePath;
+ }
+ for (const executableBaseName of CHROME_BASENAMES) {
+ const executablePath = getStdout(`which ${executableBaseName}`).trim();
+ if (executablePath) {
+ return executablePath;
+ }
+ }
+ throw new Error(
+ `Could not locate Chrome/Chromium executable. Make sure it is on your $PATH (looking for any of {${CHROME_BASENAMES.join(', ')}}) or pass --executablePath to amp visual-diff`
+ );
+}
+
/**
* Launches a Puppeteer controlled browser.
*
- * Waits until the browser is up and reachable, and ties its lifecycle to this
- * process's lifecycle.
- *
- * @param {!puppeteer.BrowserFetcher} browserFetcher Puppeteer browser binaries
- * manager.
- * @return {Promise} a Puppeteer controlled browser.
+ * @return {!Promise} a Puppeteer controlled browser.
*/
-async function launchBrowser(browserFetcher) {
+async function launchBrowser() {
+ /** @type {import('puppeteer-core').LaunchOptions} */
const browserOptions = {
args: [
'--disable-background-media-suspend',
@@ -50,25 +58,10 @@ async function launchBrowser(browserFetcher) {
],
dumpio: argv.chrome_debug,
headless: !argv.dev,
- executablePath: browserFetcher.revisionInfo(PUPPETEER_CHROMIUM_REVISION)
- .executablePath,
+ executablePath: locateChromeExecutablePath(),
waitForInitialPage: false,
};
-
- // @ts-ignore type mismatch in puppeteer-extra.
- const puppeteerExtra = addExtra(puppeteer);
- puppeteerExtra.use(
- PuppeteerExtraPluginUserPreferences({
- userPrefs: {
- devtools: {
- preferences: {
- currentDockState: '"undocked"',
- },
- },
- },
- })
- );
- return await puppeteerExtra.launch(browserOptions);
+ return puppeteer.launch(browserOptions);
}
/**
@@ -82,7 +75,7 @@ async function launchBrowser(browserFetcher) {
async function newPage(browser, viewport = null) {
log('verbose', 'Creating new tab');
- const context = await browser.createIncognitoBrowserContext();
+ const context = await browser.createBrowserContext();
const page = await context.newPage();
page.setDefaultNavigationTimeout(0);
await page.setJavaScriptEnabled(true);
@@ -114,7 +107,7 @@ async function newPage(browser, viewport = null) {
);
return interceptedRequest.respond({
status: 200,
- body: fs.readFileSync(mockedFilepath),
+ body: new Uint8Array(fs.readFileSync(mockedFilepath)),
});
} else {
log(
@@ -153,44 +146,9 @@ async function resetPage(page, viewport = null) {
await page.setViewport({width, height});
}
-/**
- * Loads task-specific dependencies are returns an instance of BrowserFetcher.
- *
- * @return {Promise}
- */
-async function loadBrowserFetcher() {
- // @ts-ignore Valid method in Puppeteer's nodejs interface.
- // https://github.com/puppeteer/puppeteer/blob/main/src/node/Puppeteer.ts
- const browserFetcher = puppeteer.createBrowserFetcher();
- const chromiumRevisions = await browserFetcher.localRevisions();
- if (chromiumRevisions.includes(PUPPETEER_CHROMIUM_REVISION)) {
- log(
- 'info',
- 'Using Percy-compatible version of Chromium',
- cyan(PUPPETEER_CHROMIUM_REVISION)
- );
- } else {
- log(
- 'info',
- 'Percy-compatible version of Chromium',
- cyan(PUPPETEER_CHROMIUM_REVISION),
- 'was not found. Downloading...'
- );
- await browserFetcher.download(
- PUPPETEER_CHROMIUM_REVISION,
- (/* downloadedBytes, totalBytes */) => {
- // TODO(@ampproject/wg-infra): display download progress.
- // Logging every call is too verbose.
- }
- );
- }
- return browserFetcher;
-}
-
module.exports = {
- PUPPETEER_CHROMIUM_REVISION,
+ locateChromeExecutablePath,
launchBrowser,
- loadBrowserFetcher,
newPage,
resetPage,
};
diff --git a/build-system/tasks/visual-diff/dev-mode.js b/build-system/tasks/visual-diff/dev-mode.js
index 3a5abce84d4f..540b106f213e 100644
--- a/build-system/tasks/visual-diff/dev-mode.js
+++ b/build-system/tasks/visual-diff/dev-mode.js
@@ -1,14 +1,15 @@
'use strict';
-const inquirer = require('inquirer');
const path = require('path');
-const puppeteer = require('puppeteer'); // eslint-disable-line no-unused-vars
+
+const {cyan, yellow} = require('kleur/colors');
+const inquirer = require('@inquirer/prompts');
+
const {
verifySelectorsInvisible,
verifySelectorsVisible,
waitForPageLoad,
} = require('./verifiers');
-const {cyan, yellow} = require('kleur/colors');
const {HOST, PORT} = require('./consts');
const {log} = require('./log');
const {newPage} = require('./browser');
@@ -17,6 +18,9 @@ const {WebpageDef} = require('./types');
const ROOT_DIR = path.resolve(__dirname, '../../../');
+/** @typedef {import('puppeteer-core')} puppeteer */
+/** @typedef {import('puppeteer-core').Browser} puppeteer.Browser */
+
/**
* Runs a development mode.
*
@@ -72,16 +76,7 @@ async function devMode(browser, webpages) {
log('info', '- Press enter on', cyan('empty prompt'), 'to reload the page');
log('info', '-', cyan('Ctrl + C'), 'to quit.');
while (true) {
- /** @type {string} */
- let cssSelector = (
- await inquirer.prompt({
- type: 'input',
- name: 'cssSelector',
- message: '>',
- prefix: '',
- })
- ).cssSelector.trim();
-
+ let cssSelector = (await inquirer.input({message: '>'})).trim();
if (!cssSelector) {
break;
}
@@ -132,26 +127,20 @@ async function devMode(browser, webpages) {
*/
async function inquireForWebpage_(webpages) {
if (webpages.length > 1) {
- return (
- await inquirer.prompt([
- {
- type: 'list',
- name: 'webpage',
- message:
- 'Select test name from ' +
- cyan('visual-diff.jsonc') +
- ' (use ' +
- cyan('--grep') +
- ' to filter this list):',
- choices: webpages
- .map((webpage) => ({
- name: webpage.name,
- value: webpage,
- }))
- .sort((a, b) => a.name.localeCompare(b.name)),
- },
- ])
- ).webpage;
+ return await inquirer.select({
+ message:
+ 'Select test name from ' +
+ cyan('visual-diff.jsonc') +
+ ' (use ' +
+ cyan('--grep') +
+ ' to filter this list):',
+ choices: webpages
+ .map((webpage) => ({
+ name: webpage.name,
+ value: webpage,
+ }))
+ .sort((a, b) => a.name.localeCompare(b.name)),
+ });
} else {
const webpage = webpages[0];
log(
@@ -175,22 +164,16 @@ async function inquireForWebpage_(webpages) {
*/
async function inquireForTestFunction_(webpage) {
if (Object.keys(webpage.tests_).length > 1) {
- return (
- await inquirer.prompt([
- {
- type: 'list',
- name: 'testName',
- message:
- 'Select which interactive test from ' +
- cyan(webpage.interactive_tests) +
- ' to run:',
- choices: Object.keys(webpage.tests_).map((testName) => ({
- name: testName || '(base test)',
- value: testName,
- })),
- },
- ])
- ).testName;
+ return await inquirer.select({
+ message:
+ 'Select which interactive test from ' +
+ cyan(webpage.interactive_tests) +
+ ' to run:',
+ choices: Object.keys(webpage.tests_).map((testName) => ({
+ name: testName || '(base test)',
+ value: testName,
+ })),
+ });
}
return '';
}
diff --git a/build-system/tasks/visual-diff/index.js b/build-system/tasks/visual-diff/index.js
index 95ce26be5b79..9a26c3d67f21 100644
--- a/build-system/tasks/visual-diff/index.js
+++ b/build-system/tasks/visual-diff/index.js
@@ -6,9 +6,8 @@ const fs = require('fs');
const JSON5 = require('json5');
const os = require('os');
const path = require('path');
-const Percy = require('@percy/core');
+const PercyModulePromise = import('@percy/core');
const percySnapshot = require('@percy/puppeteer');
-const puppeteer = require('puppeteer'); // eslint-disable-line no-unused-vars
const {
createCtrlcHandler,
exitCtrlcHandler,
@@ -20,9 +19,8 @@ const {
shortSha,
} = require('../../common/git');
const {
- PUPPETEER_CHROMIUM_REVISION,
launchBrowser,
- loadBrowserFetcher,
+ locateChromeExecutablePath,
newPage,
resetPage,
} = require('./browser');
@@ -41,6 +39,11 @@ const {isPercyEnabled} = require('@percy/sdk-utils');
const {startServer, stopServer} = require('../serve');
const {TestErrorDef, WebpageDef} = require('./types');
+/** @typedef {import('@percy/core').default} Percy */
+/** @typedef {import('puppeteer-core')} puppeteer */
+/** @typedef {import('puppeteer-core').Browser} puppeteer.Browser */
+/** @typedef {import('puppeteer-core').ConsoleMessage} puppeteer.ConsoleMessage */
+
// CSS injected in every page tested.
// Normally, as in https://docs.percy.io/docs/percy-specific-css
// Otherwise, as a `) inside their head tag to initially hide the content until AMP JS is loaded. [🔗](#boilerplate)
The entire AMPHTML markup must not exceed 200,000 bytes.
diff --git a/docs/testing.md b/docs/testing.md
index 6be4df44ed5d..0cef52308f81 100644
--- a/docs/testing.md
+++ b/docs/testing.md
@@ -276,35 +276,49 @@ Stories can show configuration controls for manual testing of component paramete
> 📖 Storybook documentation: [What's a Story?](https://storybook.js.org/docs/react/get-started/whats-a-story)
-This repository has two separate Storybooks for different evironments: **`amp`** and **`preact`**. They list either AMP elements or Preact components respectively.
-
### Launching Storybook
-You may launch Storybooks for both environments by running:
+You may launch the `preact` Storybook by running:
```sh
amp storybook
```
-This command launches a separate browser tab for each Storybook, on `localhost:9001` and `:9002`.
+You may launch a specific environment by providing `--storybook_env`:
-You may launch a single environment by specifying `--storybook_env`:
+- **`preact`**
-```sh
-amp storybook --storybook_env=preact
-```
+ ```sh
+ amp storybook --storybook_env=preact
+ ```
+
+- **`react`**
+
+ ```sh
+ amp storybook --storybook_env=react
+ ```
-> Launching the `amp` environment also initiates the build-and-serve task that's normally launched using the [`amp` command](#testing-commands). This provides an additional server on `localhost:8000`.
+ > Launching the **`react`** environment requires component bundles. You should ensure that they're present in `extensions/**/dist` directories beforehand, by running `amp build --extensions=...` for all Bento components.
+
+- **`amp`**
+
+ ```sh
+ amp storybook --storybook_env=amp
+ ```
+
+ > Launching the **`amp`** environment also initiates the build-and-serve task that's normally launched using the [`amp` command](#testing-commands). This provides an additional server on `localhost:8000`.
### Writing test scenarios
-Test scenarios (stories) are located inside a component's directory. Their filename suffix determines whether they run on an `amp` or `preact` environment:
+Test scenarios (stories) are located inside a component's directory. Their filename suffix determines whether they run on the `amp` environment, or on the `preact` and `react` environments:
-- **Preact** Stories end with `.js`:
+- **`preact`** Stories end with `.js`:
`extensions/amp-example/0.1/storybook/Basic.js`
-- **AMP** Stories end with `.amp.js`:
+- **`react`** Stories use the same files as **`preact`**.
+
+- **`amp`** Stories end with `.amp.js`:
`extensions/amp-example/0.1/storybook/Basic.amp.js`
@@ -355,13 +369,13 @@ firebase deploy
If you are only testing a single file, you can use `amp firebase --file=path/to/my/file.amp.html` to avoid copying over all of `test/manual` and `examples`. It will copy over the specified file to `firebase/index.html`, which simplifies debugging.
-After deploying, you can access your project publically at its hosting URL `https://your-project-name.firebaseapp.com`.
+After deploying, you can access your project publicly at its hosting URL `https://your-project-name.firebaseapp.com`.
Additionally, you can create multiple projects and switch between them in the CLI using `firebase use your-project-name`.
#### Testing Ads
-Testing ads in deployed demos requires allowlisting of 3p urls. You can do this by adding your intended deployment hostname as an environemnt variable `AMP_TESTING_HOST` and using the `fortesting` flag. For example:
+Testing ads in deployed demos requires allowlisting of 3p urls. You can do this by adding your intended deployment hostname as an environment variable `AMP_TESTING_HOST` and using the `fortesting` flag. For example:
```sh
export AMP_TESTING_HOST="my-project.firebaseapp.com"
@@ -387,12 +401,12 @@ The task will kick off `amp build` and then `amp serve` before running the tests
## Performance Testing Node Build Tools
-You can create flamecharts for any node process used by the build system by leveraging `0x` which is included as a `devDepenendency`.
+You can create flamecharts for any node process used by the build system by leveraging `0x`.
-Here's an example for `amp dist --closure_concurrency=1`:
+Here's an example for `amp dist`:
```sh
-npx 0x -o node_modules/.bin/amp dist --closure_concurrency=1
+npx 0x -o node_modules/.bin/amp dist
```
Important to note is `0x` will automatically create a flamechart and a serving folder locally within the repository, please don't add them to PRs!
diff --git a/docs/web-standards-related-to-amp.md b/docs/web-standards-related-to-amp.md
index b3be001b8a20..021c3dc766c3 100644
--- a/docs/web-standards-related-to-amp.md
+++ b/docs/web-standards-related-to-amp.md
@@ -4,7 +4,7 @@ Date: 2018-08-26
| Standard/feature | Relation | Status |
| ------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------: | -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
-| [Web Packaging](https://github.com/WICG/webpackage) | Privacy-preserving preloading from cache under publisher URL | Initial version of spec final. [Shipping in Chrome M73](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/gPH_BcOBEtc/Z41GR0mwEQAJ), IETF concensus seeking in progress |
+| [Web Packaging](https://github.com/WICG/webpackage) | Privacy-preserving preloading from cache under publisher URL | Initial version of spec final. [Shipping in Chrome M73](https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/gPH_BcOBEtc/Z41GR0mwEQAJ), IETF consensus seeking in progress |
| [Portals](https://github.com/WICG/portals/blob/main/README.md) | AMP Carousel like UI with navigation to publisher (alternative to iframe promotion) | Iterating on spec. Prototype implementation in Chromium |
| [Performance Timeline](https://w3c.github.io/performance-timeline/) | Real world metric collection. This is the framework. New metrics may be needed. | Shipping in first browsers |
| [Paint Timing 1](https://w3c.github.io/paint-timing/) | Initial paint related metrics (performance assessment | Shipping in first browsers |
diff --git a/docs/writing-css.md b/docs/writing-css.md
index 724f911f358e..ce392dbf1ac7 100644
--- a/docs/writing-css.md
+++ b/docs/writing-css.md
@@ -50,10 +50,10 @@ html > body div#pagewrap ul#summer-drinks > li.favorite
#summer-drinks::after
```
-A selector can contain a class, id, pseudo elements, psuedo classes , :not(), and a combination
+A selector can contain a class, id, pseudo elements, pseudo classes, :not(), and a combination
of any of these and many more. For a comprehensive list of all CSS selectors, see https://developer.mozilla.org/en-US/docs/Web/CSS/Reference#Selectors.
-In general, the order of the CSS selectors do not affect which rules get applied to your CSS,
+In general, the order of the CSS selectors does not affect which rules get applied to your CSS,
unless the selectors have the same specificity and apply to at least one element in common.
Well-written CSS will work perfectly fine even when the selectors are re-ordered (for example, when reordering imports in a css file). In the real world, it's hard to achieve this, especially
when we import third-party CSS (which can change at any time).
@@ -81,7 +81,7 @@ To compute specificity, use this online calculator: https://specificity.keegan.s
### Modifying an existing Selector
-This is a bit more tricky than creating a new selector (with completely new properties).
+This is a bit trickier than creating a new selector (with completely new properties).
AMP is a versioned library that a lot of websites use. You might ask yourself, "But I am only changing CSS, how can
this break AMP?". Well, you can! All it takes to break backwards compatibility is replacing a selector with another
diff --git a/examples/.eslintrc.js b/examples/.eslintrc.js
index cc72fc4955f5..84711faddde7 100644
--- a/examples/.eslintrc.js
+++ b/examples/.eslintrc.js
@@ -26,7 +26,6 @@ module.exports = {
'local/no-log-array': 0,
'local/no-mixed-operators': 0,
'local/no-module-exports': 0,
- 'local/no-static-this': 0,
'local/no-style-display': 0,
'local/no-style-property-setting': 0,
'local/no-unload-listener': 0,
diff --git a/examples/ac-creative.js b/examples/ac-creative.js
index e0241f414054..46b2fad7b227 100644
--- a/examples/ac-creative.js
+++ b/examples/ac-creative.js
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
+
if (!window.context) {
// window.context doesn't exist yet, must perform steps to create it
// before using it
diff --git a/examples/adman.amp.html b/examples/adman.amp.html
new file mode 100644
index 000000000000..75507de9fa92
--- /dev/null
+++ b/examples/adman.amp.html
@@ -0,0 +1,107 @@
+
+
+
+
+ Sample document
+
+
+
+
+
+
+
+
+
+
+
+ Sample document
+ Some text
+
+
+
+
diff --git a/examples/amp-access-fewcents.html b/examples/amp-access-fewcents.html
new file mode 100644
index 000000000000..545b99a7c53b
--- /dev/null
+++ b/examples/amp-access-fewcents.html
@@ -0,0 +1,328 @@
+
+
+
+
+
+
+ amp-access-fewcents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Weekly Digest: Kyiv Post Closure, Anti-Oligarch Law in Ukraine
+
+
+
+ Industry News
+ Business Model
+ About Us
+
+
+
+
+
+
+
+ Welcome to The Fix’s weekly news digest! Every week, we bring you
+ important news stories from the world of media – and try to put them
+ in a wider context.
+
+
+ This week, we have two detailed stories on the recent media shakeup in
+ Ukraine and a roundup of other noteworthy media news.
+
+
+ The closure appears to be a continuation of the conflict between the
+ publisher and the editorial team, particularly over the plans to
+ launch a Ukrainian-language outlet under the paper’s brand. Analysts
+ also say the move might be the owner’s attempt to avoid angering the
+ authorities – whom Kivan’s construction business depends on – over
+ Kyiv Post’s coverage.
+
+
+
+
+
+ Oops... Something broke.
+
+
+
+
+ Perhaps the most notable media news story in the CEE region came from
+ Ukraine this week with the closure of Kyiv Post, the country’s leading
+ English-language publication.
+
+
+
+ Over the past several decades, it has been a trusted source of news
+ and a lodestar of independent journalism. However, on Monday the
+ paper’s owner, construction tycoon Adnan Kivan, announced the outlet
+ will close “for a short time,” saying he hopes to reopen it “bigger
+ and better” in the future.
+
+
+ Kyiv Post’s editorial team then released a statement clarifying that
+ all journalists were fired effective immediately. The journalists
+ called the actions “an act of vengeance” by the owner and an attempt
+ to “[get] rid of inconvenient, fair and honest journalists.”
+
+
+ The closure has attracted multiple concerned comments from Kyiv Post
+ readers, which include high-level foreign diplomats, expats, and
+ business leaders. In an interview with Columbia Journalism Review, the
+ paper’s now-former chief editor Brian Bonner said he is “talking to
+ deeply concerned ambassadors.”
+
+
+
+
+
+
+
diff --git a/examples/amp-ad-exit-conversion.html b/examples/amp-ad-exit-conversion.html
index 6a7f23ee7f34..fb9811a850e1 100644
--- a/examples/amp-ad-exit-conversion.html
+++ b/examples/amp-ad-exit-conversion.html
@@ -26,12 +26,10 @@ CLIC
{
"targets": {
"landingPage": {
- "finalUrl": "https://example.com?nis=ATTRIBUTION_REPORTING_STATUS",
+ "finalUrl": "https://landingpage.example",
"behaviors": {
"browserAdConversion" : {
- "attributiondestination": "https://example.com",
- "attributionsourceeventid": "EFnZ8GunL1xrwNTIHbXrvQ==",
- "attributionreportto": "https://google.com"
+ "attributionsrc": "https://tracker.example?nis=ATTRIBUTION_REPORTING_STATUS"
}
}
}
diff --git a/examples/amp-ad/ads.amp.esm.html b/examples/amp-ad/ads.amp.esm.html
index 84a19eef7be1..25fb31ea8e42 100644
--- a/examples/amp-ad/ads.amp.esm.html
+++ b/examples/amp-ad/ads.amp.esm.html
@@ -85,6 +85,7 @@
adition
adman
admanmedia
+ admatic
admixer
adnuntius
adocean
@@ -115,6 +116,7 @@
aja
amoad
aniview
+ appmonsta
appnexus
appvador
atomx
@@ -169,6 +171,7 @@
imedia
imobile
imonomy
+ incrementx
industrybrains
inmobi
innity
@@ -180,7 +183,6 @@
kiosked
kixer
kuadio
- lentainform
ligatus
lockerdome
logly
@@ -213,6 +215,8 @@
openx
opinary
outbrain
+ piberica
+ pixad
pixels
plista
polymorphicads
@@ -240,6 +244,7 @@
sas
seedingalliance
sekindo
+ sevio
sharethrough
shemedia
sklik
@@ -286,7 +291,6 @@
whopainfeed
wpmedia
xlift
- yahoo
yahoojp
yahoonativeads
yandex
@@ -510,6 +514,16 @@ AdmanMedia
data-id="8e916419">
+ AdMatic
+
+
+
Admixer
Aniview
data-channelId="5a5f17a728a06102d14c2718">
+ AppMonsta
+
+
+
AppNexus with JSON based configuration multi ad
@@ -1301,9 +1324,8 @@ iBillboard 300x250 banner
Idealmedia
+ data-website="473218"
+ data-widget="1629484">
I-Mobile 320x50 banner
@@ -1335,6 +1357,12 @@ Imedia
data-positions='[{"id":"p1", "zoneId":"seznam.novinky.ikona2"}, {"id":"p2", "zoneId":"seznam.novinky.ikona"}]'>
+ IncrementX
+
+
+
Index Exchange Header Tag
Kuadio
data-widget-id="78a32765-30f1-4ac1-a3e7-b42ebc6df88a">
- Lentainform
-
-
-
Ligatus
Meg
Mgid
+ data-website="579198"
+ data-widget="996801">
MicroAd 320x50 banner
@@ -1698,6 +1717,24 @@ Outbrain widget
data-testMode="true">
+ PIberica
+
+
+
+ Pixad
+
+
+
Pixels Examples
recomAD
Relap
-
+ data-url="https://relap.mail.ru/"
+ data-anchorid="-FVV_OEgYpljt7e3"
+ data-version="v7">
Remixd
@@ -1984,6 +2022,12 @@ Sekindo
data-spaceId="14071">
+ Sevio
+
+
+
Sharethrough
Xlift native ad
data-mediaid="mamastar">
- Yahoo Display
-
-
-
Yahoo Native Ads
+
Ad examples
@@ -51,12 +52,19 @@
height: 100px;
}
+ amp-ad[type="adenza"] {
+ max-width: unset;
+ padding: 0;
+ border: none;
+ }
+
amp-ad[type="adsloom"] {
width: 100%;
max-width: 980px;
margin: 18px auto;
padding: 0;
}
+
amp-ad[type="digiteka"] {
width: 300px;
height: 250px;
@@ -64,6 +72,12 @@
margin: 18px auto;
padding: 0;
}
+
+ amp-ad[type="clever"] {
+ max-width: unset;
+ padding: 0;
+ border: none;
+ }
@@ -151,681 +165,548 @@
run a local server.
2) keep the list in alphabetic order
-->
- 1wo
- 24smi
- a8
- a9
- accesstrade
- adagio
- adblade
- adbutler
- adfox
- adgeneration
- adglare
- adhese
- adincube
- adition
- adman
- admanmedia
- admixer
- adnuntius
- adocean
- adop
- adpicker
- adplugg
- adpon
- adpushup
- adreactor
- adsense
- adsensor
- adservsolutions
- adskeeper
- adsloom
- adsnative
- adspeed
- adspirit
- adstir
- adstyle
- adtech
- adtelligent
- adthrive
- adunity
- aduptech
- adventive
- adverline
- adverticum
- advertserve
- adyoulike
- affiliateb
- aja
- amoad
- amplified
- andbeyond
- aniview
- anyclip
- appnexus
- appvador
- atomx
- avantisvideo
- baidu
- beaverads
- beopinion
- bidtellect
- blade
- brainy
- bringhub
- broadbandy
- byplay
- caajainfeed
- capirs
- caprofitx
- cedato
- conative
- connatix
- contentad
- criteo
- csa
- custom
- dable
- digiteka
- directadvert
- distroscale
- dotandads
- doubleclick
- dynad
- eadv
- empower
- Engageya
- epeex
- eplanning
- exco
- ezoic
- f1e
- f1h
- feedad
- felmat
- finative
- flite
- fluct
- forkmedia
- freestar
- freewheel
- fusion
- genieessp
- giraff
- glomex
- gmossp
- gumgum
- holder
- ibillboard
- idealmedia
- imedia
- imobile
- imonomy
- industrybrains
- inmobi
- innity
- insticator
- invibes
- ix
- jixie
- jubna
- kargo
- ketshwa
- kiosked
- kixer
- kuadio
- lentainform
- ligatus
- lockerdome
- logly
- loka
- luckyads
- macaw
- mads
- mantis-display
- mediaad
- marfeel
- medianet
- mediavine
- meg
- mgid
- microad
- miximedia
- mixpo
- monetizer101
- mox
- my6sense
- myfinance
- myoffrz
- mytarget
- myua
- mywidget
- nativeroll
- nativery
- nativo
- navegg
- nend
- netletix
- noddus
- nokta
- nws
- oblivki
- onead
- onnetwork
- openadstream
- openx
- opinary
- outbrain
- pixels
- playstream
- plista
- polymorphicads
- popin
- ppstudio
- pressboard
- promoteiq
- pubexchange
- pubmine
- pulse
- pulsepoint
- puffnetwork
- purch
- rakutenunifiedads
- rbinfox
- rcmwidget
- readmo
- realclick
- recomad
- recreativ
- relap
- remixd
- revcontent
- revjet
- rfp
- rnetplus
- rubicon
- runative
- sabavision
- sas
- seedingalliance
- seedtag
- sekindo
- sharethrough
- shemedia
- sklik
- slimcutmedia
- smartadserver
- smartclip
- smi2
- smilewanted
- sogouad
- sortable
- sona
- sovrn
- speakol
- spotx
- springAds
- ssp
- strossle
- sulvo
- sunmedia
- svknative
- swoop
- taboola
- tagon
- tail
- tcsemotion
- teads
- temedya
- torimochi
- tracdelight
- trafficstars
- triplelift
- trugaze
- uas
- ucfunnel
- unruly
- uzou
- valuecommerce
- vdo.ai
- videointelligence
- videonow
- viralize
- vlyby
- vmfive
- webediads
- weborama
- widespace
- wisteria
- whopainfeed
- wpmedia
- xlift
- yahoo
- yahoofedads
- yahoojp
- yahoonativeads
- yandex
- yektanet
- yengo
- yieldbot
- yieldmo
- yieldpro
- zedo
- zen
- zergnet
- zucks
-
-
-
+ 1wo
+ 24smi
+ 4wmarketplace
+ a8
+ a9
+ accesstrade
+ adagio
+ adblade
+ adbutler
+ Adenza
+ adfox
+ adgeneration
+ adglare
+ adhese
+ adincube
+ adition
+ adman
+ admanmedia
+ admatic
+ admixer
+ adnuntius
+ adocean
+ adop
+ adpicker
+ adplugg
+ adpon
+ adpushup
+ adreactor
+ ads2bid
+ adsense
+ adsensor
+ adservsolutions
+ adskeeper
+ adsloom
+ adsnative
+ adspeed
+ adspirit
+ adstir
+ adstyle
+ adtech
+ adtelligent
+ adthrive
+ adunity
+ aduptech
+ adventive
+ adverline
+ adverticum
+ advertserve
+ adyoulike
+ affiliateb
+ affinity
+ aja
+ amoad
+ amplified
+ andbeyond
+ aniview
+ anyclip
+ appmonsta
+ appnexus
+ appvador
+ atomx
+ avantisvideo
+ baidu
+ beaverads
+ beopinion
+ bidgear
+ bidtellect
+ blade
+ brainy
+ bringhub
+ broadbandy
+ byplay
+ caajainfeed
+ capirs
+ caprofitx
+ cedato
+ clever
+ cognativex
+ conative
+ connatix
+ contentad
+ criteo
+ csa
+ custom
+ dable
+ dex
+ digiteka
+ directadvert
+ distroscale
+ dotandads
+ doubleclick
+ dynad
+ eadv
+ empower
+ Engageya
+ epeex
+ eplanning
+ exco
+ ezoic
+ f1e
+ f1h
+ fairground
+ feedad
+ felmat
+ finative
+ flite
+ fluct
+ forkmedia
+ freestar
+ freewheel
+ fusion
+ genieessp
+ geozo
+ giraff
+ glomex
+ gmossp
+ gumgum
+ holder
+ ibillboard
+ idealmedia
+ imedia
+ imobile
+ imonomy
+ incrementx
+ industrybrains
+ inmobi
+ innity
+ insticator
+ insurads
+ invibes
+ ix
+ jioads
+ jixie
+ jubna
+ kargo
+ ketshwa
+ kiosked
+ kixer
+ kuadio
+ ligatus
+ lockerdome
+ logly
+ loka
+ luckyads
+ macaw
+ mads
+ mantis-display
+ mediaad
+ marfeel
+ medianet
+ mediavine
+ meg
+ mgid
+ microad
+ miximedia
+ mixpo
+ momagic
+ monetizer101
+ mox
+ my6sense
+ myfinance
+ myoffrz
+ mytarget
+ myua
+ mywidget
+ nativeroll
+ nativery
+ nativo
+ navegg
+ nend
+ netletix
+ noddus
+ nokta
+ nws
+ oblivki
+ onead
+ onnetwork
+ openadstream
+ openx
+ opinary
+ outbrain
+ piberica
+ pixad
+ pixels
+ playstream
+ plista
+ polymorphicads
+ popin
+ ppstudio
+ pressboard
+ promoteiq
+ pubexchange
+ pubfuture
+ pubmine
+ pubscale
+ pulse
+ pulsepoint
+ puffnetwork
+ purch
+ r9x
+ rakutenunifiedads
+ rbinfox
+ rcmwidget
+ readmo
+ realclick
+ recomad
+ recreativ
+ relap
+ remixd
+ revcontent
+ revjet
+ rfp
+ rnetplus
+ rubicon
+ runative
+ sabavision
+ sas
+ seedingalliance
+ seedtag
+ sekindo
+ sevio
+ sharethrough
+ shemedia
+ sklik
+ skoiy
+ slimcutmedia
+ smartadserver
+ smartclip
+ smi2
+ smilewanted
+ sogouad
+ sortable
+ sona
+ sovrn
+ speakol
+ spotx
+ springAds
+ ssp
+ strossle
+ sulvo
+ sunmedia
+ svknative
+ swoop
+ taboola
+ tagon
+ tail
+ tcsemotion
+ teads
+ temedya
+ torimochi
+ tracdelight
+ trafficstars
+ triplelift
+ trugaze
+ uas
+ ucfunnel
+ unruly
+ uzou
+ valuecommerce
+ vdo.ai
+ videointelligence
+ videonow
+ viralize
+ vlyby
+ vmfive
+ vox
+ webediads
+ weborama
+ widespace
+ wisteria
+ whopainfeed
+ wpmedia
+ xlift
+ yahoofedads
+ yahoojp
+ yahoonativeads
+ yandex
+ yektanet
+ yengo
+ yieldbot
+ yieldmo
+ yieldpro
+ zedo
+ zen
+ zergnet
+ zucks
+
+
+
1WO
-
+
24smi
-
+
-
+
+
+
+ 4wmarketplace
+
A8
-
+
A9 Search Ads
-
+
A9 Recom Unsaved
-
+
A9 Custom Ads
-
+
A9 Recom Ads Sync
-
+
A9 Recom Ads Async
-
+
AccessTrade
-
+
Ad.Agio
-
Adblade
-
+
AdButler
-
+
+
+
+ Adenza
+
adincube
-
+
ADITION
-
+
Ad Generation
-
+
AdGlare
-
Adhese
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
AdFox
-
Adman
-
+
AdmanMedia
-
+
+
+
+ AdMatic
+
Admixer
-
-
- asd
+ asd
Adnuntius
-
+
AdOcean
-
+
-
+
AdOcean master-slave
-
+
-
+
Adop
-
+
AdPicker
-
+
AdPlugg
-
+
Adpon
-
+
Adpushup
-
+
AdReactor
-
+
+
+
+ Ads2bid
+
AdSense
-
+
AdSensor
-
+
-
+
AdServSolutions
-
+
AdsKeeper
-
+
AdsLoom
-
+
AdsNative
-
+
AdSpeed
-
-
-
+
+
+
AdSpirit
-
+
AdStir 320x50 banner
-
+
AdStyle responsive widget
-
+ Affinity
+
+
+
AJA
@@ -909,22 +794,14 @@ AMoAd native
Amplified Banner
-
-
-
- Andbeyond
-
-
+
+
+
+ Andbeyond
+
+
Aniview
AnyClip
data-widgetname="amp_test_autoplay" data-ac-embed-mode="plain" data-ourl="https://anyclip.com/">
+ AppMonsta
+
+
+
AppNexus with JSON based configuration multi ad
@@ -958,7 +839,8 @@ Atomx
Avantis Video
-
+
Baidu
@@ -973,6 +855,10 @@ BeaverAds
data-account="556f2afc6ebef601004fb60f">
+ Bidgear
+
+
+
Bidtellect
@@ -1004,8 +890,7 @@ Bringhub Mini-Storefront
ByPlay
-
+
CA A.J.A. Infeed
@@ -1026,6 +911,16 @@ Cedato
+ Clever
+
+
+
+ Cognativex
+
+
+
+
Conative
Digiteka
+ Digital Exchange
+
+
+
Directadvert
@@ -1164,8 +1063,8 @@ Empower
Engageya widget
-
+
Epeex
@@ -1189,6 +1088,11 @@ Ezoic
json='{"targeting": {"iid15":"1479509","t":"134","d":"1317","t1":"134","pvc":"0","ap":"1144","sap":"1144","a":"|0|","as":"revenue","plat":"1","bra":"mod1","ic":"1","at":"mbf","adr":"400","reft":"tf","ga":"2497208","rid":"99998","pt":"0","al":"2022","compid":"1","tap":"28607874-1479509","br1":"0","br2":"0"}}'>
+ Fairground
+
+
+
FlexOneELEPHANT
@@ -1221,11 +1125,7 @@ fluct
-
+
Fork Media
@@ -1253,14 +1153,19 @@ FreeWheel
Gecko widget
-
+
Geniee SSP
+ Geozo
+
+
+
Giraff
@@ -1288,8 +1193,7 @@ iBillboard 300x250 banner
Idealmedia
-
+
I-Mobile 320x50 banner
@@ -1310,13 +1214,16 @@ Imedia
data-positions='[{"id":"p1", "zoneId":"seznam.novinky.ikona2"}, {"id":"p2", "zoneId":"seznam.novinky.ikona"}]'>
+ IncrementX
+
+
+
Index Exchange Header Tag
Industrybrains
-
+
InMobi
@@ -1336,18 +1243,27 @@ Insticator
data-embed-id="77ee0296-8ac4-4bca-91c8-51256b9830f1">
+ InsurAds
+
+
+
Invibes
Jixie
-
+
+ JioAds
+
+ Loading....
+ Something went wrong in ad load
+
Jubna widget
@@ -1375,11 +1291,6 @@ Kuadio
data-widget-id="78a32765-30f1-4ac1-a3e7-b42ebc6df88a">
- Lentainform
-
-
-
Ligatus
@@ -1451,8 +1362,7 @@ Meg
Mgid
-
+
MicroAd 320x50 banner
@@ -1469,6 +1379,15 @@ Mixpo
+ Momagic
+
+
+
Monetizer101
@@ -1515,7 +1434,7 @@ myTarget
myua
-
+
myWidget
@@ -1603,6 +1522,24 @@ Outbrain widget
data-styleFile="http://localhost/style.css" data-testMode="true">
+ PIberica
+
+
+
+ Pixad
+
+
+
Pixels Examples
@@ -1615,8 +1552,8 @@ PlayStream
Plista responsive widget
+ data-publickey="e6a75b42216ffc96b7ea7ad0c94d64946aedaac4" data-widgetname="iAMP_2" data-geo="de" data-urlprefix=""
+ data-categories="politik">
polymorphicAds
@@ -1651,22 +1588,47 @@ PromoteIQ
PubExchange
-
+
+ Pubfuture
+
+
+
PubGuru
+ PubWise
+
+
+
Pubmine 300x250
+ PubScale 300x250
+
+
Pulse Horizontal
@@ -1697,6 +1659,11 @@ Quora
+ R9x
+
+
+
Rakuten Unified Ads
@@ -1717,11 +1684,7 @@ RbInfox
RcmWidget
-
+
ReadMo
@@ -1735,8 +1698,8 @@ Realclick
recomAD
-
+
Recreativ fixed height
@@ -1748,8 +1711,8 @@ Recreativ fixed
Relap
-
+
RelapPro
@@ -1762,19 +1725,8 @@ Remixd
Revcontent Responsive Tag
-
+ Note: Seeing no widget can be common in non HTTPS or localhost environments.
+
RevJet Tag
@@ -1793,20 +1745,17 @@ Rubicon Project Smart Tag
RUNative
-
+
Sabavision
+ data-website-id="edf0f4c1-788f-44d3-bca7-b1da21f66a75">
-
+
SAS CI 360 Match
Seeding Alliance
Seedtag
-
+
Sekindo
+ Sevio
+
+
+
Sharethrough
@@ -1850,6 +1802,11 @@ Sklik
+ Skoiy
+
+
+
SlimCut Media
@@ -1943,8 +1900,7 @@ Sulvo
SunMedia
-
+
SVK Native widget
@@ -1968,10 +1924,8 @@ Tagon
Tail
It is common to see a no-fill ad in this example.
-
+
TcsEmotion AMP tag
@@ -2036,13 +1990,11 @@ Weborama
Widespace Panorama Ad
-
+
Widespace Takeover Ad
-
+
Wisteria Ad
@@ -2053,11 +2005,6 @@ Xlift native ad
- Yahoo Display
-
-
-
Yahoo Native-Display Ads Federation
Yieldbot
"YB_SLOT": "medrec"
}
}
- }'
- data-slot="/2476204/medium-rectangle"
- data-multi-size="300x220,300x200"
+ }' data-slot="/2476204/medium-rectangle" data-multi-size="300x220,300x200"
json='{"targeting":{"category":["food","lifestyle"]},"categoryExclusions":["health"]}'>
YIELD ONE
-
+
Yieldmo
-
+
Yieldpro
-
+
ValueCommerce
-
+
VDO.AI
-
+
Video intelligence
-
+
Videonow
-
+
Viralize
-
vlyby
-
+
VMFive
-
+
+
+
+ VOX
+
Webediads
It's a private ad network with strict ad targeting, hence very common to see a no-fill.
-
Whopa InFeed
-
+
WP Media
-
+
ZEDO
-
+
Zen
-
+
ZergNet
-
+
Zucks
-
+
-
+
diff --git a/examples/amp-ad/adsviu.amp.html b/examples/amp-ad/adsviu.amp.html
new file mode 100644
index 000000000000..12bfb543a07a
--- /dev/null
+++ b/examples/amp-ad/adsviu.amp.html
@@ -0,0 +1,26 @@
+
+
+
+
+ My AMP Page
+
+
+
+
+
+
+
+
+ADSVIU
+
+
+
diff --git a/examples/amp-ad/smartadserver.amp.html b/examples/amp-ad/smartadserver.amp.html
new file mode 100644
index 000000000000..bb79981eb724
--- /dev/null
+++ b/examples/amp-ad/smartadserver.amp.html
@@ -0,0 +1,27 @@
+
+
+
+
+ Smartadserver Examples
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/amp-consent/diy-consent.html b/examples/amp-consent/diy-consent.html
index 423ebed63589..452f3c0576fc 100644
--- a/examples/amp-consent/diy-consent.html
+++ b/examples/amp-consent/diy-consent.html
@@ -260,6 +260,7 @@ Thank you!
additionalConsent: getAdditionalConsentString(),
gdprApplies: true,
purposeOne: true,
+ gppSectionId: undefined,
},
purposeConsents: {
"purpose-foo": true,
diff --git a/examples/amp-copy-action.amp.html b/examples/amp-copy-action.amp.html
new file mode 100644
index 000000000000..47f8ae2acf8a
--- /dev/null
+++ b/examples/amp-copy-action.amp.html
@@ -0,0 +1,293 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Copy DIV Content
+
+
+ <!-- 'divTarget' to Copy -->
+ <div id="divTarget">
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ </div>
+
+ <!-- Copy Action Button -->
+ <button on="tap:divTarget.copy();
+ copy-success:divCopySuccess.show();
+ copy-error:divCopyError.show()">
+ Copy DIV Content
+ </button>
+
+ <!-- Target to show on 'copy-success' -->
+ <span id="divCopySuccess" hidden class="copy-success">Content copied!</span>
+ <!-- Target to show on 'copy-error' -->
+ <span id="divCopyError" hidden class="copy-error"> Error while copying! </span>
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+
+
+
+ Copy DIV Content
+
+
+
+
+ Content copied!
+
+
+
+
+ Error while copying!
+
+
+
+
+
Copy INPUT Value
+
+
+ <!-- 'inputTarget' to Copy -->
+ <input id="inputTarget" value="Sample Input Value" />
+
+ <!-- Copy Action Button -->
+ <button on="tap:inputTarget.copy();
+ copy-success:inputCopySuccess.show();
+ copy-error:inputCopyError.show()">
+ Copy Input Value
+ </button>
+
+ <!-- Target to show on 'copy-success' -->
+ <span id="inputCopySuccess" hidden class="copy-success">Value copied successfully!</span>
+ <!-- Target to show on 'copy-error' -->
+ <span id="inputCopyError" hidden class="copy-error">Error while copying!</span>
+
+
+
+
+
+
+
+
+ Copy Input Value
+
+
+
+
+ Value copied successfully!
+
+
+
+
+ Error while copying!
+
+
+
+
+
Copy Static Text
+
+
+ <!-- Copy Action Button -->
+ <button on="tap:AMP.copy(text='Hello AMP!');
+ copy-success:staticTextCopySuccess.show()">
+ Copy Static Text
+ </button>
+
+ <!-- Target to show on 'copy-success' -->
+ <span id="staticTextCopySuccess" hidden class="copy-success">
+ StaticText copied successfully!
+ </span>
+
+
+
+
+
+ Copy Static Text
+
+
+
+
+ StaticText copied successfully!
+
+
+
+
+
Dynamically modifying class & text based on 'eventResult'
+
+
+ <!-- Copy Action Button -->
+ <button on="tap:AMP.copy(text='Copy static text');
+ copy-error:AMP.setState({eventResult: event.data.type});
+ copy-success:AMP.setState({eventResult: event.data.type})">
+ Copy Action
+ </button>
+
+ <!-- Dynamically checking copy 'eventResult' -->
+ <p hidden [hidden]="false"
+ [class]="(eventResult != 'error')?'copy-success':'copy-error'"
+ [text]="(eventResult != 'error')?'Copied!':'Error while copying!'"
+ />
+
+
+
+
+
+ Copy Action
+
+
+
+
+
+
+
+
diff --git a/examples/amp-geo.amp.html b/examples/amp-geo.amp.html
index 9097f95bdba4..d61dae3fa786 100644
--- a/examples/amp-geo.amp.html
+++ b/examples/amp-geo.amp.html
@@ -35,7 +35,8 @@
"ISOCountryGroups": {
"nafta": [ "ca", "mx", "us", "unknown" ],
"waldo": [ "unknown" ],
- "anz": [ "au", "nz" ]
+ "anz": [ "au", "nz" ],
+ "usSubdivisions": [ "us-ca", "us-ny" ]
}
}
@@ -52,7 +53,8 @@ My article title
"ISOCountryGroups": {
"nafta": [ "ca", "mx", "us", "unknown" ],
"waldo": [ "unknown" ],
- "anz": [ "au", "nz" ]
+ "anz": [ "au", "nz" ],
+ "usSubdivisions": [ "us-ca", "us-ny" ]
}
}
</script>
@@ -63,12 +65,13 @@ My article title
This means that if your country is "unknown" you will appear in the
"nafta" and "unknown" groups. To change the country for testing
append #amp-geo=<code> to the url and reload the page
- (eg #amp-geo=nz)
+ (eg #amp-geo=nz, #amp-geo=us us-ny)
- Where am I?
+ Where am I?
+
There is an amp-pixel variable substitution example here
diff --git a/examples/amp-google-read-aloud-player/amp-google-read-aloud-player.amp.html b/examples/amp-google-read-aloud-player/amp-google-read-aloud-player.amp.html
new file mode 100644
index 000000000000..d09d4e5458c0
--- /dev/null
+++ b/examples/amp-google-read-aloud-player/amp-google-read-aloud-player.amp.html
@@ -0,0 +1,167 @@
+
+
+
+
+
+ Examples: amp-google-read-aloud-player
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Examples: amp-google-read-aloud-player
+
+ Simple Player
+
+
+ Layouts
+
+ fixed
+
+
+ fixed-height
+
+
+ With Actions
+
+
+ Play
+ Pause
+ Mute
+ Unmute
+ Visibility
+
+
+ Attributes
+
+ data-url
+
+
+ data-speakable
+
+
+ data-call-to-action-label
+
+
+ data-intro
+
+
+ data-outro
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/amp-redbull-player.amp.html b/examples/amp-redbull-player.amp.html
deleted file mode 100644
index 3281ec7103b1..000000000000
--- a/examples/amp-redbull-player.amp.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- amp-redbull-player
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/amp-story/access.html b/examples/amp-story/access.html
deleted file mode 100644
index 23d574d32aa6..000000000000
--- a/examples/amp-story/access.html
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
-
-
- My Story with access
-
-
-
-
-
-
-
-
-
-
-
- Login to read more!
-
-
-
- Please subscribe or log in!
-
-
-
-
- Free page!
-
-
-
-
-
-
-
-
- You're reading premium content!
-
-
-
-
-
diff --git a/examples/amp-story/affiliate-link.html b/examples/amp-story/affiliate-link.html
deleted file mode 100644
index 1e1407348fa8..000000000000
--- a/examples/amp-story/affiliate-link.html
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-
-
-
-
-
- My Story
-
-
-
-
-
-
-
-
-
-
-
- Hello World
- This is the cover page of this story.
-
-
-
-
-
- First Page
- This is the first page of this story.
-
-
-
-
-
- Second Page
- This is the second page of this story.
-
-
-
-
-
- amp.devamp.devamp.devamp.devamp.devamp.dev
-
-
-
-
- amp.devamp.devamp.devamp.devamp.devamp.dev
-
-
-
-
-
-
- Third Page
-
- amp.devamp.devamp.devamp.devamp.devamp.dev
-
-
- amp.devamp.devamp.devamp.devamp.devamp.dev
-
-
- amp.devamp.devamp.devamp.devamp.devamp.dev
-
-
- amp.devamp.devamp.devamp.devamp.devamp.dev
-
-
- amp.devamp.devamp.devamp.devamp.devamp.dev
-
-
- amp.devamp.devamp.devamp.devamp.devamp.dev
-
-
- amp.devamp.devamp.devamp.devamp.devamp.dev
-
-
-
-
-
-
-
-
-
diff --git a/examples/amp-story/amp-story-1.0.css b/examples/amp-story/amp-story-1.0.css
new file mode 100644
index 000000000000..d29bda66aa43
--- /dev/null
+++ b/examples/amp-story/amp-story-1.0.css
@@ -0,0 +1 @@
+amp-story {}
diff --git a/examples/amp-story/amp-story-animation.html b/examples/amp-story/amp-story-animation.html
index 0745cfa0f4ba..7e51958308fd 100644
--- a/examples/amp-story/amp-story-animation.html
+++ b/examples/amp-story/amp-story-animation.html
@@ -4,27 +4,13 @@
amp-animation inside amp-story
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Key Highlights of AMP Conf 2018
+ By The AMP team
+
+
+
+ >
+
+
+
+
+
+
+
+
+
+
+ Key Highlights of AMP Conf 2018
+ By The AMP team
+
+
+
+ >
+
+
+
+
+
+
+
+
+
+
+ Key Highlights of AMP Conf 2018
+ By The AMP team
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Key Highlights of AMP Conf 2018
+ By The AMP team
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Key Highlights of AMP Conf 2018
+ By The AMP team
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Key Highlights of AMP Conf 2018
+ By The AMP team
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/amp-story/amp-story-captions.html b/examples/amp-story/amp-story-captions.html
index 40ccbd266252..1ebe3e9e3389 100644
--- a/examples/amp-story/amp-story-captions.html
+++ b/examples/amp-story/amp-story-captions.html
@@ -11,6 +11,7 @@
+
@@ -50,12 +55,83 @@
+
This element is always above captions.
This element is always below captions and never overlaps.
+
+
+
+
+
+
+
+
+
+
This element is always above captions and never overlaps.
+
+
This element is always below captions and never overlaps.
+
+
+
+
+
+
+
+
+
+
+
+
+
Default preset example.
+
This element is always above captions and never overlaps.
+
+
This element is always below captions and never overlaps.
+
+
+
+
+
+
+
+
+
+
+
+
+
Appear preset example.
+
This element is always above captions and never overlaps.
+
+
This element is always below captions and never overlaps.
+
+
+
+
+
+
+
+
+
+
+
+
+
This element is always above captions and never overlaps.
+
+
This element is always below captions and never overlaps.
+
+
+
-
\ No newline at end of file
+