diff --git a/.editorconfig b/.editorconfig index efb336743..59a50ea6a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,20 +1,16 @@ # EditorConfig helps developers define and maintain consistent # coding styles between different editors and IDEs -# http://editorconfig.org +# https://editorconfig.org root = true [*] - # Change these settings to your own preference -indent_style = space indent_size = 2 +indent_style = space # We recommend you to keep these unchanged -end_of_line = lf charset = utf-8 -trim_trailing_whitespace = true +end_of_line = lf insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false \ No newline at end of file +trim_trailing_whitespace = true diff --git a/.env.sample b/.env.sample deleted file mode 100644 index 174cf90ba..000000000 --- a/.env.sample +++ /dev/null @@ -1,2 +0,0 @@ -SAUCE_USERNAME= -SAUCE_ACCESS_KEY= diff --git a/.gitattributes b/.gitattributes index 90b98ce73..58e201f5e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,5 @@ # Automatically normalize line endings for all text-based files -# http://git-scm.com/docs/gitattributes#_end_of_line_conversion +# https://git-scm.com/docs/gitattributes#_end_of_line_conversion * text=auto # For the following file types, normalize line endings to LF on @@ -8,10 +8,13 @@ # for example, after the build script is run) .* text eol=lf *.css text eol=lf +*.dart text eol=lf *.html text eol=lf *.js text eol=lf *.json text eol=lf +*.jsx text eol=lf *.md text eol=lf +*.rs text eol=lf *.scss text eol=lf *.sh text eol=lf *.ts text eol=lf diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..2f41fffc6 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @motss diff --git a/.github/workflows/ci-helpers.yml b/.github/workflows/ci-helpers.yml new file mode 100644 index 000000000..60f7d4e2a --- /dev/null +++ b/.github/workflows/ci-helpers.yml @@ -0,0 +1,105 @@ +name: ci-helpers + +on: + push: + branches: + - '*' + tags-ignore: + - '*' + pull_request: + branches: + - '*' + tags-ignore: + - '*' + +defaults: + run: + shell: bash + +env: + COVERAGE: false + IS_UBUNTU: false + NODE_VERSION: v0.0.0 + NPM_CACHE_DIR: ~/.npm + NPM_VERSION: 0.0.0 + TEST_HELPERS: true + +jobs: + test: + if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, 'docs:') && !contains(github.event.head_commit.message, 'chore(release)')" + concurrency: + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: true + env: + IS_UBUNTU: ${{ contains(matrix.os, 'ubuntu') }} + name: ${{ matrix.os }} ${{ matrix.target }} + runs-on: ${{ matrix.os }} + timeout-minutes: 120 + strategy: + matrix: + os: [ubuntu-latest] + target: [16.x] + + steps: + - name: Checkout + uses: actions/checkout@v2 + + # - name: Setup node@${{ matrix.target }} + # uses: actions/setup-node@v2 + # with: + # node-version: ${{ matrix.target }} + + # - name: Install latest npm + # run: | + # npm i -g npm@latest + + - name: List versions + run: | + echo "NODE_VERSION=$(node -v)" >> $GITHUB_ENV + echo "NPM_CACHE_DIR=$(npm config get cache)" >> $GITHUB_ENV + echo "NPM_VERSION=$(npm -v)" >> $GITHUB_ENV + + echo "${{ github.workflow }}-${{ github.ref || github.run_id }}" + pwd + ls -la + which npm + + - name: Cache dependencies + id: npm-cache + uses: actions/cache@v2 + with: + # See this glob workaround at https://github.com/actions/toolkit/issues/713. + path: | + ${{ env.NPM_CACHE_DIR }}/* + !${{ env.NPM_CACHE_DIR }}/_npx + key: ${{ matrix.os }}-node-${{ env.NODE_VERSION }}-npm-${{ env.NPM_VERSION }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ matrix.os }}-node-${{ env.NODE_VERSION }}-npm-${{ env.NPM_VERSION }} + + - name: Install dependencies + run: | + npm ci + + - name: Lint + run: | + npm run lint:build + + - name: Test + if: env.IS_UBUNTU == 'false' + run: | + npm run wtr + + - name: Test with coverage + if: env.IS_UBUNTU != 'false' + run: | + npm run wtr + env: + COVERAGE: true + + - name: Upload coverage to codecov + if: env.IS_UBUNTU != 'false' && success() + uses: codecov/codecov-action@v1 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: ./coverage/lcov.info + flags: unit_tests_helpers diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 056d53db7..40babdeaf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,65 +12,99 @@ on: tags-ignore: - '*' +defaults: + run: + shell: bash + env: - CI_SKIP: false + COVERAGE: false + IS_UBUNTU: false + NODE_VERSION: v0.0.0 + NPM_CACHE_DIR: ~/.npm + NPM_VERSION: 0.0.0 jobs: test: - if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, 'doc:')" + if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, 'docs:') && !contains(github.event.head_commit.message, 'chore(release)')" + concurrency: + group: ${{ github.workflow }}-${{ github.ref || github.run_id }} + cancel-in-progress: true + env: + IS_UBUNTU: ${{ contains(matrix.os, 'ubuntu') }} name: ${{ matrix.os }} ${{ matrix.target }} runs-on: ${{ matrix.os }} + timeout-minutes: 120 strategy: matrix: - os: [macos-latest, ubuntu-latest] - target: [14.x] - timeout-minutes: 120 + os: [ubuntu-latest] + target: [16.x] steps: - name: Checkout uses: actions/checkout@v2 - - name: Git log - run: | - if [ -n "$(git log --format=%B -n 1 | grep -iE '^[0-9]+[.]{1,}[0-9]+[.]{1,}[0-9]+')" ]; then - echo "CI_SKIP=true" >> $GITHUB_ENV - fi + # - name: Setup node@${{ matrix.target }} + # uses: actions/setup-node@v2 + # with: + # node-version: ${{ matrix.target }} - - name: Setup node@${{ matrix.target }} - if: "env.CI_SKIP == 'false'" - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.target }} + # - name: Install latest npm + # run: | + # npm i -g npm@latest - name: List versions - if: "env.CI_SKIP == 'false'" - continue-on-error: true run: | - node -v && npm version && which npm && pwd && npx envinfo + echo "NODE_VERSION=$(node -v)" >> $GITHUB_ENV + echo "NPM_CACHE_DIR=$(npm config get cache)" >> $GITHUB_ENV + echo "NPM_VERSION=$(npm -v)" >> $GITHUB_ENV + + echo "${{ github.workflow }}-${{ github.ref || github.run_id }}" + pwd + ls -la + which npm + # npm x -y -- envinfo@latest + + - name: Cache dependencies + id: npm-cache + uses: actions/cache@v2 + with: + # See this glob workaround at https://github.com/actions/toolkit/issues/713. + path: | + ${{ env.NPM_CACHE_DIR }}/* + !${{ env.NPM_CACHE_DIR }}/_npx + key: ${{ matrix.os }}-node-${{ env.NODE_VERSION }}-npm-${{ env.NPM_VERSION }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ matrix.os }}-node-${{ env.NODE_VERSION }}-npm-${{ env.NPM_VERSION }} - name: Install dependencies - if: "env.CI_SKIP == 'false'" run: | - npm ci --quiet + npm ci + sh $(npm root)/@reallyland/tools/list-npx-cache.sh - - name: Lint - if: "env.CI_SKIP == 'false'" + - name: Setup Playwright run: | - npm run lint + $(npm bin)/playwright install-deps - - name: Build - if: "env.CI_SKIP == 'false'" + - name: Lint run: | - npm run build:test && npm run build:config + npm run lint:build - - name: Check build - if: "env.CI_SKIP == 'false'" - shell: bash + - name: Test + if: env.IS_UBUNTU == 'false' run: | - pwd && ls -la + npm run wtr - - name: Run Test - if: "env.CI_SKIP == 'false'" + - name: Test with coverage + if: env.IS_UBUNTU != 'false' run: | - npm run test:dev + npm run wtr + env: + COVERAGE: true + - name: Upload coverage to codecov + if: env.IS_UBUNTU != 'false' && success() + uses: codecov/codecov-action@v1 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: ./coverage/lcov.info + flags: unit_tests diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4e5a9ae0c..af42c0857 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -7,49 +7,66 @@ on: tags: - '*' +defaults: + run: + shell: bash + +env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NODE_VERSION: v0.0.0 + NPM_CACHE_DIR: ~/.npm + NPM_VERSION: 0.0.0 + jobs: build: - name: ${{ matrix.os }} ${{ matrix.target }} + name: ${{ matrix.os }} runs-on: ${{ matrix.os }} timeout-minutes: 120 strategy: matrix: os: [ubuntu-latest] - target: [14.x] steps: - name: Checkout uses: actions/checkout@v2 - - name: Setup node@${{ matrix.target }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.target }} - registry-url: 'https://registry.npmjs.org' - - name: List versions run: | - node -v && npm -v && which npm + echo "NODE_VERSION=$(node -v)" >> $GITHUB_ENV + echo "NPM_CACHE_DIR=$(npm config get cache)" >> $GITHUB_ENV + echo "NPM_VERSION=$(npm -v)" >> $GITHUB_ENV + echo "//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}" >> ~/.npmrc + + pwd + ls -la + which npm + npm config ls -l + + - name: Cache dependencies + id: npm-cache + uses: actions/cache@v2 + with: + # See this glob workaround at https://github.com/actions/toolkit/issues/713. + path: | + ${{ env.NPM_CACHE_DIR }}/* + !${{ env.NPM_CACHE_DIR }}/_npx + key: ${{ matrix.os }}-node-${{ env.NODE_VERSION }}-npm-${{ env.NPM_VERSION }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ matrix.os }}-node-${{ env.NODE_VERSION }}-npm-${{ env.NPM_VERSION }} - name: Install dependencies run: | - npm ci --quiet + npm ci - name: Publish to npm (Prerelease) - if: contains(github.ref, '-') == true + if: contains(github.ref, '-rc') == true || contains(github.ref, '-') == true run: | - npm config list npm publish . --tag=next - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Publish to npm - if: contains(github.ref, '-') == false + if: contains(github.ref, '-rc') == false && contains(github.ref, '-') == false run: | - npm config list npm publish . - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # See https://github.com/actions/setup-node/issues/73. # - name: Setup node@${{ matrix.target }} @@ -64,13 +81,9 @@ jobs: # run: | # npm config list # npm publish . --tag=next - # env: - # NODE_AUTH_TOKEN: ${{github.token}} # - name: Publish to GPR (Prerelease) # if: success() && contains(github.ref, '-') == false # run: | # npm config list # npm publish . - # env: - # NODE_AUTH_TOKEN: ${{github.token}} diff --git a/.github/workflows/sauce-labs.yml b/.github/workflows/sauce-labs.yml deleted file mode 100644 index d173e4ec4..000000000 --- a/.github/workflows/sauce-labs.yml +++ /dev/null @@ -1,78 +0,0 @@ -name: Sauce Labs - -on: - push: - branches: - - '*' - tags-ignore: - - '*' - pull_request: - branches: - - '*' - tags-ignore: - - '*' - -env: - CI_SKIP: false - -jobs: - test: - if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, 'doc:')" - name: ${{ matrix.os }} ${{ matrix.target }} - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest] - target: [14.x] - timeout-minutes: 120 - - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Git log - run: | - if [ -n "$(git log --format=%B -n 1 | grep -iE '^[0-9]+[.]{1,}[0-9]+[.]{1,}[0-9]+')" ]; then - echo "CI_SKIP=true" >> $GITHUB_ENV - fi - - - name: Setup node@${{ matrix.target }} - if: "env.CI_SKIP == 'false'" - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.target }} - - - name: List versions - if: "env.CI_SKIP == 'false'" - run: | - node -v && npm version && which npm && pwd && npx envinfo - - - name: Install dependencies - if: "env.CI_SKIP == 'false'" - run: | - npm ci --quiet - - - name: Lint - if: "env.CI_SKIP == 'false'" - run: | - npm run lint - - - name: Build - if: "env.CI_SKIP == 'false'" - run: | - npm run build:test && npm run build:config - - - name: Check build - if: "env.CI_SKIP == 'false'" - shell: bash - run: | - pwd && ls -la - - - name: Run Test - if: "env.CI_SKIP == 'false'" - env: - SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }} - SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }} - run: | - npm run test:sl:dev - diff --git a/.gitignore b/.gitignore index 2e6bb17ad..9ae288d52 100644 --- a/.gitignore +++ b/.gitignore @@ -1,21 +1,24 @@ # .gitignore 101 - https://www.quora.com/Does-gitignore-file-only-work-on-current-folder -# dot files +# dot files/ folders .*cache .build/ .DS_Store +.firebase/ +.nyc_output .tmp/ .vscode *.env -*.tsbuildinfo - -# debug +*.idea +*.local *.log* +*.tsbuildinfo # folders coverage*/ dist*/ log*/ node_modules/ +web_modules/ # Do not ignore diff --git a/.npmrc b/.npmrc index b93f74c01..424a44d83 100644 --- a/.npmrc +++ b/.npmrc @@ -1,5 +1,9 @@ # User config +foreground-scripts=true +message="chore(release): %s :tada:" package-lock=true +preid=rc progress=true quiet=true +sign-git-tag=true update-binary=true diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..58b3af80b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,964 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + + + +# [6.0.0-rc.22](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.21...v6.0.0-rc.22) (2022-03-26) + + +### refactor + +* minor update ([4287782](https://github.com/motss/app-datepicker/commit/4287782babb7af1a0db37da4984b82e0274c8881)) +* rename toyearLabel, update docs, fix stylings, minor cleanup ([0ee4e3f](https://github.com/motss/app-datepicker/commit/0ee4e3fa663d44734b579bb2b565e7ff673842a5)) + + + +# [6.0.0-rc.21](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.20...v6.0.0-rc.21) (2022-03-26) + + +### chore + +* remove unused comments ([c2ee020](https://github.com/motss/app-datepicker/commit/c2ee0208f5de2ee4b1c907375a2bce536602e8f2)) +* update dependencies ([c781463](https://github.com/motss/app-datepicker/commit/c781463cccc17b3f6ea9f6c639c0dacc60e92871)) +* update dependencies ([7ee2066](https://github.com/motss/app-datepicker/commit/7ee20664b8899cd881a2ffadf6f08fa6dacc2c61)) + +### ci + +* echo group name ([64ff901](https://github.com/motss/app-datepicker/commit/64ff901909a42dd9fcf9b47443471448196868d7)) +* improve CI scripts ([46cbf3a](https://github.com/motss/app-datepicker/commit/46cbf3ad8c31a3a3e192745400e2b5444f1e8a14)) + + + +# [6.0.0-rc.20](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.19...v6.0.0-rc.20) (2022-03-21) + + +### ci + +* update CI scripts ([4b1959d](https://github.com/motss/app-datepicker/commit/4b1959d619bfb8fbe31f6298b6dd8cf18e350d74)) + + + +# [6.0.0-rc.19](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.18...v6.0.0-rc.19) (2022-03-21) + + +### build + +* convert all bash scripts to shell scripts ([a317814](https://github.com/motss/app-datepicker/commit/a317814365b2c238e767c087a172d0755b8666a8)) +* trying to adopt changesets ([0410aef](https://github.com/motss/app-datepicker/commit/0410aefaa9856d24775ad4236fc81c84a3af9d87)) +* trying to update changelog with new commit message ([4206b7c](https://github.com/motss/app-datepicker/commit/4206b7c830b6256f22216c77b45c3fa6223379f0)) + +### chore + +* update dependencies ([a3e6f69](https://github.com/motss/app-datepicker/commit/a3e6f691d37f9d087e2e43f288686e8da41e7249)) + +### ci + +* improve setting ENV in CI ([46a4848](https://github.com/motss/app-datepicker/commit/46a48482200e75f561f9304ee198019a582da7a3)) +* trying to improve CI ([97a058d](https://github.com/motss/app-datepicker/commit/97a058dfc2c1f9c7335f0482f6f0681a1a9ab1f4)) +* update CI script ([c8b8dfa](https://github.com/motss/app-datepicker/commit/c8b8dfab91b9adfc668145629c17063b43788079)) +* update CI script ([cfa6652](https://github.com/motss/app-datepicker/commit/cfa665233643fdbb967f602c6d23ee0d1c60b20d)) +* update scripts ([b249e4f](https://github.com/motss/app-datepicker/commit/b249e4f38c67066bd5c2fcfcc12ea5f316e7858d)) + +### docs + +* add docs for AppDatePicker ([f462721](https://github.com/motss/app-datepicker/commit/f46272132b4882fdd88f371430c21ccff77a3b6d)) +* add docs for AppDatePickerDialog ([b8968d6](https://github.com/motss/app-datepicker/commit/b8968d6e72cb89c13cf00fe74fc0968e779071f4)) +* add docs for AppDatePickerInput ([f531c50](https://github.com/motss/app-datepicker/commit/f531c505c7bb9133b331002f998aa7647007ec1d)) +* fix broken URLs in docs ([83c06d5](https://github.com/motss/app-datepicker/commit/83c06d5e156fc47b5eefd44393b0768d8f607125)) + +### feat + +* add script to generate changelog ([70534f8](https://github.com/motss/app-datepicker/commit/70534f8f79295158b0ac1697f27df3dd0e8e0ec0)) +* add today, toyear parts, and exportparts for calendar and yearGrid ([969d1ac](https://github.com/motss/app-datepicker/commit/969d1ac01b20007b4db321c6b49e1ba8c097f366)) +* integrate @reallyland/tools ([30dc8a1](https://github.com/motss/app-datepicker/commit/30dc8a1689811ffc14b591629618d52d0d7e716c)) + +### fix + +* fix stylings not using the correct CSS Variables ([13e5209](https://github.com/motss/app-datepicker/commit/13e5209458045bcde28da85501af3ee1c21b8456)) + + + +# [6.0.0-rc.18](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.17...v6.0.0-rc.18) (2022-02-27) + + +### refactor + +* minor update to always use current date unless selected ([d260d88](https://github.com/motss/app-datepicker/commit/d260d8827c84ffb619f07deb5f03890c5d67bca8)) +* update dialog to always re-render datePicker with clean slate ([d016f97](https://github.com/motss/app-datepicker/commit/d016f97532dbfbb52391dbdbf07d625768c0e7b0)) + +### test + +* add and update tests ([36374b2](https://github.com/motss/app-datepicker/commit/36374b2757da6da15b8d71a73839516c6341f2cf)) + + + +# [6.0.0-rc.17](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.16...v6.0.0-rc.17) (2022-02-26) + + +### test + +* update tests, fix datePicker opens with a clean slate in input ([050447b](https://github.com/motss/app-datepicker/commit/050447bfc489615e855eda1f11bae5404574ce2f)) + + + +# [6.0.0-rc.16](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.15...v6.0.0-rc.16) (2022-02-26) + + +### chore + +* update dependencies ([61b4d44](https://github.com/motss/app-datepicker/commit/61b4d44e5dac705fe1bdd8930f80ec91a03820d5)) + +### fix + +* fix datePicker renders when inputSurface is not loaded ([1123f8e](https://github.com/motss/app-datepicker/commit/1123f8efe6d7f9cd3a625000544991a7d447f401)) + + + +# [6.0.0-rc.15](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.14...v6.0.0-rc.15) (2022-02-21) + + +### build + +* add icon-button/* ([5cf98da](https://github.com/motss/app-datepicker/commit/5cf98da24875d679c895e2f062245b082b3a015f)) + +### ci + +* remove Playwright setup ([6d4a43c](https://github.com/motss/app-datepicker/commit/6d4a43cecab79a1bd3371cd099367c4cd1b332b0)) +* trying to install-deps with installed Playwright ([7f52c6f](https://github.com/motss/app-datepicker/commit/7f52c6f82ea94826c8d4ec72ae95db32d6483244)) + +### test + +* ignore LoC that causes code coverage to fail sometimes ([86aa7d6](https://github.com/motss/app-datepicker/commit/86aa7d61d0eab895da1c62dcdd28780cbe938e03)) + + + +# [6.0.0-rc.14](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.13...v6.0.0-rc.14) (2022-02-21) + + +### build + +* lint without fix ([5dbe14d](https://github.com/motss/app-datepicker/commit/5dbe14d9092d45e116cc6e02f1cbdf3d9f130484)) +* revert auto fix in linting ([53a836e](https://github.com/motss/app-datepicker/commit/53a836e3de1709057d92a5a5f66d2faf5c64ec82)) +* try git add after auto fix in linting ([be31fc1](https://github.com/motss/app-datepicker/commit/be31fc1303a3593d54b38be0808fe715465a57bb)) + +### chore + +* remove .only in tests ([f622efa](https://github.com/motss/app-datepicker/commit/f622efaab81f458da5225880f57ad939b1925c7e)) +* update dependencies ([1292133](https://github.com/motss/app-datepicker/commit/1292133a154a6e847a9be720ba7137540e082cd5)) +* update dependencies and update typings ([92848c9](https://github.com/motss/app-datepicker/commit/92848c95451f3c360e0ba3da16d924ab6c393bf0)) +* update dependencies, remove unused uses: in CI ([983a236](https://github.com/motss/app-datepicker/commit/983a236c7bd782fd9071a01526669a4d4330a7b2)) + +### ci + +* debug CI ([c4fbde6](https://github.com/motss/app-datepicker/commit/c4fbde68f6e82fa56a5b3993e6588e3337deb157)) +* debug CI ([46f11ca](https://github.com/motss/app-datepicker/commit/46f11caa702ddb7a87918cc2c53b94412fddcb0c)) +* debug CI ([f925d55](https://github.com/motss/app-datepicker/commit/f925d55de1d705a7d882c12192eac1880d44dbf3)) +* revert to Playwright Github Action ([0f106c5](https://github.com/motss/app-datepicker/commit/0f106c5a2b2b45f747f17ff6d0147c8140f06573)) +* update step for tests with coverage ([40aec68](https://github.com/motss/app-datepicker/commit/40aec68032413bb26f837a07e3b2f1af6b1f76f2)) +* use Playwright CLI ([e503ba2](https://github.com/motss/app-datepicker/commit/e503ba2c424a2b9bd676c8cdc3347055d61a5b5f)) +* use Playwright CLI instead of Github Action ([51eb60f](https://github.com/motss/app-datepicker/commit/51eb60f9fd9a3861d8f9a6fefdb5f526bcc8f2be)) + +### feat + +* implement .lazyLoad in DatePickerInput ([b3c32f2](https://github.com/motss/app-datepicker/commit/b3c32f2611b071e4dca4e1591a32461c390ecb56)) +* implement IconButton to overcome a rendering bug in Ripple ([6f18ca2](https://github.com/motss/app-datepicker/commit/6f18ca26c0cd71d4019e9493c2e2cfdb15adb37e)) +* use title to replace MD tooltip for all hover-able labels ([fa3e059](https://github.com/motss/app-datepicker/commit/fa3e0597730c1c71bdddb4c4b07d831af6dd2b1f)) + +### fix + +* fix a rendering bug in mwc-icon-button's ripple in DatePickerInput ([615f996](https://github.com/motss/app-datepicker/commit/615f99655f6cbe7b6834e54523745b9f90cfb920)) + +### refactor + +* fix linting ([acbdd73](https://github.com/motss/app-datepicker/commit/acbdd73c1f03d8d9c259b0e2058c13bd7e2fd991)) +* major refactoring in stylings to be compatible with MD2 ([c8b9c43](https://github.com/motss/app-datepicker/commit/c8b9c43fc35e66658dbe6d446c08cd7158a5c88c)) +* support shortWeekLabel, weekLabel, weekNumberTemplate ([ac31caf](https://github.com/motss/app-datepicker/commit/ac31cafbcea747fe34270e6d8efe384d3f90d86e)) +* use .updated() to always update scrolling in YearGrid ([cc994ce](https://github.com/motss/app-datepicker/commit/cc994cecaa02d3276f9b4f593bd010a43da18779)) + +### test + +* add tests for MonthCalendar ([62e76ac](https://github.com/motss/app-datepicker/commit/62e76acfc2f660f622095155c15c9d521c7062ec)) +* add tests for title in YearGrid, update ESLint to enforce semi ([2dbfe1b](https://github.com/motss/app-datepicker/commit/2dbfe1b45692e1cd81f8f9cf7c2cf23c5b17c9c2)) +* add tests in DatePicker, remove unused inline property ([29892b5](https://github.com/motss/app-datepicker/commit/29892b509cc21f6e244807e86b20dba13ea7a79a)) +* add tests in DatePickerDialog, fix valueAs* not updated with value ([201aaa1](https://github.com/motss/app-datepicker/commit/201aaa1ddcde0cd013c34326a951cd715ffec5cf)) +* add tests in YearGrid ([c32d892](https://github.com/motss/app-datepicker/commit/c32d89257054e5c339e72a74c0e9178183c2affb)) +* refactor typings in tests ([6812bf6](https://github.com/motss/app-datepicker/commit/6812bf6d8a9915e15ede88cb3fe75815c060058a)) +* update tests ([4f212ae](https://github.com/motss/app-datepicker/commit/4f212ae632519d8d36ef01ec33f66811bdcd4956)) +* update tests due to lazy loading dependencies ([c201c14](https://github.com/motss/app-datepicker/commit/c201c1472f7ec103ad0b1c3c4cd3fd21b0c4dc61)) + + + +# [6.0.0-rc.13](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.12...v6.0.0-rc.13) (2022-02-06) + + +### build + +* minor update ([32d48d3](https://github.com/motss/app-datepicker/commit/32d48d32708759283129deaa7d65fd38268af4cc)) + +### chore + +* update dependencies ([c9b00c1](https://github.com/motss/app-datepicker/commit/c9b00c1bfe8403a65322158cd0e4fe9eea7d1ca6)) +* update dependencies ([0d6b36b](https://github.com/motss/app-datepicker/commit/0d6b36bfab84031115f5c430872d9df2d480d970)) + +### ci + +* improve CI ([f3459c4](https://github.com/motss/app-datepicker/commit/f3459c459bffa2e6aeba853b90b7bcc5f06b63db)) +* improve CI ([efdf1e7](https://github.com/motss/app-datepicker/commit/efdf1e7a04e1293d3abd8bf7e95726c869d9dc70)) +* simple-git-hooks fix ([0925640](https://github.com/motss/app-datepicker/commit/0925640d8630379a6ebbde381593253d5c04e926)) +* use local cache for npx ([2bd0dc5](https://github.com/motss/app-datepicker/commit/2bd0dc5c2be26a2b6565f67f0f7aa3981df250a9)) + + + +# [6.0.0-rc.12](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.11...v6.0.0-rc.12) (2022-01-30) + + +### chore + +* update dependencies ([ef21496](https://github.com/motss/app-datepicker/commit/ef214962a763d6a5d5ddb505a692479787969924)) +* update dependencies and update import ([79ceabb](https://github.com/motss/app-datepicker/commit/79ceabb722cba5c3cee64046e324e7f9483a4dd2)) + +### feat + +* datePicker now always opens in calendar view in DatePickerInput ([376c98b](https://github.com/motss/app-datepicker/commit/376c98bd3482505b9e2dd75941c598772e441ba8)) +* datePickerDialog now re-opens in calendar view ([a462fbe](https://github.com/motss/app-datepicker/commit/a462fbef506688108225a651e3df1e33fd21b2e0)) +* expose scrim color ([081c8f7](https://github.com/motss/app-datepicker/commit/081c8f744e1d3beb5a8f339993b89a2c68af43cf)) + +### fix + +* use live() to ensure datePickerInput updates to selected date ([a0633c2](https://github.com/motss/app-datepicker/commit/a0633c26d7da69e580eecb1b33229e316153c75e)) + +### refactor + +* improve stylings for better customization ([fd2f5b3](https://github.com/motss/app-datepicker/commit/fd2f5b303b99e0f70c125798ff5903992fc8cc01)) +* optimize dialog elements ([911aadc](https://github.com/motss/app-datepicker/commit/911aadcdbc1e959e19ab95d8c769b9f509e81b9c)) +* refactor in base styling ([c4edc35](https://github.com/motss/app-datepicker/commit/c4edc353668dc7607bbd6550593366a7f7e433dc)) +* refactor styling in datePickerInput ([dd5c413](https://github.com/motss/app-datepicker/commit/dd5c4133fde80efb921cd488bc34e23307febdb6)) +* try to standardize stylings with MD3 ([105da7c](https://github.com/motss/app-datepicker/commit/105da7ca3411238fe5b95b394603675cbcfa54a9)) + + + +# [6.0.0-rc.11](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.10...v6.0.0-rc.11) (2022-01-22) + + +### build + +* update script again ([26ea3c6](https://github.com/motss/app-datepicker/commit/26ea3c66fe7df37c9acbfd8e8efdb3d3bc9f2de3)) + + + +# [6.0.0-rc.10](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.9...v6.0.0-rc.10) (2022-01-22) + + +### build + +* update script ([06221be](https://github.com/motss/app-datepicker/commit/06221be0290d6207d4d579b7db323fde5a3ac307)) + + + +# [6.0.0-rc.9](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.8...v6.0.0-rc.9) (2022-01-22) + + +### build + +* update script to only run in package's working directory ([b8cb8c8](https://github.com/motss/app-datepicker/commit/b8cb8c835e84181928a0ddb1c562f6ef2d40ebb2)) + + + +# [6.0.0-rc.8](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.7...v6.0.0-rc.8) (2022-01-22) + + +### chore + +* update dependencies ([1de4cf6](https://github.com/motss/app-datepicker/commit/1de4cf67ccb8513248ed686635078d11b969d392)) + +### refactor + +* simplify CSS Custom Properties ([b68537d](https://github.com/motss/app-datepicker/commit/b68537dd307b53c5b62ba83016063e1b024ff165)) + + + +# [6.0.0-rc.7](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.6...v6.0.0-rc.7) (2022-01-10) + + +### build + +* add missing files ([a09ab94](https://github.com/motss/app-datepicker/commit/a09ab942000059cbfb0d03a6df4aaaff3c97c587)) + + + +# [6.0.0-rc.6](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.5...v6.0.0-rc.6) (2022-01-10) + + +### build + +* add date-picker-dialog to exports ([07211b2](https://github.com/motss/app-datepicker/commit/07211b293a211e2b667b084c339b7e3f09c44195)) + + + +# [6.0.0-rc.5](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.4...v6.0.0-rc.5) (2022-01-10) + + +### chore + +* cleanup and update README ([c4b8858](https://github.com/motss/app-datepicker/commit/c4b8858697cd5afae9ed60f474466fd248977126)) +* update dependencies ([8b700c4](https://github.com/motss/app-datepicker/commit/8b700c43039e97180c18c34af7c0b615060457c1)) +* update dependencies ([d5ac511](https://github.com/motss/app-datepicker/commit/d5ac511076fb9afcf3d0353b25df3e764bf76aa7)) + + + +# [6.0.0-rc.4](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.3...v6.0.0-rc.4) (2021-12-14) + + +### chore + +* migrate to use simple-git-hooks ([6a0d7e7](https://github.com/motss/app-datepicker/commit/6a0d7e7ef21d311618c4250a7c9286104aee99e4)) +* minor update ([5eaba03](https://github.com/motss/app-datepicker/commit/5eaba03f5c6bf3966b9b8f66a27ac347a4905668)) +* sort package.json ([30aee3e](https://github.com/motss/app-datepicker/commit/30aee3e5cf7d5370662deb78cd451b1f0f0c6622)) +* update dependencies ([d8f219e](https://github.com/motss/app-datepicker/commit/d8f219ebc025032c2412d62189f86203298adf66)) +* update dependencies ([5f57e54](https://github.com/motss/app-datepicker/commit/5f57e54bac3d8cf177308f73147ceebbcb3edee4)) +* update dependencies ([44fe450](https://github.com/motss/app-datepicker/commit/44fe450caa712058036306205286607c003b7cf5)) + +### feat + +* implement DatePickerDialogDialog for extensible slot for input ([e493bfb](https://github.com/motss/app-datepicker/commit/e493bfbea2673474d50f8f81bfe65398845058b5)) + +### refactor + +* fixing all FIXMEs ([67fc88b](https://github.com/motss/app-datepicker/commit/67fc88b0fccb5164e95f0b2c95208b6a5c79f9ca)) + +### test + +* add tests for warnUndefinedElement with hanbi for stubbing methods ([1f92479](https://github.com/motss/app-datepicker/commit/1f9247984a3db3b6d1487c23a8e30767d5cdee5a)) +* fix failed tests on optional max and always override min and max ([6685f4a](https://github.com/motss/app-datepicker/commit/6685f4ac39027d5cf20bd73c13fbc2b91b2e4d2f)) +* fix tests after updating DatePickerDialogBase to use ShadowDOM ([f449d2a](https://github.com/motss/app-datepicker/commit/f449d2ad517df4a083333d304cb62d98ef10d34f)) +* try to fix test ([b3a3a53](https://github.com/motss/app-datepicker/commit/b3a3a5318c9db9a7dd2770704598fcafece4354d)) + + + +# [6.0.0-rc.3](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.2...v6.0.0-rc.3) (2021-11-27) + + +### chore + +* add nano-staged to fix all linting issues in staged changed ([3239293](https://github.com/motss/app-datepicker/commit/3239293f77dc931476966bf49cbbddc9abc3f826)) +* update dependencies ([db68ed4](https://github.com/motss/app-datepicker/commit/db68ed424c41f92126b8636074b87cba2d06fb7c)) +* update dependencies ([c8f2e6e](https://github.com/motss/app-datepicker/commit/c8f2e6e9c550439db61ccb599b99df51bdbe793f)) +* update dependencies ([a0b49b9](https://github.com/motss/app-datepicker/commit/a0b49b941a7969cb5be0075c88f4f462242909e5)) + +### feat + +* add valueAsDate and valueAsNumber in DatePickerInput ([c46f8d1](https://github.com/motss/app-datepicker/commit/c46f8d15b39138735729db72c0b11be5ac9f293b)) +* close picker when focus is outside of DatePickerInput ([5a10623](https://github.com/motss/app-datepicker/commit/5a106236302eb29bde2067d0b82b4e128b58404b)) +* implement AppDatePickerDialog ([4d41bba](https://github.com/motss/app-datepicker/commit/4d41bbaf5dd90f68be97520458c528c979bf9d8e)) + +### fix + +* fix @material/mwc-dialog closes unexpectedly for all Enter keys ([3951f86](https://github.com/motss/app-datepicker/commit/3951f8623f2655829ac66212b9b4cc16624e11a7)) + +### refactor + +* implement .fire() to replace dispatchCustomEvent helper ([c411e13](https://github.com/motss/app-datepicker/commit/c411e132266f1d380af8ae29737f1e63d09df2f5)) +* minor update in date picker input ([b4609b6](https://github.com/motss/app-datepicker/commit/b4609b6c331543bba18d8f400e6d2b2a43d2ffba)) +* support Escape key to close DatePickerInput ([d706c0c](https://github.com/motss/app-datepicker/commit/d706c0c40476609006590e749af473dd5f1a8747)) + +### test + +* add tests for AppDatePickerDialog ([a11a61a](https://github.com/motss/app-datepicker/commit/a11a61a24238ef68ffc6631af43a1b0a58613354)) +* add tests for AppDatePickerInput ([a6d940e](https://github.com/motss/app-datepicker/commit/a6d940ef1b59f0bf09afe0da489c0967eb5f8a30)) +* add tests for AppDatePickerInputSurface ([8f11e49](https://github.com/motss/app-datepicker/commit/8f11e495ef79b43ba2f9618e707c19b7cb5ec1bb)) +* fix test failing in Firefox due to a bug ([220abd0](https://github.com/motss/app-datepicker/commit/220abd0c016e29b42c8dfa79f9369ab9a09f6e9e)) +* improve tests ([d5eed5d](https://github.com/motss/app-datepicker/commit/d5eed5dac1c79a4eb863fd1ca5cf3c53b4857794)) + + + +# [6.0.0-rc.2](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.1...v6.0.0-rc.2) (2021-11-14) + + +### chore + +* update dependencies ([0c2a7ba](https://github.com/motss/app-datepicker/commit/0c2a7bacf3d6f473dae22fb23cf07fd4f5d13cb4)) +* update package.json ([b4c6b79](https://github.com/motss/app-datepicker/commit/b4c6b79e9df1cf6c46345842bc72e4169c128ae9)) + + + +# [6.0.0-rc.1](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.0...v6.0.0-rc.1) (2021-11-11) + + +### refactor + +* update config ([b0aa13f](https://github.com/motss/app-datepicker/commit/b0aa13fc2fc2b3d32ff5464ac45aee7b2d94b122)) + + + +# [6.0.0-rc.0](https://github.com/motss/app-datepicker/compare/v4.5.1...v6.0.0-rc.0) (2021-11-11) + + +### chore + +* add post-commit husky hook ([4766348](https://github.com/motss/app-datepicker/commit/476634887a1d8aa19e02900596a96a7b5af2a50e)) +* cleanup ([cb1f081](https://github.com/motss/app-datepicker/commit/cb1f081cab804e6c2dd5802dac1f99eb1b6afe08)) +* cleanup ([6858944](https://github.com/motss/app-datepicker/commit/6858944c42786f636cb29ebf41277cb74ce11c9c)) +* cleanup ([46fb626](https://github.com/motss/app-datepicker/commit/46fb62648b9adfdd7ff2c352183e0490d917071c)) +* commit husky script ([615d4fb](https://github.com/motss/app-datepicker/commit/615d4fbf5d844ae567667604e5b73f97b07013eb)) +* complete setup ([d1b5c91](https://github.com/motss/app-datepicker/commit/d1b5c911f75d548faa1d67e8f613149d3c9e956b)) +* initial commit ([c738b2b](https://github.com/motss/app-datepicker/commit/c738b2b25d926915c79b7a4a407ae544afe1fae2)) +* minor update ([2e155d6](https://github.com/motss/app-datepicker/commit/2e155d6ace0a0dfff0d9bc474fbac8aab864d647)) +* npm x husky ([7ffd134](https://github.com/motss/app-datepicker/commit/7ffd13428605cf834e0838ccbb87a095167ddae8)) +* remove --no when running npm x ([5fd640e](https://github.com/motss/app-datepicker/commit/5fd640e39cde6bafde36cc5f398be5ea9f2660d2)) +* remove husky install ([b4ab1c9](https://github.com/motss/app-datepicker/commit/b4ab1c9b71e7d955f26c110b303a857ecd510e95)) +* remove whitespace in swipe-tracker folder name ([24ae97f](https://github.com/motss/app-datepicker/commit/24ae97fee5c443fc74b1f8e162d995543ceb4f81)) +* rename element names ([9e49ba5](https://github.com/motss/app-datepicker/commit/9e49ba559be4c3db8b15823c5bd58f515a3aeecf)) +* rename to actual web component's name ([c5d35b0](https://github.com/motss/app-datepicker/commit/c5d35b06a314c9693238b40a50a3bc1cc0f90dd6)) +* sort package.json ([b9b2e9c](https://github.com/motss/app-datepicker/commit/b9b2e9cea846248f46ce99ecb88a452a79eafc6d)) +* update ci scripts ([0ed6a5a](https://github.com/motss/app-datepicker/commit/0ed6a5ac5f88a728d25c2058711cd23f25420652)) +* update dependencies ([cca8df7](https://github.com/motss/app-datepicker/commit/cca8df7b492597b984d25c874565566f1e9dfd58)) +* update dependencies ([6fc3476](https://github.com/motss/app-datepicker/commit/6fc3476aeee90199074ce8852ce6ae591b43d723)) +* update dependencies ([ab32816](https://github.com/motss/app-datepicker/commit/ab32816f8c2db9b8b83aa740835cc580f731c465)) +* update dependencies ([5e77440](https://github.com/motss/app-datepicker/commit/5e77440c6371bb4760fff3a411949dbb385a5f6c)) +* update dependencies ([5829558](https://github.com/motss/app-datepicker/commit/58295582a33f743f2cb4cc3f99acdd4e95209a41)) +* update dependencies ([eb2ca4b](https://github.com/motss/app-datepicker/commit/eb2ca4bc5117ee55b46e8b2bca9a52c7f20a0634)) +* update dependencies ([d69fa5f](https://github.com/motss/app-datepicker/commit/d69fa5fefbb9cec7b906b771475ffe587ae272ee)) +* update dependencies ([d122c12](https://github.com/motss/app-datepicker/commit/d122c128048d9ecb2facc1b20de51728e89362d4)) +* update dependencies ([a7353b5](https://github.com/motss/app-datepicker/commit/a7353b57f9feb76dd34084c47a94c80255695f05)) +* update dependencies ([488203b](https://github.com/motss/app-datepicker/commit/488203bd60260b20455a1f7367e69f1c8ad144ee)) +* update dependencies ([dbf97fa](https://github.com/motss/app-datepicker/commit/dbf97fa98ab2f3635d35565b41e80bfa80962665)) +* update dependencies ([c4f4a85](https://github.com/motss/app-datepicker/commit/c4f4a85d8238ac10bd68db4b208155be1831f03a)) +* update dependencies ([45ae3ac](https://github.com/motss/app-datepicker/commit/45ae3ac3891a30479203890c62fd1b76e9d16841)) +* update dependencies ([393ad47](https://github.com/motss/app-datepicker/commit/393ad47165977a079c84d67df4445cda86e0c00e)) +* update dependencies ([98e111b](https://github.com/motss/app-datepicker/commit/98e111be808263a045fc6bdb9a36d418a78ea960)) +* update dependencies ([952a7ed](https://github.com/motss/app-datepicker/commit/952a7edcc647bbe87dee673c85295108fcc9a7cb)) +* update dependencies ([190167d](https://github.com/motss/app-datepicker/commit/190167d09fee8f36a0cfe831953d37e5b002fdd7)) +* update dependencies ([24588b6](https://github.com/motss/app-datepicker/commit/24588b682b3f7e17c61a127715248537588aa58f)) +* update dependencies ([f94bc4c](https://github.com/motss/app-datepicker/commit/f94bc4c206b7665e172763ed5d36ab9447843eaf)) +* update dependencies ([0426730](https://github.com/motss/app-datepicker/commit/0426730d68187876c740e54402e399184d0df587)) +* update dependencies ([e05f26e](https://github.com/motss/app-datepicker/commit/e05f26e414981adc297876adf9f91d450cd1d88f)) +* update dependencies ([4b1d1a4](https://github.com/motss/app-datepicker/commit/4b1d1a4ce405e6d59a32fc7092456f72c767082b)) +* update dependencies ([8b50214](https://github.com/motss/app-datepicker/commit/8b5021469a826203991a4df08f1f1c7e61a3d629)) +* update dependencies ([1fc63e9](https://github.com/motss/app-datepicker/commit/1fc63e94dad9c03d13cc6eb9d5253508c3a386a9)) +* update dependencies ([2457ae7](https://github.com/motss/app-datepicker/commit/2457ae7207fcf348fb13443881f68a9dcf340ce9)) +* update dependencies and update imports ([bcd2470](https://github.com/motss/app-datepicker/commit/bcd2470799cda245dc2ba916d9dd7b28a5ce9660)) +* update package.json ([d4122bd](https://github.com/motss/app-datepicker/commit/d4122bd460c99061cdd37315c13f60dcaa2d93e2)) +* update script ([2fe1b13](https://github.com/motss/app-datepicker/commit/2fe1b13b952c3a996ce66abd7fee9d343ff457bf)) +* use npm x ([cda0596](https://github.com/motss/app-datepicker/commit/cda0596c9af6dfc23790b942a6e17135ff9d072b)) + +### ci + +* always use ubuntu ([14fb289](https://github.com/motss/app-datepicker/commit/14fb289b750234bd9d217613ea10966d10990b87)) + +### feat + +* add calendar stylings ([c3f408f](https://github.com/motss/app-datepicker/commit/c3f408feed5798a2fe45f9fa881db94827698eb0)) +* add clampValue with tests ([49d3eac](https://github.com/motss/app-datepicker/commit/49d3eacf18f4a34f2df385800b15053a912ab1ca)) +* add multi calendars ([473592d](https://github.com/motss/app-datepicker/commit/473592d747025cae37dae4fdfccdece56162298e)) +* add stylings ([bc0f6c5](https://github.com/motss/app-datepicker/commit/bc0f6c5a6c63722ad51b80d4e8ddec360d305418)) +* add swipe-tracker ([984da8f](https://github.com/motss/app-datepicker/commit/984da8fc9505614780be772e5b9dba32da94b480)) +* add year grid, year grid button ([3a9dcfc](https://github.com/motss/app-datepicker/commit/3a9dcfcf2d52c5c3a31383c96cf9ba53e2788b60)) +* adding initial layout with customized labels ([aca077f](https://github.com/motss/app-datepicker/commit/aca077f60233285f32edd9c1d0a85d19bb281a84)) +* implement DatePickerInput ([c785fb7](https://github.com/motss/app-datepicker/commit/c785fb741170d3f27926dbfcc3e975e7addf80b7)) +* implement DatePickerInputSurface ([71eeb1a](https://github.com/motss/app-datepicker/commit/71eeb1a1cb6072b7fd75c5b32d06db67e3494233)) +* refactor code of month calendar ([50efc47](https://github.com/motss/app-datepicker/commit/50efc4725abc18f854902c72ee0f150a6ccc0837)) + +### fix + +* fix lint command ([305168b](https://github.com/motss/app-datepicker/commit/305168bbac4b37463fe2080df44816e2e773788f)) +* fix selected date update logic ([b61f3f0](https://github.com/motss/app-datepicker/commit/b61f3f0498508e7be966c1469aa05361f54bb3a0)) +* improve keyboard support and various bug fixes on navigation ([3f1445e](https://github.com/motss/app-datepicker/commit/3f1445e4aa0adab2774b0428a9ad0245f24e6098)) +* update husky commit-msg hook ([d988e55](https://github.com/motss/app-datepicker/commit/d988e55d0ad06d04f7e10b2a6d794007e6e95e58)) + +### refactor + +* add focusElement() helper ([f07c919](https://github.com/motss/app-datepicker/commit/f07c9199ba43b4acd70e4848dac3cb92bc7fff51)) +* add keyboard support in year grid ([c8ec5a9](https://github.com/motss/app-datepicker/commit/c8ec5a95ac393edab92ce8b0293ae8e251a77274)) +* code refactor in mixins ([601d10c](https://github.com/motss/app-datepicker/commit/601d10c051cd6ab361ea38060959f0ce9db4dc1c)) +* code refactoring ([69eedab](https://github.com/motss/app-datepicker/commit/69eedabdd741552d412f09833bcefdea94b34bda)) +* drop focused date in favor of selected date and minor update ([08fc85c](https://github.com/motss/app-datepicker/commit/08fc85c6f071f7f8063919ed1ca3ffb28601ceff)) +* improve code ([d4321bf](https://github.com/motss/app-datepicker/commit/d4321bf34784e4061af64fe4b72b4def0c05ae04)) +* improve keyboard navigation in year grid ([8ecbf25](https://github.com/motss/app-datepicker/commit/8ecbf25799505de8e42b795dd588f70651b3c294)) +* improve keyboard support in DatePickerInput ([e51136e](https://github.com/motss/app-datepicker/commit/e51136efe269a4cb02437e855430dea2bfb96734)) +* improve label ([970c2b3](https://github.com/motss/app-datepicker/commit/970c2b33dc9ddbdff34abff1171273968a48b3fb)) +* minor rename ([873cd06](https://github.com/motss/app-datepicker/commit/873cd06385c3789c21f3a9d0327672ca9ed8d7f4)) +* minor update ([ae387ac](https://github.com/motss/app-datepicker/commit/ae387ac7a14ab8bb2645589f186a2e50def34cfa)) +* minor update ([0812cae](https://github.com/motss/app-datepicker/commit/0812caeab1705c827653180174a9ec17ae1d3927)) +* minor update ([4188c5f](https://github.com/motss/app-datepicker/commit/4188c5fc511501adee1d792b7cdcbae8d0f39769)) +* minor update ([e02e768](https://github.com/motss/app-datepicker/commit/e02e768adcf286e1f1861c7f7f5a7608ac6eb969)) +* minor update and cleanup to improve test coverage ([5b418eb](https://github.com/motss/app-datepicker/commit/5b418eb3ef7179f95bd758e5e2ba5e67ef90f11d)) +* minor update to support valueAsDate and valueAsNumber ([ec24740](https://github.com/motss/app-datepicker/commit/ec24740ea882840198f6186d8e7bc07aa1e47630)) +* optimize code ([dcc4d69](https://github.com/motss/app-datepicker/commit/dcc4d693ea03bb09ae4b1d07981120ec658e8b02)) +* refactor code around keyboard support and typings ([ed80808](https://github.com/motss/app-datepicker/commit/ed80808998872322b2c4a25b2e41f841d4932288)) +* refactor dateValidator, toResolvedDate then update tests ([1179798](https://github.com/motss/app-datepicker/commit/117979847fce3bc417c52933d35069dbabceaafb)) +* refactor min, max, value with clamping and update tests ([14915a0](https://github.com/motss/app-datepicker/commit/14915a0dbe5bc122bb23bec6350444548bf5061d)) +* refactor year grid button and add base stylings ([3619a7b](https://github.com/motss/app-datepicker/commit/3619a7b8a200cbbfb2cff84577a54cafba312217)) +* remove redundant code ([5662c0e](https://github.com/motss/app-datepicker/commit/5662c0efbc47d67edd7aec276acbdc4ab5593dc7)) +* remove unused element ([82c2be8](https://github.com/motss/app-datepicker/commit/82c2be800ee41887c726eaf8101933e283c2c3f6)) +* rename to toDayDiffInclusive with minor fix ([47a3a3b](https://github.com/motss/app-datepicker/commit/47a3a3bc1fc0acb96cf328a00eab572cc5c23722)) +* update code with sorted imports and adding calendars ([28395fc](https://github.com/motss/app-datepicker/commit/28395fc1e88a4f08de02b9bd2f3ec29754fcca77)) +* update focus logic in year grid ([c253e9e](https://github.com/motss/app-datepicker/commit/c253e9ee8f92dd7237552f77eebad4c884705bda)) +* update logic rendering navigation buttons ([4cda306](https://github.com/motss/app-datepicker/commit/4cda306e7a127c4eb14a63159fed8f7badcf7ffc)) +* use KeyboardEvent.key and add disabled state ([28771a7](https://github.com/motss/app-datepicker/commit/28771a78f5f008fe2a529a0e4112df1e6ba62479)) + +### style + +* add overscroll-behavior: contain for year grid view ([0c60ee9](https://github.com/motss/app-datepicker/commit/0c60ee9b5a7cc89bacd63c9f80758464576c1136)) +* fix stylings and focus selected year in year grid ([e6a9dba](https://github.com/motss/app-datepicker/commit/e6a9dbaaa72c97bd102f6e0a006cee6973e1b305)) +* minor update ([2276524](https://github.com/motss/app-datepicker/commit/2276524b55cca3cb02a51cb8f9fbc7537aacfe07)) +* update size with border in calendar ([854880f](https://github.com/motss/app-datepicker/commit/854880f62ddbc517983079f15e3d9e51f23ae9c9)) +* update styling in date picker ([e51aa08](https://github.com/motss/app-datepicker/commit/e51aa08f3bca27bb8faab548cc2d46476646a58a)) +* update year grid button style on hover, focus, today, selected ([b99105d](https://github.com/motss/app-datepicker/commit/b99105d98bb09d6c667c26ac1ef87528f84bb7e0)) + +### test + +* add more tests and remove uvu ([4a617f5](https://github.com/motss/app-datepicker/commit/4a617f595fa08db7110e387dd60bf72a663291e6)) +* add test for toResolvedDate ([bb649e5](https://github.com/motss/app-datepicker/commit/bb649e569765203cad2486f7b156f7371e967681)) +* add tests for AppDatePicker ([e120bb9](https://github.com/motss/app-datepicker/commit/e120bb918e6845e44a24beb0eb433512385725a7)) +* add tests for AppMonthCalendar ([232e276](https://github.com/motss/app-datepicker/commit/232e276df16ad8691facf43591d86f698ae23ae5)) +* add tests for AppYearGrid ([e16a139](https://github.com/motss/app-datepicker/commit/e16a13991dd20d040efe2bbe106db90ce3b506a8)) +* add tests for elements ([ae1d5cd](https://github.com/motss/app-datepicker/commit/ae1d5cd48a4e90b49959ed2bf27ad13dc70fe0ca)) +* add tests for focusElement ([e0c70d5](https://github.com/motss/app-datepicker/commit/e0c70d5e8e799fd48e3ffe6ce0b8d13e25aff884)) +* add tests for isInCurrentMonth ([dc95435](https://github.com/motss/app-datepicker/commit/dc954350af3424cb9909e14b7aa96cac9752f5de)) +* add tests for nullishAttributeConverter ([bf371e6](https://github.com/motss/app-datepicker/commit/bf371e61952f1581e5f7ff8987bb9bcfc83d3cf4)) +* add tests for splitString ([c7ee8f9](https://github.com/motss/app-datepicker/commit/c7ee8f9538835ec64c78203d5088378984f2da32)) +* add tests for toClosestTarget ([23e5479](https://github.com/motss/app-datepicker/commit/23e5479504b77cf785cecbb1b743d4f6ddb4384e)) +* add tests for toDateRange ([3f21db2](https://github.com/motss/app-datepicker/commit/3f21db2253e3d43e68ed58733f9d4baa85014dd6)) +* add tests for toDateString ([f16c64d](https://github.com/motss/app-datepicker/commit/f16c64d01e0c9ac891bded2beccff3be73cc567c)) +* add tests for toFormatters ([e7b8179](https://github.com/motss/app-datepicker/commit/e7b81793600d3a7ff609bd2db2021f2f396ad06b)) +* add tests for toMultiCalendars ([d9eec02](https://github.com/motss/app-datepicker/commit/d9eec02027feb1db99ad8b8b94b472ae5cf0ba67)) +* add tests for toNextSelectableDate ([18ea669](https://github.com/motss/app-datepicker/commit/18ea6697ecfbfe91978a187e0e831af08133bd0e)) +* add tests for toNextSelectedDate ([d06d0b8](https://github.com/motss/app-datepicker/commit/d06d0b8a55c0a115d525cd97ee87996d5a6cb60d)) +* add tests for toNextSelectedYear with minor improvements ([4af280b](https://github.com/motss/app-datepicker/commit/4af280b379c238a2dfa19b3a6858525cc3e5e847)) +* add tests for toYearList, fix toDateRange to return number of days ([56c8404](https://github.com/motss/app-datepicker/commit/56c84040a2f907ed2297d598f22fb8715661cd9e)) +* improve tests and fix date range behavior ([34e07cd](https://github.com/motss/app-datepicker/commit/34e07cd5b88082a4a855dea0fe2e81548df0c40c)) +* try to add tests for helpers ([9a2ff8d](https://github.com/motss/app-datepicker/commit/9a2ff8d487e8309599cd478a7b7f126122cfb670)) +* update tests ([61c2347](https://github.com/motss/app-datepicker/commit/61c2347d21129d3f3aae0b1c7c183494593508ea)) +* update tests ([ff07461](https://github.com/motss/app-datepicker/commit/ff074613b22a01aed2b37f49005fa47bd712e652)) +* update tests ([c4fc0a9](https://github.com/motss/app-datepicker/commit/c4fc0a960577b43e000e4e4bab21dd0b93b3012a)) +* update tests due to code change ([3411afb](https://github.com/motss/app-datepicker/commit/3411afb9e635256685c04a93ee8740ceaadb901f)) + + + +## [4.5.1](https://github.com/motss/app-datepicker/compare/v4.5.0...v4.5.1) (2021-01-16) + + +### chore + +* Improve exports in package.json ([d59dcb5](https://github.com/motss/app-datepicker/commit/d59dcb5f171b50bd0ad1e5882571285af60a462f)) + + + +# [4.5.0](https://github.com/motss/app-datepicker/compare/v4.4.1...v4.5.0) (2021-01-16) + + +### chore + +* Update nodemod ([0270ac0](https://github.com/motss/app-datepicker/commit/0270ac03b79e8e57b2b2692541c03796a05fd77a)) +* Update packages ([fcd672c](https://github.com/motss/app-datepicker/commit/fcd672c113046d1deaf915c7974da7ddda6a2acd)) + +### fix + +* Override all button's type to be 'button', fix #196 ([22f47c4](https://github.com/motss/app-datepicker/commit/22f47c4f2c6c83c630053b7529ca42f0edf7c6a3)), closes [#196](https://github.com/motss/app-datepicker/issues/196) + +### test + +* Fix tests ([f2d3a2e](https://github.com/motss/app-datepicker/commit/f2d3a2eda5ca4b08bd246798e5ea663d16eece91)) +* Fix tests ([b86ed17](https://github.com/motss/app-datepicker/commit/b86ed1777c174465a954218aedcc9083a5412548)) + + + +## [4.4.1](https://github.com/motss/app-datepicker/compare/v4.4.0...v4.4.1) (2020-12-12) + + + + +# [4.4.0](https://github.com/motss/app-datepicker/compare/v4.4.0-2...v4.4.0) (2020-12-12) + + + + +# [4.4.0-2](https://github.com/motss/app-datepicker/compare/v4.4.0-1...v4.4.0-2) (2020-12-12) + + +### ci + +* Minor update to CI publish script ([4f4a7c3](https://github.com/motss/app-datepicker/commit/4f4a7c3062f99a5fd38dd69472af3b4d71a20a6f)) + + + +# [4.4.0-1](https://github.com/motss/app-datepicker/compare/v4.4.0-0...v4.4.0-1) (2020-12-12) + + +### ci + +* Fix CI scripts ([7ab50f8](https://github.com/motss/app-datepicker/commit/7ab50f82eea77b88678135b3bec2b02069064209)) + + + +# [4.4.0-0](https://github.com/motss/app-datepicker/compare/v4.3.0...v4.4.0-0) (2020-12-12) + + +### chore + +* Revert "4.4.0" ([bef6f04](https://github.com/motss/app-datepicker/commit/bef6f04c47269d02ce1d2109e993afb58d5951f5)) +* Update packages add simple index.html ([6631eab](https://github.com/motss/app-datepicker/commit/6631eabd8d7a28bf35861889c3199317bb1329ed)) + +### ci + +* Update CI script to drop deprecated command ([3c5c235](https://github.com/motss/app-datepicker/commit/3c5c235404b45b9e6761221a951193d7bf959031)) +* Update node version in CI, remove type=module in package.json ([26010c0](https://github.com/motss/app-datepicker/commit/26010c0b3d919fd7b1a528fad4ca0d1d2bc6528b)) + + + +# [4.3.0](https://github.com/motss/app-datepicker/compare/v4.2.0...v4.3.0) (2020-10-09) + + +### chore + +* Update dependencies ([e3d80a0](https://github.com/motss/app-datepicker/commit/e3d80a0db367ec13dd41aa195a4abe7bb30d42bd)) +* Update dependencies ([5adc928](https://github.com/motss/app-datepicker/commit/5adc928b6d7c7231bbedbb3b099d5811dc8ca0cb)) + +### doc + +* Add Q&A section ([6e8bf82](https://github.com/motss/app-datepicker/commit/6e8bf824d6d3e48d9f895d850fde0644dc873675)) +* Fix demo link ([6a2e82b](https://github.com/motss/app-datepicker/commit/6a2e82b8ba10cf4a27342599c51ee62cb2480a96)) + + + +# [4.2.0](https://github.com/motss/app-datepicker/compare/v4.1.0...v4.2.0) (2020-09-23) + + +### chore + +* Update dependencies ([c4b69fe](https://github.com/motss/app-datepicker/commit/c4b69fef82f36934c40fd6f3073c7ba1727c1854)) + + + +# [4.1.0](https://github.com/motss/app-datepicker/compare/v4.0.0...v4.1.0) (2020-05-10) + + +### chore + +* Update dependencies ([eea7e8a](https://github.com/motss/app-datepicker/commit/eea7e8a255a36db8e8206839e9eb77755b3ed95e)) + +### feat + +* Add Funding page ([78f3b90](https://github.com/motss/app-datepicker/commit/78f3b9015018d9ac44016aa428580cfb42941fa9)) + + + +# [4.0.0](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.55...v4.0.0) (2020-04-02) + + +### chore + +* Update dependencies ([ec17e61](https://github.com/motss/app-datepicker/commit/ec17e616f436a3636882048100ccadd37817a012)) + +### doc + +* Update README ([55986ba](https://github.com/motss/app-datepicker/commit/55986ba1d9bb2722560e4c223cf71c2d98c191bb)) + +### test + +* Fix broken test ([e9090de](https://github.com/motss/app-datepicker/commit/e9090de0f348bc41e29079f8dc3bc4f8367452a0)) + + + +# [4.0.0-rc.55](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.54...v4.0.0-rc.55) (2020-03-30) + + +### refactor + +* Use supportsPassiveEventListener from @material/mwc-base/utils ([daf2669](https://github.com/motss/app-datepicker/commit/daf26695e634946da1a724e815d5ebefa9f7a499)) + + + +# [4.0.0-rc.54](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.53...v4.0.0-rc.54) (2020-03-28) + + +### ci + +* Fix equality check ([c3b725d](https://github.com/motss/app-datepicker/commit/c3b725d32b66c1b712850dd0e5b567dedb3b2c1a)) +* Update CI scripts to skip build for version tagging commit ([453aa90](https://github.com/motss/app-datepicker/commit/453aa9086698ea68892cb205cdad1e364c9adf66)) + +### fix + +* Fix table caption being jumpy on Safari, update dependencies ([8df67e6](https://github.com/motss/app-datepicker/commit/8df67e6f748afa487e9bbcca9d362dc9602fdb44)) + + + +# [4.0.0-rc.53](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.52...v4.0.0-rc.53) (2020-03-26) + + +### chore + +* Downgrade to dependencies listed in ec32033 ([0418e16](https://github.com/motss/app-datepicker/commit/0418e167f1d301021e84f67de00969547acb4551)) +* Rebuild lockfile ([253ae89](https://github.com/motss/app-datepicker/commit/253ae8906a20cd3eafb1cd4519e1f88112193c02)) +* Update dependencies ([3cee5aa](https://github.com/motss/app-datepicker/commit/3cee5aa22776830c1709d2505fcd9c5d4415fb20)) + +### ci + +* Accessing env.* is not supported at GA's job level ([08ba85b](https://github.com/motss/app-datepicker/commit/08ba85b5b1acee57ddd316b2b7063b3318960ca8)) +* Add more conditions to skip CI ([5daf930](https://github.com/motss/app-datepicker/commit/5daf93036f11fb508412b6d45715b4d72bcef2e8)) +* All passed surprisingly ([22a63cb](https://github.com/motss/app-datepicker/commit/22a63cbe62cd89cbf66fcd0ef75f37feeef0d9d1)) +* Almost there, server returns en-GB as locale ([4be9bf6](https://github.com/motss/app-datepicker/commit/4be9bf62cf4d8b5d79361a94bdc78e663fa95c84)) +* Call done() when async task finishes ([c334766](https://github.com/motss/app-datepicker/commit/c3347661047dc7cc25e7e3300c9097e702a0cbc5)) +* Checking browser's resolvedOptions() ([27f5eb3](https://github.com/motss/app-datepicker/commit/27f5eb33b2f982b7208e941b89cfef9b3001f784)) +* Fix Check Build again ([2e23e56](https://github.com/motss/app-datepicker/commit/2e23e565edb21a5dbe757a2f51b7f7b165b4e054)) +* Fix typo ([8302f2d](https://github.com/motss/app-datepicker/commit/8302f2dd8cf8da73f8f41e8e33ca2bb75fb4b66e)) +* Intl.DateTimeFormat fails on Firefox ([536193b](https://github.com/motss/app-datepicker/commit/536193b517b5f3cc15c1cbb260e5413c8a422b41)) +* Minor renaming and add publish.yml ([26524cd](https://github.com/motss/app-datepicker/commit/26524cd859c6410083cb178efcbb2ea16ae04dd1)) +* npx envinfo failed on Windows ([17601e7](https://github.com/motss/app-datepicker/commit/17601e73a10d982aedfa03fddbd73c374e5cdfa2)) +* Remove artifact steps ([e4fb8f6](https://github.com/motss/app-datepicker/commit/e4fb8f6efc0cf23583307d3da6237436a3f5d9d0)) +* Run tests on local and SL ([7439eb8](https://github.com/motss/app-datepicker/commit/7439eb898c105498f484b56d8411bbc6f8576729)) +* Setup missing env for SL ([ed48420](https://github.com/motss/app-datepicker/commit/ed48420dc13cf235cde87959a81eb2059a151975)) +* Setup node with specific version ([3797235](https://github.com/motss/app-datepicker/commit/3797235d77cc596420fe954d67ad75610e1b011c)) +* Trying not to upgrade global npm ([d62974c](https://github.com/motss/app-datepicker/commit/d62974cb934b03b3611f6bb408aa44be54b730c6)) +* Trying to debug more ([122c1d0](https://github.com/motss/app-datepicker/commit/122c1d0657e875a11950eb3e022a1bba73c9bc4c)) +* Trying to find out if browser in Github Actions supports full ICU ([221e4c5](https://github.com/motss/app-datepicker/commit/221e4c54532eee7b3f0b16a738e35544a7b31a42)) +* Trying to find out the cause ([ca1ae47](https://github.com/motss/app-datepicker/commit/ca1ae476e5c44c4bdaad290379d9548dbb95ea55)) +* Trying to find out why CI fails ([0c085f9](https://github.com/motss/app-datepicker/commit/0c085f96ac9397c7c83378660e2bd809d718dccc)) +* Trying to use Github Actions ([c0d24aa](https://github.com/motss/app-datepicker/commit/c0d24aa1e1c63cb0436a0243eec62512e0005e1e)) +* Update CI script ([a1e2fe7](https://github.com/motss/app-datepicker/commit/a1e2fe799fe6cbd462e70440fb449d3b681bc877)) +* Update CI script that fails on Windows due to ls command ([433cf19](https://github.com/motss/app-datepicker/commit/433cf19c6f413117295a82a1c8903ccafd580b1a)) +* Use bash as shell ([bdd34cb](https://github.com/motss/app-datepicker/commit/bdd34cb209ec2e3ba4bc0c2b715324df1c41c1a9)) +* Use env keyword ([e9bfc01](https://github.com/motss/app-datepicker/commit/e9bfc0107743a3e0a0efa2e5fc34aa7312e1ee46)) + +### doc + +* Add GitHub Actions badges ([0748d98](https://github.com/motss/app-datepicker/commit/0748d984334dadbdddf9e0ebdc60865357a5e2e1)) + +### fix + +* Minor CSS update, fix tag not closing properly, update typing ([24b6c69](https://github.com/motss/app-datepicker/commit/24b6c698844302e20328285787589f8a530ffebf)) + +### test + +* Default locale to 'en-US' on all browsers ([693052b](https://github.com/motss/app-datepicker/commit/693052be8152a3044c927bc2d21636aa39478d1f)) + + + +# [4.0.0-rc.52](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.51...v4.0.0-rc.52) (2020-03-15) + + +### chore + +* Update dependencies ([83b3778](https://github.com/motss/app-datepicker/commit/83b3778f74249ef41786036006dcc7f85d82d16a)) + +### fix + +* Update dependencies to fix disabled dates not updating correctly ([c178968](https://github.com/motss/app-datepicker/commit/c178968167955a88d56c78203978322f28acd8ee)) + + + +# [4.0.0-rc.51](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.50...v4.0.0-rc.51) (2020-03-14) + + +### refactor + +* Only focus year selector button when switching between views ([200d0f0](https://github.com/motss/app-datepicker/commit/200d0f06a8823bad61575b19a7b6a898a4307cc0)) + + + +# [4.0.0-rc.50](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.49...v4.0.0-rc.50) (2020-03-09) + + +### fix + +* Fix tabindex does not update accordingly with focused date ([02ff148](https://github.com/motss/app-datepicker/commit/02ff148cf9de17c8df496564729ce9100d8dbc17)) + + + +# [4.0.0-rc.49](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.48...v4.0.0-rc.49) (2020-03-08) + + +### chore + +* Upgrade dependencies, reduce maxInstances ([fa091fc](https://github.com/motss/app-datepicker/commit/fa091fca0e1327c6a7fd2ecffc24f798d785f87a)) + +### feat + +* Add `alwaysResetValue` property, update tests and doc, close #176 ([7622e92](https://github.com/motss/app-datepicker/commit/7622e92c5e3cf78acd0f29f31166e2f046351a89)), closes [#176](https://github.com/motss/app-datepicker/issues/176) + + + +# [4.0.0-rc.48](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.47...v4.0.0-rc.48) (2020-03-02) + + +### chore + +* Upgrade dependencies ([68fc5d9](https://github.com/motss/app-datepicker/commit/68fc5d93154774e27f5fbb0301ffee78c093d484)) + +### ci + +* Try using circleci/node:12-browsers Docker image ([27b447b](https://github.com/motss/app-datepicker/commit/27b447bb1106ea5d129f45044c23bf22b095d467)) +* Trying the optimal value of maxInstances ([5567540](https://github.com/motss/app-datepicker/commit/5567540cf5ad758599d8663317bb9363a83a86d1)) +* Trying to bump maxInstances ([b62323b](https://github.com/motss/app-datepicker/commit/b62323bd274f5e088e6f3bb60f75cc915b301272)) +* Trying to find the optimal maxInstances ([2ef7911](https://github.com/motss/app-datepicker/commit/2ef79110962642117d6bcfa4966d9847cc9035e7)) +* Trying to fix failed CI, use node@13 and decrease maxInstances ([7445099](https://github.com/motss/app-datepicker/commit/7445099192370a26fb103afc2e7783f5c36f84ee)) +* Trying to increase maxInstances ([d174da4](https://github.com/motss/app-datepicker/commit/d174da4648b0a729c8d4115ed5c293fa7ee1fc9c)) + +### feat + +* Scrollbar thumb customization in year list view, close #173 ([69a32da](https://github.com/motss/app-datepicker/commit/69a32da38d7386ca3461bc08473f4ad766e61b8c)), closes [#173](https://github.com/motss/app-datepicker/issues/173) + +### fix + +* Disabled day cannot be focused ([76b34d0](https://github.com/motss/app-datepicker/commit/76b34d056368f208c272dbc880d06b86aaf7e12e)) +* Various bug fixes ([ffd3609](https://github.com/motss/app-datepicker/commit/ffd360997ebf93733e557bfc7a9a04193b3736c5)) + + + +# [4.0.0-rc.47](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.46...v4.0.0-rc.47) (2020-02-25) + + +### chore + +* Upgrade dependency ([a7e361c](https://github.com/motss/app-datepicker/commit/a7e361c812c71d9c7ce504942299e71de99f9956)) + +### refactor + +* Drop private class fields ([ee690e7](https://github.com/motss/app-datepicker/commit/ee690e7be4846f8091eed0db000757b53a73a11d)) +* Minor code refactoring ([8ff06ff](https://github.com/motss/app-datepicker/commit/8ff06ff0e9c2cc744270651a013f7e17b7d64d07)) + + + +# [4.0.0-rc.46](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.45...v4.0.0-rc.46) (2020-02-24) + + +### feat + +* Support ::part() in dialog, update tests and doc with ::part() ([6f8f5bb](https://github.com/motss/app-datepicker/commit/6f8f5bbd1d1b89f39d841c06de728146b4ce9152)) +* Support ::part() which enables by default in stable FF and Chrome ([b7d4cea](https://github.com/motss/app-datepicker/commit/b7d4cea9cfd3428c5139076f48a4c1b1ca163aa6)) + +### fix + +* Fix calendar day not centered, fix #169, fix #172 ([da297a5](https://github.com/motss/app-datepicker/commit/da297a5ce34cf2c71ce94d8065ca3228e3747bc4)), closes [#169](https://github.com/motss/app-datepicker/issues/169) [#172](https://github.com/motss/app-datepicker/issues/172) +* Handle mouseleave event when dragging calendar, close #174 ([30de2eb](https://github.com/motss/app-datepicker/commit/30de2eb944f806c5cfd4f2cdbec0150be5fec8a1)), closes [#174](https://github.com/motss/app-datepicker/issues/174) + +### refactor + +* Refactor animation and NPM scripts ([25c38ba](https://github.com/motss/app-datepicker/commit/25c38ba4c9eaa03e50937cbff709aac621c59a4f)) +* Use Generic in findShadowTarget() instead of using as keyword ([23f6f66](https://github.com/motss/app-datepicker/commit/23f6f669515a84bfd2e8542679702992667a99c7)) + +### test + +* Fix test command for running tests on Sauce Labs ([2f7c649](https://github.com/motss/app-datepicker/commit/2f7c64920bf168b71b782772942cdb2e65b28d85)) +* Fix tests due to layout change, use import type in TS3.8 ([fd4f124](https://github.com/motss/app-datepicker/commit/fd4f12460f45e42c9dbca061b9c78a5189af351b)) + + + +# [4.0.0-rc.45](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.44...v4.0.0-rc.45) (2020-02-16) + + +### fix + +* Add --app-datepicker-focused-year-bg-color, fix #170 ([49b4789](https://github.com/motss/app-datepicker/commit/49b4789b39dc475baa000deea251a70ca4c3a48e)), closes [#170](https://github.com/motss/app-datepicker/issues/170) + + + +# [4.0.0-rc.44](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.43...v4.0.0-rc.44) (2020-02-16) + + +### chore + +* Upgrade dependencies ([d6a5e5d](https://github.com/motss/app-datepicker/commit/d6a5e5d5ee19a449f5d7eb045ed495a42ad579e1)) + +### feat + +* Add clearLabel in dialog, minor code refactor, update tests ([e511de5](https://github.com/motss/app-datepicker/commit/e511de5d0dc6a79de80192730ab82c308a7ade2c)) + +### test + +* Enable all tests ([f1b29f0](https://github.com/motss/app-datepicker/commit/f1b29f0676dfadc6badee9d2c762b1940d885873)) +* Fix broken test, update screenshots ([a91072f](https://github.com/motss/app-datepicker/commit/a91072fe9c8a8bc4c5fceef498891bb6e5537f72)) + + + +# [4.0.0-rc.43](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.42...v4.0.0-rc.43) (2020-02-12) + + +### chore + +* Update dependencies ([7cf4e77](https://github.com/motss/app-datepicker/commit/7cf4e77b79db3b0db87a2be7e871dc67c96379f6)) +* Upgrade dependencies ([4de7069](https://github.com/motss/app-datepicker/commit/4de70692036c10b74c6438fa50d0d010404eafcb)) +* Upgrade dependencies && update pre-commit hook ([af5f527](https://github.com/motss/app-datepicker/commit/af5f52783ae326ccfdcfa6717ee9c795bbc8964f)) + +### feat + +* Add undefined custom elements for lazy definition ([788b475](https://github.com/motss/app-datepicker/commit/788b475c92d5d31f30a61171a805dd7ff9061dfd)) +* Re-enable improved dragging feature with revised tests ([fd9274e](https://github.com/motss/app-datepicker/commit/fd9274e911447cc30a0e4c8f82459d45583fe970)) + +### fix + +* Minor code refactor to simplify calendar dragging feature ([bb03f0f](https://github.com/motss/app-datepicker/commit/bb03f0fcefc95818db9817446d63ad62e6ea028b)) + +### test + +* Use ES2017 for testing as Edge 18 does not support {...a} ([9775b3b](https://github.com/motss/app-datepicker/commit/9775b3b608e159de6a292157ee3fbcfeabd00d46)) + + + +# [4.0.0-rc.42](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.41...v4.0.0-rc.42) (2020-02-05) + + +### chore + +* Update doc, remove unused demo and dependencies, upgrade deps ([67f57c8](https://github.com/motss/app-datepicker/commit/67f57c883c489af059f4af081f4d7a3d38dcff29)) + +### feat + +* Add `inline` property to render datepicker in inline mode ([c81640c](https://github.com/motss/app-datepicker/commit/c81640cd668024472940eac0e9eb660ef1918f2d)) + +### fix + +* Add missing husky for pre-commit checks, fix linting issues ([f7fb478](https://github.com/motss/app-datepicker/commit/f7fb478909b8efbc76a771e33fc39c7c0acfc216)) + +### test + +* Fix test failed on Safari ([d876496](https://github.com/motss/app-datepicker/commit/d87649638fcbe10f2037c671e8364a0543ba1461)) +* Simplify test ([220df30](https://github.com/motss/app-datepicker/commit/220df3062b2ca0d3de45a940175a08f4d0010bed)) + + + +# [4.0.0-rc.41](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.40...v4.0.0-rc.41) (2020-02-03) + + +### chore + +* Upgrade dependencies ([0ba04a2](https://github.com/motss/app-datepicker/commit/0ba04a24294b17f1f94ee181c72e3cffe67f63cc)) +* Upgrade dependencies ([f5c074b](https://github.com/motss/app-datepicker/commit/f5c074b4c0eb5feb485b42dabd64deac62fb5487)) + +### ci + +* Remove redundant Lint step ([95c7bd2](https://github.com/motss/app-datepicker/commit/95c7bd2d45c8b5941983da5c7642e132f8402e37)) + +### doc + +* Update doc on browsers support and use Edge 18 in CI for testing ([a424037](https://github.com/motss/app-datepicker/commit/a424037d4b6dbe226eae64eadd911c377c5dd943)) +* Update docs with latest events ([17ea421](https://github.com/motss/app-datepicker/commit/17ea421c2db0d4909e833fa521e84eed61656c48)) + +### feat + +* Add `datepicker-value-updated` when focused date updates, fix #165 ([cace473](https://github.com/motss/app-datepicker/commit/cace473db67722740a8e1f1101959b49f07972d0)), closes [#165](https://github.com/motss/app-datepicker/issues/165) + + + +# [4.0.0-rc.40](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.39...v4.0.0-rc.40) (2020-01-19) + + +### chore + +* Update dependencies ([4f453f5](https://github.com/motss/app-datepicker/commit/4f453f5c55b437c4dd311798653f576c723f5128)) + +### ci + +* Use latest node ([68fb5fe](https://github.com/motss/app-datepicker/commit/68fb5fe2560e5df0d2d5871fc8f8dacc0ebf757d)) + +### fix + +* Fix month not updated correctly when clicks and keyboard involve ([933174f](https://github.com/motss/app-datepicker/commit/933174f58d8c24eaa2cd34793fbc6f1bd879b7df)) + +### test + +* Add tests for edge cases where keyboards + mouses are used ([e69764b](https://github.com/motss/app-datepicker/commit/e69764b703571bf8f997cc7c9fd51ce25952be6b)) +* Fix tests broken due to bug in test helper and missing min ([ca103df](https://github.com/motss/app-datepicker/commit/ca103df96762fdede1ce541293d8b59952901b76)) +* Revert change in test helper ([2c38d26](https://github.com/motss/app-datepicker/commit/2c38d2696f53c856f200501b330beda52f137ae4)) +* Revert change in test helper ([b45913e](https://github.com/motss/app-datepicker/commit/b45913e9bf3b7b03fd8e720c28ff6f99495ebdd8)) \ No newline at end of file diff --git a/FULL_CHANGELOG.md b/FULL_CHANGELOG.md new file mode 100644 index 000000000..716835a47 --- /dev/null +++ b/FULL_CHANGELOG.md @@ -0,0 +1,1624 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + + + +# [6.0.0-rc.22](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.21...v6.0.0-rc.22) (2022-03-26) + + +### refactor + +* minor update ([4287782](https://github.com/motss/app-datepicker/commit/4287782babb7af1a0db37da4984b82e0274c8881)) +* rename toyearLabel, update docs, fix stylings, minor cleanup ([0ee4e3f](https://github.com/motss/app-datepicker/commit/0ee4e3fa663d44734b579bb2b565e7ff673842a5)) + + + +# [6.0.0-rc.21](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.20...v6.0.0-rc.21) (2022-03-26) + + +### chore + +* remove unused comments ([c2ee020](https://github.com/motss/app-datepicker/commit/c2ee0208f5de2ee4b1c907375a2bce536602e8f2)) +* update dependencies ([c781463](https://github.com/motss/app-datepicker/commit/c781463cccc17b3f6ea9f6c639c0dacc60e92871)) +* update dependencies ([7ee2066](https://github.com/motss/app-datepicker/commit/7ee20664b8899cd881a2ffadf6f08fa6dacc2c61)) + +### ci + +* echo group name ([64ff901](https://github.com/motss/app-datepicker/commit/64ff901909a42dd9fcf9b47443471448196868d7)) +* improve CI scripts ([46cbf3a](https://github.com/motss/app-datepicker/commit/46cbf3ad8c31a3a3e192745400e2b5444f1e8a14)) + + + +# [6.0.0-rc.20](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.19...v6.0.0-rc.20) (2022-03-21) + + +### ci + +* update CI scripts ([4b1959d](https://github.com/motss/app-datepicker/commit/4b1959d619bfb8fbe31f6298b6dd8cf18e350d74)) + + + +# [6.0.0-rc.19](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.18...v6.0.0-rc.19) (2022-03-21) + + +### build + +* convert all bash scripts to shell scripts ([a317814](https://github.com/motss/app-datepicker/commit/a317814365b2c238e767c087a172d0755b8666a8)) +* trying to adopt changesets ([0410aef](https://github.com/motss/app-datepicker/commit/0410aefaa9856d24775ad4236fc81c84a3af9d87)) +* trying to update changelog with new commit message ([4206b7c](https://github.com/motss/app-datepicker/commit/4206b7c830b6256f22216c77b45c3fa6223379f0)) + +### chore + +* update dependencies ([a3e6f69](https://github.com/motss/app-datepicker/commit/a3e6f691d37f9d087e2e43f288686e8da41e7249)) + +### ci + +* improve setting ENV in CI ([46a4848](https://github.com/motss/app-datepicker/commit/46a48482200e75f561f9304ee198019a582da7a3)) +* trying to improve CI ([97a058d](https://github.com/motss/app-datepicker/commit/97a058dfc2c1f9c7335f0482f6f0681a1a9ab1f4)) +* update CI script ([c8b8dfa](https://github.com/motss/app-datepicker/commit/c8b8dfab91b9adfc668145629c17063b43788079)) +* update CI script ([cfa6652](https://github.com/motss/app-datepicker/commit/cfa665233643fdbb967f602c6d23ee0d1c60b20d)) +* update scripts ([b249e4f](https://github.com/motss/app-datepicker/commit/b249e4f38c67066bd5c2fcfcc12ea5f316e7858d)) + +### docs + +* add docs for AppDatePicker ([f462721](https://github.com/motss/app-datepicker/commit/f46272132b4882fdd88f371430c21ccff77a3b6d)) +* add docs for AppDatePickerDialog ([b8968d6](https://github.com/motss/app-datepicker/commit/b8968d6e72cb89c13cf00fe74fc0968e779071f4)) +* add docs for AppDatePickerInput ([f531c50](https://github.com/motss/app-datepicker/commit/f531c505c7bb9133b331002f998aa7647007ec1d)) +* fix broken URLs in docs ([83c06d5](https://github.com/motss/app-datepicker/commit/83c06d5e156fc47b5eefd44393b0768d8f607125)) + +### feat + +* add script to generate changelog ([70534f8](https://github.com/motss/app-datepicker/commit/70534f8f79295158b0ac1697f27df3dd0e8e0ec0)) +* add today, toyear parts, and exportparts for calendar and yearGrid ([969d1ac](https://github.com/motss/app-datepicker/commit/969d1ac01b20007b4db321c6b49e1ba8c097f366)) +* integrate @reallyland/tools ([30dc8a1](https://github.com/motss/app-datepicker/commit/30dc8a1689811ffc14b591629618d52d0d7e716c)) + +### fix + +* fix stylings not using the correct CSS Variables ([13e5209](https://github.com/motss/app-datepicker/commit/13e5209458045bcde28da85501af3ee1c21b8456)) + + + +# [6.0.0-rc.18](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.17...v6.0.0-rc.18) (2022-02-27) + + +### refactor + +* minor update to always use current date unless selected ([d260d88](https://github.com/motss/app-datepicker/commit/d260d8827c84ffb619f07deb5f03890c5d67bca8)) +* update dialog to always re-render datePicker with clean slate ([d016f97](https://github.com/motss/app-datepicker/commit/d016f97532dbfbb52391dbdbf07d625768c0e7b0)) + +### test + +* add and update tests ([36374b2](https://github.com/motss/app-datepicker/commit/36374b2757da6da15b8d71a73839516c6341f2cf)) + + + +# [6.0.0-rc.17](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.16...v6.0.0-rc.17) (2022-02-26) + + +### test + +* update tests, fix datePicker opens with a clean slate in input ([050447b](https://github.com/motss/app-datepicker/commit/050447bfc489615e855eda1f11bae5404574ce2f)) + + + +# [6.0.0-rc.16](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.15...v6.0.0-rc.16) (2022-02-26) + + +### chore + +* update dependencies ([61b4d44](https://github.com/motss/app-datepicker/commit/61b4d44e5dac705fe1bdd8930f80ec91a03820d5)) + +### fix + +* fix datePicker renders when inputSurface is not loaded ([1123f8e](https://github.com/motss/app-datepicker/commit/1123f8efe6d7f9cd3a625000544991a7d447f401)) + + + +# [6.0.0-rc.15](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.14...v6.0.0-rc.15) (2022-02-21) + + +### build + +* add icon-button/* ([5cf98da](https://github.com/motss/app-datepicker/commit/5cf98da24875d679c895e2f062245b082b3a015f)) + +### ci + +* remove Playwright setup ([6d4a43c](https://github.com/motss/app-datepicker/commit/6d4a43cecab79a1bd3371cd099367c4cd1b332b0)) +* trying to install-deps with installed Playwright ([7f52c6f](https://github.com/motss/app-datepicker/commit/7f52c6f82ea94826c8d4ec72ae95db32d6483244)) + +### test + +* ignore LoC that causes code coverage to fail sometimes ([86aa7d6](https://github.com/motss/app-datepicker/commit/86aa7d61d0eab895da1c62dcdd28780cbe938e03)) + + + +# [6.0.0-rc.14](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.13...v6.0.0-rc.14) (2022-02-21) + + +### build + +* lint without fix ([5dbe14d](https://github.com/motss/app-datepicker/commit/5dbe14d9092d45e116cc6e02f1cbdf3d9f130484)) +* revert auto fix in linting ([53a836e](https://github.com/motss/app-datepicker/commit/53a836e3de1709057d92a5a5f66d2faf5c64ec82)) +* try git add after auto fix in linting ([be31fc1](https://github.com/motss/app-datepicker/commit/be31fc1303a3593d54b38be0808fe715465a57bb)) + +### chore + +* remove .only in tests ([f622efa](https://github.com/motss/app-datepicker/commit/f622efaab81f458da5225880f57ad939b1925c7e)) +* update dependencies ([1292133](https://github.com/motss/app-datepicker/commit/1292133a154a6e847a9be720ba7137540e082cd5)) +* update dependencies and update typings ([92848c9](https://github.com/motss/app-datepicker/commit/92848c95451f3c360e0ba3da16d924ab6c393bf0)) +* update dependencies, remove unused uses: in CI ([983a236](https://github.com/motss/app-datepicker/commit/983a236c7bd782fd9071a01526669a4d4330a7b2)) + +### ci + +* debug CI ([c4fbde6](https://github.com/motss/app-datepicker/commit/c4fbde68f6e82fa56a5b3993e6588e3337deb157)) +* debug CI ([46f11ca](https://github.com/motss/app-datepicker/commit/46f11caa702ddb7a87918cc2c53b94412fddcb0c)) +* debug CI ([f925d55](https://github.com/motss/app-datepicker/commit/f925d55de1d705a7d882c12192eac1880d44dbf3)) +* revert to Playwright Github Action ([0f106c5](https://github.com/motss/app-datepicker/commit/0f106c5a2b2b45f747f17ff6d0147c8140f06573)) +* update step for tests with coverage ([40aec68](https://github.com/motss/app-datepicker/commit/40aec68032413bb26f837a07e3b2f1af6b1f76f2)) +* use Playwright CLI ([e503ba2](https://github.com/motss/app-datepicker/commit/e503ba2c424a2b9bd676c8cdc3347055d61a5b5f)) +* use Playwright CLI instead of Github Action ([51eb60f](https://github.com/motss/app-datepicker/commit/51eb60f9fd9a3861d8f9a6fefdb5f526bcc8f2be)) + +### feat + +* implement .lazyLoad in DatePickerInput ([b3c32f2](https://github.com/motss/app-datepicker/commit/b3c32f2611b071e4dca4e1591a32461c390ecb56)) +* implement IconButton to overcome a rendering bug in Ripple ([6f18ca2](https://github.com/motss/app-datepicker/commit/6f18ca26c0cd71d4019e9493c2e2cfdb15adb37e)) +* use title to replace MD tooltip for all hover-able labels ([fa3e059](https://github.com/motss/app-datepicker/commit/fa3e0597730c1c71bdddb4c4b07d831af6dd2b1f)) + +### fix + +* fix a rendering bug in mwc-icon-button's ripple in DatePickerInput ([615f996](https://github.com/motss/app-datepicker/commit/615f99655f6cbe7b6834e54523745b9f90cfb920)) + +### refactor + +* fix linting ([acbdd73](https://github.com/motss/app-datepicker/commit/acbdd73c1f03d8d9c259b0e2058c13bd7e2fd991)) +* major refactoring in stylings to be compatible with MD2 ([c8b9c43](https://github.com/motss/app-datepicker/commit/c8b9c43fc35e66658dbe6d446c08cd7158a5c88c)) +* support shortWeekLabel, weekLabel, weekNumberTemplate ([ac31caf](https://github.com/motss/app-datepicker/commit/ac31cafbcea747fe34270e6d8efe384d3f90d86e)) +* use .updated() to always update scrolling in YearGrid ([cc994ce](https://github.com/motss/app-datepicker/commit/cc994cecaa02d3276f9b4f593bd010a43da18779)) + +### test + +* add tests for MonthCalendar ([62e76ac](https://github.com/motss/app-datepicker/commit/62e76acfc2f660f622095155c15c9d521c7062ec)) +* add tests for title in YearGrid, update ESLint to enforce semi ([2dbfe1b](https://github.com/motss/app-datepicker/commit/2dbfe1b45692e1cd81f8f9cf7c2cf23c5b17c9c2)) +* add tests in DatePicker, remove unused inline property ([29892b5](https://github.com/motss/app-datepicker/commit/29892b509cc21f6e244807e86b20dba13ea7a79a)) +* add tests in DatePickerDialog, fix valueAs* not updated with value ([201aaa1](https://github.com/motss/app-datepicker/commit/201aaa1ddcde0cd013c34326a951cd715ffec5cf)) +* add tests in YearGrid ([c32d892](https://github.com/motss/app-datepicker/commit/c32d89257054e5c339e72a74c0e9178183c2affb)) +* refactor typings in tests ([6812bf6](https://github.com/motss/app-datepicker/commit/6812bf6d8a9915e15ede88cb3fe75815c060058a)) +* update tests ([4f212ae](https://github.com/motss/app-datepicker/commit/4f212ae632519d8d36ef01ec33f66811bdcd4956)) +* update tests due to lazy loading dependencies ([c201c14](https://github.com/motss/app-datepicker/commit/c201c1472f7ec103ad0b1c3c4cd3fd21b0c4dc61)) + + + +# [6.0.0-rc.13](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.12...v6.0.0-rc.13) (2022-02-06) + + +### build + +* minor update ([32d48d3](https://github.com/motss/app-datepicker/commit/32d48d32708759283129deaa7d65fd38268af4cc)) + +### chore + +* update dependencies ([c9b00c1](https://github.com/motss/app-datepicker/commit/c9b00c1bfe8403a65322158cd0e4fe9eea7d1ca6)) +* update dependencies ([0d6b36b](https://github.com/motss/app-datepicker/commit/0d6b36bfab84031115f5c430872d9df2d480d970)) + +### ci + +* improve CI ([f3459c4](https://github.com/motss/app-datepicker/commit/f3459c459bffa2e6aeba853b90b7bcc5f06b63db)) +* improve CI ([efdf1e7](https://github.com/motss/app-datepicker/commit/efdf1e7a04e1293d3abd8bf7e95726c869d9dc70)) +* simple-git-hooks fix ([0925640](https://github.com/motss/app-datepicker/commit/0925640d8630379a6ebbde381593253d5c04e926)) +* use local cache for npx ([2bd0dc5](https://github.com/motss/app-datepicker/commit/2bd0dc5c2be26a2b6565f67f0f7aa3981df250a9)) + + + +# [6.0.0-rc.12](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.11...v6.0.0-rc.12) (2022-01-30) + + +### chore + +* update dependencies ([ef21496](https://github.com/motss/app-datepicker/commit/ef214962a763d6a5d5ddb505a692479787969924)) +* update dependencies and update import ([79ceabb](https://github.com/motss/app-datepicker/commit/79ceabb722cba5c3cee64046e324e7f9483a4dd2)) + +### feat + +* datePicker now always opens in calendar view in DatePickerInput ([376c98b](https://github.com/motss/app-datepicker/commit/376c98bd3482505b9e2dd75941c598772e441ba8)) +* datePickerDialog now re-opens in calendar view ([a462fbe](https://github.com/motss/app-datepicker/commit/a462fbef506688108225a651e3df1e33fd21b2e0)) +* expose scrim color ([081c8f7](https://github.com/motss/app-datepicker/commit/081c8f744e1d3beb5a8f339993b89a2c68af43cf)) + +### fix + +* use live() to ensure datePickerInput updates to selected date ([a0633c2](https://github.com/motss/app-datepicker/commit/a0633c26d7da69e580eecb1b33229e316153c75e)) + +### refactor + +* improve stylings for better customization ([fd2f5b3](https://github.com/motss/app-datepicker/commit/fd2f5b303b99e0f70c125798ff5903992fc8cc01)) +* optimize dialog elements ([911aadc](https://github.com/motss/app-datepicker/commit/911aadcdbc1e959e19ab95d8c769b9f509e81b9c)) +* refactor in base styling ([c4edc35](https://github.com/motss/app-datepicker/commit/c4edc353668dc7607bbd6550593366a7f7e433dc)) +* refactor styling in datePickerInput ([dd5c413](https://github.com/motss/app-datepicker/commit/dd5c4133fde80efb921cd488bc34e23307febdb6)) +* try to standardize stylings with MD3 ([105da7c](https://github.com/motss/app-datepicker/commit/105da7ca3411238fe5b95b394603675cbcfa54a9)) + + + +# [6.0.0-rc.11](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.10...v6.0.0-rc.11) (2022-01-22) + + +### build + +* update script again ([26ea3c6](https://github.com/motss/app-datepicker/commit/26ea3c66fe7df37c9acbfd8e8efdb3d3bc9f2de3)) + + + +# [6.0.0-rc.10](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.9...v6.0.0-rc.10) (2022-01-22) + + +### build + +* update script ([06221be](https://github.com/motss/app-datepicker/commit/06221be0290d6207d4d579b7db323fde5a3ac307)) + + + +# [6.0.0-rc.9](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.8...v6.0.0-rc.9) (2022-01-22) + + +### build + +* update script to only run in package's working directory ([b8cb8c8](https://github.com/motss/app-datepicker/commit/b8cb8c835e84181928a0ddb1c562f6ef2d40ebb2)) + + + +# [6.0.0-rc.8](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.7...v6.0.0-rc.8) (2022-01-22) + + +### chore + +* update dependencies ([1de4cf6](https://github.com/motss/app-datepicker/commit/1de4cf67ccb8513248ed686635078d11b969d392)) + +### refactor + +* simplify CSS Custom Properties ([b68537d](https://github.com/motss/app-datepicker/commit/b68537dd307b53c5b62ba83016063e1b024ff165)) + + + +# [6.0.0-rc.7](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.6...v6.0.0-rc.7) (2022-01-10) + + +### build + +* add missing files ([a09ab94](https://github.com/motss/app-datepicker/commit/a09ab942000059cbfb0d03a6df4aaaff3c97c587)) + + + +# [6.0.0-rc.6](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.5...v6.0.0-rc.6) (2022-01-10) + + +### build + +* add date-picker-dialog to exports ([07211b2](https://github.com/motss/app-datepicker/commit/07211b293a211e2b667b084c339b7e3f09c44195)) + + + +# [6.0.0-rc.5](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.4...v6.0.0-rc.5) (2022-01-10) + + +### chore + +* cleanup and update README ([c4b8858](https://github.com/motss/app-datepicker/commit/c4b8858697cd5afae9ed60f474466fd248977126)) +* update dependencies ([8b700c4](https://github.com/motss/app-datepicker/commit/8b700c43039e97180c18c34af7c0b615060457c1)) +* update dependencies ([d5ac511](https://github.com/motss/app-datepicker/commit/d5ac511076fb9afcf3d0353b25df3e764bf76aa7)) + + + +# [6.0.0-rc.4](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.3...v6.0.0-rc.4) (2021-12-14) + + +### chore + +* migrate to use simple-git-hooks ([6a0d7e7](https://github.com/motss/app-datepicker/commit/6a0d7e7ef21d311618c4250a7c9286104aee99e4)) +* minor update ([5eaba03](https://github.com/motss/app-datepicker/commit/5eaba03f5c6bf3966b9b8f66a27ac347a4905668)) +* sort package.json ([30aee3e](https://github.com/motss/app-datepicker/commit/30aee3e5cf7d5370662deb78cd451b1f0f0c6622)) +* update dependencies ([d8f219e](https://github.com/motss/app-datepicker/commit/d8f219ebc025032c2412d62189f86203298adf66)) +* update dependencies ([5f57e54](https://github.com/motss/app-datepicker/commit/5f57e54bac3d8cf177308f73147ceebbcb3edee4)) +* update dependencies ([44fe450](https://github.com/motss/app-datepicker/commit/44fe450caa712058036306205286607c003b7cf5)) + +### feat + +* implement DatePickerDialogDialog for extensible slot for input ([e493bfb](https://github.com/motss/app-datepicker/commit/e493bfbea2673474d50f8f81bfe65398845058b5)) + +### refactor + +* fixing all FIXMEs ([67fc88b](https://github.com/motss/app-datepicker/commit/67fc88b0fccb5164e95f0b2c95208b6a5c79f9ca)) + +### test + +* add tests for warnUndefinedElement with hanbi for stubbing methods ([1f92479](https://github.com/motss/app-datepicker/commit/1f9247984a3db3b6d1487c23a8e30767d5cdee5a)) +* fix failed tests on optional max and always override min and max ([6685f4a](https://github.com/motss/app-datepicker/commit/6685f4ac39027d5cf20bd73c13fbc2b91b2e4d2f)) +* fix tests after updating DatePickerDialogBase to use ShadowDOM ([f449d2a](https://github.com/motss/app-datepicker/commit/f449d2ad517df4a083333d304cb62d98ef10d34f)) +* try to fix test ([b3a3a53](https://github.com/motss/app-datepicker/commit/b3a3a5318c9db9a7dd2770704598fcafece4354d)) + + + +# [6.0.0-rc.3](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.2...v6.0.0-rc.3) (2021-11-27) + + +### chore + +* add nano-staged to fix all linting issues in staged changed ([3239293](https://github.com/motss/app-datepicker/commit/3239293f77dc931476966bf49cbbddc9abc3f826)) +* update dependencies ([db68ed4](https://github.com/motss/app-datepicker/commit/db68ed424c41f92126b8636074b87cba2d06fb7c)) +* update dependencies ([c8f2e6e](https://github.com/motss/app-datepicker/commit/c8f2e6e9c550439db61ccb599b99df51bdbe793f)) +* update dependencies ([a0b49b9](https://github.com/motss/app-datepicker/commit/a0b49b941a7969cb5be0075c88f4f462242909e5)) + +### feat + +* add valueAsDate and valueAsNumber in DatePickerInput ([c46f8d1](https://github.com/motss/app-datepicker/commit/c46f8d15b39138735729db72c0b11be5ac9f293b)) +* close picker when focus is outside of DatePickerInput ([5a10623](https://github.com/motss/app-datepicker/commit/5a106236302eb29bde2067d0b82b4e128b58404b)) +* implement AppDatePickerDialog ([4d41bba](https://github.com/motss/app-datepicker/commit/4d41bbaf5dd90f68be97520458c528c979bf9d8e)) + +### fix + +* fix @material/mwc-dialog closes unexpectedly for all Enter keys ([3951f86](https://github.com/motss/app-datepicker/commit/3951f8623f2655829ac66212b9b4cc16624e11a7)) + +### refactor + +* implement .fire() to replace dispatchCustomEvent helper ([c411e13](https://github.com/motss/app-datepicker/commit/c411e132266f1d380af8ae29737f1e63d09df2f5)) +* minor update in date picker input ([b4609b6](https://github.com/motss/app-datepicker/commit/b4609b6c331543bba18d8f400e6d2b2a43d2ffba)) +* support Escape key to close DatePickerInput ([d706c0c](https://github.com/motss/app-datepicker/commit/d706c0c40476609006590e749af473dd5f1a8747)) + +### test + +* add tests for AppDatePickerDialog ([a11a61a](https://github.com/motss/app-datepicker/commit/a11a61a24238ef68ffc6631af43a1b0a58613354)) +* add tests for AppDatePickerInput ([a6d940e](https://github.com/motss/app-datepicker/commit/a6d940ef1b59f0bf09afe0da489c0967eb5f8a30)) +* add tests for AppDatePickerInputSurface ([8f11e49](https://github.com/motss/app-datepicker/commit/8f11e495ef79b43ba2f9618e707c19b7cb5ec1bb)) +* fix test failing in Firefox due to a bug ([220abd0](https://github.com/motss/app-datepicker/commit/220abd0c016e29b42c8dfa79f9369ab9a09f6e9e)) +* improve tests ([d5eed5d](https://github.com/motss/app-datepicker/commit/d5eed5dac1c79a4eb863fd1ca5cf3c53b4857794)) + + + +# [6.0.0-rc.2](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.1...v6.0.0-rc.2) (2021-11-14) + + +### chore + +* update dependencies ([0c2a7ba](https://github.com/motss/app-datepicker/commit/0c2a7bacf3d6f473dae22fb23cf07fd4f5d13cb4)) +* update package.json ([b4c6b79](https://github.com/motss/app-datepicker/commit/b4c6b79e9df1cf6c46345842bc72e4169c128ae9)) + + + +# [6.0.0-rc.1](https://github.com/motss/app-datepicker/compare/v6.0.0-rc.0...v6.0.0-rc.1) (2021-11-11) + + +### refactor + +* update config ([b0aa13f](https://github.com/motss/app-datepicker/commit/b0aa13fc2fc2b3d32ff5464ac45aee7b2d94b122)) + + + +# [6.0.0-rc.0](https://github.com/motss/app-datepicker/compare/v4.5.1...v6.0.0-rc.0) (2021-11-11) + + +### chore + +* add post-commit husky hook ([4766348](https://github.com/motss/app-datepicker/commit/476634887a1d8aa19e02900596a96a7b5af2a50e)) +* cleanup ([cb1f081](https://github.com/motss/app-datepicker/commit/cb1f081cab804e6c2dd5802dac1f99eb1b6afe08)) +* cleanup ([6858944](https://github.com/motss/app-datepicker/commit/6858944c42786f636cb29ebf41277cb74ce11c9c)) +* cleanup ([46fb626](https://github.com/motss/app-datepicker/commit/46fb62648b9adfdd7ff2c352183e0490d917071c)) +* commit husky script ([615d4fb](https://github.com/motss/app-datepicker/commit/615d4fbf5d844ae567667604e5b73f97b07013eb)) +* complete setup ([d1b5c91](https://github.com/motss/app-datepicker/commit/d1b5c911f75d548faa1d67e8f613149d3c9e956b)) +* initial commit ([c738b2b](https://github.com/motss/app-datepicker/commit/c738b2b25d926915c79b7a4a407ae544afe1fae2)) +* minor update ([2e155d6](https://github.com/motss/app-datepicker/commit/2e155d6ace0a0dfff0d9bc474fbac8aab864d647)) +* npm x husky ([7ffd134](https://github.com/motss/app-datepicker/commit/7ffd13428605cf834e0838ccbb87a095167ddae8)) +* remove --no when running npm x ([5fd640e](https://github.com/motss/app-datepicker/commit/5fd640e39cde6bafde36cc5f398be5ea9f2660d2)) +* remove husky install ([b4ab1c9](https://github.com/motss/app-datepicker/commit/b4ab1c9b71e7d955f26c110b303a857ecd510e95)) +* remove whitespace in swipe-tracker folder name ([24ae97f](https://github.com/motss/app-datepicker/commit/24ae97fee5c443fc74b1f8e162d995543ceb4f81)) +* rename element names ([9e49ba5](https://github.com/motss/app-datepicker/commit/9e49ba559be4c3db8b15823c5bd58f515a3aeecf)) +* rename to actual web component's name ([c5d35b0](https://github.com/motss/app-datepicker/commit/c5d35b06a314c9693238b40a50a3bc1cc0f90dd6)) +* sort package.json ([b9b2e9c](https://github.com/motss/app-datepicker/commit/b9b2e9cea846248f46ce99ecb88a452a79eafc6d)) +* update ci scripts ([0ed6a5a](https://github.com/motss/app-datepicker/commit/0ed6a5ac5f88a728d25c2058711cd23f25420652)) +* update dependencies ([cca8df7](https://github.com/motss/app-datepicker/commit/cca8df7b492597b984d25c874565566f1e9dfd58)) +* update dependencies ([6fc3476](https://github.com/motss/app-datepicker/commit/6fc3476aeee90199074ce8852ce6ae591b43d723)) +* update dependencies ([ab32816](https://github.com/motss/app-datepicker/commit/ab32816f8c2db9b8b83aa740835cc580f731c465)) +* update dependencies ([5e77440](https://github.com/motss/app-datepicker/commit/5e77440c6371bb4760fff3a411949dbb385a5f6c)) +* update dependencies ([5829558](https://github.com/motss/app-datepicker/commit/58295582a33f743f2cb4cc3f99acdd4e95209a41)) +* update dependencies ([eb2ca4b](https://github.com/motss/app-datepicker/commit/eb2ca4bc5117ee55b46e8b2bca9a52c7f20a0634)) +* update dependencies ([d69fa5f](https://github.com/motss/app-datepicker/commit/d69fa5fefbb9cec7b906b771475ffe587ae272ee)) +* update dependencies ([d122c12](https://github.com/motss/app-datepicker/commit/d122c128048d9ecb2facc1b20de51728e89362d4)) +* update dependencies ([a7353b5](https://github.com/motss/app-datepicker/commit/a7353b57f9feb76dd34084c47a94c80255695f05)) +* update dependencies ([488203b](https://github.com/motss/app-datepicker/commit/488203bd60260b20455a1f7367e69f1c8ad144ee)) +* update dependencies ([dbf97fa](https://github.com/motss/app-datepicker/commit/dbf97fa98ab2f3635d35565b41e80bfa80962665)) +* update dependencies ([c4f4a85](https://github.com/motss/app-datepicker/commit/c4f4a85d8238ac10bd68db4b208155be1831f03a)) +* update dependencies ([45ae3ac](https://github.com/motss/app-datepicker/commit/45ae3ac3891a30479203890c62fd1b76e9d16841)) +* update dependencies ([393ad47](https://github.com/motss/app-datepicker/commit/393ad47165977a079c84d67df4445cda86e0c00e)) +* update dependencies ([98e111b](https://github.com/motss/app-datepicker/commit/98e111be808263a045fc6bdb9a36d418a78ea960)) +* update dependencies ([952a7ed](https://github.com/motss/app-datepicker/commit/952a7edcc647bbe87dee673c85295108fcc9a7cb)) +* update dependencies ([190167d](https://github.com/motss/app-datepicker/commit/190167d09fee8f36a0cfe831953d37e5b002fdd7)) +* update dependencies ([24588b6](https://github.com/motss/app-datepicker/commit/24588b682b3f7e17c61a127715248537588aa58f)) +* update dependencies ([f94bc4c](https://github.com/motss/app-datepicker/commit/f94bc4c206b7665e172763ed5d36ab9447843eaf)) +* update dependencies ([0426730](https://github.com/motss/app-datepicker/commit/0426730d68187876c740e54402e399184d0df587)) +* update dependencies ([e05f26e](https://github.com/motss/app-datepicker/commit/e05f26e414981adc297876adf9f91d450cd1d88f)) +* update dependencies ([4b1d1a4](https://github.com/motss/app-datepicker/commit/4b1d1a4ce405e6d59a32fc7092456f72c767082b)) +* update dependencies ([8b50214](https://github.com/motss/app-datepicker/commit/8b5021469a826203991a4df08f1f1c7e61a3d629)) +* update dependencies ([1fc63e9](https://github.com/motss/app-datepicker/commit/1fc63e94dad9c03d13cc6eb9d5253508c3a386a9)) +* update dependencies ([2457ae7](https://github.com/motss/app-datepicker/commit/2457ae7207fcf348fb13443881f68a9dcf340ce9)) +* update dependencies and update imports ([bcd2470](https://github.com/motss/app-datepicker/commit/bcd2470799cda245dc2ba916d9dd7b28a5ce9660)) +* update package.json ([d4122bd](https://github.com/motss/app-datepicker/commit/d4122bd460c99061cdd37315c13f60dcaa2d93e2)) +* update script ([2fe1b13](https://github.com/motss/app-datepicker/commit/2fe1b13b952c3a996ce66abd7fee9d343ff457bf)) +* use npm x ([cda0596](https://github.com/motss/app-datepicker/commit/cda0596c9af6dfc23790b942a6e17135ff9d072b)) + +### ci + +* always use ubuntu ([14fb289](https://github.com/motss/app-datepicker/commit/14fb289b750234bd9d217613ea10966d10990b87)) + +### feat + +* add calendar stylings ([c3f408f](https://github.com/motss/app-datepicker/commit/c3f408feed5798a2fe45f9fa881db94827698eb0)) +* add clampValue with tests ([49d3eac](https://github.com/motss/app-datepicker/commit/49d3eacf18f4a34f2df385800b15053a912ab1ca)) +* add multi calendars ([473592d](https://github.com/motss/app-datepicker/commit/473592d747025cae37dae4fdfccdece56162298e)) +* add stylings ([bc0f6c5](https://github.com/motss/app-datepicker/commit/bc0f6c5a6c63722ad51b80d4e8ddec360d305418)) +* add swipe-tracker ([984da8f](https://github.com/motss/app-datepicker/commit/984da8fc9505614780be772e5b9dba32da94b480)) +* add year grid, year grid button ([3a9dcfc](https://github.com/motss/app-datepicker/commit/3a9dcfcf2d52c5c3a31383c96cf9ba53e2788b60)) +* adding initial layout with customized labels ([aca077f](https://github.com/motss/app-datepicker/commit/aca077f60233285f32edd9c1d0a85d19bb281a84)) +* implement DatePickerInput ([c785fb7](https://github.com/motss/app-datepicker/commit/c785fb741170d3f27926dbfcc3e975e7addf80b7)) +* implement DatePickerInputSurface ([71eeb1a](https://github.com/motss/app-datepicker/commit/71eeb1a1cb6072b7fd75c5b32d06db67e3494233)) +* refactor code of month calendar ([50efc47](https://github.com/motss/app-datepicker/commit/50efc4725abc18f854902c72ee0f150a6ccc0837)) + +### fix + +* fix lint command ([305168b](https://github.com/motss/app-datepicker/commit/305168bbac4b37463fe2080df44816e2e773788f)) +* fix selected date update logic ([b61f3f0](https://github.com/motss/app-datepicker/commit/b61f3f0498508e7be966c1469aa05361f54bb3a0)) +* improve keyboard support and various bug fixes on navigation ([3f1445e](https://github.com/motss/app-datepicker/commit/3f1445e4aa0adab2774b0428a9ad0245f24e6098)) +* update husky commit-msg hook ([d988e55](https://github.com/motss/app-datepicker/commit/d988e55d0ad06d04f7e10b2a6d794007e6e95e58)) + +### refactor + +* add focusElement() helper ([f07c919](https://github.com/motss/app-datepicker/commit/f07c9199ba43b4acd70e4848dac3cb92bc7fff51)) +* add keyboard support in year grid ([c8ec5a9](https://github.com/motss/app-datepicker/commit/c8ec5a95ac393edab92ce8b0293ae8e251a77274)) +* code refactor in mixins ([601d10c](https://github.com/motss/app-datepicker/commit/601d10c051cd6ab361ea38060959f0ce9db4dc1c)) +* code refactoring ([69eedab](https://github.com/motss/app-datepicker/commit/69eedabdd741552d412f09833bcefdea94b34bda)) +* drop focused date in favor of selected date and minor update ([08fc85c](https://github.com/motss/app-datepicker/commit/08fc85c6f071f7f8063919ed1ca3ffb28601ceff)) +* improve code ([d4321bf](https://github.com/motss/app-datepicker/commit/d4321bf34784e4061af64fe4b72b4def0c05ae04)) +* improve keyboard navigation in year grid ([8ecbf25](https://github.com/motss/app-datepicker/commit/8ecbf25799505de8e42b795dd588f70651b3c294)) +* improve keyboard support in DatePickerInput ([e51136e](https://github.com/motss/app-datepicker/commit/e51136efe269a4cb02437e855430dea2bfb96734)) +* improve label ([970c2b3](https://github.com/motss/app-datepicker/commit/970c2b33dc9ddbdff34abff1171273968a48b3fb)) +* minor rename ([873cd06](https://github.com/motss/app-datepicker/commit/873cd06385c3789c21f3a9d0327672ca9ed8d7f4)) +* minor update ([ae387ac](https://github.com/motss/app-datepicker/commit/ae387ac7a14ab8bb2645589f186a2e50def34cfa)) +* minor update ([0812cae](https://github.com/motss/app-datepicker/commit/0812caeab1705c827653180174a9ec17ae1d3927)) +* minor update ([4188c5f](https://github.com/motss/app-datepicker/commit/4188c5fc511501adee1d792b7cdcbae8d0f39769)) +* minor update ([e02e768](https://github.com/motss/app-datepicker/commit/e02e768adcf286e1f1861c7f7f5a7608ac6eb969)) +* minor update and cleanup to improve test coverage ([5b418eb](https://github.com/motss/app-datepicker/commit/5b418eb3ef7179f95bd758e5e2ba5e67ef90f11d)) +* minor update to support valueAsDate and valueAsNumber ([ec24740](https://github.com/motss/app-datepicker/commit/ec24740ea882840198f6186d8e7bc07aa1e47630)) +* optimize code ([dcc4d69](https://github.com/motss/app-datepicker/commit/dcc4d693ea03bb09ae4b1d07981120ec658e8b02)) +* refactor code around keyboard support and typings ([ed80808](https://github.com/motss/app-datepicker/commit/ed80808998872322b2c4a25b2e41f841d4932288)) +* refactor dateValidator, toResolvedDate then update tests ([1179798](https://github.com/motss/app-datepicker/commit/117979847fce3bc417c52933d35069dbabceaafb)) +* refactor min, max, value with clamping and update tests ([14915a0](https://github.com/motss/app-datepicker/commit/14915a0dbe5bc122bb23bec6350444548bf5061d)) +* refactor year grid button and add base stylings ([3619a7b](https://github.com/motss/app-datepicker/commit/3619a7b8a200cbbfb2cff84577a54cafba312217)) +* remove redundant code ([5662c0e](https://github.com/motss/app-datepicker/commit/5662c0efbc47d67edd7aec276acbdc4ab5593dc7)) +* remove unused element ([82c2be8](https://github.com/motss/app-datepicker/commit/82c2be800ee41887c726eaf8101933e283c2c3f6)) +* rename to toDayDiffInclusive with minor fix ([47a3a3b](https://github.com/motss/app-datepicker/commit/47a3a3bc1fc0acb96cf328a00eab572cc5c23722)) +* update code with sorted imports and adding calendars ([28395fc](https://github.com/motss/app-datepicker/commit/28395fc1e88a4f08de02b9bd2f3ec29754fcca77)) +* update focus logic in year grid ([c253e9e](https://github.com/motss/app-datepicker/commit/c253e9ee8f92dd7237552f77eebad4c884705bda)) +* update logic rendering navigation buttons ([4cda306](https://github.com/motss/app-datepicker/commit/4cda306e7a127c4eb14a63159fed8f7badcf7ffc)) +* use KeyboardEvent.key and add disabled state ([28771a7](https://github.com/motss/app-datepicker/commit/28771a78f5f008fe2a529a0e4112df1e6ba62479)) + +### style + +* add overscroll-behavior: contain for year grid view ([0c60ee9](https://github.com/motss/app-datepicker/commit/0c60ee9b5a7cc89bacd63c9f80758464576c1136)) +* fix stylings and focus selected year in year grid ([e6a9dba](https://github.com/motss/app-datepicker/commit/e6a9dbaaa72c97bd102f6e0a006cee6973e1b305)) +* minor update ([2276524](https://github.com/motss/app-datepicker/commit/2276524b55cca3cb02a51cb8f9fbc7537aacfe07)) +* update size with border in calendar ([854880f](https://github.com/motss/app-datepicker/commit/854880f62ddbc517983079f15e3d9e51f23ae9c9)) +* update styling in date picker ([e51aa08](https://github.com/motss/app-datepicker/commit/e51aa08f3bca27bb8faab548cc2d46476646a58a)) +* update year grid button style on hover, focus, today, selected ([b99105d](https://github.com/motss/app-datepicker/commit/b99105d98bb09d6c667c26ac1ef87528f84bb7e0)) + +### test + +* add more tests and remove uvu ([4a617f5](https://github.com/motss/app-datepicker/commit/4a617f595fa08db7110e387dd60bf72a663291e6)) +* add test for toResolvedDate ([bb649e5](https://github.com/motss/app-datepicker/commit/bb649e569765203cad2486f7b156f7371e967681)) +* add tests for AppDatePicker ([e120bb9](https://github.com/motss/app-datepicker/commit/e120bb918e6845e44a24beb0eb433512385725a7)) +* add tests for AppMonthCalendar ([232e276](https://github.com/motss/app-datepicker/commit/232e276df16ad8691facf43591d86f698ae23ae5)) +* add tests for AppYearGrid ([e16a139](https://github.com/motss/app-datepicker/commit/e16a13991dd20d040efe2bbe106db90ce3b506a8)) +* add tests for elements ([ae1d5cd](https://github.com/motss/app-datepicker/commit/ae1d5cd48a4e90b49959ed2bf27ad13dc70fe0ca)) +* add tests for focusElement ([e0c70d5](https://github.com/motss/app-datepicker/commit/e0c70d5e8e799fd48e3ffe6ce0b8d13e25aff884)) +* add tests for isInCurrentMonth ([dc95435](https://github.com/motss/app-datepicker/commit/dc954350af3424cb9909e14b7aa96cac9752f5de)) +* add tests for nullishAttributeConverter ([bf371e6](https://github.com/motss/app-datepicker/commit/bf371e61952f1581e5f7ff8987bb9bcfc83d3cf4)) +* add tests for splitString ([c7ee8f9](https://github.com/motss/app-datepicker/commit/c7ee8f9538835ec64c78203d5088378984f2da32)) +* add tests for toClosestTarget ([23e5479](https://github.com/motss/app-datepicker/commit/23e5479504b77cf785cecbb1b743d4f6ddb4384e)) +* add tests for toDateRange ([3f21db2](https://github.com/motss/app-datepicker/commit/3f21db2253e3d43e68ed58733f9d4baa85014dd6)) +* add tests for toDateString ([f16c64d](https://github.com/motss/app-datepicker/commit/f16c64d01e0c9ac891bded2beccff3be73cc567c)) +* add tests for toFormatters ([e7b8179](https://github.com/motss/app-datepicker/commit/e7b81793600d3a7ff609bd2db2021f2f396ad06b)) +* add tests for toMultiCalendars ([d9eec02](https://github.com/motss/app-datepicker/commit/d9eec02027feb1db99ad8b8b94b472ae5cf0ba67)) +* add tests for toNextSelectableDate ([18ea669](https://github.com/motss/app-datepicker/commit/18ea6697ecfbfe91978a187e0e831af08133bd0e)) +* add tests for toNextSelectedDate ([d06d0b8](https://github.com/motss/app-datepicker/commit/d06d0b8a55c0a115d525cd97ee87996d5a6cb60d)) +* add tests for toNextSelectedYear with minor improvements ([4af280b](https://github.com/motss/app-datepicker/commit/4af280b379c238a2dfa19b3a6858525cc3e5e847)) +* add tests for toYearList, fix toDateRange to return number of days ([56c8404](https://github.com/motss/app-datepicker/commit/56c84040a2f907ed2297d598f22fb8715661cd9e)) +* improve tests and fix date range behavior ([34e07cd](https://github.com/motss/app-datepicker/commit/34e07cd5b88082a4a855dea0fe2e81548df0c40c)) +* try to add tests for helpers ([9a2ff8d](https://github.com/motss/app-datepicker/commit/9a2ff8d487e8309599cd478a7b7f126122cfb670)) +* update tests ([61c2347](https://github.com/motss/app-datepicker/commit/61c2347d21129d3f3aae0b1c7c183494593508ea)) +* update tests ([ff07461](https://github.com/motss/app-datepicker/commit/ff074613b22a01aed2b37f49005fa47bd712e652)) +* update tests ([c4fc0a9](https://github.com/motss/app-datepicker/commit/c4fc0a960577b43e000e4e4bab21dd0b93b3012a)) +* update tests due to code change ([3411afb](https://github.com/motss/app-datepicker/commit/3411afb9e635256685c04a93ee8740ceaadb901f)) + + + +## [4.5.1](https://github.com/motss/app-datepicker/compare/v4.5.0...v4.5.1) (2021-01-16) + + +### chore + +* Improve exports in package.json ([d59dcb5](https://github.com/motss/app-datepicker/commit/d59dcb5f171b50bd0ad1e5882571285af60a462f)) + + + +# [4.5.0](https://github.com/motss/app-datepicker/compare/v4.4.1...v4.5.0) (2021-01-16) + + +### chore + +* Update nodemod ([0270ac0](https://github.com/motss/app-datepicker/commit/0270ac03b79e8e57b2b2692541c03796a05fd77a)) +* Update packages ([fcd672c](https://github.com/motss/app-datepicker/commit/fcd672c113046d1deaf915c7974da7ddda6a2acd)) + +### fix + +* Override all button's type to be 'button', fix #196 ([22f47c4](https://github.com/motss/app-datepicker/commit/22f47c4f2c6c83c630053b7529ca42f0edf7c6a3)), closes [#196](https://github.com/motss/app-datepicker/issues/196) + +### test + +* Fix tests ([f2d3a2e](https://github.com/motss/app-datepicker/commit/f2d3a2eda5ca4b08bd246798e5ea663d16eece91)) +* Fix tests ([b86ed17](https://github.com/motss/app-datepicker/commit/b86ed1777c174465a954218aedcc9083a5412548)) + + + +## [4.4.1](https://github.com/motss/app-datepicker/compare/v4.4.0...v4.4.1) (2020-12-12) + + + + +# [4.4.0](https://github.com/motss/app-datepicker/compare/v4.4.0-2...v4.4.0) (2020-12-12) + + + + +# [4.4.0-2](https://github.com/motss/app-datepicker/compare/v4.4.0-1...v4.4.0-2) (2020-12-12) + + +### ci + +* Minor update to CI publish script ([4f4a7c3](https://github.com/motss/app-datepicker/commit/4f4a7c3062f99a5fd38dd69472af3b4d71a20a6f)) + + + +# [4.4.0-1](https://github.com/motss/app-datepicker/compare/v4.4.0-0...v4.4.0-1) (2020-12-12) + + +### ci + +* Fix CI scripts ([7ab50f8](https://github.com/motss/app-datepicker/commit/7ab50f82eea77b88678135b3bec2b02069064209)) + + + +# [4.4.0-0](https://github.com/motss/app-datepicker/compare/v4.3.0...v4.4.0-0) (2020-12-12) + + +### chore + +* Revert "4.4.0" ([bef6f04](https://github.com/motss/app-datepicker/commit/bef6f04c47269d02ce1d2109e993afb58d5951f5)) +* Update packages add simple index.html ([6631eab](https://github.com/motss/app-datepicker/commit/6631eabd8d7a28bf35861889c3199317bb1329ed)) + +### ci + +* Update CI script to drop deprecated command ([3c5c235](https://github.com/motss/app-datepicker/commit/3c5c235404b45b9e6761221a951193d7bf959031)) +* Update node version in CI, remove type=module in package.json ([26010c0](https://github.com/motss/app-datepicker/commit/26010c0b3d919fd7b1a528fad4ca0d1d2bc6528b)) + + + +# [4.3.0](https://github.com/motss/app-datepicker/compare/v4.2.0...v4.3.0) (2020-10-09) + + +### chore + +* Update dependencies ([e3d80a0](https://github.com/motss/app-datepicker/commit/e3d80a0db367ec13dd41aa195a4abe7bb30d42bd)) +* Update dependencies ([5adc928](https://github.com/motss/app-datepicker/commit/5adc928b6d7c7231bbedbb3b099d5811dc8ca0cb)) + +### doc + +* Add Q&A section ([6e8bf82](https://github.com/motss/app-datepicker/commit/6e8bf824d6d3e48d9f895d850fde0644dc873675)) +* Fix demo link ([6a2e82b](https://github.com/motss/app-datepicker/commit/6a2e82b8ba10cf4a27342599c51ee62cb2480a96)) + + + +# [4.2.0](https://github.com/motss/app-datepicker/compare/v4.1.0...v4.2.0) (2020-09-23) + + +### chore + +* Update dependencies ([c4b69fe](https://github.com/motss/app-datepicker/commit/c4b69fef82f36934c40fd6f3073c7ba1727c1854)) + + + +# [4.1.0](https://github.com/motss/app-datepicker/compare/v4.0.0...v4.1.0) (2020-05-10) + + +### chore + +* Update dependencies ([eea7e8a](https://github.com/motss/app-datepicker/commit/eea7e8a255a36db8e8206839e9eb77755b3ed95e)) + +### feat + +* Add Funding page ([78f3b90](https://github.com/motss/app-datepicker/commit/78f3b9015018d9ac44016aa428580cfb42941fa9)) + + + +# [4.0.0](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.55...v4.0.0) (2020-04-02) + + +### chore + +* Update dependencies ([ec17e61](https://github.com/motss/app-datepicker/commit/ec17e616f436a3636882048100ccadd37817a012)) + +### doc + +* Update README ([55986ba](https://github.com/motss/app-datepicker/commit/55986ba1d9bb2722560e4c223cf71c2d98c191bb)) + +### test + +* Fix broken test ([e9090de](https://github.com/motss/app-datepicker/commit/e9090de0f348bc41e29079f8dc3bc4f8367452a0)) + + + +# [4.0.0-rc.55](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.54...v4.0.0-rc.55) (2020-03-30) + + +### refactor + +* Use supportsPassiveEventListener from @material/mwc-base/utils ([daf2669](https://github.com/motss/app-datepicker/commit/daf26695e634946da1a724e815d5ebefa9f7a499)) + + + +# [4.0.0-rc.54](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.53...v4.0.0-rc.54) (2020-03-28) + + +### ci + +* Fix equality check ([c3b725d](https://github.com/motss/app-datepicker/commit/c3b725d32b66c1b712850dd0e5b567dedb3b2c1a)) +* Update CI scripts to skip build for version tagging commit ([453aa90](https://github.com/motss/app-datepicker/commit/453aa9086698ea68892cb205cdad1e364c9adf66)) + +### fix + +* Fix table caption being jumpy on Safari, update dependencies ([8df67e6](https://github.com/motss/app-datepicker/commit/8df67e6f748afa487e9bbcca9d362dc9602fdb44)) + + + +# [4.0.0-rc.53](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.52...v4.0.0-rc.53) (2020-03-26) + + +### chore + +* Downgrade to dependencies listed in ec32033 ([0418e16](https://github.com/motss/app-datepicker/commit/0418e167f1d301021e84f67de00969547acb4551)) +* Rebuild lockfile ([253ae89](https://github.com/motss/app-datepicker/commit/253ae8906a20cd3eafb1cd4519e1f88112193c02)) +* Update dependencies ([3cee5aa](https://github.com/motss/app-datepicker/commit/3cee5aa22776830c1709d2505fcd9c5d4415fb20)) + +### ci + +* Accessing env.* is not supported at GA's job level ([08ba85b](https://github.com/motss/app-datepicker/commit/08ba85b5b1acee57ddd316b2b7063b3318960ca8)) +* Add more conditions to skip CI ([5daf930](https://github.com/motss/app-datepicker/commit/5daf93036f11fb508412b6d45715b4d72bcef2e8)) +* All passed surprisingly ([22a63cb](https://github.com/motss/app-datepicker/commit/22a63cbe62cd89cbf66fcd0ef75f37feeef0d9d1)) +* Almost there, server returns en-GB as locale ([4be9bf6](https://github.com/motss/app-datepicker/commit/4be9bf62cf4d8b5d79361a94bdc78e663fa95c84)) +* Call done() when async task finishes ([c334766](https://github.com/motss/app-datepicker/commit/c3347661047dc7cc25e7e3300c9097e702a0cbc5)) +* Checking browser's resolvedOptions() ([27f5eb3](https://github.com/motss/app-datepicker/commit/27f5eb33b2f982b7208e941b89cfef9b3001f784)) +* Fix Check Build again ([2e23e56](https://github.com/motss/app-datepicker/commit/2e23e565edb21a5dbe757a2f51b7f7b165b4e054)) +* Fix typo ([8302f2d](https://github.com/motss/app-datepicker/commit/8302f2dd8cf8da73f8f41e8e33ca2bb75fb4b66e)) +* Intl.DateTimeFormat fails on Firefox ([536193b](https://github.com/motss/app-datepicker/commit/536193b517b5f3cc15c1cbb260e5413c8a422b41)) +* Minor renaming and add publish.yml ([26524cd](https://github.com/motss/app-datepicker/commit/26524cd859c6410083cb178efcbb2ea16ae04dd1)) +* npx envinfo failed on Windows ([17601e7](https://github.com/motss/app-datepicker/commit/17601e73a10d982aedfa03fddbd73c374e5cdfa2)) +* Remove artifact steps ([e4fb8f6](https://github.com/motss/app-datepicker/commit/e4fb8f6efc0cf23583307d3da6237436a3f5d9d0)) +* Run tests on local and SL ([7439eb8](https://github.com/motss/app-datepicker/commit/7439eb898c105498f484b56d8411bbc6f8576729)) +* Setup missing env for SL ([ed48420](https://github.com/motss/app-datepicker/commit/ed48420dc13cf235cde87959a81eb2059a151975)) +* Setup node with specific version ([3797235](https://github.com/motss/app-datepicker/commit/3797235d77cc596420fe954d67ad75610e1b011c)) +* Trying not to upgrade global npm ([d62974c](https://github.com/motss/app-datepicker/commit/d62974cb934b03b3611f6bb408aa44be54b730c6)) +* Trying to debug more ([122c1d0](https://github.com/motss/app-datepicker/commit/122c1d0657e875a11950eb3e022a1bba73c9bc4c)) +* Trying to find out if browser in Github Actions supports full ICU ([221e4c5](https://github.com/motss/app-datepicker/commit/221e4c54532eee7b3f0b16a738e35544a7b31a42)) +* Trying to find out the cause ([ca1ae47](https://github.com/motss/app-datepicker/commit/ca1ae476e5c44c4bdaad290379d9548dbb95ea55)) +* Trying to find out why CI fails ([0c085f9](https://github.com/motss/app-datepicker/commit/0c085f96ac9397c7c83378660e2bd809d718dccc)) +* Trying to use Github Actions ([c0d24aa](https://github.com/motss/app-datepicker/commit/c0d24aa1e1c63cb0436a0243eec62512e0005e1e)) +* Update CI script ([a1e2fe7](https://github.com/motss/app-datepicker/commit/a1e2fe799fe6cbd462e70440fb449d3b681bc877)) +* Update CI script that fails on Windows due to ls command ([433cf19](https://github.com/motss/app-datepicker/commit/433cf19c6f413117295a82a1c8903ccafd580b1a)) +* Use bash as shell ([bdd34cb](https://github.com/motss/app-datepicker/commit/bdd34cb209ec2e3ba4bc0c2b715324df1c41c1a9)) +* Use env keyword ([e9bfc01](https://github.com/motss/app-datepicker/commit/e9bfc0107743a3e0a0efa2e5fc34aa7312e1ee46)) + +### doc + +* Add GitHub Actions badges ([0748d98](https://github.com/motss/app-datepicker/commit/0748d984334dadbdddf9e0ebdc60865357a5e2e1)) + +### fix + +* Minor CSS update, fix tag not closing properly, update typing ([24b6c69](https://github.com/motss/app-datepicker/commit/24b6c698844302e20328285787589f8a530ffebf)) + +### test + +* Default locale to 'en-US' on all browsers ([693052b](https://github.com/motss/app-datepicker/commit/693052be8152a3044c927bc2d21636aa39478d1f)) + + + +# [4.0.0-rc.52](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.51...v4.0.0-rc.52) (2020-03-15) + + +### chore + +* Update dependencies ([83b3778](https://github.com/motss/app-datepicker/commit/83b3778f74249ef41786036006dcc7f85d82d16a)) + +### fix + +* Update dependencies to fix disabled dates not updating correctly ([c178968](https://github.com/motss/app-datepicker/commit/c178968167955a88d56c78203978322f28acd8ee)) + + + +# [4.0.0-rc.51](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.50...v4.0.0-rc.51) (2020-03-14) + + +### refactor + +* Only focus year selector button when switching between views ([200d0f0](https://github.com/motss/app-datepicker/commit/200d0f06a8823bad61575b19a7b6a898a4307cc0)) + + + +# [4.0.0-rc.50](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.49...v4.0.0-rc.50) (2020-03-09) + + +### fix + +* Fix tabindex does not update accordingly with focused date ([02ff148](https://github.com/motss/app-datepicker/commit/02ff148cf9de17c8df496564729ce9100d8dbc17)) + + + +# [4.0.0-rc.49](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.48...v4.0.0-rc.49) (2020-03-08) + + +### chore + +* Upgrade dependencies, reduce maxInstances ([fa091fc](https://github.com/motss/app-datepicker/commit/fa091fca0e1327c6a7fd2ecffc24f798d785f87a)) + +### feat + +* Add `alwaysResetValue` property, update tests and doc, close #176 ([7622e92](https://github.com/motss/app-datepicker/commit/7622e92c5e3cf78acd0f29f31166e2f046351a89)), closes [#176](https://github.com/motss/app-datepicker/issues/176) + + + +# [4.0.0-rc.48](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.47...v4.0.0-rc.48) (2020-03-02) + + +### chore + +* Upgrade dependencies ([68fc5d9](https://github.com/motss/app-datepicker/commit/68fc5d93154774e27f5fbb0301ffee78c093d484)) + +### ci + +* Try using circleci/node:12-browsers Docker image ([27b447b](https://github.com/motss/app-datepicker/commit/27b447bb1106ea5d129f45044c23bf22b095d467)) +* Trying the optimal value of maxInstances ([5567540](https://github.com/motss/app-datepicker/commit/5567540cf5ad758599d8663317bb9363a83a86d1)) +* Trying to bump maxInstances ([b62323b](https://github.com/motss/app-datepicker/commit/b62323bd274f5e088e6f3bb60f75cc915b301272)) +* Trying to find the optimal maxInstances ([2ef7911](https://github.com/motss/app-datepicker/commit/2ef79110962642117d6bcfa4966d9847cc9035e7)) +* Trying to fix failed CI, use node@13 and decrease maxInstances ([7445099](https://github.com/motss/app-datepicker/commit/7445099192370a26fb103afc2e7783f5c36f84ee)) +* Trying to increase maxInstances ([d174da4](https://github.com/motss/app-datepicker/commit/d174da4648b0a729c8d4115ed5c293fa7ee1fc9c)) + +### feat + +* Scrollbar thumb customization in year list view, close #173 ([69a32da](https://github.com/motss/app-datepicker/commit/69a32da38d7386ca3461bc08473f4ad766e61b8c)), closes [#173](https://github.com/motss/app-datepicker/issues/173) + +### fix + +* Disabled day cannot be focused ([76b34d0](https://github.com/motss/app-datepicker/commit/76b34d056368f208c272dbc880d06b86aaf7e12e)) +* Various bug fixes ([ffd3609](https://github.com/motss/app-datepicker/commit/ffd360997ebf93733e557bfc7a9a04193b3736c5)) + + + +# [4.0.0-rc.47](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.46...v4.0.0-rc.47) (2020-02-25) + + +### chore + +* Upgrade dependency ([a7e361c](https://github.com/motss/app-datepicker/commit/a7e361c812c71d9c7ce504942299e71de99f9956)) + +### refactor + +* Drop private class fields ([ee690e7](https://github.com/motss/app-datepicker/commit/ee690e7be4846f8091eed0db000757b53a73a11d)) +* Minor code refactoring ([8ff06ff](https://github.com/motss/app-datepicker/commit/8ff06ff0e9c2cc744270651a013f7e17b7d64d07)) + + + +# [4.0.0-rc.46](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.45...v4.0.0-rc.46) (2020-02-24) + + +### feat + +* Support ::part() in dialog, update tests and doc with ::part() ([6f8f5bb](https://github.com/motss/app-datepicker/commit/6f8f5bbd1d1b89f39d841c06de728146b4ce9152)) +* Support ::part() which enables by default in stable FF and Chrome ([b7d4cea](https://github.com/motss/app-datepicker/commit/b7d4cea9cfd3428c5139076f48a4c1b1ca163aa6)) + +### fix + +* Fix calendar day not centered, fix #169, fix #172 ([da297a5](https://github.com/motss/app-datepicker/commit/da297a5ce34cf2c71ce94d8065ca3228e3747bc4)), closes [#169](https://github.com/motss/app-datepicker/issues/169) [#172](https://github.com/motss/app-datepicker/issues/172) +* Handle mouseleave event when dragging calendar, close #174 ([30de2eb](https://github.com/motss/app-datepicker/commit/30de2eb944f806c5cfd4f2cdbec0150be5fec8a1)), closes [#174](https://github.com/motss/app-datepicker/issues/174) + +### refactor + +* Refactor animation and NPM scripts ([25c38ba](https://github.com/motss/app-datepicker/commit/25c38ba4c9eaa03e50937cbff709aac621c59a4f)) +* Use Generic in findShadowTarget() instead of using as keyword ([23f6f66](https://github.com/motss/app-datepicker/commit/23f6f669515a84bfd2e8542679702992667a99c7)) + +### test + +* Fix test command for running tests on Sauce Labs ([2f7c649](https://github.com/motss/app-datepicker/commit/2f7c64920bf168b71b782772942cdb2e65b28d85)) +* Fix tests due to layout change, use import type in TS3.8 ([fd4f124](https://github.com/motss/app-datepicker/commit/fd4f12460f45e42c9dbca061b9c78a5189af351b)) + + + +# [4.0.0-rc.45](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.44...v4.0.0-rc.45) (2020-02-16) + + +### fix + +* Add --app-datepicker-focused-year-bg-color, fix #170 ([49b4789](https://github.com/motss/app-datepicker/commit/49b4789b39dc475baa000deea251a70ca4c3a48e)), closes [#170](https://github.com/motss/app-datepicker/issues/170) + + + +# [4.0.0-rc.44](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.43...v4.0.0-rc.44) (2020-02-16) + + +### chore + +* Upgrade dependencies ([d6a5e5d](https://github.com/motss/app-datepicker/commit/d6a5e5d5ee19a449f5d7eb045ed495a42ad579e1)) + +### feat + +* Add clearLabel in dialog, minor code refactor, update tests ([e511de5](https://github.com/motss/app-datepicker/commit/e511de5d0dc6a79de80192730ab82c308a7ade2c)) + +### test + +* Enable all tests ([f1b29f0](https://github.com/motss/app-datepicker/commit/f1b29f0676dfadc6badee9d2c762b1940d885873)) +* Fix broken test, update screenshots ([a91072f](https://github.com/motss/app-datepicker/commit/a91072fe9c8a8bc4c5fceef498891bb6e5537f72)) + + + +# [4.0.0-rc.43](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.42...v4.0.0-rc.43) (2020-02-12) + + +### chore + +* Update dependencies ([7cf4e77](https://github.com/motss/app-datepicker/commit/7cf4e77b79db3b0db87a2be7e871dc67c96379f6)) +* Upgrade dependencies ([4de7069](https://github.com/motss/app-datepicker/commit/4de70692036c10b74c6438fa50d0d010404eafcb)) +* Upgrade dependencies && update pre-commit hook ([af5f527](https://github.com/motss/app-datepicker/commit/af5f52783ae326ccfdcfa6717ee9c795bbc8964f)) + +### feat + +* Add undefined custom elements for lazy definition ([788b475](https://github.com/motss/app-datepicker/commit/788b475c92d5d31f30a61171a805dd7ff9061dfd)) +* Re-enable improved dragging feature with revised tests ([fd9274e](https://github.com/motss/app-datepicker/commit/fd9274e911447cc30a0e4c8f82459d45583fe970)) + +### fix + +* Minor code refactor to simplify calendar dragging feature ([bb03f0f](https://github.com/motss/app-datepicker/commit/bb03f0fcefc95818db9817446d63ad62e6ea028b)) + +### test + +* Use ES2017 for testing as Edge 18 does not support {...a} ([9775b3b](https://github.com/motss/app-datepicker/commit/9775b3b608e159de6a292157ee3fbcfeabd00d46)) + + + +# [4.0.0-rc.42](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.41...v4.0.0-rc.42) (2020-02-05) + + +### chore + +* Update doc, remove unused demo and dependencies, upgrade deps ([67f57c8](https://github.com/motss/app-datepicker/commit/67f57c883c489af059f4af081f4d7a3d38dcff29)) + +### feat + +* Add `inline` property to render datepicker in inline mode ([c81640c](https://github.com/motss/app-datepicker/commit/c81640cd668024472940eac0e9eb660ef1918f2d)) + +### fix + +* Add missing husky for pre-commit checks, fix linting issues ([f7fb478](https://github.com/motss/app-datepicker/commit/f7fb478909b8efbc76a771e33fc39c7c0acfc216)) + +### test + +* Fix test failed on Safari ([d876496](https://github.com/motss/app-datepicker/commit/d87649638fcbe10f2037c671e8364a0543ba1461)) +* Simplify test ([220df30](https://github.com/motss/app-datepicker/commit/220df3062b2ca0d3de45a940175a08f4d0010bed)) + + + +# [4.0.0-rc.41](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.40...v4.0.0-rc.41) (2020-02-03) + + +### chore + +* Upgrade dependencies ([0ba04a2](https://github.com/motss/app-datepicker/commit/0ba04a24294b17f1f94ee181c72e3cffe67f63cc)) +* Upgrade dependencies ([f5c074b](https://github.com/motss/app-datepicker/commit/f5c074b4c0eb5feb485b42dabd64deac62fb5487)) + +### ci + +* Remove redundant Lint step ([95c7bd2](https://github.com/motss/app-datepicker/commit/95c7bd2d45c8b5941983da5c7642e132f8402e37)) + +### doc + +* Update doc on browsers support and use Edge 18 in CI for testing ([a424037](https://github.com/motss/app-datepicker/commit/a424037d4b6dbe226eae64eadd911c377c5dd943)) +* Update docs with latest events ([17ea421](https://github.com/motss/app-datepicker/commit/17ea421c2db0d4909e833fa521e84eed61656c48)) + +### feat + +* Add `datepicker-value-updated` when focused date updates, fix #165 ([cace473](https://github.com/motss/app-datepicker/commit/cace473db67722740a8e1f1101959b49f07972d0)), closes [#165](https://github.com/motss/app-datepicker/issues/165) + + + +# [4.0.0-rc.40](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.39...v4.0.0-rc.40) (2020-01-19) + + +### chore + +* Update dependencies ([4f453f5](https://github.com/motss/app-datepicker/commit/4f453f5c55b437c4dd311798653f576c723f5128)) + +### ci + +* Use latest node ([68fb5fe](https://github.com/motss/app-datepicker/commit/68fb5fe2560e5df0d2d5871fc8f8dacc0ebf757d)) + +### fix + +* Fix month not updated correctly when clicks and keyboard involve ([933174f](https://github.com/motss/app-datepicker/commit/933174f58d8c24eaa2cd34793fbc6f1bd879b7df)) + +### test + +* Add tests for edge cases where keyboards + mouses are used ([e69764b](https://github.com/motss/app-datepicker/commit/e69764b703571bf8f997cc7c9fd51ce25952be6b)) +* Fix tests broken due to bug in test helper and missing min ([ca103df](https://github.com/motss/app-datepicker/commit/ca103df96762fdede1ce541293d8b59952901b76)) +* Revert change in test helper ([2c38d26](https://github.com/motss/app-datepicker/commit/2c38d2696f53c856f200501b330beda52f137ae4)) +* Revert change in test helper ([b45913e](https://github.com/motss/app-datepicker/commit/b45913e9bf3b7b03fd8e720c28ff6f99495ebdd8)) + + + +# [4.0.0-rc.39](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.38...v4.0.0-rc.39) (2020-01-13) + + + + +# [4.0.0-rc.38](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.37...v4.0.0-rc.38) (2020-01-13) + + +### ci + +* Update CI to skip running tests for version bump ([ae431e1](https://github.com/motss/app-datepicker/commit/ae431e146b997dfd139cc5484e9ca98606dc3682)) + + + +# [4.0.0-rc.37](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.36...v4.0.0-rc.37) (2020-01-13) + + +### chore + +* Upgrade deps ([20681cd](https://github.com/motss/app-datepicker/commit/20681cdcd9d7e2c5e83022e5e2e9c65f31848287)) +* Upgrade deps ([56a6a02](https://github.com/motss/app-datepicker/commit/56a6a024c4492c4f358cf2b267be63940a22dbab)) +* Upgrade deps ([645bc04](https://github.com/motss/app-datepicker/commit/645bc040493cdd31c1878b6643b71781a4b1b506)) + +### doc + +* Update API References ([fcf5a33](https://github.com/motss/app-datepicker/commit/fcf5a33d466c84b131954b15738026ea155ed3e0)) + +### feat + +* Re-enable calendar drag feature with better x-browser support ([af37d09](https://github.com/motss/app-datepicker/commit/af37d091442b242a75214befd7a6c72d71e71e37)) + +### fix + +* Minor fix in rendering when week number is shown ([7b71ea1](https://github.com/motss/app-datepicker/commit/7b71ea153ec0beb51389a5a8ff198efef5895a6a)) +* Minor patch to render datepicker ([283c5ff](https://github.com/motss/app-datepicker/commit/283c5ff60cd013f1c0919bfab5f486caf1ca0a94)) + +### refactor + +* Code refactoring to make each helper function a module ([90d9b25](https://github.com/motss/app-datepicker/commit/90d9b25632a7f377e9e4c3f02809dd7b42b8f23c)) +* Reduce use of const enums in favor of type ([d6bca9b](https://github.com/motss/app-datepicker/commit/d6bca9bf0618eb04ccbd51272499196e1be646c0)) + + + +# [4.0.0-rc.36](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.35...v4.0.0-rc.36) (2019-10-27) + + +### refactor + +* Disable more codes related to calendar swiping feature ([909c654](https://github.com/motss/app-datepicker/commit/909c65489bb43ff9315203d85c0d01e360f5ef74)) +* Remove calendar swiping feature ([b1f7d72](https://github.com/motss/app-datepicker/commit/b1f7d72fc13daec98a245f550a3390772e0fe794)) + +### test + +* Disable tests for calendar swiping feature ([fef93a5](https://github.com/motss/app-datepicker/commit/fef93a53de27857fa72aeec1cfbe208c09ceac91)) + + + +# [4.0.0-rc.35](https://github.com/motss/app-datepicker/compare/v4.0.0-rc.34...v4.0.0-rc.35) (2019-10-27) + + +### fix + +* Use + diff --git a/package-lock.json b/package-lock.json index 0f648842b..c5a9f37e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5530 +1,5362 @@ { "name": "app-datepicker", - "version": "4.5.1", + "version": "6.0.0-rc.22", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "4.5.1", + "name": "app-datepicker", + "version": "6.0.0-rc.22", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "@material/mwc-button": "^0.20.0", - "lit-element": "^2.4.0", - "lit-html": "^1.4.0", - "nodemod": "^2.7.2", - "tslib": "^2.0.3" + "@material/mwc-base": "^0.25.3", + "@material/mwc-button": "^0.25.3", + "@material/mwc-dialog": "^0.25.3", + "@material/mwc-icon-button": "^0.25.3", + "@material/mwc-menu": "^0.25.3", + "@material/mwc-textfield": "^0.25.3", + "lit": "^2.2.1", + "nodemod": "^3.0.6", + "tslib": "^2.3.1" }, "devDependencies": { - "@reallyland/tsconfig": "^3.0.2", - "@reallyland/tslint-config": "^1.1.1", - "@skypack/package-check": "^0.2.2", - "@types/mocha": "^7.0.2", - "@types/pretty": "^2.0.0", - "@types/request": "^2.48.5", - "@wdio/cli": "^5.23.0", - "@wdio/local-runner": "^5.23.0", - "@wdio/mocha-framework": "^5.23.0", - "@wdio/sauce-service": "^5.22.1", - "@wdio/selenium-standalone-service": "^5.16.10", - "@wdio/spec-reporter": "^5.23.0", - "axe-core": "^4.0.2", - "env-cmd": "^10.1.0", - "es-dev-server": "^2.1.0", - "husky": "^4.3.0", - "pretty": "^2.0.0", - "pwa-helpers": "^0.9.1", - "reify": "^0.20.12", - "shx": "^0.3.2", - "tslint": "^6.1.3", - "typescript": "^4.0.3", - "webdriverio": "^5.23.0" - }, - "engines": { - "node": ">= 10.18.1", - "npm": ">= 6.13.4" + "@open-wc/testing": "^3.1.2", + "@reallyland/tools": "^0.0.13", + "@rollup/plugin-node-resolve": "^13.0.6", + "@web/dev-server-esbuild": "^0.2.16", + "@web/dev-server-rollup": "^0.3.15", + "@web/test-runner": "^0.13.27", + "@web/test-runner-commands": "^0.6.1", + "@web/test-runner-playwright": "^0.8.8", + "eslint-plugin-lit": "^1.6.1", + "eslint-plugin-lit-a11y": "^2.2.0", + "hanbi": "^1.0.1" + }, + "engines": { + "node": ">= 16.x", + "npm": ">= 8.x" } }, "node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", - "dev": true - }, - "node_modules/@babel/core": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", - "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0", - "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" - }, "engines": { "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/generator": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz", - "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==", + "node_modules/@babel/runtime": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz", + "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==", "dev": true, "dependencies": { - "@babel/types": "^7.14.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "node_modules/@babel/runtime-corejs3": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.8.tgz", + "integrity": "sha512-ZbYSUvoSF6dXZmMl/CYTMOvzIFnbGfv4W3SEHYgMvNsFTeLaF2gkGAF4K2ddmtSK4Emej+0aYcnSC6N5dPCXUQ==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "core-js-pure": "^3.20.2", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "node_modules/@commitlint/config-conventional": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-16.2.1.tgz", + "integrity": "sha512-cP9gArx7gnaj4IqmtCIcHdRjTYdRUi6lmGE+lOzGGjGe45qGOS8nyQQNvkNy2Ey2VqoSWuXXkD8zCUh6EHf1Ww==", "dev": true, "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" + "conventional-changelog-conventionalcommits": "^4.3.1" + }, + "engines": { + "node": ">=v12" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "node_modules/@eslint/eslintrc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.1", + "globals": "^13.9.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/@esm-bundle/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@esm-bundle/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-6Tx35wWiNw7X0nLY9RMx8v3EL8SacCFW+eEZOE9Hc+XxmU5HFE2AFEg+GehUZpiyDGwVvPH75ckGlqC7coIPnA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "@types/chai": "^4.2.12" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.0.tgz", - "integrity": "sha512-6pXDPguA5zC40Y8oI5mqr+jEUpjMJonKvknvA+vD8CYDz5uuXEwWBK8sRAsE/t3gfb1k15AQb9RhwpscC4nUJQ==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13" + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": ">=10.10.0" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", - "dev": true, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@lit/reactive-element": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.0.0-rc.4.tgz", + "integrity": "sha512-dJMha+4NFYdpnUJzRrWTFV5Hdp9QHWFuPnaoqonrKl4lGJVnYez9mu8ev9F/5KM47tjAjh22DuRHrdFDHfOijA==" + }, + "node_modules/@material/animation": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-OjxWJYSRNs4vnPe8NclaNn+TsNc8TR/wHusGtezF5F+wl+5mh+K69BMXAmURtq3idoRg4XaOSC/Ohk1ovD1fMQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "tslib": "^2.1.0" } }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", - "dev": true, + "node_modules/@material/base": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-vy5SQt+jcwwdRFfBvtpVdpULUBujecVUKOXcopaQoi2XIzI5EBHuR4gPN0cd1yfmVEucD6p2fvVv2FJ3Ngr61w==", "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" + "tslib": "^2.1.0" } }, - "node_modules/@babel/helper-define-polyfill-provider/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/@material/button": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-DB0MAvdIGWKuFwlQ57hjv7ZuHIioT2mnG7RWtL7ZoCWoY45nCrsbJirmX5zZFipm9gIOJ3YnIkIrUyMVSrDX+g==", + "dependencies": { + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/tokens": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", - "dev": true, + "node_modules/@material/density": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-zOR5wISqPVr8KS/ERNC1jdRV9O832lzclyS9Ea20rDrWfuOiYsQ9bbIk12xWlxpgsn7r9fxQJyd1O2SURoHdRA==", "dependencies": { - "@babel/types": "^7.13.0" + "tslib": "^2.1.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, + "node_modules/@material/dialog": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-NfQR0fmNS/y2iRAx5YeODLLywBAnSyZI/CL9GUq4NiNj+FeSxe+5bhG1p9NxHeGMjEVrl6fG5L9ql7lqtfQaYQ==", + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/button": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/icon-button": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/tokens": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dom": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-iUpZG6Bb2l/PfNV2Fb/pXfG1p4Bz4PC9A7ATPlKfcU5HioObcnYVc/+Hrtaw8eu28BNIc+VVROtbfpqG/YgKSQ==", "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, + "node_modules/@material/elevation": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-AqN/tsTGGyBzZ7CtoSMBY9bDYvCuUt98EUfiGjZGXcf4HgoHV3Cn/JSLrhru5Cq8Nx6HF6AmHh3dQCfNCQduew==", "dependencies": { - "@babel/types": "^7.12.13" + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", - "dev": true, + "node_modules/@material/feature-targeting": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-CrVoGNu0ym52OPEKy3kgeNL2oSWOCBYbYxSH3GhERxCq5FwGBN+XmK/ZDLFVQlHYy3v8x4TqVEwXviCeumNTxQ==", "dependencies": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" + "tslib": "^2.1.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dev": true, + "node_modules/@material/floating-label": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-Cp0/LngkW6/uZWbEDTe3Ox143V4kYtxl9twiM3XLKd6a67JHCzneQWFzC0qSg90b3r5O+1zOkT3ZMF2Pbu2Vwg==", "dependencies": { - "@babel/types": "^7.13.12" + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "dev": true, + "node_modules/@material/icon-button": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-9P6cjRqKtjE6ML+r5yz0ExU/f2KLdNabHQxmO6RpKd/FnjTyP1NcWqqj8dsvo/DZ7mOtT1MIThgkQDdiMqcYLg==", "dependencies": { - "@babel/types": "^7.13.12" + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", - "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", - "dev": true, + "node_modules/@material/line-ripple": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-LlyiyxpHNlFt0PZ8Q2tvOPbjNcgm3L7tUebXsM7iGyoKXfj0HwyDI31S0KgtU3Vs5DIK4U4mnRWtoAxtBW6Jfg==", "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dev": true, + "node_modules/@material/list": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-bjHXXk2ZeWxAFs4cJxy5J5A5ClUd3FGjRv/LwCYpsh7Dm7e8kSe8Lw2MWb6FXyF3mDJM6xqN3xXQWOh6UEu5wA==", + "dependencies": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-x59UHoTLvEsPKjFdffrKTgEyc0T4W3m58RsizAmapXr59Uthq8+PTFOkAv9R1PV/ZCzxay7Vx+QcekC4qOr40A==", + "dependencies": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/list": "14.0.0-canary.261f2db59.0", + "@material/menu-surface": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu-surface": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-zv/fv/W3zdSb+c/p6GNcOqA3+wAc/r8MOtV53WJPLlvZZSpGoTwHUp+GPiNeovfbsTSxN95XOXuVQBEfKEb8vA==", "dependencies": { - "@babel/types": "^7.12.13" + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true + "node_modules/@material/mwc-base": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.25.3.tgz", + "integrity": "sha512-4wvxZ9dhPr0O4jjOHPmFyn77pafe+h1gHPlT9sbQ+ly8NY/fSn/TXn7/PbxgL8g4ZHxMvD3o7PJopg+6cbHp8Q==", + "dependencies": { + "@lit/reactive-element": "1.0.0-rc.4", + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", - "dev": true, + "node_modules/@material/mwc-button": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.25.3.tgz", + "integrity": "sha512-usHEKchj9hqetY7n0yebTz1Pk9Z+9W/sNZheFoSaiWQCv9XhtCdKkHH0MXTv8SpwxWuEKUf/XjtyvikGIcIn7w==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" + "@material/mwc-icon": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", - "dev": true, + "node_modules/@material/mwc-checkbox": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.25.3.tgz", + "integrity": "sha512-PSh9IAgQK4XiDzBwgclheejkA4cbZ3K9V1JTTl/YVRDD/OLLM+Bh8tbnAg/1kGVlPWOUfDrYCcZ0gg472ca7gw==", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "dev": true, + "node_modules/@material/mwc-dialog": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-dialog/-/mwc-dialog-0.25.3.tgz", + "integrity": "sha512-UpxAYAzKXO1MW4ezpiYfEQgov08p0J8KDVKqKrMwg7lsZRkAtUMk4YJkM6qmWGqGPqd/cN++42PMPHAISJH3yA==", "dependencies": { - "@babel/types": "^7.13.12" + "@material/dialog": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-button": "^0.25.3", + "blocking-elements": "^0.1.0", + "lit": "^2.0.0", + "tslib": "^2.0.1", + "wicg-inert": "^3.0.0" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "dev": true, + "node_modules/@material/mwc-floating-label": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.25.3.tgz", + "integrity": "sha512-3uFMi8Y680P0nzP5zih4YuOZJLl/C6Ux9G810Unwo44zblG/ckgJlFiM+T+oR+OH5KM8LbfNlV0ypo7FT5zYJA==", "dependencies": { - "@babel/types": "^7.12.1" + "@material/floating-label": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, + "node_modules/@material/mwc-icon": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.25.3.tgz", + "integrity": "sha512-36076AWZIRSr8qYOLjuDDkxej/HA0XAosrj7TS1ZeLlUBnLUtbDtvc1S7KSa0hqez7ouzOqGaWK24yoNnTa2OA==", "dependencies": { - "@babel/types": "^7.12.13" + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true + "node_modules/@material/mwc-icon-button": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.25.3.tgz", + "integrity": "sha512-FexkMpK3ZSHh7NF+PIqvVhvAbBOgFDYPck/lqnxIDC3VGJ0rjD/1MqevDy2fY6IcHGlc8Ai7VuYbdQ6Cvw8WcQ==", + "dependencies": { + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true + "node_modules/@material/mwc-line-ripple": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.25.3.tgz", + "integrity": "sha512-ANJzSyumb+shBVTIhqF1+YByPU/EpFXxI9CS26qThFqlUDpYXg5xcoZpkMSmZv3Wv/loF1rs2mJfFWOcC6nFnw==", + "dependencies": { + "@material/line-ripple": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", - "dev": true, + "node_modules/@material/mwc-list": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.25.3.tgz", + "integrity": "sha512-2T297qVaQsKv+QDNP2ag9g04RLKO1tm2F6BwwqvdbXTsY+LKYOJe2/aSe0kX2tQLayX4ydy2RnTevo9Ld+c+4g==", "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/list": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-checkbox": "^0.25.3", + "@material/mwc-radio": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dev": true, + "node_modules/@material/mwc-menu": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.25.3.tgz", + "integrity": "sha512-jr5R61BfqrJC0lsAI63y4BsEM2eY3n6kiCy2ZnwinmxrfFrS709T/zuSUUW/xG9b9inSku4WjjSkDhPzQrmS3g==", "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@material/menu": "=14.0.0-canary.261f2db59.0", + "@material/menu-surface": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-list": "^0.25.3", + "@material/shape": "=14.0.0-canary.261f2db59.0", + "@material/theme": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, + "node_modules/@material/mwc-notched-outline": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.25.3.tgz", + "integrity": "sha512-8jvU8GD0Pke+pfTQ0PdXpZmkU3XIHhMVY6AHM/2IQrXHkVZmAm9kbwL7ne3Ao+6f5n+DeXDGd+SG9U6ZZjD7gw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@material/mwc-base": "^0.25.3", + "@material/notched-outline": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "node_modules/@babel/highlight/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, + "node_modules/@material/mwc-radio": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.25.3.tgz", + "integrity": "sha512-SXpVDrsQnz7+2w/kfBxcOJ4P+uJ0RxBd9mCLE7wVyN53gDLkNHqA0npdl2PNpRaaMavVrt27L8wWo5QIT+7zWA==", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "@material/radio": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "node_modules/@babel/highlight/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, + "node_modules/@material/mwc-ripple": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.25.3.tgz", + "integrity": "sha512-G/gt/csxgME6/sAku3GiuB0O2LLvoPWsRTLq/9iABpaGLJjqaKHvNg/IVzNDdF3YZT7EORgR9cBWWl7umA4i4Q==", + "dependencies": { + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/ripple": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-textfield": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.25.3.tgz", + "integrity": "sha512-stpZ8sEyo2Mb9fG2XCoTc1Kom8oRXZiVI5rU88GtfcBU7nH0em8S4grq9X1mVfUG6Cfi1G/T+avCSIhzbYtr0w==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "@material/floating-label": "=14.0.0-canary.261f2db59.0", + "@material/line-ripple": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-floating-label": "^0.25.3", + "@material/mwc-line-ripple": "^0.25.3", + "@material/mwc-notched-outline": "^0.25.3", + "@material/textfield": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "node_modules/@babel/highlight/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, + "node_modules/@material/notched-outline": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-gtn+IKAiX2rbfbX3a9aDlfUoKCEYrlAPOZifKXUaZ4UJYMNLzZuAqy7l5Ds30emtqUE22mySTEWqhzK6dePKsA==", "dependencies": { - "color-name": "1.1.3" + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/floating-label": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/highlight/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/@material/radio": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-AvrsOqhP8UZ5d58RWgaTmQVlWQRULwk2BXhsEhtxz56CmTsyVM49thNbaNnc/TzuY9Ssxv/L2wYVbR2B3BX9Yw==", + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } }, - "node_modules/@babel/highlight/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/@material/ripple": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-3FLCLj8X7KrFfuYBHJg1b7Odb3V/AW7fxk3m1i1zhDnygKmlQ/abVucH1s2qbX3Y+JIiq+5/C5407h9BFtOf+A==", + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/highlight/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, + "node_modules/@material/rtl": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-bVnXBbUsHs57+EXdeFbcwaKy3lT/itI/qTLmJ88ar0qaGEujO1GmESHm3ioqkeo4kQpTfDhBwQGeEi1aDaTdFg==", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/parser": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", - "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" + "node_modules/@material/shape": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-VjcQltd1uF9ugvLExMy00SMISjy/370o8lsZlb1T+xHyhXHL3UxeuWYLW5Amq6mbx65+c9Df9WmlXXOdebpEkw==", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" + "node_modules/@material/textfield": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-KBPgpvvVFBfLx9nc6+wWOS2hJ40JVwh5KBjMoYbiOEFLf0O7SgCAVREHaFAXrPsC8AeTyUipx6TReONIGfMCPQ==", + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/floating-label": "14.0.0-canary.261f2db59.0", + "@material/line-ripple": "14.0.0-canary.261f2db59.0", + "@material/notched-outline": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", - "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", - "dev": true, + "node_modules/@material/theme": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-bUqyFT0QF8Nxx02fekt3CXIfC9DEPOPdo2hjgdtvhrNP+vftbkI2tKZ5/uRUnVA+zqQAOyIl5z6FOMg4fyemCA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", - "dev": true, + "node_modules/@material/tokens": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-mgar9gsLv00HTvXIDvNR1vEEXpfKgeWhVTO8a7aWofSNyENNOVc5ImJwBgCAMb5SgLHBi6w8/c1tPzjOewBfCA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@material/elevation": "14.0.0-canary.261f2db59.0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", - "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", - "dev": true, + "node_modules/@material/touch-target": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-xA6TTHN7aOTXg/+c6mQJlogzTD+Sp8WPC5TK8RBXbQxEykGXGW15p+H9pG+rX/gzD5iehnHRBrDUFmAGoskhcQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", - "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", - "dev": true, + "node_modules/@material/typography": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-WOCdcNkD5KBRAwICcRqWBRG3cDkyrwK5USTNmG0oxnwnZAN7daOpPTdLppVAhadE7faj8d67ON+V9pH7+T62FQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "node_modules/@mdn/browser-compat-data": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.13.tgz", + "integrity": "sha512-OFTriJmUcXnA1RjfKDJOfEmhHO44OV7Gxpqnh7eOM+3qep64Yt+uNF4jEeIFHnwTFH5tMcnBQxEI91dXDGiGYQ==", + "dev": true + }, + "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==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 8" } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", - "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "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==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 8" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", - "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "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==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 8" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", - "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", + "node_modules/@open-wc/chai-dom-equals": { + "version": "0.12.36", + "resolved": "https://registry.npmjs.org/@open-wc/chai-dom-equals/-/chai-dom-equals-0.12.36.tgz", + "integrity": "sha512-Gt1fa37h4rtWPQGETSU4n1L678NmMi9KwHM1sH+JCGcz45rs8DBPx7MUVeGZ+HxRlbEI5t9LU2RGGv6xT2OlyA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@open-wc/semantic-dom-diff": "^0.13.16", + "@types/chai": "^4.1.7" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", - "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "node_modules/@open-wc/chai-dom-equals/node_modules/@open-wc/semantic-dom-diff": { + "version": "0.13.21", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.13.21.tgz", + "integrity": "sha512-BONpjHcGX2zFa9mfnwBCLEmlDsOHzT+j6Qt1yfK3MzFXFtAykfzFjAgaxPetu0YbBlCfXuMlfxI4vlRGCGMvFg==", + "dev": true + }, + "node_modules/@open-wc/dedupe-mixin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.3.0.tgz", + "integrity": "sha512-UfdK1MPnR6T7f3svzzYBfu3qBkkZ/KsPhcpc3JYhsUY4hbpwNF9wEQtD4Z+/mRqMTJrKg++YSxIxE0FBhY3RIw==", + "dev": true + }, + "node_modules/@open-wc/scoped-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-2.0.1.tgz", + "integrity": "sha512-JS6ozxUFwFX3+Er91v9yQzNIaFn7OnE0iESKTbFvkkKdNwvAPtp1fpckBKIvWk8Ae9ZcoI9DYZuT2DDbMPcadA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@lit/reactive-element": "^1.0.0", + "@open-wc/dedupe-mixin": "^1.3.0", + "@webcomponents/scoped-custom-element-registry": "^0.0.3" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", - "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "node_modules/@open-wc/scoped-elements/node_modules/@lit/reactive-element": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", + "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==", + "dev": true + }, + "node_modules/@open-wc/semantic-dom-diff": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.5.tgz", + "integrity": "sha512-Wi0Fuj3dzqlWClU0y+J4k/nqTcH0uwgOWxZXPyeyG3DdvuyyjgiT4L4I/s6iVShWQvvEsyXnj7yVvixAo3CZvg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-compilation-targets": "^7.13.8", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/chai": "^4.2.11", + "@web/test-runner-commands": "^0.5.7" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", - "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "node_modules/@open-wc/semantic-dom-diff/node_modules/@web/test-runner-commands": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.5.13.tgz", + "integrity": "sha512-FXnpUU89ALbRlh9mgBd7CbSn5uzNtr8gvnQZPOvGLDAJ7twGvZdUJEAisPygYx2BLPSFl3/Mre8pH8zshJb8UQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "@web/test-runner-core": "^0.10.20", + "mkdirp": "^1.0.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", - "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", + "node_modules/@open-wc/testing": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@open-wc/testing/-/testing-3.1.2.tgz", + "integrity": "sha512-2KjEszLItrIEZwCLFjWOSy4rnLzLOpgckrKfZjNA39PpFR3xD9bqYU30TTnLRHBk2B/0ZUbHglyca3iwcF964w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@esm-bundle/chai": "^4.3.4", + "@open-wc/chai-dom-equals": "^0.12.36", + "@open-wc/semantic-dom-diff": "^0.19.5", + "@open-wc/testing-helpers": "^2.1.2", + "@types/chai": "^4.2.11", + "@types/chai-dom": "^0.0.9", + "@types/sinon-chai": "^3.2.3", + "chai-a11y-axe": "^1.3.2" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "node_modules/@open-wc/testing-helpers": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@open-wc/testing-helpers/-/testing-helpers-2.1.2.tgz", + "integrity": "sha512-NEdsV47DnOWaw3Wpp85p4qZ6bdubtGPdlTiblk8vSf2HJ2sR4b3ckyRWzsj/k+pcxrDGt8z0Awz71p+048Rrfg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@open-wc/scoped-elements": "^2.0.1", + "lit": "^2.0.0", + "lit-html": "^2.0.0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "node_modules/@reallyland/tools": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@reallyland/tools/-/tools-0.0.13.tgz", + "integrity": "sha512-c+Yl4muWapVQjLsLStFTFFAOu+xlD7ga4r5TboRGGFmnfSETpePrNzu3m2GgJZ3U0oJWPlVrM8KcxIgbLc9T9g==", "dev": true, + "hasInstallScript": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + "@commitlint/config-conventional": "^16.2.1", + "@skypack/package-check": "^0.2.2", + "@typescript-eslint/eslint-plugin": "^5.16.0", + "@typescript-eslint/parser": "^5.16.0", + "eslint": "^8.12.0", + "eslint-plugin-promise": "^6.0.0", + "eslint-plugin-regexp": "^1.6.0", + "eslint-plugin-simple-import-sort": "^7.0.0", + "nano-staged": "^0.6.0", + "typescript": "^4.6.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 16.x", + "npm": ">= 8.x" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", + "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" }, "engines": { - "node": ">=4" + "node": ">= 10.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "rollup": "^2.42.0" } }, - "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/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" }, - "peerDependencies": { - "@babel/core": "^7.0.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==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "engines": { + "node": ">= 8.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "node_modules/@skypack/package-check": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@skypack/package-check/-/package-check-0.2.2.tgz", + "integrity": "sha512-T4Wyi9lUuz0a1C2OHuzqZ0aFOCI0AmaGTb2LP9sHgWdoHXlB3JU02gfBpa0Y081G/gFsJYpQ/R0iCJRzF/nknw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "kleur": "^4.1.3", + "yargs-parser": "^20.2.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "bin": { + "package-check": "index.bin.js" } }, - "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/@types/accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/node": "*" } }, - "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/@types/babel__code-frame": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/babel__code-frame/-/babel__code-frame-7.0.3.tgz", + "integrity": "sha512-2TN6oiwtNjOezilFVl77zwdNPwQWaDBBCCWWxyo1ctiO3vAtd7H/aB/CBJdw9+kqq3+latD0SXoedIuHySSZWw==", + "dev": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "node_modules/@types/chai": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", + "dev": true + }, + "node_modules/@types/chai-dom": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/chai-dom/-/chai-dom-0.0.9.tgz", + "integrity": "sha512-jj4F2NJog2/GBYsyJ8+NvhnWUBbPY4MUAKLdPJE6+568rw12GGXvj0ycUuP5nndVrnJgozmJAoMTvxvjJATXWw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/chai": "*" } }, - "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/@types/co-body": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/co-body/-/co-body-6.1.0.tgz", + "integrity": "sha512-3e0q2jyDAnx/DSZi0z2H0yoZ2wt5yRDZ+P7ymcMObvq0ufWRT4tsajyO+Q1VwVWiv9PRR4W3YEjEzBjeZlhF+w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/node": "*", + "@types/qs": "*" } }, - "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==", + "node_modules/@types/command-line-args": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", + "dev": true + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/node": "*" } }, - "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/@types/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==", + "dev": true + }, + "node_modules/@types/convert-source-map": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/convert-source-map/-/convert-source-map-1.5.2.tgz", + "integrity": "sha512-tHs++ZeXer40kCF2JpE51Hg7t4HPa18B1b1Dzy96S0eCw8QKECNMYMfwa1edK/x8yCN0r4e6ewvLcc5CsVGkdg==", + "dev": true + }, + "node_modules/@types/cookies": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", + "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" } }, - "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/@types/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-epMsEE85fi4lfmJUH/89/iV/LI+F5CvNIvmgs5g5jYFPfhO2S/ae8WSsLOKWdwtoaZw9Q2IhJ4tQ5tFCcS/4HA==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" } }, - "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/@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" } }, - "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/http-assert": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz", + "integrity": "sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==", + "dev": true + }, + "node_modules/@types/http-errors": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz", + "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/istanbul-lib-coverage": "*" } }, - "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/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/istanbul-lib-report": "*" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/keygrip": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", + "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", + "dev": true + }, + "node_modules/@types/koa": { + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz", + "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "node_modules/@types/koa-compose": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", + "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/koa": "*" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", + "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", + "dev": true + }, + "node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "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/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/node": "*" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/mime": "^1", + "@types/node": "*" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "node_modules/@types/sinon": { + "version": "10.0.11", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.11.tgz", + "integrity": "sha512-dmZsHlBsKUtBpHriNjlK0ndlvEh8dcb9uV9Afsbt89QIyydpC7NcR+nWlAhASfy3GHnxTl4FX/aKE7XZUt/B4g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/sinonjs__fake-timers": "*" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz", - "integrity": "sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg==", + "node_modules/@types/sinon-chai": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/chai": "*", + "@types/sinon": "*" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", - "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, + "node_modules/@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-split-export-declaration": "^7.12.13", - "globals": "^11.1.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/node": "*" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "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": { - "@babel/helper-plugin-utils": "^7.13.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@types/node": "*" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.16.0.tgz", + "integrity": "sha512-SJoba1edXvQRMmNI505Uo4XmGbxCK9ARQpkvOd00anxzri9RNQk0DDCxD+LIl+jYhkzOJiOMMKYEHnHEODjdCw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@typescript-eslint/scope-manager": "5.16.0", + "@typescript-eslint/type-utils": "5.16.0", + "@typescript-eslint/utils": "5.16.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "node_modules/@typescript-eslint/parser": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.16.0.tgz", + "integrity": "sha512-fkDq86F0zl8FicnJtdXakFs4lnuebH6ZADDw6CYQv0UZeIjHvmEw87m9/29nk2Dv5Lmdp0zQ3zDQhiMWQf/GbA==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@typescript-eslint/scope-manager": "5.16.0", + "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/typescript-estree": "5.16.0", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.16.0.tgz", + "integrity": "sha512-P+Yab2Hovg8NekLIR/mOElCDPyGgFZKhGoZA901Yax6WR6HVeGLbsqJkZ+Cvk5nts/dAlFKm8PfL43UZnWdpIQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/visitor-keys": "5.16.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.16.0.tgz", + "integrity": "sha512-SKygICv54CCRl1Vq5ewwQUJV/8padIWvPgCxlWPGO/OgQLCijY9G7lDu6H+mqfQtbzDNlVjzVWQmeqbLMBLEwQ==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@typescript-eslint/utils": "5.16.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "node_modules/@typescript-eslint/types": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.16.0.tgz", + "integrity": "sha512-oUorOwLj/3/3p/HFwrp6m/J2VfbLC8gjW5X3awpQJ/bSG+YRGFS4dpsvtQ8T2VNveV+LflQHjlLvB6v0R87z4g==", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.16.0.tgz", + "integrity": "sha512-SE4VfbLWUZl9MR+ngLSARptUv2E8brY0luCdgmUevU6arZRY/KxYoLI/3V/yxaURR8tLRN7bmZtJdgmzLHI6pQ==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/visitor-keys": "5.16.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "node_modules/@typescript-eslint/utils": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.16.0.tgz", + "integrity": "sha512-iYej2ER6AwmejLWMWzJIHy3nPJeGDuCqf8Jnb+jAQVoPpmWzwQOfa9hWVB8GIQE5gsCv/rfN4T+AYb/V06WseQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.16.0", + "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/typescript-estree": "5.16.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.16.0.tgz", + "integrity": "sha512-jqxO8msp5vZDhikTwq9ubyMHqZ67UIvawohr4qF3KhlpL7gzSjOd+8471H3nh5LyABkaI85laEKKU8SnGUK5/g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@typescript-eslint/types": "5.16.0", + "eslint-visitor-keys": "^3.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", - "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", + "node_modules/@web/browser-logs": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.2.5.tgz", + "integrity": "sha512-Qxo1wY/L7yILQqg0jjAaueh+tzdORXnZtxQgWH23SsTCunz9iq9FvsZa8Q5XlpjnZ3vLIsFEuEsCMqFeohJnEg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" + "errorstacks": "^2.2.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "node_modules/@web/config-loader": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", + "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", - "babel-plugin-dynamic-import-node": "^2.3.3" + "semver": "^7.3.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "node_modules/@web/dev-server": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.30.tgz", + "integrity": "sha512-nUKR+lq06gaCvH6vKmfhPe/Kka1Xp7yN1FN5NEx+Yk4+9CyxZ3UJt2eHXedrcz+XCafxExW114ElEDgCahJowg==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/code-frame": "^7.12.11", + "@types/command-line-args": "^5.0.0", + "@web/config-loader": "^0.1.3", + "@web/dev-server-core": "^0.3.17", + "@web/dev-server-rollup": "^0.3.13", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "ip": "^1.1.5", + "nanocolors": "^0.2.1", + "open": "^8.0.2", + "portfinder": "^1.0.28" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "bin": { + "wds": "dist/bin.js", + "web-dev-server": "dist/bin.js" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "node_modules/@web/dev-server-core": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.17.tgz", + "integrity": "sha512-vN1dwQ8yDHGiAvCeUo9xFfjo+pFl8TW+pON7k9kfhbegrrB8CKhJDUxmHbZsyQUmjf/iX57/LhuWj1xGhRL8AA==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^1.2.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^0.9.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^4.0.6", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^6.0.0", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "node_modules/@web/dev-server-esbuild": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.2.16.tgz", + "integrity": "sha512-a82uKy9vQ4HvfWtjd7hJ3GtaqkL2ofxpEu3a1wIZyXB2dFWPvhRSmLNe/4IPPHe4vj6PVdRpLSFPEA3lXUW5Pw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@mdn/browser-compat-data": "^4.0.0", + "@web/dev-server-core": "^0.3.17", + "esbuild": "^0.12.21", + "parse5": "^6.0.1", + "ua-parser-js": "^1.0.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "node_modules/@web/dev-server-rollup": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.15.tgz", + "integrity": "sha512-hhxvBmNIY19vXeocYB1IBOuhpVpy1L7jbwBarmvC0QJKZsgkxssNTzXJ8iga70c2+H0c/rBz1xUaKuAcov0uOA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" + "@rollup/plugin-node-resolve": "^11.0.1", + "@web/dev-server-core": "^0.3.16", + "nanocolors": "^0.2.1", + "parse5": "^6.0.1", + "rollup": "^2.66.1", + "whatwg-url": "^11.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", - "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "node_modules/@web/dev-server-rollup/node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "node_modules/@web/parse5-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.3.0.tgz", + "integrity": "sha512-Pgkx3ECc8EgXSlS5EyrgzSOoUbM6P8OKS471HLAyvOBcP1NCBn0to4RN/OaKASGq8qa3j+lPX9H14uA5AHEnQg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "node_modules/@web/test-runner": { + "version": "0.13.27", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.13.27.tgz", + "integrity": "sha512-yVhXK9sPJE2VQs1/KPTIeQvUxh+02OZkn+tgcr0+W8ovvrFD4ucF2X26cpeOTuD+Y67ERUi/EopIze3aelw6sg==", "dev": true, "dependencies": { - "regenerator-transform": "^0.14.2" + "@web/browser-logs": "^0.2.2", + "@web/config-loader": "^0.1.3", + "@web/dev-server": "^0.1.24", + "@web/test-runner-chrome": "^0.10.7", + "@web/test-runner-commands": "^0.6.0", + "@web/test-runner-core": "^0.10.22", + "@web/test-runner-mocha": "^0.7.5", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "convert-source-map": "^1.7.0", + "diff": "^5.0.0", + "globby": "^11.0.1", + "nanocolors": "^0.2.1", + "portfinder": "^1.0.28", + "source-map": "^0.7.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "bin": { + "web-test-runner": "dist/bin.js", + "wtr": "dist/bin.js" + }, + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "node_modules/@web/test-runner-chrome": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.10.7.tgz", + "integrity": "sha512-DKJVHhHh3e/b6/erfKOy0a4kGfZ47qMoQRgROxi9T4F9lavEY3E5/MQ7hapHFM2lBF4vDrm+EWjtBdOL8o42tw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@web/test-runner-core": "^0.10.20", + "@web/test-runner-coverage-v8": "^0.4.8", + "chrome-launcher": "^0.15.0", + "puppeteer-core": "^13.1.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "node_modules/@web/test-runner-commands": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.6.1.tgz", + "integrity": "sha512-P4aQqp0duumeGdGxQ8TwLnplkrXzpLqb47eSEEqBRS//C1H7s6VskaqEng+k0dbk+cSpEa4RuZGY/G5k8aTjTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@web/test-runner-core": "^0.10.20", + "mkdirp": "^1.0.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "node_modules/@web/test-runner-core": { + "version": "0.10.25", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.10.25.tgz", + "integrity": "sha512-gH8VXyZbwf+sqPiH4cnXYf86SqwBLtou+0LFFCLaDQRbMlrfi5byAISt39fNX2ejd46bF1cZn6DK+mzb/Xjccw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^1.5.1", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.2.1", + "@web/dev-server-core": "^0.3.16", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^1.7.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "node_modules/@web/test-runner-coverage-v8": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.8.tgz", + "integrity": "sha512-Ib0AscR8Xf9E/V7rf3XOVQTe4vKIbwSTupxV1xGgzj3x4RKUuMUg9FLz9EigZ5iN0mOzZKDllyRS523hbdhDtA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@web/test-runner-core": "^0.10.20", + "istanbul-lib-coverage": "^3.0.0", + "picomatch": "^2.2.2", + "v8-to-istanbul": "^8.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "node_modules/@web/test-runner-mocha": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.5.tgz", + "integrity": "sha512-12/OBq6efPCAvJpcz3XJs2OO5nHe7GtBibZ8Il1a0QtsGpRmuJ4/m1EF0Fj9f6KHg7JdpGo18A37oE+5hXjHwg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@types/mocha": "^8.2.0", + "@web/test-runner-core": "^0.10.20" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "node_modules/@web/test-runner-playwright": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.8.8.tgz", + "integrity": "sha512-bhb0QVldfDoPJqOj5mm1hpE6FReyddc/iIuAkVf/kbJvgggTCT2bWGxUvXJlGzf+4epmDhU+hSTfEoLL9R2vGw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@web/test-runner-core": "^0.10.20", + "@web/test-runner-coverage-v8": "^0.4.8", + "playwright": "^1.14.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=12.0.0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "node_modules/@webcomponents/scoped-custom-element-registry": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@webcomponents/scoped-custom-element-registry/-/scoped-custom-element-registry-0.0.3.tgz", + "integrity": "sha512-lpSzgDCGbM99dytb3+J3Suo4+Bk1E13MPnWB42JK8GwxSAxFz+tC7TTv2hhDSIE2IirGNKNKCf3m08ecu6eAsQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.0.tgz", - "integrity": "sha512-GWRCdBv2whxqqaSi7bo/BEXf070G/fWFMEdCnmoRg2CZJy4GK06ovFuEjJrZhDRXYgBsYtxVbG8GUHvw+UWBkQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.13.15", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.13.11", - "@babel/plugin-proposal-dynamic-import": "^7.13.8", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.13.8", - "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", - "@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.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.13.16", - "@babel/plugin-transform-classes": "^7.13.0", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.0", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.13.0", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", - "semver": "^6.3.0" + "bin": { + "acorn": "bin/acorn" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "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": { - "@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" + "debug": "4" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "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": { - "regenerator-runtime": "^0.13.4" + "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/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/types": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", - "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", + "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, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/@koa/cors": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-3.1.0.tgz", - "integrity": "sha512-7ulRC1da/rBa6kj6P4g2aJfnET3z8Uf3SWu60cjbtxTA5g8lxRdX/Bd2P92EagGwwAhANeNw8T8if99rJliR6Q==", + "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": { - "vary": "^1.1.2" + "color-convert": "^1.9.0" }, "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@material/animation": { - "version": "9.0.0-canary.1c156d69d.0", - "resolved": "https://registry.npmjs.org/@material/animation/-/animation-9.0.0-canary.1c156d69d.0.tgz", - "integrity": "sha512-m3eUpFRwxcP1tEWJlIH5q77YGSYEe5ITRw5OtyDvxU7ZzF0xKJbBeauQEdCmyig9UvK+J7jUUnCgkT/t/ldLtw==", - "dependencies": { - "tslib": "^1.9.3" - } - }, - "node_modules/@material/animation/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@material/base": { - "version": "9.0.0-canary.1c156d69d.0", - "resolved": "https://registry.npmjs.org/@material/base/-/base-9.0.0-canary.1c156d69d.0.tgz", - "integrity": "sha512-r98qY6EsPx6BlzT0Pj+H+BTI7r76GEX/zZPgajxZjbPAJSeeK+uCh69Dmhf63meLKaFkKgvLwH5udKJLMqqjpQ==", - "dependencies": { - "tslib": "^1.9.3" - } - }, - "node_modules/@material/base/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@material/dom": { - "version": "9.0.0-canary.1c156d69d.0", - "resolved": "https://registry.npmjs.org/@material/dom/-/dom-9.0.0-canary.1c156d69d.0.tgz", - "integrity": "sha512-AwiQDzquolB7rqy8k4+QMVQ8Njb6k0CT+otJ/UNJbj0qNVXZB4njVaWRWrWCt70hYp1rG0cRNkZ01ZJDqABUFw==", - "dependencies": { - "@material/feature-targeting": "9.0.0-canary.1c156d69d.0", - "tslib": "^1.9.3" - } - }, - "node_modules/@material/dom/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@material/feature-targeting": { - "version": "9.0.0-canary.1c156d69d.0", - "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-9.0.0-canary.1c156d69d.0.tgz", - "integrity": "sha512-HWd0+GMnkVB3anmUc9+MeWCNoogAbb4U7ihzwq7lzLCQyC+i/kunppkUVV7DhL3ZVl1O6zIw1eAT+dgQpN8x4Q==" - }, - "node_modules/@material/mwc-base": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.20.0.tgz", - "integrity": "sha512-q35jN1TGBts3LzKk2RVtgBpLDfBfRrx2hJ4GEVAeJsEGiO5CZrCD0bPlZSRTammzQBbDAh7szvhMiWo0TkRaWw==", - "dependencies": { - "@material/base": "=9.0.0-canary.1c156d69d.0", - "@material/dom": "=9.0.0-canary.1c156d69d.0", - "lit-element": "^2.3.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-button": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.20.0.tgz", - "integrity": "sha512-kqQpeuLfaqfH4PZbENT9rwx1sgeFPLHuKy5M31ZeKG1deRTxw11FDGeMxSkePfm1QFfY6DNTsIAG5qC56tUNlw==", - "dependencies": { - "@material/mwc-icon": "^0.20.0", - "@material/mwc-ripple": "^0.20.0", - "lit-element": "^2.3.0", - "lit-html": "^1.1.2", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-icon": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.20.0.tgz", - "integrity": "sha512-YCtzWbJVSZGcvWKVHwIhwfGMLEqAmRSVGcXTCAH/rOzGU7RkOxQkfNDkLAuTRAX9a7HYQStIJ39ENVcysElljg==", - "dependencies": { - "lit-element": "^2.3.0", - "tslib": "^2.0.1" - } - }, - "node_modules/@material/mwc-ripple": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.20.0.tgz", - "integrity": "sha512-4rlIu+Kk//NsW/u3CnU1kz3dsvwEozax0Zf2CUp+ao0ozclHfQ2+sTZVY0Mr8+GJLn7Oz51gT5OHoarZuWWljA==", - "dependencies": { - "@material/dom": "=9.0.0-canary.1c156d69d.0", - "@material/mwc-base": "^0.20.0", - "@material/ripple": "=9.0.0-canary.1c156d69d.0", - "lit-element": "^2.3.0", - "lit-html": "^1.1.2", - "tslib": "^2.0.1" + "node": ">=4" } }, - "node_modules/@material/ripple": { - "version": "9.0.0-canary.1c156d69d.0", - "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-9.0.0-canary.1c156d69d.0.tgz", - "integrity": "sha512-F1e/LQmYHQFORM/C3hchmANnRwJCXlc7Cp7W+VGpvJdtdzYlTd8DKKcShuOozxUQOjutbNf+Ql8gpZIdYRQaoQ==", + "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": { - "@material/animation": "9.0.0-canary.1c156d69d.0", - "@material/base": "9.0.0-canary.1c156d69d.0", - "@material/dom": "9.0.0-canary.1c156d69d.0", - "@material/feature-targeting": "9.0.0-canary.1c156d69d.0", - "@material/theme": "9.0.0-canary.1c156d69d.0", - "tslib": "^1.9.3" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@material/ripple/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@material/theme": { - "version": "9.0.0-canary.1c156d69d.0", - "resolved": "https://registry.npmjs.org/@material/theme/-/theme-9.0.0-canary.1c156d69d.0.tgz", - "integrity": "sha512-r1610TPwUplt4FHMk7cR06Oz1jU/G31wBIh4Frs/YIB0ZonVlI5cZdIkG0IFtNt9ZYWoDwfP/1nQBxdqrDPPhg==", - "dependencies": { - "@material/feature-targeting": "9.0.0-canary.1c156d69d.0" - } + "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/@open-wc/building-utils": { - "version": "2.18.4", - "resolved": "https://registry.npmjs.org/@open-wc/building-utils/-/building-utils-2.18.4.tgz", - "integrity": "sha512-wjNp9oE1SFsiBEqaI67ff60KHDpDbGMNF+82pvCHe412SFY4q8DNy8A+hesj1nZsuZHH1/olDfzBDbYKAnmgMg==", + "node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, "dependencies": { - "@babel/core": "^7.11.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@webcomponents/shadycss": "^1.10.2", - "@webcomponents/webcomponentsjs": "^2.5.0", - "arrify": "^2.0.1", - "browserslist": "^4.16.0", - "chokidar": "^3.4.3", - "clean-css": "^4.2.3", - "clone": "^2.1.2", - "core-js-bundle": "^3.8.1", - "deepmerge": "^4.2.2", - "es-module-shims": "^0.4.7", - "html-minifier-terser": "^5.1.1", - "lru-cache": "^5.1.1", - "minimatch": "^3.0.4", - "parse5": "^5.1.1", - "path-is-inside": "^1.0.2", - "regenerator-runtime": "^0.13.7", - "resolve": "^1.19.0", - "rimraf": "^3.0.2", - "shady-css-scoped-element": "^0.0.2", - "systemjs": "^6.8.3", - "terser": "^4.6.7", - "valid-url": "^1.0.9", - "whatwg-fetch": "^3.5.0", - "whatwg-url": "^7.1.0" - } - }, - "node_modules/@reallyland/tsconfig": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@reallyland/tsconfig/-/tsconfig-3.0.2.tgz", - "integrity": "sha512-a4lj2jtMC19MwkwjmHnjH1fw0TmUjfQ0RitxqX+LbV1ZzH51dGn3ZtWwnSjnpi/9sAeVKCGFmlUOhbC6UfbaHg==", - "dev": true, + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, "engines": { - "node": ">= 14.15.3", - "npm": ">= 6.14.9", - "typescript": ">= 4.1.3" + "node": ">=6.0" } }, - "node_modules/@reallyland/tslint-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@reallyland/tslint-config/-/tslint-config-1.1.1.tgz", - "integrity": "sha512-9g8E2DvORelAtR9qs/X5ZD01hGlPZeg4Io2obTePVU4TtvyPWqXoROa9q/WpaObsA5BgRC6lAWjNz2RUUebRzA==", + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, - "dependencies": { - "tslint-config-airbnb": "^5.11.1", - "tslint-immutable": "^6.0.1" - }, "engines": { - "node": ">= 8.16.0", - "npm": ">= 6.4.1" + "node": ">=6" } }, - "node_modules/@reallyland/tslint-config/node_modules/@fimbul/bifrost": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@fimbul/bifrost/-/bifrost-0.21.0.tgz", - "integrity": "sha512-ou8VU+nTmOW1jeg+FT+sn+an/M0Xb9G16RucrfhjXGWv1Q97kCoM5CG9Qj7GYOSdu7km72k7nY83Eyr53Bkakg==", + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "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, - "dependencies": { - "@fimbul/ymir": "^0.21.0", - "get-caller-file": "^2.0.0", - "tslib": "^1.8.1", - "tsutils": "^3.5.0" - }, - "peerDependencies": { - "tslint": "^5.0.0", - "typescript": ">= 3.3.0 || >= 3.6.0-dev || >= 3.7.0-dev" + "engines": { + "node": ">=8" } }, - "node_modules/@reallyland/tslint-config/node_modules/@fimbul/bifrost/node_modules/@fimbul/ymir": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@fimbul/ymir/-/ymir-0.21.0.tgz", - "integrity": "sha512-T/y7WqPsm4n3zhT08EpB5sfdm2Kvw3gurAxr2Lr5dQeLi8ZsMlNT/Jby+ZmuuAAd1PnXYzKp+2SXgIkQIIMCUg==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "dependencies": { - "inversify": "^5.0.0", - "reflect-metadata": "^0.1.12", - "tslib": "^1.8.1" - }, - "peerDependencies": { - "tsutils": ">=2.29.0", - "typescript": ">= 3.3.0 || >= 3.6.0-dev || >= 3.7.0-dev" + "engines": { + "node": ">=8" } }, - "node_modules/@reallyland/tslint-config/node_modules/@fimbul/bifrost/node_modules/tsutils": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.19.1.tgz", - "integrity": "sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw==", + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "lodash": "^4.17.14" } }, - "node_modules/@reallyland/tslint-config/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==", + "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, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, "engines": { "node": ">=4" } }, - "node_modules/@reallyland/tslint-config/node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "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/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, - "peer": true, - "engines": { - "node": ">=0.10.0" - } + "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/@reallyland/tslint-config/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==", + "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, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/@reallyland/tslint-config/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==", + "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, - "peer": true, "dependencies": { - "color-name": "1.1.3" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/@reallyland/tslint-config/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, - "peer": true + "node_modules/blocking-elements": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/blocking-elements/-/blocking-elements-0.1.1.tgz", + "integrity": "sha512-/SLWbEzMoVIMZACCyhD/4Ya2M1PWP1qMKuiymowPcI+PdWDARqeARBjhj73kbUBCxEmTZCUu5TAqxtwUO9C1Ig==" }, - "node_modules/@reallyland/tslint-config/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==", + "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, - "peer": true + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/@reallyland/tslint-config/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "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, - "peer": true, + "dependencies": { + "fill-range": "^7.0.1" + }, "engines": { - "node": ">=0.3.1" + "node": ">=8" } }, - "node_modules/@reallyland/tslint-config/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, - "peer": true, - "engines": { - "node": ">=4" + "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/@reallyland/tslint-config/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==", + "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, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/@reallyland/tslint-config/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@reallyland/tslint-config/node_modules/tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, "engines": { - "node": ">=4.8.0" + "node": ">=6" }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@reallyland/tslint-config/node_modules/tslint-config-airbnb": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/tslint-config-airbnb/-/tslint-config-airbnb-5.11.2.tgz", - "integrity": "sha512-mUpHPTeeCFx8XARGG/kzYP4dPSOgoCqNiYbGHh09qTH8q+Y1ghsOgaeZKYYQT7IyxMos523z/QBaiv2zKNBcow==", + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "dependencies": { - "tslint-consistent-codestyle": "^1.14.1", - "tslint-eslint-rules": "^5.4.0", - "tslint-microsoft-contrib": "~5.2.1" - }, - "peerDependencies": { - "tslint": "^5.11.0" + "engines": { + "node": ">= 0.8" } }, - "node_modules/@reallyland/tslint-config/node_modules/tslint-consistent-codestyle": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.16.0.tgz", - "integrity": "sha512-ebR/xHyMEuU36hGNOgCfjGBNYxBPixf0yU1Yoo6s3BrpBRFccjPOmIVaVvQsWAUAMdmfzHOCihVkcaMfimqvHw==", + "node_modules/cache-content-type": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", + "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", "dev": true, "dependencies": { - "@fimbul/bifrost": "^0.21.0", - "tslib": "^1.7.1", - "tsutils": "^2.29.0" + "mime-types": "^2.1.18", + "ylru": "^1.2.0" }, - "peerDependencies": { - "tslint": "^5.0.0", - "typescript": ">=2.1.4 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >=3.1.0-dev || >=3.2.0-dev || >=3.3.0-dev || >=3.4.0-dev" + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/@reallyland/tslint-config/node_modules/tslint-eslint-rules": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz", - "integrity": "sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w==", + "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": { - "doctrine": "0.7.2", - "tslib": "1.9.0", - "tsutils": "^3.0.0" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, - "peerDependencies": { - "tslint": "^5.0.0", - "typescript": "^2.2.0 || ^3.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@reallyland/tslint-config/node_modules/tslint-eslint-rules/node_modules/tslib": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", - "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", - "dev": true - }, - "node_modules/@reallyland/tslint-config/node_modules/tslint-eslint-rules/node_modules/tsutils": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.19.1.tgz", - "integrity": "sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw==", + "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, - "dependencies": { - "tslib": "^1.8.1" - }, "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "node": ">=6" } }, - "node_modules/@reallyland/tslint-config/node_modules/tslint-immutable": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/tslint-immutable/-/tslint-immutable-6.0.1.tgz", - "integrity": "sha512-3GQ6HffN64gLmT/N1YzyVMqyf6uBjMvhNaevK8B0K01/QC0OU5AQZrH4TjMHo1IdG3JpqsZvuRy9IW1LA3zjwA==", + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "dependencies": { - "tsutils": "^2.28.0 || ^3.0.0" + "engines": { + "node": ">=10" }, - "peerDependencies": { - "tslint": "^5.8.0", - "typescript": "^2.8.0 || ^3.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@reallyland/tslint-config/node_modules/tslint-microsoft-contrib": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz", - "integrity": "sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA==", + "node_modules/chai-a11y-axe": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/chai-a11y-axe/-/chai-a11y-axe-1.4.0.tgz", + "integrity": "sha512-m7J6DVAl1ePL2ifPKHmwQyHXdCZ+Qfv+qduh6ScqcDfBnJEzpV1K49TblujM45j1XciZOFeFNqMb2sShXMg/mw==", "dev": true, "dependencies": { - "tsutils": "^2.27.2 <2.29.0" - }, - "peerDependencies": { - "tslint": "^5.1.0", - "typescript": "^2.1.0 || ^3.0.0" + "axe-core": "^4.3.3" } }, - "node_modules/@reallyland/tslint-config/node_modules/tslint-microsoft-contrib/node_modules/tsutils": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", - "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", + "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": { - "tslib": "^1.8.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + "engines": { + "node": ">=4" } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" + "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": ">= 10.0.0" + "node": ">= 8.10.0" }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "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/chrome-launcher": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz", + "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==", "dev": true, "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" }, - "engines": { - "node": ">= 8.0.0" + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "engines": { + "node": ">=12.13.0" } }, - "node_modules/@sindresorhus/is": { + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz", - "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==", + "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/sindresorhus/is?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@skypack/package-check": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@skypack/package-check/-/package-check-0.2.2.tgz", - "integrity": "sha512-T4Wyi9lUuz0a1C2OHuzqZ0aFOCI0AmaGTb2LP9sHgWdoHXlB3JU02gfBpa0Y081G/gFsJYpQ/R0iCJRzF/nknw==", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "dependencies": { - "kleur": "^4.1.3", - "yargs-parser": "^20.2.3" + "restore-cursor": "^3.1.0" }, - "bin": { - "package-check": "index.bin.js" + "engines": { + "node": ">=8" } }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, "engines": { - "node": ">=10" + "node": ">=0.8" } }, - "node_modules/@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true, - "dependencies": { - "@types/node": "*" + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "node_modules/co-body": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", + "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", "dev": true, "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "inflation": "^2.0.0", + "qs": "^6.5.2", + "raw-body": "^2.3.3", + "type-is": "^1.6.16" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "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": { - "@babel/types": "^7.0.0" + "color-name": "1.1.3" } }, - "node_modules/@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "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/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "engines": { + "node": ">=0.1.90" } }, - "node_modules/@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, "dependencies": { - "@babel/types": "^7.3.0" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/@types/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "node_modules/command-line-usage": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", "dev": true, "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/@types/browserslist": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@types/browserslist/-/browserslist-4.15.0.tgz", - "integrity": "sha512-h9LyKErRGZqMsHh9bd+FE8yCIal4S0DxKTOeui56VgVXqa66TKiuaIUxCAI7c1O0LjaUzOTcsMyOpO9GetozRA==", - "deprecated": "This is a stub types definition. browserslist provides its own type definitions, so you do not need this installed.", + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, - "dependencies": { - "browserslist": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/browserslist-useragent": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/browserslist-useragent/-/browserslist-useragent-3.0.3.tgz", - "integrity": "sha512-8ZVSxTKdGLAIWt5NaYR+VoD7G0zVTG0yvuAmPRDXBs/pR+SKbPwkiw/gac2IxBc5IBA59orlSJh4/aYF4o0QAg==", - "dev": true - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/caniuse-api": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/caniuse-api/-/caniuse-api-3.0.1.tgz", - "integrity": "sha512-VcjPciJLx86btwWypSo6vRzZSOC6asS3/SGgn7r7Xk7jAWNyMoxCy+IQzI2vuW2Bvs3iytyOEwsjLJKmHXBvmA==", - "dev": true - }, - "node_modules/@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", - "dev": true - }, - "node_modules/@types/command-line-args": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.0.0.tgz", - "integrity": "sha512-4eOPXyn5DmP64MCMF8ePDvdlvlzt2a+F8ZaVjqmh2yFCpGjc1kI3kGnCFYX9SCsGTjQcWIyVZ86IHCEyjy/MNg==", - "dev": true - }, - "node_modules/@types/command-line-usage": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.1.tgz", - "integrity": "sha512-/xUgezxxYePeXhg5S04hUjxG9JZi+rJTs1+4NwpYPfSaS7BeDa6tVJkH6lN9Cb6rl8d24Fi2uX0s0Ngg2JT6gg==", - "dev": true - }, - "node_modules/@types/connect": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", - "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">= 12" } }, - "node_modules/@types/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg==", - "dev": true + "node_modules/comment-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } }, - "node_modules/@types/cookies": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.6.tgz", - "integrity": "sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w==", + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "dependencies": { - "@types/connect": "*", - "@types/express": "*", - "@types/keygrip": "*", - "@types/node": "*" + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" } }, - "node_modules/@types/debounce": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.0.tgz", - "integrity": "sha512-bWG5wapaWgbss9E238T0R6bfo5Fh3OkeoSt245CM7JJwVwpw6MEBCbIxLq5z8KzsE3uJhzcIuQkyiZmzV3M/Dw==", - "dev": true - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "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/@types/etag": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@types/etag/-/etag-1.8.0.tgz", - "integrity": "sha512-EdSN0x+Y0/lBv7YAb8IU4Jgm6DWM+Bqtz7o5qozl96fzaqdqbdfHS5qjdpFeIv7xQ8jSLyjMMNShgYtMajEHyQ==", + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "dependencies": { - "@types/node": "*" + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@types/express": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz", - "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==", + "node_modules/content-disposition/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, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } + "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/@types/express-serve-static-core": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz", - "integrity": "sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==", + "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, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" + "engines": { + "node": ">= 0.6" } }, - "node_modules/@types/http-assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz", - "integrity": "sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ==", - "dev": true - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", - "dev": true - }, - "node_modules/@types/http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA==", - "dev": true - }, - "node_modules/@types/keygrip": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz", - "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", - "dev": true - }, - "node_modules/@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", + "node_modules/conventional-changelog-conventionalcommits": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", + "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, "dependencies": { - "@types/node": "*" + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@types/koa": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.1.tgz", - "integrity": "sha512-Qbno7FWom9nNqu0yHZ6A0+RWt4mrYBhw3wpBAQ3+IuzGcLlfeYkzZrnMq5wsxulN2np8M4KKeUpTodsOsSad5Q==", + "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": { - "@types/accepts": "*", - "@types/content-disposition": "*", - "@types/cookies": "*", - "@types/http-assert": "*", - "@types/http-errors": "*", - "@types/keygrip": "*", - "@types/koa-compose": "*", - "@types/node": "*" + "safe-buffer": "~5.1.1" } }, - "node_modules/@types/koa__cors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/koa__cors/-/koa__cors-3.0.2.tgz", - "integrity": "sha512-gBetQR0DJ9JTG1YQoW33BADHCrDPJGiJUKUUcEPJwW1A2unzpIMhorEpXB6eMaaXTaqHLemcGnq3RmH9XaryRQ==", + "node_modules/cookies": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", + "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", "dev": true, "dependencies": { - "@types/koa": "*" + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/@types/koa-compose": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", - "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", + "node_modules/core-js-pure": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.1.tgz", + "integrity": "sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==", "dev": true, - "dependencies": { - "@types/koa": "*" + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/@types/koa-compress": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@types/koa-compress/-/koa-compress-2.0.9.tgz", - "integrity": "sha512-1Sa9OsbHd2N2N7gLpdIRHe8W99EZbfIR31D7Iisx16XgwZCnWUtGXzXQejhu74Y1pE/wILqBP6VL49ch/MVpZw==", + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dev": true, "dependencies": { - "@types/koa": "*", - "@types/node": "*" + "node-fetch": "2.6.7" } }, - "node_modules/@types/koa-etag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/koa-etag/-/koa-etag-3.0.0.tgz", - "integrity": "sha512-gXQUtKGEnCy0sZLG+uE3wL4mvY1CBPcb6ECjpAoD8RGYy/8ACY1B084k8LTFPIdVcmy7GD6Y4n3up3jnupofcQ==", + "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": { - "@types/etag": "*", - "@types/koa": "*" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@types/koa-send": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@types/koa-send/-/koa-send-4.1.2.tgz", - "integrity": "sha512-rfqKIv9bFds39Jxvsp8o3YJLnEQVPVriYA14AuO2OY65IHh/4UX4U/iMs5L0wATpcRmm1bbe0BNk23TRwx3VQQ==", + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "dependencies": { - "@types/koa": "*" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@types/koa-static": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.1.tgz", - "integrity": "sha512-SSpct5fEcAeRkBHa3RiwCIRfDHcD1cZRhwRF///ZfvRt8KhoqRrhK6wpDlYPk/vWHVFE9hPGqh68bhzsHkir4w==", + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, - "dependencies": { - "@types/koa": "*", - "@types/koa-send": "*" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/@types/lru-cache": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz", - "integrity": "sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w==", + "node_modules/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 }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/mime-types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz", - "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", - "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==", - "dev": true - }, - "node_modules/@types/node": { - "version": "14.14.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.21.tgz", - "integrity": "sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A==", - "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/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/@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==" + "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, + "engines": { + "node": ">=8" + } }, - "node_modules/@types/path-is-inside": { + "node_modules/delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/path-is-inside/-/path-is-inside-1.0.0.tgz", - "integrity": "sha512-hfnXRGugz+McgX2jxyy5qz9sB21LRzlGn24zlwN2KEgoPtEvjzNRrLtUkOOebPDPZl3Rq7ywKxYvylVcEZDnEw==", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, - "node_modules/@types/pretty": { + "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/pretty/-/pretty-2.0.0.tgz", - "integrity": "sha512-nojaE6CV03swMxoHnAisV2Rl0Ma6WPUtQo87hUmaotu/YPugPlmiRB60sthbyppXdMFTdJV3wm6zCENY4q1tKA==", - "dev": true + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "node_modules/@types/prismjs": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.16.2.tgz", - "integrity": "sha512-1M/j21xgTde7RPtpJVQebW5rzrquj7S+wnqt4x9uWrIPpr0Ya/uXypcqC2aUQL5gtLXFCKSH7GnjfAijMdfbuA==" + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } }, - "node_modules/@types/qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==", - "dev": true + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, - "node_modules/@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "node_modules/devtools-protocol": { + "version": "0.0.969999", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.969999.tgz", + "integrity": "sha512-6GfzuDWU0OFAuOvBokXpXPLxjOJ5DZ157Ue3sGQQM3LgAamb8m0R0ruSfN0DDu+XG5XJgT50i6zZ/0o8RglreQ==", "dev": true }, - "node_modules/@types/request": { - "version": "2.48.5", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.5.tgz", - "integrity": "sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ==", + "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, - "dependencies": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" + "engines": { + "node": ">=0.3.1" } }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "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": { - "@types/node": "*" + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "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/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { - "@types/node": "*" + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@types/selenium-standalone": { - "version": "6.15.2", - "resolved": "https://registry.npmjs.org/@types/selenium-standalone/-/selenium-standalone-6.15.2.tgz", - "integrity": "sha512-Jnt4AHHcUOPGuZ5cJRYfP3IpPalNc/o1BmFvuFFmLtU2PtvEGvyyJPdpErqzZDxsP8E4yjTst0GL+QMJiEWuBA==", + "node_modules/dom5": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", + "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==", "dev": true, "dependencies": { - "@types/node": "*" + "@types/parse5": "^2.2.34", + "clone": "^2.1.0", + "parse5": "^4.0.0" } }, - "node_modules/@types/serve-static": { - "version": "1.13.9", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", - "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", + "node_modules/dom5/node_modules/@types/parse5": { + "version": "2.2.34", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz", + "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=", "dev": true, "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, - "node_modules/@types/tough-cookie": { + "node_modules/dom5/node_modules/parse5": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, - "node_modules/@types/whatwg-url": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-6.4.0.tgz", - "integrity": "sha512-tonhlcbQ2eho09am6RHnHOgvtDfDYINd5rgxD+2YSkKENooVCFsWizJz139MQW/PV8FfClyKrNe9ZbdHrSCxGg==", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "dependencies": { - "@types/node": "*" + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@wdio/cli": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-5.23.0.tgz", - "integrity": "sha512-QYhVQUIBamgr627dU88XE7yyiZ/Oe6gQR2ZGiZMyxDQ3zxXnf9BRhKtn1x+AKLO7Dwag8+Apy/3xNeY4OOsfog==", - "dev": true, - "dependencies": { - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/utils": "5.23.0", - "async-exit-hook": "^2.0.1", - "chalk": "^3.0.0", - "chokidar": "^3.0.0", - "cli-spinners": "^2.1.0", - "ejs": "^3.0.1", - "fs-extra": "^8.0.1", - "inquirer": "^7.0.0", - "lodash.flattendeep": "^4.4.0", - "lodash.pickby": "^4.6.0", - "lodash.union": "^4.6.0", - "log-update": "^3.2.0", - "webdriverio": "5.23.0", - "yargs": "^15.0.1", - "yarn-install": "^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/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "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/errorstacks": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.4.0.tgz", + "integrity": "sha512-5ecWhU5gt0a5G05nmQcgCxP5HperSMxLDzvWlT5U+ZSKkuDK0rJ3dbCQny6/vSCIXjwrhwSecXBbw1alr295hQ==", + "dev": true + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.12.29", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", + "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", + "dev": true, + "hasInstallScript": true, "bin": { - "wdio": "bin/wdio.js" - }, + "esbuild": "bin/esbuild" + } + }, + "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": ">= 8.11.0" + "node": ">=0.8.0" } }, - "node_modules/@wdio/config": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-5.22.4.tgz", - "integrity": "sha512-i5dJQWb80darcRA//tfG0guMeQCeRUXroZNnHjGNb1qzvTRZmcIIhdxaD+DbK/5dWEx6aoMfoi6wjVp/CXwdAg==", + "node_modules/eslint": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", "dev": true, "dependencies": { - "@wdio/logger": "5.16.10", - "deepmerge": "^4.0.0", - "glob": "^7.1.2" + "@eslint/eslintrc": "^1.2.1", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">= 8.11.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@wdio/local-runner": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-5.23.0.tgz", - "integrity": "sha512-+hlkaLemsOodCq19DEWi6ILu4qi8q023LZfLj6ZJdxLdVxkqrvm6VlRhI3B7u6T5CGA7CaOe500LeKK4strKwA==", + "node_modules/eslint-plugin-lit": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-1.6.1.tgz", + "integrity": "sha512-BpPoWVhf8dQ/Sz5Pi9NlqbGoH5BcMcVyXhi2XTx2XGMAO9U2lS+GTSsqJjI5hL3OuxCicNiUEWXazAwi9cAGxQ==", "dev": true, "dependencies": { - "@wdio/logger": "5.16.10", - "@wdio/repl": "5.23.0", - "@wdio/runner": "5.23.0", - "async-exit-hook": "^2.0.1", - "stream-buffers": "^3.0.2" + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "requireindex": "^1.2.0" }, "engines": { - "node": ">= 8.11.0" + "node": ">= 12" }, "peerDependencies": { - "@wdio/cli": "^5.0.0" + "eslint": ">= 5" } }, - "node_modules/@wdio/logger": { - "version": "5.16.10", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-5.16.10.tgz", - "integrity": "sha512-hRKhxgd9uB48Dtj2xe2ckxU4KwI/RO8IwguySuaI2SLFj6EDbdonwzpVkq111/fjBuq7R1NauAaNcm3AMEbIFA==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" + "node_modules/eslint-plugin-lit-a11y": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit-a11y/-/eslint-plugin-lit-a11y-2.2.0.tgz", + "integrity": "sha512-1Vy9mR7UGigPnOHj5qJMU3uEK+Qul7dQOg9I6YKEYrw3C3HUx1FS/FbICjZI+n/v+2qvvJhw+5Tghuld2QWUJw==", + "dev": true, + "dependencies": { + "aria-query": "^4.2.2", + "axe-core": "^4.3.3", + "axobject-query": "^2.2.0", + "dom5": "^3.0.1", + "emoji-regex": "^9.2.0", + "eslint-plugin-lit": "^1.6.0", + "eslint-rule-extender": "0.0.1", + "language-tags": "^1.0.5", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "requireindex": "~1.2.0" }, + "peerDependencies": { + "eslint": ">= 5" + } + }, + "node_modules/eslint-plugin-lit-a11y/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/eslint-plugin-promise": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz", + "integrity": "sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw==", + "dev": true, "engines": { - "node": ">= 8.11.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@wdio/mocha-framework": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-5.23.0.tgz", - "integrity": "sha512-TLkl07wGWxHmIi46GNr9napeZ6ojEWMtHp5hsSeM7/9fabBWiSHq0aSFrvw6y8GIPZHr6Qp8sQ7CXX33R0uzRg==", + "node_modules/eslint-plugin-regexp": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.6.0.tgz", + "integrity": "sha512-xkaQOzyY4PUukRd8b6zTq+QTtg0dePlCP2dZiM+XGSmvlpDeYiPJHfRDpAfS/sP9YtK6q7DGes1smCyPTD3Lkg==", "dev": true, "dependencies": { - "@wdio/logger": "5.16.10", - "@wdio/utils": "5.23.0", - "mocha": "^7.0.1" + "comment-parser": "^1.1.2", + "eslint-utils": "^3.0.0", + "grapheme-splitter": "^1.0.4", + "jsdoctypeparser": "^9.0.0", + "refa": "^0.9.0", + "regexp-ast-analysis": "^0.3.0", + "regexpp": "^3.2.0", + "scslre": "^0.1.6" }, "engines": { - "node": ">= 8.11.0" + "node": "^12 || >=14" }, "peerDependencies": { - "webdriverio": "^5.0.0" + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz", + "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==", + "dev": true, + "peerDependencies": { + "eslint": ">=5.0.0" } }, - "node_modules/@wdio/protocols": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-5.22.1.tgz", - "integrity": "sha512-GdoWb/HTrb09Qb0S/7sLp1NU94LAhTsF1NnFj5sEFSUpecrl0S07pnhVg54pUImectN/woaqSl7uJGjlSGZcdQ==", + "node_modules/eslint-rule-extender": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eslint-rule-extender/-/eslint-rule-extender-0.0.1.tgz", + "integrity": "sha512-F0j1Twve3lamL3J0rRSVAynlp58sDPG39JFcQrM+u9Na7PmCgiPHNODh6YE9mduaGcsn3NBqbf6LZRj0cLr8Ng==", "dev": true, "engines": { - "node": ">= 4.8.5" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kaicataldo" } }, - "node_modules/@wdio/repl": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-5.23.0.tgz", - "integrity": "sha512-cKG9m0XuqcQenQmoup0yJX1fkDQEdY06QXuwt636ZQf6XgDoeoAdNOgnRnNruQ0+JsC2eqHFoSNto1q8wcLH/g==", + "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, "dependencies": { - "@wdio/utils": "5.23.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">= 8.11.0" + "node": ">=8.0.0" } }, - "node_modules/@wdio/reporter": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-5.22.4.tgz", - "integrity": "sha512-y/HIKGJHsKXroWWH1B7upynoYmFMuAwJs3LEVwdnpiJIBF4DxzIrRGCY/SSA6U1a/+cRTdI5m1+vA1gcFxcmwQ==", + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { - "fs-extra": "^8.0.1" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">= 8.11.0" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" } }, - "node_modules/@wdio/runner": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-5.23.0.tgz", - "integrity": "sha512-G4ddjgYeaopF3L+1+48V/MgCVSTOpiNXfHpQG3RBi9iw2dCYraZtn1bZEiBqTZaGd+tqd+DBvfQ0HjP0JUT8Kw==", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "dependencies": { - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/utils": "5.23.0", - "deepmerge": "^4.0.0", - "gaze": "^1.1.2", - "webdriverio": "5.23.0" - }, "engines": { - "node": ">= 8.11.0" + "node": ">=10" } }, - "node_modules/@wdio/sauce-service": { - "version": "5.22.5", - "resolved": "https://registry.npmjs.org/@wdio/sauce-service/-/sauce-service-5.22.5.tgz", - "integrity": "sha512-8PA11lFRu+iojnLRGztf799fgOcCUt8IOXsjTC73ea+7oBfNo01UpFiMFuVNIiz2BymEfUR7mLQOzzgaqxeIpA==", + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, - "dependencies": { - "@wdio/logger": "5.16.10", - "sauce-connect-launcher-update": "^1.3.2", - "saucelabs": "^4.0.0" - }, "engines": { - "node": ">= 8.11.0" - }, - "peerDependencies": { - "@wdio/cli": "^5.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@wdio/selenium-standalone-service": { - "version": "5.16.10", - "resolved": "https://registry.npmjs.org/@wdio/selenium-standalone-service/-/selenium-standalone-service-5.16.10.tgz", - "integrity": "sha512-IudfrPgFoejkM+UT4sPv9g5pAGax7+CyHDZkbPDl2XXsct3gdAXDVe57KWuNYX+s0jFu8MSR/4nLnvJjdydNjw==", + "node_modules/eslint/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": { - "@types/selenium-standalone": "^6.15.0", - "@wdio/logger": "5.16.10", - "fs-extra": "^8.0.1", - "selenium-standalone": "^6.15.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8.11.0" + "node": ">=8" }, - "peerDependencies": { - "@wdio/cli": "^5.0.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@wdio/spec-reporter": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-5.23.0.tgz", - "integrity": "sha512-dqVqo5+wbSaJhQfOOnw8o53StFtPOlUwrsMsp80YATZZxGjtLLuNFWlT9xGVhMDzTnzBUNO8ZxsSIl8gSE2Iew==", + "node_modules/eslint/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": { - "@wdio/reporter": "5.22.4", - "chalk": "^3.0.0", - "easy-table": "^1.1.1", - "pretty-ms": "^6.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 8.11.0" + "node": ">=10" }, - "peerDependencies": { - "@wdio/cli": "^5.0.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@wdio/utils": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-5.23.0.tgz", - "integrity": "sha512-dWPEkDiaNUqJXPO6L2di2apI7Rle7Er4euh67Wlb5+3MrPNjCKhiF8gHcpQeL8oe6A1MH/f89kpSEEXe4BMkAw==", + "node_modules/eslint/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": { - "@wdio/logger": "5.16.10", - "deepmerge": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 8.11.0" + "node": ">=7.0.0" } }, - "node_modules/@webcomponents/shadycss": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.10.2.tgz", - "integrity": "sha512-9Iseu8bRtecb0klvv+WXZOVZatsRkbaH7M97Z+f+Pt909R4lDfgUODAnra23DOZTpeMTAkVpf4m/FZztN7Ox1A==", - "dev": true - }, - "node_modules/@webcomponents/webcomponentsjs": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.5.0.tgz", - "integrity": "sha512-C0l51MWQZ9kLzcxOZtniOMohpIFdCLZum7/TEHv3XWFc1Fvt5HCpbSX84x8ltka/JuNKcuiDnxXFkiB2gaePcg==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "node_modules/eslint/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/abortcontroller-polyfill": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.1.tgz", - "integrity": "sha512-yml9NiDEH4M4p0G4AcPkg8AAa4mF3nfYF28VQxaokpO67j9H7gWgmsVWJ/f1Rn+PzsnDYvzJzWIQzCqDKRvWlA==", - "dev": true + "node_modules/eslint/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/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "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==", + "node_modules/eslint/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, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=4.0" } }, - "node_modules/acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0" + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "node_modules/eslint/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": ">=0.3.0" + "node": ">=8" } }, - "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/eslint/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": { - "debug": "4" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=8" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/espree": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "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" + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.3.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/ajv/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/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } }, - "node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "node_modules/esquery/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": ">=6" + "node": ">=4.0" } }, - "node_modules/ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "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": { - "type-fest": "^0.11.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "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" + "node": ">=4.0" } }, - "node_modules/ansi-styles": { + "node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4.0" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", "dev": true }, - "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "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, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "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": ">= 0.6" + } }, - "node_modules/archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "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": { - "file-type": "^4.2.0" + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" }, "engines": { - "node": ">=4" + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/archive-type/node_modules/file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "node_modules/extract-zip/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": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/archiver": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", - "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", + "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.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^2.6.3", - "buffer-crc32": "^0.2.1", - "glob": "^7.1.4", - "readable-stream": "^3.4.0", - "tar-stream": "^2.1.0", - "zip-stream": "^2.1.2" + "@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": ">= 6" + "node": ">=8.6.0" } }, - "node_modules/archiver-utils": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } + "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/archiver/node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "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": { - "lodash": "^4.17.14" + "reusify": "^1.0.4" } }, - "node_modules/archiver/node_modules/bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "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": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "pend": "~1.2.0" } }, - "node_modules/archiver/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==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">= 6" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/archiver/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==", + "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": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, + "array-back": "^3.0.1" + }, "engines": { - "node": ">=6" + "node": ">=4.0.0" } }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "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/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=0.8" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, - "node_modules/async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "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.12.0" + "node": ">= 0.6" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "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/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "*" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "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/axe-core": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.1.tgz", - "integrity": "sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "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==", + "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": { - "object.assign": "^4.1.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", - "semver": "^6.1.1" + "engines": { + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/babel-plugin-polyfill-corejs2/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/babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.0", - "core-js-compat": "^3.9.1" + "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" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "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": { - "@babel/helper-define-polyfill-provider": "^0.2.0" + "is-glob": "^4.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">= 6" } }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "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/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "node_modules/globals": { + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "dependencies": { - "tweetnacl": "^0.14.3" + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bin-check": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "execa": "^0.7.0", - "executable": "^4.1.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bin-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", - "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", + "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 + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/hanbi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hanbi/-/hanbi-1.0.1.tgz", + "integrity": "sha512-ygE4dxg+khS7BZBZTVqaaq+X3oCQX6q4Z2LvNzRpPdZLmzbmL7xu6KCdjWoRiRlYfyZN9R+gMztf4MftiCH0Mw==", + "dev": true + }, + "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": { - "execa": "^1.0.0", - "find-versions": "^3.0.0" + "function-bind": "^1.1.1" }, "engines": { - "node": ">=6" + "node": ">= 0.4.0" } }, - "node_modules/bin-version-check": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", - "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", + "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, - "dependencies": { - "bin-version": "^3.0.0", - "semver": "^5.6.0", - "semver-truncate": "^1.1.2" - }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/bin-version/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "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, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, "engines": { - "node": ">=4.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bin-version/node_modules/execa": { + "node_modules/has-tostringtag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bin-version/node_modules/find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", "dev": true, "dependencies": { - "semver-regex": "^2.0.0" + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/bin-version/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "dependencies": { - "pump": "^3.0.0" + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/bin-version/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/bin-version/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "node_modules/http-errors/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": ">=4" + "node": ">= 0.6" } }, - "node_modules/bin-version/node_modules/semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", + "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": ">= 6" } }, - "node_modules/bin-version/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "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": { - "shebang-regex": "^1.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/bin-version/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "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, - "engines": { - "node": ">=0.10.0" - } + "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/bin-version/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">= 4" } }, - "node_modules/bin-wrapper": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", - "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", + "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": { - "bin-check": "^4.1.0", - "bin-version-check": "^4.0.0", - "download": "^7.1.0", - "import-lazy": "^3.1.0", - "os-filter-obj": "^2.0.0", - "pify": "^4.0.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "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": ">=8" + "node": ">=0.8.19" } }, - "node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "node_modules/inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=", "dev": true, - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "engines": { + "node": ">= 0.8.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==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "once": "^1.3.0", + "wrappy": "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==", + "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": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "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": { - "fill-range": "^7.0.1" + "binary-extensions": "^2.0.0" }, "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/browserslist": { - "version": "4.16.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.5.tgz", - "integrity": "sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==", + "node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001214", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.719", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "has": "^1.0.3" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/browserslist-useragent": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/browserslist-useragent/-/browserslist-useragent-3.0.3.tgz", - "integrity": "sha512-8KKO6kOXu/93IkMi8zVqzU72BgpoxcITIHtkM1qmlnxJtIMF9Y+2uWL9JS2uUbzj/PaS3kaA6LcICBThMojGjA==", + "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, - "dependencies": { - "browserslist": "^4.12.0", - "semver": "^7.3.2", - "useragent": "^2.3.0" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">= 6.x.x" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/browserslist-useragent/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==", + "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, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/browserslist-useragent/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-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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/browserslist-useragent/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/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "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" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "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": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "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, + "is-extglob": "^2.1.1" + }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/buffer-fill": { + "node_modules/is-module": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, - "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/cac": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", - "integrity": "sha1-bSTO7Dcu/lybeYgIvH9JtHJCpO8=", + "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, - "dependencies": { - "camelcase-keys": "^3.0.0", - "chalk": "^1.1.3", - "indent-string": "^3.0.0", - "minimist": "^1.2.0", - "read-pkg-up": "^1.0.1", - "suffix": "^0.1.0", - "text-table": "^0.2.0" - }, "engines": { - "node": ">=4" + "node": ">=0.12.0" } }, - "node_modules/cac/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/cac/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cac/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "is-docker": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/cac/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=", + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" } }, - "node_modules/cac/node_modules/supports-color": { + "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "dependencies": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=8" } }, - "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==", + "node_modules/istanbul-lib-report/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": ">=10.6.0" + "node": ">=8" } }, - "node_modules/cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", + "node_modules/istanbul-lib-report/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": { - "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": "^4.1.0", - "responselike": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "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==", + "node_modules/istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, - "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": ">=8" } }, - "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/jpeg-js": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", + "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==", + "dev": true }, - "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/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/camelcase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-3.0.0.tgz", - "integrity": "sha1-/AxsNgNj9zd+N5O5oWvM8QcMHKQ=", + "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": { - "camelcase": "^3.0.0", - "map-obj": "^1.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "node_modules/jsdoctypeparser": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", + "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", "dev": true, + "bin": { + "jsdoctypeparser": "bin/jsdoctypeparser" + }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "node": ">=10" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001219", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz", - "integrity": "sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ==", + "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/capital-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "node_modules/caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", "dev": true, "dependencies": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" + "tsscmp": "1.0.6" }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "node_modules/kleur": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", + "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=8" - } - }, - "node_modules/change-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" + "node": ">=6" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "node_modules/koa": { + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.4.tgz", + "integrity": "sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==", "dev": true, "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^2.0.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" }, "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.1" + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" } }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", "dev": true }, - "node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "node_modules/koa-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", + "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", "dev": true, "dependencies": { - "source-map": "~0.6.0" + "co": "^4.6.0", + "koa-compose": "^4.1.0" }, "engines": { - "node": ">= 4.0" + "node": ">= 10" } }, - "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==", + "node_modules/koa-etag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", + "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "etag": "^1.8.1" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/koa-send": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", "dev": true, "dependencies": { - "restore-cursor": "^3.1.0" + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", + "node_modules/koa-static": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 7.6.0" } }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "node_modules/koa-static/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "engines": { - "node": ">= 10" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "node_modules/language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" + "language-subtag-registry": "~0.3.2" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "node_modules/lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", "dev": true, - "engines": { - "node": ">=0.8" + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" } }, - "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=", + "node_modules/lighthouse-logger/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": { - "mimic-response": "^1.0.0" + "ms": "2.0.0" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } + "node_modules/lighthouse-logger/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/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, + "node_modules/lit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.2.1.tgz", + "integrity": "sha512-dSe++R50JqrvNGXmI9OE13de1z5U/Y3J2dTm/9GC86vedI8ILoR8ZGnxfThFpvQ9m0lR0qRnIR4IiKj/jDCfYw==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@lit/reactive-element": "^1.3.0", + "lit-element": "^3.2.0", + "lit-html": "^2.2.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/lit-element": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.2.0.tgz", + "integrity": "sha512-HbE7yt2SnUtg5DCrWt028oaU4D5F4k/1cntAFHTkzY8ZIa8N0Wmu92PxSxucsQSOXlODFrICkQ5x/tEshKi13g==", + "dependencies": { + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.2.0" + } }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true + "node_modules/lit-element/node_modules/@lit/reactive-element": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", + "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==" }, - "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, + "node_modules/lit-html": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.2.1.tgz", + "integrity": "sha512-AiJ/Rs0awjICs2FioTnHSh+Np5dhYSkyRczKy3wKjp8qjLhr1Ov+GiHrUQNdX8ou1LMuznpIME990AZsa/tR8g==", "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "@types/trusted-types": "^2.0.2" } }, - "node_modules/command-line-args": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.1.tgz", - "integrity": "sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==", - "dev": true, + "node_modules/lit-ntml": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/lit-ntml/-/lit-ntml-3.0.6.tgz", + "integrity": "sha512-PTxjoB1rgwGkfd8lN8agw7MeCojG2voJRBl2G/HBWH6mwsFobqUs+8NSymwPuFCFaAOuxlIVn42aahi3NhD0yg==", + "hasInstallScript": true, "dependencies": { - "array-back": "^3.0.1", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "parse5": "^6.0.1", + "tslib": "^2.0.2" }, "engines": { - "node": ">=4.0.0" + "node": ">= 16.x", + "npm": ">= 8.x" } }, - "node_modules/command-line-usage": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "node_modules/lit/node_modules/@lit/reactive-element": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", + "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==" + }, + "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": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/command-line-usage/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==", + "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-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", - "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", + "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": ">=8" + "node": ">=10" } }, - "node_modules/command-line-usage/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==", + "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": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "semver": "^6.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/command-line-usage/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==", + "node_modules/make-dir/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, - "dependencies": { - "color-name": "1.1.3" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "node_modules/marky": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.4.tgz", + "integrity": "sha512-zd2/GiSn6U3/jeFVZ0J9CA1LzQ8RfIVvXkb/U0swFHF/zT+dVohTAWjmo2DcIuofmIIIROlwTbd+shSeXmxr0w==", "dev": true }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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": ">=4" + "node": ">= 0.6" } }, - "node_modules/command-line-usage/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==", + "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, - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, - "node_modules/compress-commons": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", - "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^2.3.6" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">= 6" + "node": ">=8.6" } }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">= 0.6" + "node": ">=10.0.0" } }, - "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/condense-newlines": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", - "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", + "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, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-whitespace": "^0.3.0", - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "dev": true, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" + "node": ">= 0.6" } }, - "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==", + "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": { - "safe-buffer": "5.1.2" + "mime-db": "1.52.0" }, "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==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "engines": { - "node": ">= 0.6" - } - }, - "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": ">=6" } }, - "node_modules/cookies": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", - "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.8" + "node": "*" } }, - "node_modules/core-js-bundle": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/core-js-bundle/-/core-js-bundle-3.11.1.tgz", - "integrity": "sha512-G53levuILfTBZaMuglvFe8+pPu7JgLO3PLuNj2AOOMeoy16HjfkqI62UAtUOlS+ZW9ySXxiiC9nFCjaXMukm1g==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, - "node_modules/core-js-compat": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.1.tgz", - "integrity": "sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g==", + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "browserslist": "^4.16.5", - "semver": "7.0.0" + "bin": { + "mkdirp": "bin/cmd.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "engines": { + "node": ">=10" } }, - "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/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/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "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/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "node_modules/nano-staged": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/nano-staged/-/nano-staged-0.6.0.tgz", + "integrity": "sha512-TqbdujUpBMwaBu582a5/BHlxTrs3Mu1DMk8KF2q38M0CTGiY34WRpwaQXTy5jRc5BXGjBCy4XByS69TSaS8WPw==", "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" + "picocolors": "^1.0.0" + }, + "bin": { + "nano-staged": "lib/bin.js" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "dependencies": { - "buffer": "^5.1.0" - } + "node_modules/nanocolors": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", + "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==", + "dev": true }, - "node_modules/crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "node_modules/nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true, - "dependencies": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">= 6.9.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/crc32-stream/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==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { - "node": ">= 6" + "node": ">= 0.6" } }, - "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==", + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">= 8" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/css-value": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", - "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", + "node_modules/node-fetch/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/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "node_modules/node-fetch/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/node-fetch/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": { - "assert-plus": "^1.0.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/nodemod": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nodemod/-/nodemod-3.0.6.tgz", + "integrity": "sha512-XsW1ydsY8Dh7IyBIVsF8QFVNlBOUHMEJ8BNLzj8G9O27/g3KqfvfGZ8LFP3cOFcksZQ7skQdNVsgx+A7E56wMg==", + "hasInstallScript": true, + "dependencies": { + "lit-ntml": "^3.0.6", + "lodash-es": "^4.17.21", + "normalize-diacritics": "^3.0.6", + "tslib": "^2.3.0" }, "engines": { - "node": ">=0.10" + "node": ">= 16.x", + "npm": ">= 8.x" } }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, + "node_modules/normalize-diacritics": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/normalize-diacritics/-/normalize-diacritics-3.0.8.tgz", + "integrity": "sha512-1F5TgjYThbfRNYVSH00W5WPhngngNl8JqpiRWvLjlJQTLn4DM1DP6PIjMbR9xibj9eKnzvApBnk4uEHoC7si7w==", + "hasInstallScript": true, "dependencies": { - "ms": "2.1.2" + "tslib": "^2.1.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 14.x", + "npm": ">= 6.x" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "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/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=", + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "dev": true, - "engines": { - "node": ">=0.10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "dependencies": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" + "ee-first": "1.1.1" }, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "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/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { - "mimic-response": "^3.1.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "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==", + "node_modules/only": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", + "dev": true + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "dependencies": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" }, "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true, - "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/decompress-tar/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "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": ">=0.10.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "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": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2/node_modules/file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/decompress-tarbz2/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "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": ">=0.10.0" + "node": ">=6" } }, - "node_modules/decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "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": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" + "callsites": "^3.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/decompress-targz/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, - "node_modules/decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "dependencies": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "engines": { - "node": ">=4" + "parse5": "^6.0.1" } }, - "node_modules/decompress-unzip/node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "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.10.0" + "node": ">= 0.8" } }, - "node_modules/decompress-unzip/node_modules/get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "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, - "dependencies": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/decompress-unzip/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "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/decompress/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "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": ">=0.10.0" + "node": ">=8" } }, - "node_modules/deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "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/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "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==", + "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": ">=0.10.0" + "node": ">=8" } }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "optional": true, - "dependencies": { - "clone": "^1.0.2" - } + "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/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8" - } + "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/defer-to-connect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", - "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { - "node": ">=10" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "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==", + "node_modules/pixelmatch": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.2.1.tgz", + "integrity": "sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ==", "dev": true, "dependencies": { - "object-keys": "^1.0.12" + "pngjs": "^4.0.1" }, - "engines": { - "node": ">= 0.4" + "bin": { + "pixelmatch": "bin/pixelmatch" } }, - "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=", + "node_modules/pixelmatch/node_modules/pngjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-4.0.1.tgz", + "integrity": "sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=8.0.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": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "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": ">= 0.8" + "node": ">=8" } }, - "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/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "node_modules/playwright": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.20.1.tgz", + "integrity": "sha512-d/25SFUk6Rkt3h+RU13T7h6o0UTCLKXKYJILWVlC+NmrE7Tvn3LlXxoREfFXVNFikRZWTV60WBCZKgNbj7RfrA==", "dev": true, + "hasInstallScript": true, + "dependencies": { + "playwright-core": "1.20.1" + }, + "bin": { + "playwright": "cli.js" + }, "engines": { - "node": ">=0.3.1" + "node": ">=12" } }, - "node_modules/doctrine": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", - "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", + "node_modules/playwright-core": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.20.1.tgz", + "integrity": "sha512-A8ZsZ09gaSbxP0UijoLyzp3LJc0kWMxDooLPi+mm4/5iYnTbd6PF5nKjoFw1a7KwjZIEgdhJduah4BcUIh+IPA==", "dev": true, "dependencies": { - "esutils": "^1.1.6", - "isarray": "0.0.1" + "colors": "1.4.0", + "commander": "8.3.0", + "debug": "4.3.3", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.0", + "jpeg-js": "0.4.3", + "mime": "3.0.0", + "pixelmatch": "5.2.1", + "pngjs": "6.0.0", + "progress": "2.0.3", + "proper-lockfile": "4.1.2", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "socks-proxy-agent": "6.1.1", + "stack-utils": "2.0.5", + "ws": "8.4.2", + "yauzl": "2.10.0", + "yazl": "2.5.1" + }, + "bin": { + "playwright": "cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/doctrine/node_modules/esutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", - "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", + "node_modules/playwright-core/node_modules/ws": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", + "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", "dev": true, "engines": { - "node": ">=0.10.0" + "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/doctrine/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "engines": { + "node": ">=12.13.0" } }, - "node_modules/download": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", - "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "dependencies": { - "archive-type": "^4.0.0", - "caw": "^2.0.1", - "content-disposition": "^0.5.2", - "decompress": "^4.2.0", - "ext-name": "^5.0.0", - "file-type": "^8.1.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^8.3.1", - "make-dir": "^1.2.0", - "p-event": "^2.1.0", - "pify": "^3.0.0" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" }, "engines": { - "node": ">=6" - } - }, - "node_modules/download/node_modules/@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true, - "engines": { - "node": ">=4" + "node": ">= 0.12.0" } }, - "node_modules/download/node_modules/cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "node_modules/portfinder/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": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" + "ms": "^2.1.1" } }, - "node_modules/download/node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "node_modules/portfinder/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/download/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/download/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "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": ">=4" + "node": ">=0.4.0" } }, - "node_modules/download/node_modules/got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", "dev": true, "dependencies": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" } }, - "node_modules/download/node_modules/http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true - }, - "node_modules/download/node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "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/download/node_modules/keyv": { + "node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "dependencies": { - "json-buffer": "3.0.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/download/node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "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": ">=0.10.0" + "node": ">=6" } }, - "node_modules/download/node_modules/normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "node_modules/puppeteer-core": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.5.1.tgz", + "integrity": "sha512-dobVqWjV34ilyfQHR3BBnCYaekBYTi5MgegEYBRYd3s3uFy8jUpZEEWbaFjG9ETm+LGzR5Lmr0aF6LLuHtiuCg==", "dev": true, "dependencies": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" + "cross-fetch": "3.1.5", + "debug": "4.3.3", + "devtools-protocol": "0.0.969999", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.0", + "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.5.0" }, "engines": { - "node": ">=4" + "node": ">=10.18.1" } }, - "node_modules/download/node_modules/p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "node_modules/puppeteer-core/node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "dev": true, "engines": { - "node": ">=4" + "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/download/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.6.0", + "teleport": ">=0.2.0" } }, - "node_modules/download/node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/download/node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" + "side-channel": "^1.0.4" }, "engines": { - "node": ">=4" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "node_modules/dynamic-import-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dynamic-import-polyfill/-/dynamic-import-polyfill-0.1.1.tgz", - "integrity": "sha512-m953zv0w5oDagTItWm6Auhmk/pY7EiejaqiVbnzSS3HIjh1FCUeK7WzuaVtWPNs58A+/xpIE+/dVk6pKsrua8g==", - "dev": true + "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/easy-table": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.1.tgz", - "integrity": "sha512-C9Lvm0WFcn2RgxbMnTbXZenMIWcBtkzMr+dWqq/JsVoGFSVUVlPqeOa5LP5kM0I3zoOazFpckOEb2/0LDFfToQ==", + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "dependencies": { - "ansi-regex": "^3.0.0" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, - "optionalDependencies": { - "wcwidth": ">=1.0.1" + "engines": { + "node": ">= 0.8" } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/editorconfig": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", - "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "dependencies": { - "commander": "^2.19.0", - "lru-cache": "^4.1.5", - "semver": "^5.6.0", - "sigmund": "^1.0.1" + "engines": { + "node": ">= 0.8" } }, - "node_modules/editorconfig/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/editorconfig/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "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": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/editorconfig/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "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/ejs": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz", - "integrity": "sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==", + "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": { - "jake": "^10.6.1" - }, - "bin": { - "ejs": "bin/cli.js" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.10.0" } }, - "node_modules/electron-to-chromium": { - "version": "1.3.723", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.723.tgz", - "integrity": "sha512-L+WXyXI7c7+G1V8ANzRsPI5giiimLAUDC6Zs1ojHHPhYXb3k/iTABFmWjivEtsWrRQymjnO66/rO2ZTABGdmWg==", - "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/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "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==", + "node_modules/refa": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/refa/-/refa-0.9.1.tgz", + "integrity": "sha512-egU8LgFq2VXlAfUi8Jcbr5X38wEOadMFf8tCbshgcpVCYlE7k84pJOSlnvXF+muDB4igkdVMq7Z/kiNPqDT9TA==", "dev": true, "dependencies": { - "once": "^1.4.0" + "regexpp": "^3.2.0" } }, - "node_modules/env-cmd": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", - "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", + "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/regexp-ast-analysis": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.3.0.tgz", + "integrity": "sha512-11PlbBSUxwWpdj6BdZUKfhDdV9g+cveqHB+BqBQDBD7ZermDBVgtyowUaXTvT0dO3tZYo2bDIr/GoED6X1aYSA==", "dev": true, "dependencies": { - "commander": "^4.0.0", - "cross-spawn": "^7.0.0" - }, - "bin": { - "env-cmd": "bin/env-cmd.js" - }, + "refa": "^0.9.0", + "regexpp": "^3.2.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "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==", + "node_modules/requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" + "engines": { + "node": ">=0.10.5" } }, - "node_modules/es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-dev-server": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-dev-server/-/es-dev-server-2.1.0.tgz", - "integrity": "sha512-Vrq/4PyMzWz33QmOdSncvoWLTJVcv2e96z8FLHQwP9zK7DyLeDZCckII8VTW+btUGtM7aErvLH/d/R2pjjjs8w==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.1", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/preset-env": "^7.9.0", - "@koa/cors": "^3.1.0", - "@open-wc/building-utils": "^2.18.3", - "@rollup/plugin-node-resolve": "^11.0.0", - "@rollup/pluginutils": "^3.0.0", - "@types/babel__core": "^7.1.3", - "@types/browserslist": "^4.8.0", - "@types/browserslist-useragent": "^3.0.0", - "@types/caniuse-api": "^3.0.0", - "@types/command-line-args": "^5.0.0", - "@types/command-line-usage": "^5.0.1", - "@types/debounce": "^1.2.0", - "@types/koa": "^2.0.48", - "@types/koa__cors": "^3.0.1", - "@types/koa-compress": "^2.0.9", - "@types/koa-etag": "^3.0.0", - "@types/koa-static": "^4.0.1", - "@types/lru-cache": "^5.1.0", - "@types/mime-types": "^2.1.0", - "@types/minimatch": "^3.0.3", - "@types/path-is-inside": "^1.0.0", - "@types/whatwg-url": "^6.4.0", - "browserslist": "^4.9.1", - "browserslist-useragent": "^3.0.2", - "builtin-modules": "^3.1.0", - "camelcase": "^5.3.1", - "caniuse-api": "^3.0.0", - "caniuse-lite": "^1.0.30001033", - "chokidar": "^3.0.0", - "command-line-args": "^5.0.2", - "command-line-usage": "^6.1.0", - "debounce": "^1.2.0", - "deepmerge": "^4.2.2", - "es-module-lexer": "^0.3.13", - "get-stream": "^5.1.0", - "is-stream": "^2.0.0", - "isbinaryfile": "^4.0.2", - "koa": "^2.7.0", - "koa-compress": "^3.0.0", - "koa-etag": "^3.0.0", - "koa-static": "^5.0.0", - "lru-cache": "^5.1.1", - "mime-types": "^2.1.27", - "minimatch": "^3.0.4", - "open": "^7.0.3", - "parse5": "^5.1.1", - "path-is-inside": "^1.0.2", - "polyfills-loader": "^1.7.4", - "portfinder": "^1.0.21", - "rollup": "^2.7.2", - "strip-ansi": "^5.2.0", - "systemjs": "^6.3.1", - "tslib": "^1.11.1", - "useragent": "^2.3.0", - "whatwg-url": "^7.0.0" - }, - "bin": { - "es-dev-server": "dist/cli.js" + "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/resolve-path": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", + "dev": true, + "dependencies": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/es-dev-server/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "node_modules/resolve-path/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": ">=6" + "node": ">= 0.6" } }, - "node_modules/es-dev-server/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/resolve-path/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" }, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/es-dev-server/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/es-module-lexer": { - "version": "0.3.26", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz", - "integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==", + "node_modules/resolve-path/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/es-module-shims": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-0.4.7.tgz", - "integrity": "sha512-0LTiSQoPWwdcaTVIQXhGlaDwTneD0g9/tnH1PNs3zHFFH+xoCeJclDM3rQeqF9nurXPfMKm3l9+kfPRa5VpbKg==", + "node_modules/resolve-path/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, - "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==", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true, "engines": { - "node": ">=6" + "node": ">= 4" } }, - "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=", + "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": { - "node": ">=0.8.0" + "iojs": ">=1.0.0", + "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==", + "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": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "rimraf": "bin.js" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/rollup": { + "version": "2.70.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", + "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==", "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "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/execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "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": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "queue-microtask": "^1.2.2" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true, - "engines": { - "node": ">=4" - } + "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/execa/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "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/execa/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "node_modules/scslre": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.1.6.tgz", + "integrity": "sha512-JORxVRlQTfjvlOAaiQKebgFElyAm5/W8b50lgaZ0OkEnKnagJW2ufDh3xRfU75UD9z3FGIu1gL1IyR3Poa6Qmw==", "dev": true, "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "refa": "^0.9.0", + "regexp-ast-analysis": "^0.2.3", + "regexpp": "^3.2.0" } }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node_modules/scslre/node_modules/regexp-ast-analysis": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.2.4.tgz", + "integrity": "sha512-8L7kOZQaKPxKKAwGuUZxTQtlO3WZ+tiXy4s6G6PKL6trbOXcZoumwC3AOHHFtI/xoSbNxt7jgLvCnP1UADLWqg==", "dev": true, "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "refa": "^0.9.0", + "regexpp": "^3.2.0" } }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "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": { - "isexe": "^2.0.0" + "lru-cache": "^6.0.0" }, "bin": { - "which": "bin/which" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/execa/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "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": { - "pify": "^2.2.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/executable/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "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, - "dependencies": { - "mime-db": "^1.28.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "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": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "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/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "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/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": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/slice-ansi/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": { - "escape-string-regexp": "^1.0.5" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/file-type": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", - "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", + "node_modules/slice-ansi/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": ">=6" + "node": ">=7.0.0" } }, - "node_modules/filelist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", - "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } + "node_modules/slice-ansi/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/filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "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": ">=4" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "node_modules/socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "dev": true, "dependencies": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">=4" + "node": ">= 10.13.0", + "npm": ">= 3.0.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/socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", "dev": true, "dependencies": { - "to-regex-range": "^5.0.1" + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" }, "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "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, - "dependencies": { - "array-back": "^3.0.1" - }, "engines": { - "node": ">=4.0.0" + "node": ">= 8" } }, - "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==", + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "escape-string-regexp": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/find-versions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", - "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", + "node_modules/stack-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, - "dependencies": { - "semver-regex": "^3.1.2" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" + } + }, + "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/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "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": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" + "safe-buffer": "~5.2.0" } }, - "node_modules/flat/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==", + "node_modules/string_decoder/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": [ { @@ -5539,7136 +5371,1278 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "engines": { - "node": ">=4" - } + ] }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "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": "*" + "node": ">=8" } }, - "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "node_modules/string-width/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/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": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">= 0.12" + "node": ">=8" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "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": ">= 0.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "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": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "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-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=4" } }, - "node_modules/fs.realpath": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", - "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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/gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", "dev": true, "dependencies": { - "globule": "^1.0.0" + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" }, "engines": { - "node": ">= 4.0.0" + "node": ">=8.0.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==", + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "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==", + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=8" } }, - "node_modules/get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "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": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "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": { - "npm-conf": "^1.1.0" + "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": ">=4" + "node": ">=6" } }, - "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==", + "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/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": { - "pump": "^3.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" + "node": ">=8.0" } }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "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": ">=0.6" } }, - "node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "punycode": "^2.1.1" }, "engines": { - "node": ">= 6" + "node": ">=12" } }, - "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/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, - "node_modules/globule": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", - "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "dev": true, - "dependencies": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - }, "engines": { - "node": ">= 0.10" + "node": ">=0.6.x" } }, - "node_modules/got": { - "version": "11.8.1", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.1.tgz", - "integrity": "sha512-9aYdZL+6nHmvJwHALLwKSUZ0hMwGaJGYv3hoPLPgnT8BoBXm1SjnZeky+91tfwJaDzun2s4RsBRy48IEYv2q2Q==", + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "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" + "tslib": "^1.8.1" }, "engines": { - "node": ">=10.19.0" + "node": ">= 6" }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "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/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { - "node": ">= 0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "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": { - "ansi-regex": "^2.0.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "node_modules/typescript": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4.2.0" } }, - "node_modules/has-flag": { + "node_modules/typical": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "node_modules/ua-parser-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz", + "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], "engines": { "node": "*" } }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "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, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" } }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true, - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, "engines": { - "node": "*" + "node": ">= 0.8" } }, - "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==", + "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": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "punycode": "^2.1.0" } }, - "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/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/header-case": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", - "dev": true, - "dependencies": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "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==", + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", "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" + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" }, "engines": { - "node": ">=6" + "node": ">=10.12.0" } }, - "node_modules/http-assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz", - "integrity": "sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==", + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true, - "dependencies": { - "deep-equal": "~1.0.1", - "http-errors": "~1.7.2" - }, "engines": { "node": ">= 0.8" } }, - "node_modules/http-assert/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=12" } }, - "node_modules/http-assert/node_modules/http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=12" } }, - "node_modules/http-assert/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/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/http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", + "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": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">= 0.6" + "node": ">= 8" } }, - "node_modules/http-errors/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/wicg-inert": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.1.1.tgz", + "integrity": "sha512-PhBaNh8ur9Xm4Ggy4umelwNIP6pPP1bv3EaWaKqfb/QNme2rdLjm7wIInvV4WhxVHhzA4Spgw9qNSqWtB/ca2A==" }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">=0.10.0" } }, - "node_modules/http2-wrapper": { - "version": "1.0.0-beta.5.2", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", - "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "dev": true, "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" }, "engines": { - "node": ">=10.19.0" + "node": ">=8.0.0" } }, - "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==", + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/husky": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", - "integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==", + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "hasInstallScript": true, "dependencies": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^7.0.0", - "find-versions": "^4.0.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^5.0.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, - "bin": { - "husky-run": "bin/run.js", - "husky-upgrade": "lib/upgrader/bin.js" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/husky" + "node": ">=8" } }, - "node_modules/husky/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "node_modules/wrap-ansi/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": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "node_modules/wrap-ansi/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": { - "safer-buffer": ">= 2.1.2 < 3" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=7.0.0" } }, - "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/wrap-ansi/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/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "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": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, "engines": { - "node": ">=6" + "node": ">=8.3.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/import-lazy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", - "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", - "dev": true, - "engines": { - "node": ">=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/indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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": { - "once": "^1.3.0", - "wrappy": "1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, - "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/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", "dev": true, "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" + "buffer-crc32": "~0.2.3" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "node_modules/ylru": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz", + "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==", "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": ">= 4.0.0" } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, - "engines": { - "node": ">= 0.10" + "requires": { + "@babel/highlight": "^7.16.7" } }, - "node_modules/intersection-observer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.7.0.tgz", - "integrity": "sha512-Id0Fij0HsB/vKWGeBe9PxeY45ttRiBmhFyyt/geBdDHBYNctMRTE3dC1U3ujzz3lap+hVXlEcVaB56kZP/eEUg==", + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, - "node_modules/into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "@babel/highlight": { + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, - "dependencies": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, - "node_modules/inversify": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-5.0.5.tgz", - "integrity": "sha512-60QsfPz8NAU/GZqXu8hJ+BhNf/C/c+Hp0eDc6XMIJTxBiP36AQyyQKpBkOVTLWBFDQWYVHpbbEuIsHu9dLuJDA==", - "dev": true + "@babel/runtime": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz", + "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } }, - "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 + "@babel/runtime-corejs3": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.8.tgz", + "integrity": "sha512-ZbYSUvoSF6dXZmMl/CYTMOvzIFnbGfv4W3SEHYgMvNsFTeLaF2gkGAF4K2ddmtSK4Emej+0aYcnSC6N5dPCXUQ==", + "dev": true, + "requires": { + "core-js-pure": "^3.20.2", + "regenerator-runtime": "^0.13.4" + } }, - "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-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/is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": "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/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-generator-function": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", - "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "node_modules/is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "dev": true - }, - "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-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "node_modules/is-whitespace": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", - "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "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/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "node_modules/isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", - "dev": true, - "dependencies": { - "async": "0.9.x", - "chalk": "^2.4.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jake/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/jake/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/jake/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/jake/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/jake/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/jake/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/js-beautify": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.4.tgz", - "integrity": "sha512-M5yEWwonlEO3kPcCZ3K3KBSpFRZAEO3FAWC6wtbIGeyg7dusStxvF0WG+HRLBoMZqREXSRSxkkqClDE865x1sg==", - "dev": true, - "dependencies": { - "config-chain": "^1.1.12", - "editorconfig": "^0.15.3", - "glob": "^7.1.3", - "mkdirp": "^1.0.4", - "nopt": "^5.0.0" - }, - "bin": { - "css-beautify": "js/bin/css-beautify.js", - "html-beautify": "js/bin/html-beautify.js", - "js-beautify": "js/bin/js-beautify.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/js-beautify/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/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/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "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-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/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": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "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/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "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": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "dev": true, - "dependencies": { - "tsscmp": "1.0.6" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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" - } - }, - "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/kleur": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.3.tgz", - "integrity": "sha512-H1tr8QP2PxFTNwAFM74Mui2b6ovcY9FoxJefgrwxY+OCJcq01k5nvhf4M/KnizzrJvLRap5STUy7dgDV35iUBw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/koa": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.1.tgz", - "integrity": "sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w==", - "dev": true, - "dependencies": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.8.0", - "debug": "~3.1.0", - "delegates": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^1.2.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - }, - "engines": { - "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" - } - }, - "node_modules/koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true - }, - "node_modules/koa-compress": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/koa-compress/-/koa-compress-3.1.0.tgz", - "integrity": "sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ==", - "dev": true, - "dependencies": { - "bytes": "^3.0.0", - "compressible": "^2.0.0", - "koa-is-json": "^1.0.0", - "statuses": "^1.0.0" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/koa-convert": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", - "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", - "dev": true, - "dependencies": { - "co": "^4.6.0", - "koa-compose": "^3.0.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/koa-convert/node_modules/koa-compose": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", - "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", - "dev": true, - "dependencies": { - "any-promise": "^1.1.0" - } - }, - "node_modules/koa-etag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-3.0.0.tgz", - "integrity": "sha1-nvc4Ld1agqsN6xU0FckVg293HT8=", - "dev": true, - "dependencies": { - "etag": "^1.3.0", - "mz": "^2.1.0" - } - }, - "node_modules/koa-is-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", - "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=", - "dev": true - }, - "node_modules/koa-send": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", - "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "http-errors": "^1.7.3", - "resolve-path": "^1.4.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/koa-static": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", - "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "koa-send": "^5.0.0" - }, - "engines": { - "node": ">= 7.6.0" - } - }, - "node_modules/koa-static/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/koa/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/koa/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/lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "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/lit-element": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.4.0.tgz", - "integrity": "sha512-pBGLglxyhq/Prk2H91nA0KByq/hx/wssJBQFiYqXhGDvEnY31PRGYf1RglVzyLeRysu0IHm2K0P196uLLWmwFg==", - "dependencies": { - "lit-html": "^1.1.1" - } - }, - "node_modules/lit-html": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.0.tgz", - "integrity": "sha512-cgaqPSgqHRaTH/P1DnWD/dQxudtrHqD0xo1AoyOGJZir2rXgsvTg77z6Pitwk9B+kL23EakD62HV3x8sT01aWQ==" - }, - "node_modules/lit-ntml": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/lit-ntml/-/lit-ntml-2.18.0.tgz", - "integrity": "sha512-TRRBSADH5yaVl269ypt6PdF29d8iC0TOmXPmTP1cUYFdhYKQ7kMNH1mNg0ZrzZDZzrLMwbQkWf/rICO4QSPaeg==", - "hasInstallScript": true, - "dependencies": { - "parse5": "^6.0.1", - "tslib": "^2.0.2" - }, - "engines": { - "node": ">= 10.18.1", - "npm": ">= 6.13.4" - } - }, - "node_modules/lit-ntml/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "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.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "node_modules/lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "node_modules/lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.pickby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=", - "dev": true - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", - "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/lodash.zip": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", - "dev": true - }, - "node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/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/log-symbols/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/log-symbols/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/log-symbols/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/log-symbols/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/log-symbols/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/log-update": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-3.4.0.tgz", - "integrity": "sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^3.2.0", - "cli-cursor": "^2.1.0", - "wrap-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "dev": true, - "engines": { - "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/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/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/make-dir/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/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", - "dev": true, - "dependencies": { - "mime-db": "1.45.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=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/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/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/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/mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", - "dev": true, - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.1" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/mocha/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/mocha/node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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": "*" - } - }, - "node_modules/mocha/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/mocha/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/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/mocha/node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mocha/node_modules/readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "dependencies": { - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mocha/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/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/mocha/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "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/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.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/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/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-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", - "dev": true - }, - "node_modules/nodemod": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/nodemod/-/nodemod-2.7.2.tgz", - "integrity": "sha512-+aGsXURjJIiNH0nsphBFw5Bt+4uzmtrNQ3XP3DdeUfYBo+4GMsPbdn1tr/B322R9fy3xZSAakPtEyMCApn/U2Q==", - "hasInstallScript": true, - "dependencies": { - "@types/parse5": "^5.0.2", - "@types/prismjs": "^1.16.0", - "lit-ntml": "^2.16.1", - "normalize-diacritics": "^2.11.1", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">= 10.18.1", - "npm": ">= 6.13.4" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-diacritics": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/normalize-diacritics/-/normalize-diacritics-2.13.0.tgz", - "integrity": "sha512-2YE92pRgW1/zOUkXDvzimlvf9wfmPhsw3trbYjNZzoMQaIm2/7MbNOn10Uf77q1W2o9BnRQrQnzTmp4nD/7Saw==", - "hasInstallScript": true, - "engines": { - "node": ">= 10.18.1", - "npm": ">= 6.13.4" - } - }, - "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-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-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "dev": true, - "dependencies": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-conf/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/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "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-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "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.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.getownpropertydescriptors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", - "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.8" - }, - "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/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/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=", - "dev": true - }, - "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/opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true, - "bin": { - "opencollective-postinstall": "index.js" - } - }, - "node_modules/os-filter-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", - "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", - "dev": true, - "dependencies": { - "arch": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", - "dev": true, - "dependencies": { - "p-timeout": "^2.0.1" - }, - "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-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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": "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/p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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/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-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "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/parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "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/path-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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/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-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "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.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "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/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "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/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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-dir/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/pkg-dir/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/pkg-dir/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/pkg-dir/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/pkg-dir/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/please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "dependencies": { - "semver-compare": "^1.0.0" - } - }, - "node_modules/polyfills-loader": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/polyfills-loader/-/polyfills-loader-1.7.6.tgz", - "integrity": "sha512-AiLIgmGFmzcvsqewyKsqWb7H8CnWNTSQBoM0u+Mauzmp0DsjObXmnZdeqvTn0HNwc1wYHHTOta82WjSjG341eQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.1", - "@open-wc/building-utils": "^2.18.3", - "@webcomponents/webcomponentsjs": "^2.4.0", - "abortcontroller-polyfill": "^1.4.0", - "core-js-bundle": "^3.6.0", - "deepmerge": "^4.2.2", - "dynamic-import-polyfill": "^0.1.1", - "es-module-shims": "^0.4.6", - "intersection-observer": "^0.7.0", - "parse5": "^5.1.1", - "regenerator-runtime": "^0.13.3", - "resize-observer-polyfill": "^1.5.1", - "systemjs": "^6.3.1", - "terser": "^4.6.7", - "whatwg-fetch": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/portfinder/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/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pretty": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", - "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", - "dev": true, - "dependencies": { - "condense-newlines": "^0.2.1", - "extend-shallow": "^2.0.1", - "js-beautify": "^1.6.12" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-ms": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-6.0.1.tgz", - "integrity": "sha512-ke4njoVmlotekHlHyCZ3wI/c5AMT8peuHs8rKJqekj/oR5G8lND2dVpicFlUz5cbZgE290vvkMuDwfj/OcW1kw==", - "dev": true, - "dependencies": { - "parse-ms": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/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/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "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/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/pwa-helpers": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/pwa-helpers/-/pwa-helpers-0.9.1.tgz", - "integrity": "sha512-4sP/C9sSxQ3w80AATmvCEI3R+MHzCwr2RSZEbLyMkeJgV3cRk7ySZRUrQnBDSA7A0/z6dkYtjuXlkhN1ZFw3iA==", - "dev": true - }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "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": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "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/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.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.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "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/reify": { - "version": "0.20.12", - "resolved": "https://registry.npmjs.org/reify/-/reify-0.20.12.tgz", - "integrity": "sha512-4BzKwDWyJJbukwI6xIJRh+BDTitoGzxdgYPiQQ1zbcTZW6I8xgHPw1DnVuEs/mEZQlYm1e09DcFSApb4UaR5bQ==", - "dev": true, - "dependencies": { - "acorn": "^6.1.1", - "acorn-dynamic-import": "^4.0.0", - "magic-string": "^0.25.3", - "semver": "^5.4.1" - }, - "engines": { - "node": ">=4" - } - }, - "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/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "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/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", - "dev": true - }, - "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/resolve-path": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", - "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc=", - "dev": true, - "dependencies": { - "http-errors": "~1.6.2", - "path-is-absolute": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/resolve-path/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/resolve-path/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/resolve-path/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/resolve-path/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "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/resq": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.0.tgz", - "integrity": "sha512-hCUd0xMalqtPDz4jXIqs0M5Wnv/LZXN8h7unFOo4/nvExT9dDPbhwd3udRxLlp0HgBnHcV009UlduE9NZi7A6w==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^2.0.1" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/rgb2hex": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.1.10.tgz", - "integrity": "sha512-vKz+kzolWbL3rke/xeTE2+6vHmZnNxGyDnaVW4OckntAIcc7DcZzWkQSfxMDwqHS8vhgySnIFyBUH7lIk6PxvQ==", - "dev": true - }, - "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/rollup": { - "version": "2.46.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.46.0.tgz", - "integrity": "sha512-qPGoUBNl+Z8uNu0z7pD3WPTABWRbcOwIrO/5ccDJzmrtzn0LVf6Lj91+L5CcWhXl6iWf23FQ6m8Jkl2CmN1O7Q==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.1" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "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/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/sauce-connect-launcher-update": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/sauce-connect-launcher-update/-/sauce-connect-launcher-update-1.3.2.tgz", - "integrity": "sha512-apAhE+VSN0DgsbepqSb0xCPgnFu6YmOTkJAytPyu1oQU9t2MdAhMPJbhgBDAJzbIbesm9w8ZOTbfBKXW73rMAw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "adm-zip": "^0.4.14", - "async": "^3.2.0", - "https-proxy-agent": "^5.0.0", - "lodash": "^4.17.15", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/sauce-connect-launcher-update/node_modules/async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - }, - "node_modules/saucelabs": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-4.6.3.tgz", - "integrity": "sha512-LQEA7ENXq03MWs5sTbvRPlDiaR9PFEfqiMUHtiXEJQUGQ5JAmIXOB39/4hL3CUvZKZ2Bv7Ook6ZCDsqUFY7Vmw==", - "dev": true, - "dependencies": { - "bin-wrapper": "^4.1.0", - "change-case": "^4.1.1", - "form-data": "^3.0.0", - "got": "^11.7.0", - "hash.js": "^1.1.7", - "tunnel": "0.0.6", - "yargs": "^16.0.3" - }, - "bin": { - "sl": "bin/sl" - } - }, - "node_modules/saucelabs/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/saucelabs/node_modules/form-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/saucelabs/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/saucelabs/node_modules/y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/saucelabs/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/seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "dev": true, - "dependencies": { - "commander": "^2.8.1" - }, - "bin": { - "seek-bunzip": "bin/seek-bunzip", - "seek-table": "bin/seek-bzip-table" - } - }, - "node_modules/seek-bzip/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/selenium-standalone": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.23.0.tgz", - "integrity": "sha512-6dVLSEvbixd/MRSEmrcRQD8dmABrzNsxRqroKFQY+RVzm1JVPgGHIlo6qJzG6akfjc2V8SadHslE6lN4BFVM3w==", - "dev": true, - "dependencies": { - "commander": "^2.20.3", - "cross-spawn": "^7.0.3", - "debug": "^4.3.1", - "got": "^11.8.0", - "lodash.mapvalues": "^4.6.0", - "lodash.merge": "^4.6.2", - "minimist": "^1.2.5", - "mkdirp": "^1.0.4", - "progress": "2.0.3", - "tar-stream": "2.1.4", - "which": "^2.0.2", - "yauzl": "^2.10.0" - }, - "bin": { - "selenium-standalone": "bin/selenium-standalone", - "start-selenium": "bin/start-selenium" - } - }, - "node_modules/selenium-standalone/node_modules/bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/selenium-standalone/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/selenium-standalone/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/selenium-standalone/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/selenium-standalone/node_modules/tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", - "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/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/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "node_modules/semver-regex": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.2.tgz", - "integrity": "sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semver-truncate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", - "dev": true, - "dependencies": { - "semver": "^5.3.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sentence-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "node_modules/serialize-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", - "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", - "dev": true, - "dependencies": { - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/serialize-error/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/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/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shady-css-scoped-element": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/shady-css-scoped-element/-/shady-css-scoped-element-0.0.2.tgz", - "integrity": "sha512-Dqfl70x6JiwYDujd33ZTbtCK0t52E7+H2swdWQNSTzfsolSa6LJHnTpN4T9OpJJEq4bxuzHRLFO9RBcy/UfrMQ==", - "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/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shx": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", - "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.3", - "shelljs": "^0.8.4" - }, - "bin": { - "shx": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "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/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", - "dev": true, - "dependencies": { - "sort-keys": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "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/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "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.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "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/stream-buffers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", - "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/strip-ansi/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, - "dependencies": { - "is-natural-number": "^4.0.1" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/suffix": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/suffix/-/suffix-0.1.1.tgz", - "integrity": "sha1-zFgjFkag7xEC95R47zqSSP2chC8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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/systemjs": { - "version": "6.8.3", - "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.8.3.tgz", - "integrity": "sha512-UcTY+FEA1B7e+bpJk1TI+a9Na6LG7wFEqW7ED16cLqLuQfI/9Ri0rsXm3tKlIgNoHyLHZycjdAOijzNbzelgwA==", - "dev": true - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", - "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "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/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/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "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/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "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-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/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/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" - }, - "node_modules/tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" - } - }, - "node_modules/tslint/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/tslint/node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslint/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/tslint/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/tslint/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/tslint/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/tslint/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslint/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/tslint/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/tslint/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "dev": true, - "engines": { - "node": ">=0.6.x" - } - }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "node_modules/type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/typescript": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", - "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "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/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "dependencies": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - } - }, - "node_modules/useragent/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/useragent/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "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/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", - "dev": true - }, - "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/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "optional": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webdriver": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-5.23.0.tgz", - "integrity": "sha512-r7IrbZ2SuTIRyWV8mv4a4hZoFcT9Qt4MznOkdRWPE1sPpZ8lyLZsIEjKCEbHelOzPwURqk+biwGrm4z2OZRAiw==", - "dev": true, - "dependencies": { - "@types/request": "^2.48.4", - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/protocols": "5.22.1", - "@wdio/utils": "5.23.0", - "lodash.merge": "^4.6.1", - "request": "^2.83.0" - }, - "engines": { - "node": ">= 8.11.0" - } - }, - "node_modules/webdriverio": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-5.23.0.tgz", - "integrity": "sha512-hxt6Nuu2bBrTsVk7GfoFRTh63l4fRVXlK9U30RtPbHoWO5tcFdyUz2UTgeHEZ54ea1DQEVPfsgFiLnJULkWp1Q==", - "dev": true, - "dependencies": { - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/repl": "5.23.0", - "@wdio/utils": "5.23.0", - "archiver": "^3.0.0", - "css-value": "^0.0.1", - "grapheme-splitter": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "lodash.isobject": "^3.0.2", - "lodash.isplainobject": "^4.0.6", - "lodash.zip": "^4.2.0", - "resq": "^1.6.0", - "rgb2hex": "^0.1.0", - "serialize-error": "^5.0.0", - "webdriver": "5.23.0" - }, - "engines": { - "node": ">= 8.11.0" - } - }, - "node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "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-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/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/wrap-ansi/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/wrap-ansi/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/wrap-ansi/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true - }, - "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/yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "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": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/yargs-unparser/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/yargs-unparser/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs-unparser/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs-unparser/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-unparser/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs/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/yargs/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/yargs/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/yargs/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/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yarn-install": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yarn-install/-/yarn-install-1.0.0.tgz", - "integrity": "sha1-V/RQULgu/VcYKzlzxUqgXLXSUjA=", - "dev": true, - "dependencies": { - "cac": "^3.0.3", - "chalk": "^1.1.3", - "cross-spawn": "^4.0.2" - }, - "bin": { - "yarn-install": "bin/yarn-install.js", - "yarn-remove": "bin/yarn-remove.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yarn-install/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/yarn-install/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yarn-install/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yarn-install/node_modules/cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "dependencies": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "node_modules/yarn-install/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/yarn-install/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/yarn-install/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/yarn-install/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/yarn-install/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "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/ylru": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", - "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", - "dev": true, - "engines": { - "node": ">= 4.0.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" - } - }, - "node_modules/zip-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", - "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^2.1.1", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/zip-stream/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" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", - "dev": true - }, - "@babel/core": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.0.tgz", - "integrity": "sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0", - "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" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.0.tgz", - "integrity": "sha512-C6u00HbmsrNPug6A+CiNl8rEys7TsdcXwg12BHi2ca5rUfAs3+UwZsuDQSXnc+wCElCXMB8gMaJ3YXDdh8fAlg==", - "dev": true, - "requires": { - "@babel/types": "^7.14.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.0.tgz", - "integrity": "sha512-6pXDPguA5zC40Y8oI5mqr+jEUpjMJonKvknvA+vD8CYDz5uuXEwWBK8sRAsE/t3gfb1k15AQb9RhwpscC4nUJQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", - "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" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz", - "integrity": "sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", - "dev": true, - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" - } - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "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 - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.0.tgz", - "integrity": "sha512-AHbfoxesfBALg33idaTBVUkLnfXtsgvJREf93p4p0Lwsz4ppfE7g1tpEXVm4vrxUcH4DVhAa9Z1m1zqf9WUC7Q==", - "dev": true - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.15.tgz", - "integrity": "sha512-VapibkWzFeoa6ubXy/NgV5U2U4MVnUlvnx6wo1XhlsaTrLYWE0UFpDQsVrmn22q5CzeloqJ8gEMHSKxuee6ZdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.13.11.tgz", - "integrity": "sha512-fJTdFI4bfnMjvxJyNuaf8i9mVcZ0UhetaGEUHaHV9KEnibLugJkZAtXikR8KcYj+NYmI4DZMS8yQAyg+hvfSqg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", - "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", - "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", - "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", - "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", - "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", - "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-compilation-targets": "^7.13.8", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.13.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", - "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", - "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@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.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@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-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-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@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-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.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "@commitlint/config-conventional": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-16.2.1.tgz", + "integrity": "sha512-cP9gArx7gnaj4IqmtCIcHdRjTYdRUi6lmGE+lOzGGjGe45qGOS8nyQQNvkNy2Ey2VqoSWuXXkD8zCUh6EHf1Ww==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "conventional-changelog-conventionalcommits": "^4.3.1" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz", - "integrity": "sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg==", + "@eslint/eslintrc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.1", + "globals": "^13.9.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" } }, - "@babel/plugin-transform-classes": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", - "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "@esm-bundle/chai": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@esm-bundle/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-6Tx35wWiNw7X0nLY9RMx8v3EL8SacCFW+eEZOE9Hc+XxmU5HFE2AFEg+GehUZpiyDGwVvPH75ckGlqC7coIPnA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-split-export-declaration": "^7.12.13", - "globals": "^11.1.0" + "@types/chai": "^4.2.12" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } + "@lit/reactive-element": { + "version": "1.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.0.0-rc.4.tgz", + "integrity": "sha512-dJMha+4NFYdpnUJzRrWTFV5Hdp9QHWFuPnaoqonrKl4lGJVnYez9mu8ev9F/5KM47tjAjh22DuRHrdFDHfOijA==" }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", - "dev": true, + "@material/animation": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-OjxWJYSRNs4vnPe8NclaNn+TsNc8TR/wHusGtezF5F+wl+5mh+K69BMXAmURtq3idoRg4XaOSC/Ohk1ovD1fMQ==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", - "dev": true, + "@material/base": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-vy5SQt+jcwwdRFfBvtpVdpULUBujecVUKOXcopaQoi2XIzI5EBHuR4gPN0cd1yfmVEucD6p2fvVv2FJ3Ngr61w==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@material/button": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-DB0MAvdIGWKuFwlQ57hjv7ZuHIioT2mnG7RWtL7ZoCWoY45nCrsbJirmX5zZFipm9gIOJ3YnIkIrUyMVSrDX+g==", + "requires": { + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/tokens": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", - "dev": true, + "@material/density": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-zOR5wISqPVr8KS/ERNC1jdRV9O832lzclyS9Ea20rDrWfuOiYsQ9bbIk12xWlxpgsn7r9fxQJyd1O2SURoHdRA==", "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@material/dialog": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-NfQR0fmNS/y2iRAx5YeODLLywBAnSyZI/CL9GUq4NiNj+FeSxe+5bhG1p9NxHeGMjEVrl6fG5L9ql7lqtfQaYQ==", + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/button": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/icon-button": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/tokens": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", - "dev": true, + "@material/dom": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-iUpZG6Bb2l/PfNV2Fb/pXfG1p4Bz4PC9A7ATPlKfcU5HioObcnYVc/+Hrtaw8eu28BNIc+VVROtbfpqG/YgKSQ==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.0.tgz", - "integrity": "sha512-CF4c5LX4LQ03LebQxJ5JZes2OYjzBuk1TdiF7cG7d5dK4lAdw9NZmaxq5K/mouUdNeqwz3TNjnW6v01UqUNgpQ==", - "dev": true, + "@material/elevation": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-AqN/tsTGGyBzZ7CtoSMBY9bDYvCuUt98EUfiGjZGXcf4HgoHV3Cn/JSLrhru5Cq8Nx6HF6AmHh3dQCfNCQduew==", "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", - "dev": true, + "@material/feature-targeting": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-CrVoGNu0ym52OPEKy3kgeNL2oSWOCBYbYxSH3GhERxCq5FwGBN+XmK/ZDLFVQlHYy3v8x4TqVEwXviCeumNTxQ==", "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", - "babel-plugin-dynamic-import-node": "^2.3.3" + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", - "dev": true, + "@material/floating-label": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-Cp0/LngkW6/uZWbEDTe3Ox143V4kYtxl9twiM3XLKd6a67JHCzneQWFzC0qSg90b3r5O+1zOkT3ZMF2Pbu2Vwg==", "requires": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", - "dev": true, + "@material/icon-button": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-9P6cjRqKtjE6ML+r5yz0ExU/f2KLdNabHQxmO6RpKd/FnjTyP1NcWqqj8dsvo/DZ7mOtT1MIThgkQDdiMqcYLg==", "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", - "dev": true, + "@material/line-ripple": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-LlyiyxpHNlFt0PZ8Q2tvOPbjNcgm3L7tUebXsM7iGyoKXfj0HwyDI31S0KgtU3Vs5DIK4U4mnRWtoAxtBW6Jfg==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@material/list": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-bjHXXk2ZeWxAFs4cJxy5J5A5ClUd3FGjRv/LwCYpsh7Dm7e8kSe8Lw2MWb6FXyF3mDJM6xqN3xXQWOh6UEu5wA==", + "requires": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" + "@material/menu": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-x59UHoTLvEsPKjFdffrKTgEyc0T4W3m58RsizAmapXr59Uthq8+PTFOkAv9R1PV/ZCzxay7Vx+QcekC4qOr40A==", + "requires": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/list": "14.0.0-canary.261f2db59.0", + "@material/menu-surface": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-parameters": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", - "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", - "dev": true, + "@material/menu-surface": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-zv/fv/W3zdSb+c/p6GNcOqA3+wAc/r8MOtV53WJPLlvZZSpGoTwHUp+GPiNeovfbsTSxN95XOXuVQBEfKEb8vA==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@material/mwc-base": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.25.3.tgz", + "integrity": "sha512-4wvxZ9dhPr0O4jjOHPmFyn77pafe+h1gHPlT9sbQ+ly8NY/fSn/TXn7/PbxgL8g4ZHxMvD3o7PJopg+6cbHp8Q==", + "requires": { + "@lit/reactive-element": "1.0.0-rc.4", + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", - "dev": true, + "@material/mwc-button": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.25.3.tgz", + "integrity": "sha512-usHEKchj9hqetY7n0yebTz1Pk9Z+9W/sNZheFoSaiWQCv9XhtCdKkHH0MXTv8SpwxWuEKUf/XjtyvikGIcIn7w==", "requires": { - "regenerator-transform": "^0.14.2" + "@material/mwc-icon": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", - "dev": true, + "@material/mwc-checkbox": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-checkbox/-/mwc-checkbox-0.25.3.tgz", + "integrity": "sha512-PSh9IAgQK4XiDzBwgclheejkA4cbZ3K9V1JTTl/YVRDD/OLLM+Bh8tbnAg/1kGVlPWOUfDrYCcZ0gg472ca7gw==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", - "dev": true, + "@material/mwc-dialog": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-dialog/-/mwc-dialog-0.25.3.tgz", + "integrity": "sha512-UpxAYAzKXO1MW4ezpiYfEQgov08p0J8KDVKqKrMwg7lsZRkAtUMk4YJkM6qmWGqGPqd/cN++42PMPHAISJH3yA==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@material/dialog": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-button": "^0.25.3", + "blocking-elements": "^0.1.0", + "lit": "^2.0.0", + "tslib": "^2.0.1", + "wicg-inert": "^3.0.0" } }, - "@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", - "dev": true, + "@material/mwc-floating-label": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-floating-label/-/mwc-floating-label-0.25.3.tgz", + "integrity": "sha512-3uFMi8Y680P0nzP5zih4YuOZJLl/C6Ux9G810Unwo44zblG/ckgJlFiM+T+oR+OH5KM8LbfNlV0ypo7FT5zYJA==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@material/floating-label": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", - "dev": true, + "@material/mwc-icon": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.25.3.tgz", + "integrity": "sha512-36076AWZIRSr8qYOLjuDDkxej/HA0XAosrj7TS1ZeLlUBnLUtbDtvc1S7KSa0hqez7ouzOqGaWK24yoNnTa2OA==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", - "dev": true, + "@material/mwc-icon-button": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-icon-button/-/mwc-icon-button-0.25.3.tgz", + "integrity": "sha512-FexkMpK3ZSHh7NF+PIqvVhvAbBOgFDYPck/lqnxIDC3VGJ0rjD/1MqevDy2fY6IcHGlc8Ai7VuYbdQ6Cvw8WcQ==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", - "dev": true, + "@material/mwc-line-ripple": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-line-ripple/-/mwc-line-ripple-0.25.3.tgz", + "integrity": "sha512-ANJzSyumb+shBVTIhqF1+YByPU/EpFXxI9CS26qThFqlUDpYXg5xcoZpkMSmZv3Wv/loF1rs2mJfFWOcC6nFnw==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@material/line-ripple": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", - "dev": true, + "@material/mwc-list": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-list/-/mwc-list-0.25.3.tgz", + "integrity": "sha512-2T297qVaQsKv+QDNP2ag9g04RLKO1tm2F6BwwqvdbXTsY+LKYOJe2/aSe0kX2tQLayX4ydy2RnTevo9Ld+c+4g==", "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/list": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-checkbox": "^0.25.3", + "@material/mwc-radio": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", - "dev": true, + "@material/mwc-menu": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-menu/-/mwc-menu-0.25.3.tgz", + "integrity": "sha512-jr5R61BfqrJC0lsAI63y4BsEM2eY3n6kiCy2ZnwinmxrfFrS709T/zuSUUW/xG9b9inSku4WjjSkDhPzQrmS3g==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@material/menu": "=14.0.0-canary.261f2db59.0", + "@material/menu-surface": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-list": "^0.25.3", + "@material/shape": "=14.0.0-canary.261f2db59.0", + "@material/theme": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/preset-env": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.0.tgz", - "integrity": "sha512-GWRCdBv2whxqqaSi7bo/BEXf070G/fWFMEdCnmoRg2CZJy4GK06ovFuEjJrZhDRXYgBsYtxVbG8GUHvw+UWBkQ==", - "dev": true, + "@material/mwc-notched-outline": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-notched-outline/-/mwc-notched-outline-0.25.3.tgz", + "integrity": "sha512-8jvU8GD0Pke+pfTQ0PdXpZmkU3XIHhMVY6AHM/2IQrXHkVZmAm9kbwL7ne3Ao+6f5n+DeXDGd+SG9U6ZZjD7gw==", "requires": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.13.15", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.13.11", - "@babel/plugin-proposal-dynamic-import": "^7.13.8", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.13.8", - "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", - "@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.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.13.16", - "@babel/plugin-transform-classes": "^7.13.0", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.0", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.13.0", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "@material/mwc-base": "^0.25.3", + "@material/notched-outline": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dev": true, + "@material/mwc-radio": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-radio/-/mwc-radio-0.25.3.tgz", + "integrity": "sha512-SXpVDrsQnz7+2w/kfBxcOJ4P+uJ0RxBd9mCLE7wVyN53gDLkNHqA0npdl2PNpRaaMavVrt27L8wWo5QIT+7zWA==", "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" + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "@material/radio": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" + "@material/mwc-ripple": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.25.3.tgz", + "integrity": "sha512-G/gt/csxgME6/sAku3GiuB0O2LLvoPWsRTLq/9iABpaGLJjqaKHvNg/IVzNDdF3YZT7EORgR9cBWWl7umA4i4Q==", + "requires": { + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/ripple": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, + "@material/mwc-textfield": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/@material/mwc-textfield/-/mwc-textfield-0.25.3.tgz", + "integrity": "sha512-stpZ8sEyo2Mb9fG2XCoTc1Kom8oRXZiVI5rU88GtfcBU7nH0em8S4grq9X1mVfUG6Cfi1G/T+avCSIhzbYtr0w==", "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@material/floating-label": "=14.0.0-canary.261f2db59.0", + "@material/line-ripple": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-floating-label": "^0.25.3", + "@material/mwc-line-ripple": "^0.25.3", + "@material/mwc-notched-outline": "^0.25.3", + "@material/textfield": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" } }, - "@babel/traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.0.tgz", - "integrity": "sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA==", - "dev": true, + "@material/notched-outline": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-gtn+IKAiX2rbfbX3a9aDlfUoKCEYrlAPOZifKXUaZ4UJYMNLzZuAqy7l5Ds30emtqUE22mySTEWqhzK6dePKsA==", "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.0", - "@babel/types": "^7.14.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/floating-label": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@babel/types": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.0.tgz", - "integrity": "sha512-O2LVLdcnWplaGxiPBz12d0HcdN8QdxdsWYhz5LSeuukV/5mn2xUUc3gBeU4QBYPJ18g/UToe8F532XJ608prmg==", - "dev": true, + "@material/radio": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-AvrsOqhP8UZ5d58RWgaTmQVlWQRULwk2BXhsEhtxz56CmTsyVM49thNbaNnc/TzuY9Ssxv/L2wYVbR2B3BX9Yw==", "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@koa/cors": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-3.1.0.tgz", - "integrity": "sha512-7ulRC1da/rBa6kj6P4g2aJfnET3z8Uf3SWu60cjbtxTA5g8lxRdX/Bd2P92EagGwwAhANeNw8T8if99rJliR6Q==", - "dev": true, - "requires": { - "vary": "^1.1.2" + "@material/ripple": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-3FLCLj8X7KrFfuYBHJg1b7Odb3V/AW7fxk3m1i1zhDnygKmlQ/abVucH1s2qbX3Y+JIiq+5/C5407h9BFtOf+A==", + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@material/animation": { - "version": "9.0.0-canary.1c156d69d.0", - "resolved": "https://registry.npmjs.org/@material/animation/-/animation-9.0.0-canary.1c156d69d.0.tgz", - "integrity": "sha512-m3eUpFRwxcP1tEWJlIH5q77YGSYEe5ITRw5OtyDvxU7ZzF0xKJbBeauQEdCmyig9UvK+J7jUUnCgkT/t/ldLtw==", + "@material/rtl": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-bVnXBbUsHs57+EXdeFbcwaKy3lT/itI/qTLmJ88ar0qaGEujO1GmESHm3ioqkeo4kQpTfDhBwQGeEi1aDaTdFg==", "requires": { - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@material/base": { - "version": "9.0.0-canary.1c156d69d.0", - "resolved": "https://registry.npmjs.org/@material/base/-/base-9.0.0-canary.1c156d69d.0.tgz", - "integrity": "sha512-r98qY6EsPx6BlzT0Pj+H+BTI7r76GEX/zZPgajxZjbPAJSeeK+uCh69Dmhf63meLKaFkKgvLwH5udKJLMqqjpQ==", + "@material/shape": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-VjcQltd1uF9ugvLExMy00SMISjy/370o8lsZlb1T+xHyhXHL3UxeuWYLW5Amq6mbx65+c9Df9WmlXXOdebpEkw==", "requires": { - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@material/dom": { - "version": "9.0.0-canary.1c156d69d.0", - "resolved": "https://registry.npmjs.org/@material/dom/-/dom-9.0.0-canary.1c156d69d.0.tgz", - "integrity": "sha512-AwiQDzquolB7rqy8k4+QMVQ8Njb6k0CT+otJ/UNJbj0qNVXZB4njVaWRWrWCt70hYp1rG0cRNkZ01ZJDqABUFw==", - "requires": { - "@material/feature-targeting": "9.0.0-canary.1c156d69d.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "@material/textfield": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-KBPgpvvVFBfLx9nc6+wWOS2hJ40JVwh5KBjMoYbiOEFLf0O7SgCAVREHaFAXrPsC8AeTyUipx6TReONIGfMCPQ==", + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/floating-label": "14.0.0-canary.261f2db59.0", + "@material/line-ripple": "14.0.0-canary.261f2db59.0", + "@material/notched-outline": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@material/feature-targeting": { - "version": "9.0.0-canary.1c156d69d.0", - "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-9.0.0-canary.1c156d69d.0.tgz", - "integrity": "sha512-HWd0+GMnkVB3anmUc9+MeWCNoogAbb4U7ihzwq7lzLCQyC+i/kunppkUVV7DhL3ZVl1O6zIw1eAT+dgQpN8x4Q==" - }, - "@material/mwc-base": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@material/mwc-base/-/mwc-base-0.20.0.tgz", - "integrity": "sha512-q35jN1TGBts3LzKk2RVtgBpLDfBfRrx2hJ4GEVAeJsEGiO5CZrCD0bPlZSRTammzQBbDAh7szvhMiWo0TkRaWw==", + "@material/theme": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-bUqyFT0QF8Nxx02fekt3CXIfC9DEPOPdo2hjgdtvhrNP+vftbkI2tKZ5/uRUnVA+zqQAOyIl5z6FOMg4fyemCA==", "requires": { - "@material/base": "=9.0.0-canary.1c156d69d.0", - "@material/dom": "=9.0.0-canary.1c156d69d.0", - "lit-element": "^2.3.0", - "tslib": "^2.0.1" + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@material/mwc-button": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@material/mwc-button/-/mwc-button-0.20.0.tgz", - "integrity": "sha512-kqQpeuLfaqfH4PZbENT9rwx1sgeFPLHuKy5M31ZeKG1deRTxw11FDGeMxSkePfm1QFfY6DNTsIAG5qC56tUNlw==", + "@material/tokens": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-mgar9gsLv00HTvXIDvNR1vEEXpfKgeWhVTO8a7aWofSNyENNOVc5ImJwBgCAMb5SgLHBi6w8/c1tPzjOewBfCA==", "requires": { - "@material/mwc-icon": "^0.20.0", - "@material/mwc-ripple": "^0.20.0", - "lit-element": "^2.3.0", - "lit-html": "^1.1.2", - "tslib": "^2.0.1" + "@material/elevation": "14.0.0-canary.261f2db59.0" } }, - "@material/mwc-icon": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@material/mwc-icon/-/mwc-icon-0.20.0.tgz", - "integrity": "sha512-YCtzWbJVSZGcvWKVHwIhwfGMLEqAmRSVGcXTCAH/rOzGU7RkOxQkfNDkLAuTRAX9a7HYQStIJ39ENVcysElljg==", + "@material/touch-target": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-xA6TTHN7aOTXg/+c6mQJlogzTD+Sp8WPC5TK8RBXbQxEykGXGW15p+H9pG+rX/gzD5iehnHRBrDUFmAGoskhcQ==", "requires": { - "lit-element": "^2.3.0", - "tslib": "^2.0.1" + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@material/mwc-ripple": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@material/mwc-ripple/-/mwc-ripple-0.20.0.tgz", - "integrity": "sha512-4rlIu+Kk//NsW/u3CnU1kz3dsvwEozax0Zf2CUp+ao0ozclHfQ2+sTZVY0Mr8+GJLn7Oz51gT5OHoarZuWWljA==", + "@material/typography": { + "version": "14.0.0-canary.261f2db59.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-14.0.0-canary.261f2db59.0.tgz", + "integrity": "sha512-WOCdcNkD5KBRAwICcRqWBRG3cDkyrwK5USTNmG0oxnwnZAN7daOpPTdLppVAhadE7faj8d67ON+V9pH7+T62FQ==", "requires": { - "@material/dom": "=9.0.0-canary.1c156d69d.0", - "@material/mwc-base": "^0.20.0", - "@material/ripple": "=9.0.0-canary.1c156d69d.0", - "lit-element": "^2.3.0", - "lit-html": "^1.1.2", - "tslib": "^2.0.1" + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" } }, - "@material/ripple": { - "version": "9.0.0-canary.1c156d69d.0", - "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-9.0.0-canary.1c156d69d.0.tgz", - "integrity": "sha512-F1e/LQmYHQFORM/C3hchmANnRwJCXlc7Cp7W+VGpvJdtdzYlTd8DKKcShuOozxUQOjutbNf+Ql8gpZIdYRQaoQ==", + "@mdn/browser-compat-data": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-4.1.13.tgz", + "integrity": "sha512-OFTriJmUcXnA1RjfKDJOfEmhHO44OV7Gxpqnh7eOM+3qep64Yt+uNF4jEeIFHnwTFH5tMcnBQxEI91dXDGiGYQ==", + "dev": true + }, + "@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": { - "@material/animation": "9.0.0-canary.1c156d69d.0", - "@material/base": "9.0.0-canary.1c156d69d.0", - "@material/dom": "9.0.0-canary.1c156d69d.0", - "@material/feature-targeting": "9.0.0-canary.1c156d69d.0", - "@material/theme": "9.0.0-canary.1c156d69d.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "@material/theme": { - "version": "9.0.0-canary.1c156d69d.0", - "resolved": "https://registry.npmjs.org/@material/theme/-/theme-9.0.0-canary.1c156d69d.0.tgz", - "integrity": "sha512-r1610TPwUplt4FHMk7cR06Oz1jU/G31wBIh4Frs/YIB0ZonVlI5cZdIkG0IFtNt9ZYWoDwfP/1nQBxdqrDPPhg==", + "@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": { - "@material/feature-targeting": "9.0.0-canary.1c156d69d.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "@open-wc/building-utils": { - "version": "2.18.4", - "resolved": "https://registry.npmjs.org/@open-wc/building-utils/-/building-utils-2.18.4.tgz", - "integrity": "sha512-wjNp9oE1SFsiBEqaI67ff60KHDpDbGMNF+82pvCHe412SFY4q8DNy8A+hesj1nZsuZHH1/olDfzBDbYKAnmgMg==", + "@open-wc/chai-dom-equals": { + "version": "0.12.36", + "resolved": "https://registry.npmjs.org/@open-wc/chai-dom-equals/-/chai-dom-equals-0.12.36.tgz", + "integrity": "sha512-Gt1fa37h4rtWPQGETSU4n1L678NmMi9KwHM1sH+JCGcz45rs8DBPx7MUVeGZ+HxRlbEI5t9LU2RGGv6xT2OlyA==", "dev": true, "requires": { - "@babel/core": "^7.11.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@webcomponents/shadycss": "^1.10.2", - "@webcomponents/webcomponentsjs": "^2.5.0", - "arrify": "^2.0.1", - "browserslist": "^4.16.0", - "chokidar": "^3.4.3", - "clean-css": "^4.2.3", - "clone": "^2.1.2", - "core-js-bundle": "^3.8.1", - "deepmerge": "^4.2.2", - "es-module-shims": "^0.4.7", - "html-minifier-terser": "^5.1.1", - "lru-cache": "^5.1.1", - "minimatch": "^3.0.4", - "parse5": "^5.1.1", - "path-is-inside": "^1.0.2", - "regenerator-runtime": "^0.13.7", - "resolve": "^1.19.0", - "rimraf": "^3.0.2", - "shady-css-scoped-element": "^0.0.2", - "systemjs": "^6.8.3", - "terser": "^4.6.7", - "valid-url": "^1.0.9", - "whatwg-fetch": "^3.5.0", - "whatwg-url": "^7.1.0" - } - }, - "@reallyland/tsconfig": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@reallyland/tsconfig/-/tsconfig-3.0.2.tgz", - "integrity": "sha512-a4lj2jtMC19MwkwjmHnjH1fw0TmUjfQ0RitxqX+LbV1ZzH51dGn3ZtWwnSjnpi/9sAeVKCGFmlUOhbC6UfbaHg==", + "@open-wc/semantic-dom-diff": "^0.13.16", + "@types/chai": "^4.1.7" + }, + "dependencies": { + "@open-wc/semantic-dom-diff": { + "version": "0.13.21", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.13.21.tgz", + "integrity": "sha512-BONpjHcGX2zFa9mfnwBCLEmlDsOHzT+j6Qt1yfK3MzFXFtAykfzFjAgaxPetu0YbBlCfXuMlfxI4vlRGCGMvFg==", + "dev": true + } + } + }, + "@open-wc/dedupe-mixin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@open-wc/dedupe-mixin/-/dedupe-mixin-1.3.0.tgz", + "integrity": "sha512-UfdK1MPnR6T7f3svzzYBfu3qBkkZ/KsPhcpc3JYhsUY4hbpwNF9wEQtD4Z+/mRqMTJrKg++YSxIxE0FBhY3RIw==", "dev": true }, - "@reallyland/tslint-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@reallyland/tslint-config/-/tslint-config-1.1.1.tgz", - "integrity": "sha512-9g8E2DvORelAtR9qs/X5ZD01hGlPZeg4Io2obTePVU4TtvyPWqXoROa9q/WpaObsA5BgRC6lAWjNz2RUUebRzA==", + "@open-wc/scoped-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@open-wc/scoped-elements/-/scoped-elements-2.0.1.tgz", + "integrity": "sha512-JS6ozxUFwFX3+Er91v9yQzNIaFn7OnE0iESKTbFvkkKdNwvAPtp1fpckBKIvWk8Ae9ZcoI9DYZuT2DDbMPcadA==", "dev": true, "requires": { - "tslint-config-airbnb": "^5.11.1", - "tslint-immutable": "^6.0.1" + "@lit/reactive-element": "^1.0.0", + "@open-wc/dedupe-mixin": "^1.3.0", + "@webcomponents/scoped-custom-element-registry": "^0.0.3" }, "dependencies": { - "@fimbul/bifrost": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@fimbul/bifrost/-/bifrost-0.21.0.tgz", - "integrity": "sha512-ou8VU+nTmOW1jeg+FT+sn+an/M0Xb9G16RucrfhjXGWv1Q97kCoM5CG9Qj7GYOSdu7km72k7nY83Eyr53Bkakg==", - "dev": true, - "requires": { - "@fimbul/ymir": "^0.21.0", - "get-caller-file": "^2.0.0", - "tslib": "^1.8.1", - "tsutils": "^3.5.0" - }, - "dependencies": { - "@fimbul/ymir": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@fimbul/ymir/-/ymir-0.21.0.tgz", - "integrity": "sha512-T/y7WqPsm4n3zhT08EpB5sfdm2Kvw3gurAxr2Lr5dQeLi8ZsMlNT/Jby+ZmuuAAd1PnXYzKp+2SXgIkQIIMCUg==", - "dev": true, - "requires": { - "inversify": "^5.0.0", - "reflect-metadata": "^0.1.12", - "tslib": "^1.8.1" - } - }, - "tsutils": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.19.1.tgz", - "integrity": "sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "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, - "peer": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true, - "peer": 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, - "peer": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "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, - "peer": 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, - "peer": true - }, - "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 - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "peer": 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, - "peer": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "@lit/reactive-element": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", + "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==", "dev": true - }, - "tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - } - }, - "tslint-config-airbnb": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/tslint-config-airbnb/-/tslint-config-airbnb-5.11.2.tgz", - "integrity": "sha512-mUpHPTeeCFx8XARGG/kzYP4dPSOgoCqNiYbGHh09qTH8q+Y1ghsOgaeZKYYQT7IyxMos523z/QBaiv2zKNBcow==", - "dev": true, - "requires": { - "tslint-consistent-codestyle": "^1.14.1", - "tslint-eslint-rules": "^5.4.0", - "tslint-microsoft-contrib": "~5.2.1" - } - }, - "tslint-consistent-codestyle": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.16.0.tgz", - "integrity": "sha512-ebR/xHyMEuU36hGNOgCfjGBNYxBPixf0yU1Yoo6s3BrpBRFccjPOmIVaVvQsWAUAMdmfzHOCihVkcaMfimqvHw==", - "dev": true, - "requires": { - "@fimbul/bifrost": "^0.21.0", - "tslib": "^1.7.1", - "tsutils": "^2.29.0" - } - }, - "tslint-eslint-rules": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz", - "integrity": "sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w==", - "dev": true, - "requires": { - "doctrine": "0.7.2", - "tslib": "1.9.0", - "tsutils": "^3.0.0" - }, - "dependencies": { - "tslib": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", - "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", - "dev": true - }, - "tsutils": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.19.1.tgz", - "integrity": "sha512-GEdoBf5XI324lu7ycad7s6laADfnAqCw6wLGI+knxvw9vsIYBaJfYdmeCEG3FMMUiSm3OGgNb+m6utsWf5h9Vw==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "tslint-immutable": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/tslint-immutable/-/tslint-immutable-6.0.1.tgz", - "integrity": "sha512-3GQ6HffN64gLmT/N1YzyVMqyf6uBjMvhNaevK8B0K01/QC0OU5AQZrH4TjMHo1IdG3JpqsZvuRy9IW1LA3zjwA==", - "dev": true, - "requires": { - "tsutils": "^2.28.0 || ^3.0.0" - } - }, - "tslint-microsoft-contrib": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz", - "integrity": "sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA==", + } + } + }, + "@open-wc/semantic-dom-diff": { + "version": "0.19.5", + "resolved": "https://registry.npmjs.org/@open-wc/semantic-dom-diff/-/semantic-dom-diff-0.19.5.tgz", + "integrity": "sha512-Wi0Fuj3dzqlWClU0y+J4k/nqTcH0uwgOWxZXPyeyG3DdvuyyjgiT4L4I/s6iVShWQvvEsyXnj7yVvixAo3CZvg==", + "dev": true, + "requires": { + "@types/chai": "^4.2.11", + "@web/test-runner-commands": "^0.5.7" + }, + "dependencies": { + "@web/test-runner-commands": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.5.13.tgz", + "integrity": "sha512-FXnpUU89ALbRlh9mgBd7CbSn5uzNtr8gvnQZPOvGLDAJ7twGvZdUJEAisPygYx2BLPSFl3/Mre8pH8zshJb8UQ==", "dev": true, "requires": { - "tsutils": "^2.27.2 <2.29.0" - }, - "dependencies": { - "tsutils": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", - "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } + "@web/test-runner-core": "^0.10.20", + "mkdirp": "^1.0.4" } } } }, + "@open-wc/testing": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@open-wc/testing/-/testing-3.1.2.tgz", + "integrity": "sha512-2KjEszLItrIEZwCLFjWOSy4rnLzLOpgckrKfZjNA39PpFR3xD9bqYU30TTnLRHBk2B/0ZUbHglyca3iwcF964w==", + "dev": true, + "requires": { + "@esm-bundle/chai": "^4.3.4", + "@open-wc/chai-dom-equals": "^0.12.36", + "@open-wc/semantic-dom-diff": "^0.19.5", + "@open-wc/testing-helpers": "^2.1.2", + "@types/chai": "^4.2.11", + "@types/chai-dom": "^0.0.9", + "@types/sinon-chai": "^3.2.3", + "chai-a11y-axe": "^1.3.2" + } + }, + "@open-wc/testing-helpers": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@open-wc/testing-helpers/-/testing-helpers-2.1.2.tgz", + "integrity": "sha512-NEdsV47DnOWaw3Wpp85p4qZ6bdubtGPdlTiblk8vSf2HJ2sR4b3ckyRWzsj/k+pcxrDGt8z0Awz71p+048Rrfg==", + "dev": true, + "requires": { + "@open-wc/scoped-elements": "^2.0.1", + "lit": "^2.0.0", + "lit-html": "^2.0.0" + } + }, + "@reallyland/tools": { + "version": "0.0.13", + "resolved": "https://registry.npmjs.org/@reallyland/tools/-/tools-0.0.13.tgz", + "integrity": "sha512-c+Yl4muWapVQjLsLStFTFFAOu+xlD7ga4r5TboRGGFmnfSETpePrNzu3m2GgJZ3U0oJWPlVrM8KcxIgbLc9T9g==", + "dev": true, + "requires": { + "@commitlint/config-conventional": "^16.2.1", + "@skypack/package-check": "^0.2.2", + "@typescript-eslint/eslint-plugin": "^5.16.0", + "@typescript-eslint/parser": "^5.16.0", + "eslint": "^8.12.0", + "eslint-plugin-promise": "^6.0.0", + "eslint-plugin-regexp": "^1.6.0", + "eslint-plugin-simple-import-sort": "^7.0.0", + "nano-staged": "^0.6.0", + "typescript": "^4.6.3" + } + }, "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", + "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -12690,12 +6664,6 @@ "picomatch": "^2.2.2" } }, - "@sindresorhus/is": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz", - "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==", - "dev": true - }, "@skypack/package-check": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@skypack/package-check/-/package-check-0.2.2.tgz", @@ -12706,15 +6674,6 @@ "yargs-parser": "^20.2.3" } }, - "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, "@types/accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", @@ -12724,127 +6683,78 @@ "@types/node": "*" } }, - "@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } + "@types/babel__code-frame": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/babel__code-frame/-/babel__code-frame-7.0.3.tgz", + "integrity": "sha512-2TN6oiwtNjOezilFVl77zwdNPwQWaDBBCCWWxyo1ctiO3vAtd7H/aB/CBJdw9+kqq3+latD0SXoedIuHySSZWw==", + "dev": true }, "@types/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, "requires": { "@types/connect": "*", "@types/node": "*" } }, - "@types/browserslist": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/@types/browserslist/-/browserslist-4.15.0.tgz", - "integrity": "sha512-h9LyKErRGZqMsHh9bd+FE8yCIal4S0DxKTOeui56VgVXqa66TKiuaIUxCAI7c1O0LjaUzOTcsMyOpO9GetozRA==", + "@types/chai": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", + "dev": true + }, + "@types/chai-dom": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/chai-dom/-/chai-dom-0.0.9.tgz", + "integrity": "sha512-jj4F2NJog2/GBYsyJ8+NvhnWUBbPY4MUAKLdPJE6+568rw12GGXvj0ycUuP5nndVrnJgozmJAoMTvxvjJATXWw==", "dev": true, "requires": { - "browserslist": "*" + "@types/chai": "*" } }, - "@types/browserslist-useragent": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/browserslist-useragent/-/browserslist-useragent-3.0.3.tgz", - "integrity": "sha512-8ZVSxTKdGLAIWt5NaYR+VoD7G0zVTG0yvuAmPRDXBs/pR+SKbPwkiw/gac2IxBc5IBA59orlSJh4/aYF4o0QAg==", - "dev": true - }, - "@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", + "@types/co-body": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/co-body/-/co-body-6.1.0.tgz", + "integrity": "sha512-3e0q2jyDAnx/DSZi0z2H0yoZ2wt5yRDZ+P7ymcMObvq0ufWRT4tsajyO+Q1VwVWiv9PRR4W3YEjEzBjeZlhF+w==", "dev": true, "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", "@types/node": "*", - "@types/responselike": "*" + "@types/qs": "*" } }, - "@types/caniuse-api": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/caniuse-api/-/caniuse-api-3.0.1.tgz", - "integrity": "sha512-VcjPciJLx86btwWypSo6vRzZSOC6asS3/SGgn7r7Xk7jAWNyMoxCy+IQzI2vuW2Bvs3iytyOEwsjLJKmHXBvmA==", - "dev": true - }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", - "dev": true - }, "@types/command-line-args": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.0.0.tgz", - "integrity": "sha512-4eOPXyn5DmP64MCMF8ePDvdlvlzt2a+F8ZaVjqmh2yFCpGjc1kI3kGnCFYX9SCsGTjQcWIyVZ86IHCEyjy/MNg==", - "dev": true - }, - "@types/command-line-usage": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.1.tgz", - "integrity": "sha512-/xUgezxxYePeXhg5S04hUjxG9JZi+rJTs1+4NwpYPfSaS7BeDa6tVJkH6lN9Cb6rl8d24Fi2uX0s0Ngg2JT6gg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", "dev": true }, "@types/connect": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", - "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==", + "dev": true + }, + "@types/convert-source-map": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/convert-source-map/-/convert-source-map-1.5.2.tgz", + "integrity": "sha512-tHs++ZeXer40kCF2JpE51Hg7t4HPa18B1b1Dzy96S0eCw8QKECNMYMfwa1edK/x8yCN0r4e6ewvLcc5CsVGkdg==", "dev": true }, "@types/cookies": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.6.tgz", - "integrity": "sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w==", + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", + "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", "dev": true, "requires": { "@types/connect": "*", @@ -12854,9 +6764,9 @@ } }, "@types/debounce": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.0.tgz", - "integrity": "sha512-bWG5wapaWgbss9E238T0R6bfo5Fh3OkeoSt245CM7JJwVwpw6MEBCbIxLq5z8KzsE3uJhzcIuQkyiZmzV3M/Dw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-epMsEE85fi4lfmJUH/89/iV/LI+F5CvNIvmgs5g5jYFPfhO2S/ae8WSsLOKWdwtoaZw9Q2IhJ4tQ5tFCcS/4HA==", "dev": true }, "@types/estree": { @@ -12865,19 +6775,10 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, - "@types/etag": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@types/etag/-/etag-1.8.0.tgz", - "integrity": "sha512-EdSN0x+Y0/lBv7YAb8IU4Jgm6DWM+Bqtz7o5qozl96fzaqdqbdfHS5qjdpFeIv7xQ8jSLyjMMNShgYtMajEHyQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/express": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz", - "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==", + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, "requires": { "@types/body-parser": "*", @@ -12887,9 +6788,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz", - "integrity": "sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==", + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", "dev": true, "requires": { "@types/node": "*", @@ -12898,21 +6799,45 @@ } }, "@types/http-assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz", - "integrity": "sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz", + "integrity": "sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==", "dev": true }, - "@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", + "@types/http-errors": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.2.tgz", + "integrity": "sha512-EqX+YQxINb+MeXaIqYDASb6U6FCHbWjkj4a1CKDBks3d/QiB2+PqBLyO72vLDgAO1wUI4O+9gweRcQK11bTL/w==", "dev": true }, - "@types/http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA==", + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "@types/keygrip": { @@ -12921,19 +6846,10 @@ "integrity": "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==", "dev": true }, - "@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/koa": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.1.tgz", - "integrity": "sha512-Qbno7FWom9nNqu0yHZ6A0+RWt4mrYBhw3wpBAQ3+IuzGcLlfeYkzZrnMq5wsxulN2np8M4KKeUpTodsOsSad5Q==", + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz", + "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==", "dev": true, "requires": { "@types/accepts": "*", @@ -12946,15 +6862,6 @@ "@types/node": "*" } }, - "@types/koa__cors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/koa__cors/-/koa__cors-3.0.2.tgz", - "integrity": "sha512-gBetQR0DJ9JTG1YQoW33BADHCrDPJGiJUKUUcEPJwW1A2unzpIMhorEpXB6eMaaXTaqHLemcGnq3RmH9XaryRQ==", - "dev": true, - "requires": { - "@types/koa": "*" - } - }, "@types/koa-compose": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", @@ -12964,133 +6871,42 @@ "@types/koa": "*" } }, - "@types/koa-compress": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@types/koa-compress/-/koa-compress-2.0.9.tgz", - "integrity": "sha512-1Sa9OsbHd2N2N7gLpdIRHe8W99EZbfIR31D7Iisx16XgwZCnWUtGXzXQejhu74Y1pE/wILqBP6VL49ch/MVpZw==", - "dev": true, - "requires": { - "@types/koa": "*", - "@types/node": "*" - } - }, - "@types/koa-etag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/koa-etag/-/koa-etag-3.0.0.tgz", - "integrity": "sha512-gXQUtKGEnCy0sZLG+uE3wL4mvY1CBPcb6ECjpAoD8RGYy/8ACY1B084k8LTFPIdVcmy7GD6Y4n3up3jnupofcQ==", - "dev": true, - "requires": { - "@types/etag": "*", - "@types/koa": "*" - } - }, - "@types/koa-send": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@types/koa-send/-/koa-send-4.1.2.tgz", - "integrity": "sha512-rfqKIv9bFds39Jxvsp8o3YJLnEQVPVriYA14AuO2OY65IHh/4UX4U/iMs5L0wATpcRmm1bbe0BNk23TRwx3VQQ==", - "dev": true, - "requires": { - "@types/koa": "*" - } - }, - "@types/koa-static": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/koa-static/-/koa-static-4.0.1.tgz", - "integrity": "sha512-SSpct5fEcAeRkBHa3RiwCIRfDHcD1cZRhwRF///ZfvRt8KhoqRrhK6wpDlYPk/vWHVFE9hPGqh68bhzsHkir4w==", - "dev": true, - "requires": { - "@types/koa": "*", - "@types/koa-send": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz", - "integrity": "sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w==", - "dev": true - }, "@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, - "@types/mime-types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz", - "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", - "dev": true - }, "@types/mocha": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", - "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.3.tgz", + "integrity": "sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==", "dev": true }, "@types/node": { - "version": "14.14.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.21.tgz", - "integrity": "sha512-cHYfKsnwllYhjOzuC5q1VpguABBeecUp24yFluHpn/BQaVxB1CuQ1FSRZCzrPxrkIfWISXV2LbeoBthLWg0+0A==", - "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==", + "version": "17.0.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", + "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", "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==" - }, - "@types/path-is-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/path-is-inside/-/path-is-inside-1.0.0.tgz", - "integrity": "sha512-hfnXRGugz+McgX2jxyy5qz9sB21LRzlGn24zlwN2KEgoPtEvjzNRrLtUkOOebPDPZl3Rq7ywKxYvylVcEZDnEw==", - "dev": true - }, - "@types/pretty": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/pretty/-/pretty-2.0.0.tgz", - "integrity": "sha512-nojaE6CV03swMxoHnAisV2Rl0Ma6WPUtQo87hUmaotu/YPugPlmiRB60sthbyppXdMFTdJV3wm6zCENY4q1tKA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", "dev": true }, - "@types/prismjs": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.16.2.tgz", - "integrity": "sha512-1M/j21xgTde7RPtpJVQebW5rzrquj7S+wnqt4x9uWrIPpr0Ya/uXypcqC2aUQL5gtLXFCKSH7GnjfAijMdfbuA==" - }, "@types/qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==", + "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/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, - "@types/request": { - "version": "2.48.5", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.5.tgz", - "integrity": "sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ==", - "dev": true, - "requires": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" - } - }, "@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -13100,709 +6916,557 @@ "@types/node": "*" } }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, "requires": { + "@types/mime": "^1", "@types/node": "*" } }, - "@types/selenium-standalone": { - "version": "6.15.2", - "resolved": "https://registry.npmjs.org/@types/selenium-standalone/-/selenium-standalone-6.15.2.tgz", - "integrity": "sha512-Jnt4AHHcUOPGuZ5cJRYfP3IpPalNc/o1BmFvuFFmLtU2PtvEGvyyJPdpErqzZDxsP8E4yjTst0GL+QMJiEWuBA==", + "@types/sinon": { + "version": "10.0.11", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.11.tgz", + "integrity": "sha512-dmZsHlBsKUtBpHriNjlK0ndlvEh8dcb9uV9Afsbt89QIyydpC7NcR+nWlAhASfy3GHnxTl4FX/aKE7XZUt/B4g==", "dev": true, "requires": { - "@types/node": "*" + "@types/sinonjs__fake-timers": "*" } }, - "@types/serve-static": { - "version": "1.13.9", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", - "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", + "@types/sinon-chai": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.8.tgz", + "integrity": "sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g==", "dev": true, "requires": { - "@types/mime": "^1", - "@types/node": "*" + "@types/chai": "*", + "@types/sinon": "*" } }, - "@types/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==", + "@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", "dev": true }, - "@types/whatwg-url": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-6.4.0.tgz", - "integrity": "sha512-tonhlcbQ2eho09am6RHnHOgvtDfDYINd5rgxD+2YSkKENooVCFsWizJz139MQW/PV8FfClyKrNe9ZbdHrSCxGg==", + "@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + }, + "@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "dev": true, "requires": { "@types/node": "*" } }, - "@wdio/cli": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-5.23.0.tgz", - "integrity": "sha512-QYhVQUIBamgr627dU88XE7yyiZ/Oe6gQR2ZGiZMyxDQ3zxXnf9BRhKtn1x+AKLO7Dwag8+Apy/3xNeY4OOsfog==", - "dev": true, - "requires": { - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/utils": "5.23.0", - "async-exit-hook": "^2.0.1", - "chalk": "^3.0.0", - "chokidar": "^3.0.0", - "cli-spinners": "^2.1.0", - "ejs": "^3.0.1", - "fs-extra": "^8.0.1", - "inquirer": "^7.0.0", - "lodash.flattendeep": "^4.4.0", - "lodash.pickby": "^4.6.0", - "lodash.union": "^4.6.0", - "log-update": "^3.2.0", - "webdriverio": "5.23.0", - "yargs": "^15.0.1", - "yarn-install": "^1.0.0" - } - }, - "@wdio/config": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-5.22.4.tgz", - "integrity": "sha512-i5dJQWb80darcRA//tfG0guMeQCeRUXroZNnHjGNb1qzvTRZmcIIhdxaD+DbK/5dWEx6aoMfoi6wjVp/CXwdAg==", + "@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": { - "@wdio/logger": "5.16.10", - "deepmerge": "^4.0.0", - "glob": "^7.1.2" + "@types/node": "*" } }, - "@wdio/local-runner": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-5.23.0.tgz", - "integrity": "sha512-+hlkaLemsOodCq19DEWi6ILu4qi8q023LZfLj6ZJdxLdVxkqrvm6VlRhI3B7u6T5CGA7CaOe500LeKK4strKwA==", + "@typescript-eslint/eslint-plugin": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.16.0.tgz", + "integrity": "sha512-SJoba1edXvQRMmNI505Uo4XmGbxCK9ARQpkvOd00anxzri9RNQk0DDCxD+LIl+jYhkzOJiOMMKYEHnHEODjdCw==", "dev": true, "requires": { - "@wdio/logger": "5.16.10", - "@wdio/repl": "5.23.0", - "@wdio/runner": "5.23.0", - "async-exit-hook": "^2.0.1", - "stream-buffers": "^3.0.2" + "@typescript-eslint/scope-manager": "5.16.0", + "@typescript-eslint/type-utils": "5.16.0", + "@typescript-eslint/utils": "5.16.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, - "@wdio/logger": { - "version": "5.16.10", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-5.16.10.tgz", - "integrity": "sha512-hRKhxgd9uB48Dtj2xe2ckxU4KwI/RO8IwguySuaI2SLFj6EDbdonwzpVkq111/fjBuq7R1NauAaNcm3AMEbIFA==", + "@typescript-eslint/parser": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.16.0.tgz", + "integrity": "sha512-fkDq86F0zl8FicnJtdXakFs4lnuebH6ZADDw6CYQv0UZeIjHvmEw87m9/29nk2Dv5Lmdp0zQ3zDQhiMWQf/GbA==", "dev": true, "requires": { - "chalk": "^3.0.0", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" + "@typescript-eslint/scope-manager": "5.16.0", + "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/typescript-estree": "5.16.0", + "debug": "^4.3.2" } }, - "@wdio/mocha-framework": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-5.23.0.tgz", - "integrity": "sha512-TLkl07wGWxHmIi46GNr9napeZ6ojEWMtHp5hsSeM7/9fabBWiSHq0aSFrvw6y8GIPZHr6Qp8sQ7CXX33R0uzRg==", + "@typescript-eslint/scope-manager": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.16.0.tgz", + "integrity": "sha512-P+Yab2Hovg8NekLIR/mOElCDPyGgFZKhGoZA901Yax6WR6HVeGLbsqJkZ+Cvk5nts/dAlFKm8PfL43UZnWdpIQ==", "dev": true, "requires": { - "@wdio/logger": "5.16.10", - "@wdio/utils": "5.23.0", - "mocha": "^7.0.1" + "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/visitor-keys": "5.16.0" } }, - "@wdio/protocols": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-5.22.1.tgz", - "integrity": "sha512-GdoWb/HTrb09Qb0S/7sLp1NU94LAhTsF1NnFj5sEFSUpecrl0S07pnhVg54pUImectN/woaqSl7uJGjlSGZcdQ==", - "dev": true - }, - "@wdio/repl": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-5.23.0.tgz", - "integrity": "sha512-cKG9m0XuqcQenQmoup0yJX1fkDQEdY06QXuwt636ZQf6XgDoeoAdNOgnRnNruQ0+JsC2eqHFoSNto1q8wcLH/g==", + "@typescript-eslint/type-utils": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.16.0.tgz", + "integrity": "sha512-SKygICv54CCRl1Vq5ewwQUJV/8padIWvPgCxlWPGO/OgQLCijY9G7lDu6H+mqfQtbzDNlVjzVWQmeqbLMBLEwQ==", "dev": true, "requires": { - "@wdio/utils": "5.23.0" + "@typescript-eslint/utils": "5.16.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" } }, - "@wdio/reporter": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-5.22.4.tgz", - "integrity": "sha512-y/HIKGJHsKXroWWH1B7upynoYmFMuAwJs3LEVwdnpiJIBF4DxzIrRGCY/SSA6U1a/+cRTdI5m1+vA1gcFxcmwQ==", + "@typescript-eslint/types": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.16.0.tgz", + "integrity": "sha512-oUorOwLj/3/3p/HFwrp6m/J2VfbLC8gjW5X3awpQJ/bSG+YRGFS4dpsvtQ8T2VNveV+LflQHjlLvB6v0R87z4g==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.16.0.tgz", + "integrity": "sha512-SE4VfbLWUZl9MR+ngLSARptUv2E8brY0luCdgmUevU6arZRY/KxYoLI/3V/yxaURR8tLRN7bmZtJdgmzLHI6pQ==", "dev": true, "requires": { - "fs-extra": "^8.0.1" + "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/visitor-keys": "5.16.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" } }, - "@wdio/runner": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-5.23.0.tgz", - "integrity": "sha512-G4ddjgYeaopF3L+1+48V/MgCVSTOpiNXfHpQG3RBi9iw2dCYraZtn1bZEiBqTZaGd+tqd+DBvfQ0HjP0JUT8Kw==", + "@typescript-eslint/utils": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.16.0.tgz", + "integrity": "sha512-iYej2ER6AwmejLWMWzJIHy3nPJeGDuCqf8Jnb+jAQVoPpmWzwQOfa9hWVB8GIQE5gsCv/rfN4T+AYb/V06WseQ==", "dev": true, "requires": { - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/utils": "5.23.0", - "deepmerge": "^4.0.0", - "gaze": "^1.1.2", - "webdriverio": "5.23.0" + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.16.0", + "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/typescript-estree": "5.16.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" } }, - "@wdio/sauce-service": { - "version": "5.22.5", - "resolved": "https://registry.npmjs.org/@wdio/sauce-service/-/sauce-service-5.22.5.tgz", - "integrity": "sha512-8PA11lFRu+iojnLRGztf799fgOcCUt8IOXsjTC73ea+7oBfNo01UpFiMFuVNIiz2BymEfUR7mLQOzzgaqxeIpA==", + "@typescript-eslint/visitor-keys": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.16.0.tgz", + "integrity": "sha512-jqxO8msp5vZDhikTwq9ubyMHqZ67UIvawohr4qF3KhlpL7gzSjOd+8471H3nh5LyABkaI85laEKKU8SnGUK5/g==", "dev": true, "requires": { - "@wdio/logger": "5.16.10", - "sauce-connect-launcher-update": "^1.3.2", - "saucelabs": "^4.0.0" + "@typescript-eslint/types": "5.16.0", + "eslint-visitor-keys": "^3.0.0" } }, - "@wdio/selenium-standalone-service": { - "version": "5.16.10", - "resolved": "https://registry.npmjs.org/@wdio/selenium-standalone-service/-/selenium-standalone-service-5.16.10.tgz", - "integrity": "sha512-IudfrPgFoejkM+UT4sPv9g5pAGax7+CyHDZkbPDl2XXsct3gdAXDVe57KWuNYX+s0jFu8MSR/4nLnvJjdydNjw==", + "@web/browser-logs": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@web/browser-logs/-/browser-logs-0.2.5.tgz", + "integrity": "sha512-Qxo1wY/L7yILQqg0jjAaueh+tzdORXnZtxQgWH23SsTCunz9iq9FvsZa8Q5XlpjnZ3vLIsFEuEsCMqFeohJnEg==", "dev": true, "requires": { - "@types/selenium-standalone": "^6.15.0", - "@wdio/logger": "5.16.10", - "fs-extra": "^8.0.1", - "selenium-standalone": "^6.15.1" + "errorstacks": "^2.2.0" } }, - "@wdio/spec-reporter": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-5.23.0.tgz", - "integrity": "sha512-dqVqo5+wbSaJhQfOOnw8o53StFtPOlUwrsMsp80YATZZxGjtLLuNFWlT9xGVhMDzTnzBUNO8ZxsSIl8gSE2Iew==", + "@web/config-loader": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@web/config-loader/-/config-loader-0.1.3.tgz", + "integrity": "sha512-XVKH79pk4d3EHRhofete8eAnqto1e8mCRAqPV00KLNFzCWSe8sWmLnqKCqkPNARC6nksMaGrATnA5sPDRllMpQ==", "dev": true, "requires": { - "@wdio/reporter": "5.22.4", - "chalk": "^3.0.0", - "easy-table": "^1.1.1", - "pretty-ms": "^6.0.0" + "semver": "^7.3.4" } }, - "@wdio/utils": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-5.23.0.tgz", - "integrity": "sha512-dWPEkDiaNUqJXPO6L2di2apI7Rle7Er4euh67Wlb5+3MrPNjCKhiF8gHcpQeL8oe6A1MH/f89kpSEEXe4BMkAw==", + "@web/dev-server": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.30.tgz", + "integrity": "sha512-nUKR+lq06gaCvH6vKmfhPe/Kka1Xp7yN1FN5NEx+Yk4+9CyxZ3UJt2eHXedrcz+XCafxExW114ElEDgCahJowg==", "dev": true, "requires": { - "@wdio/logger": "5.16.10", - "deepmerge": "^4.0.0" + "@babel/code-frame": "^7.12.11", + "@types/command-line-args": "^5.0.0", + "@web/config-loader": "^0.1.3", + "@web/dev-server-core": "^0.3.17", + "@web/dev-server-rollup": "^0.3.13", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "ip": "^1.1.5", + "nanocolors": "^0.2.1", + "open": "^8.0.2", + "portfinder": "^1.0.28" } }, - "@webcomponents/shadycss": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.10.2.tgz", - "integrity": "sha512-9Iseu8bRtecb0klvv+WXZOVZatsRkbaH7M97Z+f+Pt909R4lDfgUODAnra23DOZTpeMTAkVpf4m/FZztN7Ox1A==", - "dev": true - }, - "@webcomponents/webcomponentsjs": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.5.0.tgz", - "integrity": "sha512-C0l51MWQZ9kLzcxOZtniOMohpIFdCLZum7/TEHv3XWFc1Fvt5HCpbSX84x8ltka/JuNKcuiDnxXFkiB2gaePcg==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "abortcontroller-polyfill": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.1.tgz", - "integrity": "sha512-yml9NiDEH4M4p0G4AcPkg8AAa4mF3nfYF28VQxaokpO67j9H7gWgmsVWJ/f1Rn+PzsnDYvzJzWIQzCqDKRvWlA==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "@web/dev-server-core": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.17.tgz", + "integrity": "sha512-vN1dwQ8yDHGiAvCeUo9xFfjo+pFl8TW+pON7k9kfhbegrrB8CKhJDUxmHbZsyQUmjf/iX57/LhuWj1xGhRL8AA==", "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^1.2.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^0.9.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^4.0.6", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^6.0.0", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.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 - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "dev": true, - "requires": {} - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "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==", + "@web/dev-server-esbuild": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.2.16.tgz", + "integrity": "sha512-a82uKy9vQ4HvfWtjd7hJ3GtaqkL2ofxpEu3a1wIZyXB2dFWPvhRSmLNe/4IPPHe4vj6PVdRpLSFPEA3lXUW5Pw==", "dev": true, "requires": { - "debug": "4" + "@mdn/browser-compat-data": "^4.0.0", + "@web/dev-server-core": "^0.3.17", + "esbuild": "^0.12.21", + "parse5": "^6.0.1", + "ua-parser-js": "^1.0.2" } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "@web/dev-server-rollup": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.15.tgz", + "integrity": "sha512-hhxvBmNIY19vXeocYB1IBOuhpVpy1L7jbwBarmvC0QJKZsgkxssNTzXJ8iga70c2+H0c/rBz1xUaKuAcov0uOA==", "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" + "@rollup/plugin-node-resolve": "^11.0.1", + "@web/dev-server-core": "^0.3.16", + "nanocolors": "^0.2.1", + "parse5": "^6.0.1", + "rollup": "^2.66.1", + "whatwg-url": "^11.0.0" }, "dependencies": { - "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 + "@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } } } }, - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "@web/parse5-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.3.0.tgz", + "integrity": "sha512-Pgkx3ECc8EgXSlS5EyrgzSOoUbM6P8OKS471HLAyvOBcP1NCBn0to4RN/OaKASGq8qa3j+lPX9H14uA5AHEnQg==", "dev": true, "requires": { - "type-fest": "^0.11.0" + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" } }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@web/test-runner": { + "version": "0.13.27", + "resolved": "https://registry.npmjs.org/@web/test-runner/-/test-runner-0.13.27.tgz", + "integrity": "sha512-yVhXK9sPJE2VQs1/KPTIeQvUxh+02OZkn+tgcr0+W8ovvrFD4ucF2X26cpeOTuD+Y67ERUi/EopIze3aelw6sg==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "@web/browser-logs": "^0.2.2", + "@web/config-loader": "^0.1.3", + "@web/dev-server": "^0.1.24", + "@web/test-runner-chrome": "^0.10.7", + "@web/test-runner-commands": "^0.6.0", + "@web/test-runner-core": "^0.10.22", + "@web/test-runner-mocha": "^0.7.5", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "convert-source-map": "^1.7.0", + "diff": "^5.0.0", + "globby": "^11.0.1", + "nanocolors": "^0.2.1", + "portfinder": "^1.0.28", + "source-map": "^0.7.3" } }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", - "dev": true - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "@web/test-runner-chrome": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@web/test-runner-chrome/-/test-runner-chrome-0.10.7.tgz", + "integrity": "sha512-DKJVHhHh3e/b6/erfKOy0a4kGfZ47qMoQRgROxi9T4F9lavEY3E5/MQ7hapHFM2lBF4vDrm+EWjtBdOL8o42tw==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@web/test-runner-core": "^0.10.20", + "@web/test-runner-coverage-v8": "^0.4.8", + "chrome-launcher": "^0.15.0", + "puppeteer-core": "^13.1.3" } }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true - }, - "archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "@web/test-runner-commands": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@web/test-runner-commands/-/test-runner-commands-0.6.1.tgz", + "integrity": "sha512-P4aQqp0duumeGdGxQ8TwLnplkrXzpLqb47eSEEqBRS//C1H7s6VskaqEng+k0dbk+cSpEa4RuZGY/G5k8aTjTw==", "dev": true, "requires": { - "file-type": "^4.2.0" - }, - "dependencies": { - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true - } + "@web/test-runner-core": "^0.10.20", + "mkdirp": "^1.0.4" } }, - "archiver": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", - "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", + "@web/test-runner-core": { + "version": "0.10.25", + "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.10.25.tgz", + "integrity": "sha512-gH8VXyZbwf+sqPiH4cnXYf86SqwBLtou+0LFFCLaDQRbMlrfi5byAISt39fNX2ejd46bF1cZn6DK+mzb/Xjccw==", "dev": true, "requires": { - "archiver-utils": "^2.1.0", - "async": "^2.6.3", - "buffer-crc32": "^0.2.1", - "glob": "^7.1.4", - "readable-stream": "^3.4.0", - "tar-stream": "^2.1.0", - "zip-stream": "^2.1.2" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.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" - } - }, - "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" - } - } + "@babel/code-frame": "^7.12.11", + "@types/babel__code-frame": "^7.0.2", + "@types/co-body": "^6.1.0", + "@types/convert-source-map": "^1.5.1", + "@types/debounce": "^1.2.0", + "@types/istanbul-lib-coverage": "^2.0.3", + "@types/istanbul-reports": "^3.0.0", + "@web/browser-logs": "^0.2.1", + "@web/dev-server-core": "^0.3.16", + "chokidar": "^3.4.3", + "cli-cursor": "^3.1.0", + "co-body": "^6.1.0", + "convert-source-map": "^1.7.0", + "debounce": "^1.2.0", + "dependency-graph": "^0.11.0", + "globby": "^11.0.1", + "ip": "^1.1.5", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.0.2", + "log-update": "^4.0.0", + "nanocolors": "^0.2.1", + "nanoid": "^3.1.25", + "open": "^8.0.2", + "picomatch": "^2.2.2", + "source-map": "^0.7.3" } }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "@web/test-runner-coverage-v8": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/@web/test-runner-coverage-v8/-/test-runner-coverage-v8-0.4.8.tgz", + "integrity": "sha512-Ib0AscR8Xf9E/V7rf3XOVQTe4vKIbwSTupxV1xGgzj3x4RKUuMUg9FLz9EigZ5iN0mOzZKDllyRS523hbdhDtA==", "dev": true, "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" + "@web/test-runner-core": "^0.10.20", + "istanbul-lib-coverage": "^3.0.0", + "picomatch": "^2.2.2", + "v8-to-istanbul": "^8.0.0" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "@web/test-runner-mocha": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@web/test-runner-mocha/-/test-runner-mocha-0.7.5.tgz", + "integrity": "sha512-12/OBq6efPCAvJpcz3XJs2OO5nHe7GtBibZ8Il1a0QtsGpRmuJ4/m1EF0Fj9f6KHg7JdpGo18A37oE+5hXjHwg==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "@types/mocha": "^8.2.0", + "@web/test-runner-core": "^0.10.20" } }, - "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "@web/test-runner-playwright": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@web/test-runner-playwright/-/test-runner-playwright-0.8.8.tgz", + "integrity": "sha512-bhb0QVldfDoPJqOj5mm1hpE6FReyddc/iIuAkVf/kbJvgggTCT2bWGxUvXJlGzf+4epmDhU+hSTfEoLL9R2vGw==", "dev": true, "requires": { - "safer-buffer": "~2.1.0" + "@web/test-runner-core": "^0.10.20", + "@web/test-runner-coverage-v8": "^0.4.8", + "playwright": "^1.14.0" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, - "async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "@webcomponents/scoped-custom-element-registry": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@webcomponents/scoped-custom-element-registry/-/scoped-custom-element-registry-0.0.3.tgz", + "integrity": "sha512-lpSzgDCGbM99dytb3+J3Suo4+Bk1E13MPnWB42JK8GwxSAxFz+tC7TTv2hhDSIE2IirGNKNKCf3m08ecu6eAsQ==", "dev": true }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } }, - "axe-core": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.1.1.tgz", - "integrity": "sha512-5Kgy8Cz6LPC9DJcNb3yjAXTu3XihQgEdnIg50c//zOC/MyLP0Clg+Y8Sh9ZjjnvBrDZU4DgXS9C3T9r4/scGZQ==", + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "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==", + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "requires": { - "object.assign": "^4.1.0" - } + "requires": {} }, - "babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "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": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "debug": "4" } }, - "babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "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": { - "@babel/helper-define-polyfill-provider": "^0.2.0", - "core-js-compat": "^3.9.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0" + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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 }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bin-check": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-4.1.0.tgz", - "integrity": "sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==", + "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": { - "execa": "^0.7.0", - "executable": "^4.1.0" + "color-convert": "^1.9.0" } }, - "bin-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-3.1.0.tgz", - "integrity": "sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==", + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { - "execa": "^1.0.0", - "find-versions": "^3.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", - "dev": true, - "requires": { - "semver-regex": "^2.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "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" - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "bin-version-check": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-4.0.0.tgz", - "integrity": "sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==", + "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 + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, "requires": { - "bin-version": "^3.0.0", - "semver": "^5.6.0", - "semver-truncate": "^1.1.2" + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" } }, - "bin-wrapper": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-4.1.0.tgz", - "integrity": "sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==", + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "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 + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, "requires": { - "bin-check": "^4.1.0", - "bin-version-check": "^4.0.0", - "download": "^7.1.0", - "import-lazy": "^3.1.0", - "os-filter-obj": "^2.0.0", - "pify": "^4.0.1" + "lodash": "^4.17.14" } }, + "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 + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "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", @@ -13810,15 +7474,21 @@ "dev": true }, "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, + "blocking-elements": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/blocking-elements/-/blocking-elements-0.1.1.tgz", + "integrity": "sha512-/SLWbEzMoVIMZACCyhD/4Ya2M1PWP1qMKuiymowPcI+PdWDARqeARBjhj73kbUBCxEmTZCUu5TAqxtwUO9C1Ig==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -13838,62 +7508,6 @@ "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 - }, - "browserslist": { - "version": "4.16.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.5.tgz", - "integrity": "sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001214", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.719", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "browserslist-useragent": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/browserslist-useragent/-/browserslist-useragent-3.0.3.tgz", - "integrity": "sha512-8KKO6kOXu/93IkMi8zVqzU72BgpoxcITIHtkM1qmlnxJtIMF9Y+2uWL9JS2uUbzj/PaS3kaA6LcICBThMojGjA==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "semver": "^7.3.2", - "useragent": "^2.3.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -13904,40 +7518,12 @@ "ieee754": "^1.1.13" } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, "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 }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, "builtin-modules": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", @@ -13945,68 +7531,11 @@ "dev": true }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, - "cac": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", - "integrity": "sha1-bSTO7Dcu/lybeYgIvH9JtHJCpO8=", - "dev": true, - "requires": { - "camelcase-keys": "^3.0.0", - "chalk": "^1.1.3", - "indent-string": "^3.0.0", - "minimist": "^1.2.0", - "read-pkg-up": "^1.0.1", - "suffix": "^0.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "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" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, "cache-content-type": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", @@ -14017,27 +7546,6 @@ "ylru": "^1.2.0" } }, - "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.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", - "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": "^4.1.0", - "responselike": "^2.0.0" - } - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -14054,158 +7562,70 @@ "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-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-3.0.0.tgz", - "integrity": "sha1-/AxsNgNj9zd+N5O5oWvM8QcMHKQ=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001219", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001219.tgz", - "integrity": "sha512-c0yixVG4v9KBc/tQ2rlbB3A/bgBFRvl8h8M4IeUbqCca4gsiCfvtaheUssbnux/Mb66Vjz7x8yYjDgYcNQOhyQ==", - "dev": true - }, - "capital-case": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, - "caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "chai-a11y-axe": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/chai-a11y-axe/-/chai-a11y-axe-1.4.0.tgz", + "integrity": "sha512-m7J6DVAl1ePL2ifPKHmwQyHXdCZ+Qfv+qduh6ScqcDfBnJEzpV1K49TblujM45j1XciZOFeFNqMb2sShXMg/mw==", "dev": true, "requires": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" + "axe-core": "^4.3.3" } }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "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": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "change-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "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.5.0" + "readdirp": "~3.6.0" } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "chrome-launcher": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.0.tgz", + "integrity": "sha512-ZQqX5kb9H0+jy1OqLnWampfocrtSZaGl7Ny3F9GRha85o4odbL8x55paUzh51UC7cEmZ5obp3H2Mm70uC2PpRA==", "dev": true, "requires": { - "source-map": "~0.6.0" + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.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==", + "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 } } @@ -14219,173 +7639,81 @@ "restore-cursor": "^3.1.0" } }, - "cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", - "dev": true - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, "clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, - "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" - } - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, + "co-body": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.1.0.tgz", + "integrity": "sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==", + "dev": true, + "requires": { + "inflation": "^2.0.0", + "qs": "^6.5.2", + "raw-body": "^2.3.3", + "type-is": "^1.6.16" + } + }, "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==", + "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.4" + "color-name": "1.1.3" } }, "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==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, "command-line-args": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.1.tgz", - "integrity": "sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, "requires": { - "array-back": "^3.0.1", + "array-back": "^3.1.0", "find-replace": "^3.0.0", "lodash.camelcase": "^4.3.0", "typical": "^4.0.0" } }, "command-line-usage": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" - }, - "dependencies": { - "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" - } - }, - "array-back": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", - "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", - "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" - } - }, - "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 - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, "typical": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", @@ -14395,36 +7723,25 @@ } }, "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "comment-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", "dev": true }, - "compress-commons": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", - "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^2.3.6" - } - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "requires": { - "mime-db": ">= 1.43.0 < 2" + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" } }, "concat-map": { @@ -14433,45 +7750,21 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "condense-newlines": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", - "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-whitespace": "^0.3.0", - "kind-of": "^3.0.2" - } - }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "constant-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" + }, + "dependencies": { + "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 + } } }, "content-type": { @@ -14480,10 +7773,21 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, + "conventional-changelog-conventionalcommits": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", + "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + } + }, "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==", + "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" @@ -14499,79 +7803,19 @@ "keygrip": "~1.1.0" } }, - "core-js-bundle": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/core-js-bundle/-/core-js-bundle-3.11.1.tgz", - "integrity": "sha512-G53levuILfTBZaMuglvFe8+pPu7JgLO3PLuNj2AOOMeoy16HjfkqI62UAtUOlS+ZW9ySXxiiC9nFCjaXMukm1g==", - "dev": true - }, - "core-js-compat": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.11.1.tgz", - "integrity": "sha512-aZ0e4tmlG/aOBHj92/TuOuZwp6jFvn1WNabU5VOVixzhu5t5Ao+JZkQOPlgNXu6ynwLrwJxklT4Gw1G1VGEh+g==", - "dev": true, - "requires": { - "browserslist": "^4.16.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-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "core-js-pure": { + "version": "3.21.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.21.1.tgz", + "integrity": "sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==", "dev": true }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "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" - } - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "requires": { - "buffer": "^5.1.0" - } - }, - "crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dev": true, "requires": { - "crc": "^3.4.4", - "readable-stream": "^3.4.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" - } - } + "node-fetch": "2.6.7" } }, "cross-spawn": { @@ -14585,21 +7829,6 @@ "which": "^2.0.1" } }, - "css-value": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", - "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", @@ -14607,180 +7836,14 @@ "dev": true }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "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 - }, - "decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "dev": true, - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "decompress-response": { - "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 - } - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "dev": true, - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - } - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "dev": true, - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "dev": true, - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - } - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "dev": true, - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", @@ -14793,50 +7856,22 @@ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "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 + }, "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 }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "optional": true, - "requires": { - "clone": "^1.0.2" - }, - "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true, - "optional": true - } - } - }, - "defer-to-connect": { + "define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", - "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", - "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" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true }, "delegates": { @@ -14851,304 +7886,95 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true }, - "doctrine": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", - "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", - "dev": true, - "requires": { - "esutils": "^1.1.6", - "isarray": "0.0.1" - }, - "dependencies": { - "esutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", - "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "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" - } - }, - "download": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", - "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", - "dev": true, - "requires": { - "archive-type": "^4.0.0", - "caw": "^2.0.1", - "content-disposition": "^0.5.2", - "decompress": "^4.2.0", - "ext-name": "^5.0.0", - "file-type": "^8.1.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^8.3.1", - "make-dir": "^1.2.0", - "p-event": "^2.1.0", - "pify": "^3.0.0" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true - }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "dev": true, - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - } - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - } - }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - } - }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - } - } + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "devtools-protocol": { + "version": "0.0.969999", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.969999.tgz", + "integrity": "sha512-6GfzuDWU0OFAuOvBokXpXPLxjOJ5DZ157Ue3sGQQM3LgAamb8m0R0ruSfN0DDu+XG5XJgT50i6zZ/0o8RglreQ==", "dev": true }, - "dynamic-import-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dynamic-import-polyfill/-/dynamic-import-polyfill-0.1.1.tgz", - "integrity": "sha512-m953zv0w5oDagTItWm6Auhmk/pY7EiejaqiVbnzSS3HIjh1FCUeK7WzuaVtWPNs58A+/xpIE+/dVk6pKsrua8g==", + "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 }, - "easy-table": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.1.tgz", - "integrity": "sha512-C9Lvm0WFcn2RgxbMnTbXZenMIWcBtkzMr+dWqq/JsVoGFSVUVlPqeOa5LP5kM0I3zoOazFpckOEb2/0LDFfToQ==", + "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": { - "ansi-regex": "^3.0.0", - "wcwidth": ">=1.0.1" + "path-type": "^4.0.0" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "esutils": "^2.0.2" } }, - "editorconfig": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", - "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "dom5": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dom5/-/dom5-3.0.1.tgz", + "integrity": "sha512-JPFiouQIr16VQ4dX6i0+Hpbg3H2bMKPmZ+WZgBOSSvOPx9QHwwY8sPzeM2baUtViESYto6wC2nuZOMC/6gulcA==", "dev": true, "requires": { - "commander": "^2.19.0", - "lru-cache": "^4.1.5", - "semver": "^5.6.0", - "sigmund": "^1.0.1" + "@types/parse5": "^2.2.34", + "clone": "^2.1.0", + "parse5": "^4.0.0" }, "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 - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "@types/parse5": { + "version": "2.2.34", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-2.2.34.tgz", + "integrity": "sha1-44cKEOgnNacg9i1x3NGDunjvOp0=", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "@types/node": "*" } }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true } } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz", - "integrity": "sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==", + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { - "jake": "^10.6.1" + "is-obj": "^2.0.0" } }, - "electron-to-chromium": { - "version": "1.3.723", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.723.tgz", - "integrity": "sha512-L+WXyXI7c7+G1V8ANzRsPI5giiimLAUDC6Zs1ojHHPhYXb3k/iTABFmWjivEtsWrRQymjnO66/rO2ZTABGdmWg==", + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "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==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "encodeurl": { @@ -15166,168 +7992,22 @@ "once": "^1.4.0" } }, - "env-cmd": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", - "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", - "dev": true, - "requires": { - "commander": "^4.0.0", - "cross-spawn": "^7.0.0" - } - }, - "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.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-dev-server": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-dev-server/-/es-dev-server-2.1.0.tgz", - "integrity": "sha512-Vrq/4PyMzWz33QmOdSncvoWLTJVcv2e96z8FLHQwP9zK7DyLeDZCckII8VTW+btUGtM7aErvLH/d/R2pjjjs8w==", - "dev": true, - "requires": { - "@babel/core": "^7.11.1", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/preset-env": "^7.9.0", - "@koa/cors": "^3.1.0", - "@open-wc/building-utils": "^2.18.3", - "@rollup/plugin-node-resolve": "^11.0.0", - "@rollup/pluginutils": "^3.0.0", - "@types/babel__core": "^7.1.3", - "@types/browserslist": "^4.8.0", - "@types/browserslist-useragent": "^3.0.0", - "@types/caniuse-api": "^3.0.0", - "@types/command-line-args": "^5.0.0", - "@types/command-line-usage": "^5.0.1", - "@types/debounce": "^1.2.0", - "@types/koa": "^2.0.48", - "@types/koa__cors": "^3.0.1", - "@types/koa-compress": "^2.0.9", - "@types/koa-etag": "^3.0.0", - "@types/koa-static": "^4.0.1", - "@types/lru-cache": "^5.1.0", - "@types/mime-types": "^2.1.0", - "@types/minimatch": "^3.0.3", - "@types/path-is-inside": "^1.0.0", - "@types/whatwg-url": "^6.4.0", - "browserslist": "^4.9.1", - "browserslist-useragent": "^3.0.2", - "builtin-modules": "^3.1.0", - "camelcase": "^5.3.1", - "caniuse-api": "^3.0.0", - "caniuse-lite": "^1.0.30001033", - "chokidar": "^3.0.0", - "command-line-args": "^5.0.2", - "command-line-usage": "^6.1.0", - "debounce": "^1.2.0", - "deepmerge": "^4.2.2", - "es-module-lexer": "^0.3.13", - "get-stream": "^5.1.0", - "is-stream": "^2.0.0", - "isbinaryfile": "^4.0.2", - "koa": "^2.7.0", - "koa-compress": "^3.0.0", - "koa-etag": "^3.0.0", - "koa-static": "^5.0.0", - "lru-cache": "^5.1.1", - "mime-types": "^2.1.27", - "minimatch": "^3.0.4", - "open": "^7.0.3", - "parse5": "^5.1.1", - "path-is-inside": "^1.0.2", - "polyfills-loader": "^1.7.4", - "portfinder": "^1.0.21", - "rollup": "^2.7.2", - "strip-ansi": "^5.2.0", - "systemjs": "^6.3.1", - "tslib": "^1.11.1", - "useragent": "^2.3.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "es-module-lexer": { - "version": "0.3.26", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz", - "integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==", + "errorstacks": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/errorstacks/-/errorstacks-2.4.0.tgz", + "integrity": "sha512-5ecWhU5gt0a5G05nmQcgCxP5HperSMxLDzvWlT5U+ZSKkuDK0rJ3dbCQny6/vSCIXjwrhwSecXBbw1alr295hQ==", "dev": true }, - "es-module-shims": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-0.4.7.tgz", - "integrity": "sha512-0LTiSQoPWwdcaTVIQXhGlaDwTneD0g9/tnH1PNs3zHFFH+xoCeJclDM3rQeqF9nurXPfMKm3l9+kfPRa5VpbKg==", + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, - "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" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "esbuild": { + "version": "0.12.29", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.29.tgz", + "integrity": "sha512-w/XuoBCSwepyiZtIRsKsetiLDUVGPVw1E/R3VTFSecIy8UR7Cq3SOtwKHJMFoVqqVG36aGkzh4e8BvpO1Fdc7g==", "dev": true }, "escape-html": { @@ -15342,238 +8022,386 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "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 - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "eslint": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "@eslint/eslintrc": "^1.2.1", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "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": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "color-convert": "^2.0.1" } }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "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" + } + }, + "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 }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "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 }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "is-glob": "^4.0.3" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "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 }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "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": { - "isexe": "^2.0.0" + "has-flag": "^4.0.0" } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true } } }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "eslint-plugin-lit": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit/-/eslint-plugin-lit-1.6.1.tgz", + "integrity": "sha512-BpPoWVhf8dQ/Sz5Pi9NlqbGoH5BcMcVyXhi2XTx2XGMAO9U2lS+GTSsqJjI5hL3OuxCicNiUEWXazAwi9cAGxQ==", "dev": true, "requires": { - "pify": "^2.2.0" + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "requireindex": "^1.2.0" + } + }, + "eslint-plugin-lit-a11y": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-lit-a11y/-/eslint-plugin-lit-a11y-2.2.0.tgz", + "integrity": "sha512-1Vy9mR7UGigPnOHj5qJMU3uEK+Qul7dQOg9I6YKEYrw3C3HUx1FS/FbICjZI+n/v+2qvvJhw+5Tghuld2QWUJw==", + "dev": true, + "requires": { + "aria-query": "^4.2.2", + "axe-core": "^4.3.3", + "axobject-query": "^2.2.0", + "dom5": "^3.0.1", + "emoji-regex": "^9.2.0", + "eslint-plugin-lit": "^1.6.0", + "eslint-rule-extender": "0.0.1", + "language-tags": "^1.0.5", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "requireindex": "~1.2.0" }, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "dev": true } } }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "eslint-plugin-promise": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.0.tgz", + "integrity": "sha512-7GPezalm5Bfi/E22PnQxDWH2iW9GTvAlUNTztemeHb6c1BniSyoeTrM87JkC0wYdi6aQrZX9p2qEiAno8aTcbw==", + "dev": true, + "requires": {} + }, + "eslint-plugin-regexp": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.6.0.tgz", + "integrity": "sha512-xkaQOzyY4PUukRd8b6zTq+QTtg0dePlCP2dZiM+XGSmvlpDeYiPJHfRDpAfS/sP9YtK6q7DGes1smCyPTD3Lkg==", "dev": true, "requires": { - "mime-db": "^1.28.0" + "comment-parser": "^1.1.2", + "eslint-utils": "^3.0.0", + "grapheme-splitter": "^1.0.4", + "jsdoctypeparser": "^9.0.0", + "refa": "^0.9.0", + "regexp-ast-analysis": "^0.3.0", + "regexpp": "^3.2.0", + "scslre": "^0.1.6" } }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "eslint-plugin-simple-import-sort": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz", + "integrity": "sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==", + "dev": true, + "requires": {} + }, + "eslint-rule-extender": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eslint-rule-extender/-/eslint-rule-extender-0.0.1.tgz", + "integrity": "sha512-F0j1Twve3lamL3J0rRSVAynlp58sDPG39JFcQrM+u9Na7PmCgiPHNODh6YE9mduaGcsn3NBqbf6LZRj0cLr8Ng==", + "dev": true + }, + "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, "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "espree": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.3.0" } }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "estraverse": "^5.1.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 + } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "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 }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", "dev": true }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "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": { - "pend": "~1.2.0" + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "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" + } + } } }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "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.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "@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" } }, - "file-type": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", - "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", + "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 + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "filelist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", - "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==", + "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": { - "minimatch": "^3.0.4" + "reusify": "^1.0.4" } }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true + "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" + } }, - "filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" + "flat-cache": "^3.0.4" } }, "fill-range": { @@ -15591,94 +8419,47 @@ "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, "requires": { - "array-back": "^3.0.1" - } - }, - "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" + "array-back": "^3.0.1" } }, - "find-versions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", - "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", + "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": { - "semver-regex": "^3.1.2" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "is-buffer": "~2.0.3" - }, - "dependencies": { - "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 - } + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, "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-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-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -15686,9 +8467,9 @@ "dev": true }, "fsevents": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", - "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, @@ -15698,31 +8479,16 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.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-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==", + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "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", @@ -15730,37 +8496,16 @@ "has-symbols": "^1.0.1" } }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", - "dev": true, - "requires": { - "npm-conf": "^1.1.0" - } - }, "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" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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", @@ -15772,54 +8517,41 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "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" } }, "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 - }, - "globule": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", - "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" + "type-fest": "^0.20.2" } }, - "got": { - "version": "11.8.1", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.1.tgz", - "integrity": "sha512-9aYdZL+6nHmvJwHALLwKSUZ0hMwGaJGYv3hoPLPgnT8BoBXm1SjnZeky+91tfwJaDzun2s4RsBRy48IEYv2q2Q==", + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "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" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "grapheme-splitter": { @@ -15828,28 +8560,12 @@ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "hanbi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hanbi/-/hanbi-1.0.1.tgz", + "integrity": "sha512-ygE4dxg+khS7BZBZTVqaaq+X3oCQX6q4Z2LvNzRpPdZLmzbmL7xu6KCdjWoRiRlYfyZN9R+gMztf4MftiCH0Mw==", "dev": true }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -15859,151 +8575,54 @@ "function-bind": "^1.1.1" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, "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 - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "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" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, - "header-case": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "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": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" + "has-symbols": "^1.0.2" } }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "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" - } - }, "http-assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz", - "integrity": "sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", "dev": true, "requires": { "deep-equal": "~1.0.1", - "http-errors": "~1.7.2" - }, - "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - } + "http-errors": "~1.8.0" } }, - "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 - }, "http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" }, "dependencies": { "depd": { @@ -16014,27 +8633,6 @@ } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "http2-wrapper": { - "version": "1.0.0-beta.5.2", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", - "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", - "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - } - }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -16045,36 +8643,6 @@ "debug": "4" } }, - "husky": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", - "integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^7.0.0", - "find-versions": "^4.0.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^5.0.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -16090,6 +8658,12 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -16100,16 +8674,16 @@ "resolve-from": "^4.0.0" } }, - "import-lazy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", - "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", + "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": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "inflation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", + "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=", "dev": true }, "inflight": { @@ -16128,77 +8702,10 @@ "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 - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "intersection-observer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/intersection-observer/-/intersection-observer-0.7.0.tgz", - "integrity": "sha512-Id0Fij0HsB/vKWGeBe9PxeY45ttRiBmhFyyt/geBdDHBYNctMRTE3dC1U3ujzz3lap+hVXlEcVaB56kZP/eEUg==", - "dev": true - }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "dev": true, - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - } - }, - "inversify": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-5.0.5.tgz", - "integrity": "sha512-60QsfPz8NAU/GZqXu8hJ+BhNf/C/c+Hp0eDc6XMIJTxBiP36AQyyQKpBkOVTLWBFDQWYVHpbbEuIsHu9dLuJDA==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, "is-binary-path": { @@ -16210,45 +8717,21 @@ "binary-extensions": "^2.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-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "requires": { "has": "^1.0.3" } }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, "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": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -16262,15 +8745,18 @@ "dev": true }, "is-generator-function": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", - "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==", - "dev": true + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "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" @@ -16279,85 +8765,25 @@ "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "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-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "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-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, - "is-whitespace": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", - "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=", + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-wsl": { @@ -16369,16 +8795,10 @@ "is-docker": "^2.0.0" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true }, "isexe": { @@ -16387,107 +8807,56 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { - "async": "0.9.x", - "chalk": "^2.4.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "dependencies": { - "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" - } - }, - "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" - } - }, - "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 - }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "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": "^3.0.0" + "has-flag": "^4.0.0" } } } }, - "js-beautify": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.4.tgz", - "integrity": "sha512-M5yEWwonlEO3kPcCZ3K3KBSpFRZAEO3FAWC6wtbIGeyg7dusStxvF0WG+HRLBoMZqREXSRSxkkqClDE865x1sg==", + "istanbul-reports": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "requires": { - "config-chain": "^1.1.12", - "editorconfig": "^0.15.3", - "glob": "^7.1.3", - "mkdirp": "^1.0.4", - "nopt": "^5.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" } }, + "jpeg-js": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", + "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -16495,43 +8864,18 @@ "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "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": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-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 - }, - "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": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "jsdoctypeparser": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", + "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", "dev": true }, "json-schema-traverse": { @@ -16540,42 +8884,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "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": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "keygrip": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", @@ -16585,34 +8899,16 @@ "tsscmp": "1.0.6" } }, - "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" - } - }, - "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" - } - }, "kleur": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.3.tgz", - "integrity": "sha512-H1tr8QP2PxFTNwAFM74Mui2b6ovcY9FoxJefgrwxY+OCJcq01k5nvhf4M/KnizzrJvLRap5STUy7dgDV35iUBw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", + "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", "dev": true }, "koa": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.1.tgz", - "integrity": "sha512-Lb2Dloc72auj5vK4X4qqL7B5jyDPQaZucc9sR/71byg7ryoD1NCaCm63CShk9ID9quQvDEi1bGR/iGjCG7As3w==", + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.4.tgz", + "integrity": "sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==", "dev": true, "requires": { "accepts": "^1.3.5", @@ -16620,7 +8916,7 @@ "content-disposition": "~0.5.2", "content-type": "^1.0.4", "cookies": "~0.8.0", - "debug": "~3.1.0", + "debug": "^4.3.2", "delegates": "^1.0.0", "depd": "^2.0.0", "destroy": "^1.0.4", @@ -16631,961 +8927,433 @@ "http-errors": "^1.6.3", "is-generator-function": "^1.0.7", "koa-compose": "^4.1.0", - "koa-convert": "^1.2.0", + "koa-convert": "^2.0.0", "on-finished": "^2.3.0", "only": "~0.0.2", "parseurl": "^1.3.2", "statuses": "^1.5.0", "type-is": "^1.6.16", "vary": "^1.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "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 - } - } - }, - "koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true - }, - "koa-compress": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/koa-compress/-/koa-compress-3.1.0.tgz", - "integrity": "sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ==", - "dev": true, - "requires": { - "bytes": "^3.0.0", - "compressible": "^2.0.0", - "koa-is-json": "^1.0.0", - "statuses": "^1.0.0" - } - }, - "koa-convert": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", - "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", - "dev": true, - "requires": { - "co": "^4.6.0", - "koa-compose": "^3.0.0" - }, - "dependencies": { - "koa-compose": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", - "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", - "dev": true, - "requires": { - "any-promise": "^1.1.0" - } - } - } - }, - "koa-etag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-3.0.0.tgz", - "integrity": "sha1-nvc4Ld1agqsN6xU0FckVg293HT8=", - "dev": true, - "requires": { - "etag": "^1.3.0", - "mz": "^2.1.0" - } - }, - "koa-is-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", - "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=", - "dev": true - }, - "koa-send": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", - "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "http-errors": "^1.7.3", - "resolve-path": "^1.4.0" - } - }, - "koa-static": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", - "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "koa-send": "^5.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" - } - } - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "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 - }, - "lit-element": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.4.0.tgz", - "integrity": "sha512-pBGLglxyhq/Prk2H91nA0KByq/hx/wssJBQFiYqXhGDvEnY31PRGYf1RglVzyLeRysu0IHm2K0P196uLLWmwFg==", - "requires": { - "lit-html": "^1.1.1" - } - }, - "lit-html": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.0.tgz", - "integrity": "sha512-cgaqPSgqHRaTH/P1DnWD/dQxudtrHqD0xo1AoyOGJZir2rXgsvTg77z6Pitwk9B+kL23EakD62HV3x8sT01aWQ==" - }, - "lit-ntml": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/lit-ntml/-/lit-ntml-2.18.0.tgz", - "integrity": "sha512-TRRBSADH5yaVl269ypt6PdF29d8iC0TOmXPmTP1cUYFdhYKQ7kMNH1mNg0ZrzZDZzrLMwbQkWf/rICO4QSPaeg==", - "requires": { - "parse5": "^6.0.1", - "tslib": "^2.0.2" - }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - } - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "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.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true - }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.pickby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true + } }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", "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 + "koa-convert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", + "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", + "dev": true, + "requires": { + "co": "^4.6.0", + "koa-compose": "^4.1.0" + } }, - "lodash.zip": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", - "dev": true + "koa-etag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", + "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", + "dev": true, + "requires": { + "etag": "^1.8.1" + } }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "koa-send": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", + "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", "dev": true, "requires": { - "chalk": "^2.4.2" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "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 - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" } }, - "log-update": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-3.4.0.tgz", - "integrity": "sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg==", + "koa-static": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", + "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", "dev": true, "requires": { - "ansi-escapes": "^3.2.0", - "cli-cursor": "^2.1.0", - "wrap-ansi": "^5.0.0" + "debug": "^3.1.0", + "koa-send": "^5.0.0" }, "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "ms": "^2.1.1" } } } }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "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==", + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", "dev": true }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", "dev": true, "requires": { - "tslib": "^2.0.3" + "language-subtag-registry": "~0.3.2" } }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "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==", + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { - "yallist": "^3.0.2" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", "dev": true, "requires": { - "sourcemap-codec": "^1.4.4" + "debug": "^2.6.9", + "marky": "^1.2.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 + } } }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, + "lit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.2.1.tgz", + "integrity": "sha512-dSe++R50JqrvNGXmI9OE13de1z5U/Y3J2dTm/9GC86vedI8ILoR8ZGnxfThFpvQ9m0lR0qRnIR4IiKj/jDCfYw==", "requires": { - "pify": "^3.0.0" + "@lit/reactive-element": "^1.3.0", + "lit-element": "^3.2.0", + "lit-html": "^2.2.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 + "@lit/reactive-element": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", + "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==" } } }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true + "lit-element": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.2.0.tgz", + "integrity": "sha512-HbE7yt2SnUtg5DCrWt028oaU4D5F4k/1cntAFHTkzY8ZIa8N0Wmu92PxSxucsQSOXlODFrICkQ5x/tEshKi13g==", + "requires": { + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.2.0" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.3.1.tgz", + "integrity": "sha512-nOJARIr3pReqK3hfFCSW2Zg/kFcFsSAlIE7z4a0C9D2dPrgD/YSn3ZP2ET/rxKB65SXyG7jJbkynBRm+tGlacw==" + } + } }, - "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 + "lit-html": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.2.1.tgz", + "integrity": "sha512-AiJ/Rs0awjICs2FioTnHSh+Np5dhYSkyRczKy3wKjp8qjLhr1Ov+GiHrUQNdX8ou1LMuznpIME990AZsa/tR8g==", + "requires": { + "@types/trusted-types": "^2.0.2" + } }, - "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", - "dev": true + "lit-ntml": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/lit-ntml/-/lit-ntml-3.0.6.tgz", + "integrity": "sha512-PTxjoB1rgwGkfd8lN8agw7MeCojG2voJRBl2G/HBWH6mwsFobqUs+8NSymwPuFCFaAOuxlIVn42aahi3NhD0yg==", + "requires": { + "parse5": "^6.0.1", + "tslib": "^2.0.2" + } }, - "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "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": { - "mime-db": "1.45.0" + "p-locate": "^4.1.0" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", "dev": true }, - "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==", + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "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==", + "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": { - "minimist": "^1.2.5" + "yallist": "^4.0.0" } }, - "mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "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": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "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 - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.4" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "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" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "marky": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.4.tgz", + "integrity": "sha512-zd2/GiSn6U3/jeFVZ0J9CA1LzQ8RfIVvXkb/U0swFHF/zT+dVohTAWjmo2DcIuofmIIIROlwTbd+shSeXmxr0w==", + "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 }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "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 }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "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": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "mime-db": "1.52.0" } }, - "node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" + "brace-expansion": "^1.1.7" } }, - "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, - "nodemod": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/nodemod/-/nodemod-2.7.2.tgz", - "integrity": "sha512-+aGsXURjJIiNH0nsphBFw5Bt+4uzmtrNQ3XP3DdeUfYBo+4GMsPbdn1tr/B322R9fy3xZSAakPtEyMCApn/U2Q==", - "requires": { - "@types/parse5": "^5.0.2", - "@types/prismjs": "^1.16.0", - "lit-ntml": "^2.16.1", - "normalize-diacritics": "^2.11.1", - "tslib": "^2.1.0" - } + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "requires": { - "abbrev": "1" - } + "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 }, - "normalize-diacritics": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/normalize-diacritics/-/normalize-diacritics-2.13.0.tgz", - "integrity": "sha512-2YE92pRgW1/zOUkXDvzimlvf9wfmPhsw3trbYjNZzoMQaIm2/7MbNOn10Uf77q1W2o9BnRQrQnzTmp4nD/7Saw==" + "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 }, - "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==", + "nano-staged": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/nano-staged/-/nano-staged-0.6.0.tgz", + "integrity": "sha512-TqbdujUpBMwaBu582a5/BHlxTrs3Mu1DMk8KF2q38M0CTGiY34WRpwaQXTy5jRc5BXGjBCy4XByS69TSaS8WPw==", "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" + "picocolors": "^1.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==", + "nanocolors": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", + "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==", + "dev": true + }, + "nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" + "whatwg-url": "^5.0.0" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "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" + } } } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, + "nodemod": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nodemod/-/nodemod-3.0.6.tgz", + "integrity": "sha512-XsW1ydsY8Dh7IyBIVsF8QFVNlBOUHMEJ8BNLzj8G9O27/g3KqfvfGZ8LFP3cOFcksZQ7skQdNVsgx+A7E56wMg==", "requires": { - "path-key": "^2.0.0" - }, - "dependencies": { - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - } + "lit-ntml": "^3.0.6", + "lodash-es": "^4.17.21", + "normalize-diacritics": "^3.0.6", + "tslib": "^2.3.0" } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true + "normalize-diacritics": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/normalize-diacritics/-/normalize-diacritics-3.0.8.tgz", + "integrity": "sha512-1F5TgjYThbfRNYVSH00W5WPhngngNl8JqpiRWvLjlJQTLn4DM1DP6PIjMbR9xibj9eKnzvApBnk4uEHoC7si7w==", + "requires": { + "tslib": "^2.1.0" + } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "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 }, "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "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.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.getownpropertydescriptors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", - "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "requires": { "ee-first": "1.1.1" @@ -17616,63 +9384,30 @@ "dev": true }, "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" - } - }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true - }, - "os-filter-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", - "integrity": "sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, "requires": { - "arch": "^2.1.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", - "dev": true - }, - "p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { - "p-timeout": "^2.0.1" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, - "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-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -17683,21 +9418,12 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "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-finally": "^1.0.0" + "p-limit": "^2.2.0" } }, "p-try": { @@ -17706,16 +9432,6 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "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", @@ -17725,60 +9441,30 @@ "callsites": "^3.0.0" } }, - "parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "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": "^6.0.1" } }, - "parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "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" - } - }, - "path-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "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": { @@ -17787,12 +9473,6 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -17800,9 +9480,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "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-type": { @@ -17817,125 +9497,94 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "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 - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "pixelmatch": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.2.1.tgz", + "integrity": "sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ==", "dev": true, "requires": { - "pinkie": "^2.0.0" + "pngjs": "^4.0.1" + }, + "dependencies": { + "pngjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-4.0.1.tgz", + "integrity": "sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==", + "dev": true + } } }, "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==", + "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": "^5.0.0" - }, - "dependencies": { - "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" - } - }, - "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" - } - }, - "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" - } - }, - "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 - } + "find-up": "^4.0.0" } }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "playwright": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.20.1.tgz", + "integrity": "sha512-d/25SFUk6Rkt3h+RU13T7h6o0UTCLKXKYJILWVlC+NmrE7Tvn3LlXxoREfFXVNFikRZWTV60WBCZKgNbj7RfrA==", "dev": true, "requires": { - "semver-compare": "^1.0.0" + "playwright-core": "1.20.1" } }, - "polyfills-loader": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/polyfills-loader/-/polyfills-loader-1.7.6.tgz", - "integrity": "sha512-AiLIgmGFmzcvsqewyKsqWb7H8CnWNTSQBoM0u+Mauzmp0DsjObXmnZdeqvTn0HNwc1wYHHTOta82WjSjG341eQ==", + "playwright-core": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.20.1.tgz", + "integrity": "sha512-A8ZsZ09gaSbxP0UijoLyzp3LJc0kWMxDooLPi+mm4/5iYnTbd6PF5nKjoFw1a7KwjZIEgdhJduah4BcUIh+IPA==", "dev": true, "requires": { - "@babel/core": "^7.11.1", - "@open-wc/building-utils": "^2.18.3", - "@webcomponents/webcomponentsjs": "^2.4.0", - "abortcontroller-polyfill": "^1.4.0", - "core-js-bundle": "^3.6.0", - "deepmerge": "^4.2.2", - "dynamic-import-polyfill": "^0.1.1", - "es-module-shims": "^0.4.6", - "intersection-observer": "^0.7.0", - "parse5": "^5.1.1", - "regenerator-runtime": "^0.13.3", - "resize-observer-polyfill": "^1.5.1", - "systemjs": "^6.3.1", - "terser": "^4.6.7", - "whatwg-fetch": "^3.0.0" + "colors": "1.4.0", + "commander": "8.3.0", + "debug": "4.3.3", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.0", + "jpeg-js": "0.4.3", + "mime": "3.0.0", + "pixelmatch": "5.2.1", + "pngjs": "6.0.0", + "progress": "2.0.3", + "proper-lockfile": "4.1.2", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "socks-proxy-agent": "6.1.1", + "stack-utils": "2.0.5", + "ws": "8.4.2", + "yauzl": "2.10.0", + "yazl": "2.5.1" + }, + "dependencies": { + "ws": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", + "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", + "dev": true, + "requires": {} + } } }, + "pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", + "dev": true + }, "portfinder": { "version": "1.0.28", "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", @@ -17947,15 +9596,6 @@ "mkdirp": "^0.5.5" }, "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -17964,63 +9604,45 @@ "requires": { "ms": "^2.1.1" } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } } } }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "pretty": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", - "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", - "dev": true, - "requires": { - "condense-newlines": "^0.2.1", - "extend-shallow": "^2.0.1", - "js-beautify": "^1.6.12" - } - }, - "pretty-ms": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-6.0.1.tgz", - "integrity": "sha512-ke4njoVmlotekHlHyCZ3wI/c5AMT8peuHs8rKJqekj/oR5G8lND2dVpicFlUz5cbZgE290vvkMuDwfj/OcW1kw==", - "dev": true, - "requires": { - "parse-ms": "^2.1.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "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": { @@ -18039,301 +9661,163 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "pwa-helpers": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/pwa-helpers/-/pwa-helpers-0.9.1.tgz", - "integrity": "sha512-4sP/C9sSxQ3w80AATmvCEI3R+MHzCwr2RSZEbLyMkeJgV3cRk7ySZRUrQnBDSA7A0/z6dkYtjuXlkhN1ZFw3iA==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "puppeteer-core": { + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-13.5.1.tgz", + "integrity": "sha512-dobVqWjV34ilyfQHR3BBnCYaekBYTi5MgegEYBRYd3s3uFy8jUpZEEWbaFjG9ETm+LGzR5Lmr0aF6LLuHtiuCg==", "dev": true, "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "cross-fetch": "3.1.5", + "debug": "4.3.3", + "devtools-protocol": "0.0.969999", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.0", + "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.5.0" + }, + "dependencies": { + "ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "requires": {} + } } }, - "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==", + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "dependencies": { - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "side-channel": "^1.0.4" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "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 + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" } }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true } } }, "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==", + "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": { - "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" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "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" } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, "reduce-flatten": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "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": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "refa": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/refa/-/refa-0.9.1.tgz", + "integrity": "sha512-egU8LgFq2VXlAfUi8Jcbr5X38wEOadMFf8tCbshgcpVCYlE7k84pJOSlnvXF+muDB4igkdVMq7Z/kiNPqDT9TA==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "regexpp": "^3.2.0" } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "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" - } - }, - "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.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.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "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 - } - } - }, - "reify": { - "version": "0.20.12", - "resolved": "https://registry.npmjs.org/reify/-/reify-0.20.12.tgz", - "integrity": "sha512-4BzKwDWyJJbukwI6xIJRh+BDTitoGzxdgYPiQQ1zbcTZW6I8xgHPw1DnVuEs/mEZQlYm1e09DcFSApb4UaR5bQ==", - "dev": true, - "requires": { - "acorn": "^6.1.1", - "acorn-dynamic-import": "^4.0.0", - "magic-string": "^0.25.3", - "semver": "^5.4.1" - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "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 }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "regexp-ast-analysis": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.3.0.tgz", + "integrity": "sha512-11PlbBSUxwWpdj6BdZUKfhDdV9g+cveqHB+BqBQDBD7ZermDBVgtyowUaXTvT0dO3tZYo2bDIr/GoED6X1aYSA==", "dev": true, "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - } + "refa": "^0.9.0", + "regexpp": "^3.2.0" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, - "resolve-alpn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", - "dev": true - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -18382,24 +9866,6 @@ } } }, - "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" - } - }, - "resq": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.0.tgz", - "integrity": "sha512-hCUd0xMalqtPDz4jXIqs0M5Wnv/LZXN8h7unFOo4/nvExT9dDPbhwd3udRxLlp0HgBnHcV009UlduE9NZi7A6w==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1" - } - }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -18410,10 +9876,16 @@ "signal-exit": "^3.0.2" } }, - "rgb2hex": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.1.10.tgz", - "integrity": "sha512-vKz+kzolWbL3rke/xeTE2+6vHmZnNxGyDnaVW4OckntAIcc7DcZzWkQSfxMDwqHS8vhgySnIFyBUH7lIk6PxvQ==", + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "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": { @@ -18426,35 +9898,21 @@ } }, "rollup": { - "version": "2.46.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.46.0.tgz", - "integrity": "sha512-qPGoUBNl+Z8uNu0z7pD3WPTABWRbcOwIrO/5ccDJzmrtzn0LVf6Lj91+L5CcWhXl6iWf23FQ6m8Jkl2CmN1O7Q==", + "version": "2.70.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.1.tgz", + "integrity": "sha512-CRYsI5EuzLbXdxC6RnYhOuRdtz4bhejPMSWjsFLfVM/7w/85n2szZv6yExqUXsBdz5KT8eoubeyDUDjhLHEslA==", "dev": true, "requires": { - "fsevents": "~2.3.1" + "fsevents": "~2.3.2" } }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "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": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "queue-microtask": "^1.2.2" } }, "safe-buffer": { @@ -18469,257 +9927,44 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "sauce-connect-launcher-update": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/sauce-connect-launcher-update/-/sauce-connect-launcher-update-1.3.2.tgz", - "integrity": "sha512-apAhE+VSN0DgsbepqSb0xCPgnFu6YmOTkJAytPyu1oQU9t2MdAhMPJbhgBDAJzbIbesm9w8ZOTbfBKXW73rMAw==", - "dev": true, - "requires": { - "adm-zip": "^0.4.14", - "async": "^3.2.0", - "https-proxy-agent": "^5.0.0", - "lodash": "^4.17.15", - "rimraf": "^3.0.2" - }, - "dependencies": { - "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", - "dev": true - } - } - }, - "saucelabs": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-4.6.3.tgz", - "integrity": "sha512-LQEA7ENXq03MWs5sTbvRPlDiaR9PFEfqiMUHtiXEJQUGQ5JAmIXOB39/4hL3CUvZKZ2Bv7Ook6ZCDsqUFY7Vmw==", - "dev": true, - "requires": { - "bin-wrapper": "^4.1.0", - "change-case": "^4.1.1", - "form-data": "^3.0.0", - "got": "^11.7.0", - "hash.js": "^1.1.7", - "tunnel": "0.0.6", - "yargs": "^16.0.3" - }, - "dependencies": { - "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" - } - }, - "form-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "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" - } - }, - "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", - "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" - } - } - } - }, - "seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "dev": true, - "requires": { - "commander": "^2.8.1" - }, - "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 - } - } - }, - "selenium-standalone": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.23.0.tgz", - "integrity": "sha512-6dVLSEvbixd/MRSEmrcRQD8dmABrzNsxRqroKFQY+RVzm1JVPgGHIlo6qJzG6akfjc2V8SadHslE6lN4BFVM3w==", + "scslre": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.1.6.tgz", + "integrity": "sha512-JORxVRlQTfjvlOAaiQKebgFElyAm5/W8b50lgaZ0OkEnKnagJW2ufDh3xRfU75UD9z3FGIu1gL1IyR3Poa6Qmw==", "dev": true, "requires": { - "commander": "^2.20.3", - "cross-spawn": "^7.0.3", - "debug": "^4.3.1", - "got": "^11.8.0", - "lodash.mapvalues": "^4.6.0", - "lodash.merge": "^4.6.2", - "minimist": "^1.2.5", - "mkdirp": "^1.0.4", - "progress": "2.0.3", - "tar-stream": "2.1.4", - "which": "^2.0.2", - "yauzl": "^2.10.0" + "refa": "^0.9.0", + "regexp-ast-analysis": "^0.2.3", + "regexpp": "^3.2.0" }, "dependencies": { - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "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" - } - }, - "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "regexp-ast-analysis": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.2.4.tgz", + "integrity": "sha512-8L7kOZQaKPxKKAwGuUZxTQtlO3WZ+tiXy4s6G6PKL6trbOXcZoumwC3AOHHFtI/xoSbNxt7jgLvCnP1UADLWqg==", "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" + "refa": "^0.9.0", + "regexpp": "^3.2.0" } } } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "semver-regex": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.2.tgz", - "integrity": "sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==", - "dev": true - }, - "semver-truncate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", - "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "sentence-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "serialize-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", - "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { - "type-fest": "^0.8.0" - }, - "dependencies": { - "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 - } + "lru-cache": "^6.0.0" } }, - "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 - }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, - "shady-css-scoped-element": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/shady-css-scoped-element/-/shady-css-scoped-element-0.0.2.tgz", - "integrity": "sha512-Dqfl70x6JiwYDujd33ZTbtCK0t52E7+H2swdWQNSTzfsolSa6LJHnTpN4T9OpJJEq4bxuzHRLFO9RBcy/UfrMQ==", - "dev": true - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -18735,156 +9980,114 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "shx": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", - "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", - "dev": true, - "requires": { - "minimist": "^1.2.3", - "shelljs": "^0.8.4" - } - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "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": { - "sort-keys": "^1.0.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.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==", + "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" + } + }, + "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 } } }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "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 }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "ip": "^1.1.5", + "smart-buffer": "^4.2.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==", + "socks-proxy-agent": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", + "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" } }, - "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "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 }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "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 + } } }, "statuses": { @@ -18893,133 +10096,70 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, - "stream-buffers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", - "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", - "dev": true - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "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==", + "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.1.0" + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "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 + } } }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "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.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "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" + "strip-ansi": "^6.0.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "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 } } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "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": { - "is-natural-number": "^4.0.1" + "ansi-regex": "^5.0.1" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.2" - } - }, - "suffix": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/suffix/-/suffix-0.1.1.tgz", - "integrity": "sha1-zFgjFkag7xEC95R47zqSSP2chC8=", + "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": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "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": "^4.0.0" + "has-flag": "^3.0.0" } }, - "systemjs": { - "version": "6.8.3", - "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.8.3.tgz", - "integrity": "sha512-UcTY+FEA1B7e+bpJk1TI+a9Na6LG7wFEqW7ED16cLqLuQfI/9Ri0rsXm3tKlIgNoHyLHZycjdAOijzNbzelgwA==", + "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 }, "table-layout": { @@ -19035,9 +10175,9 @@ }, "dependencies": { "array-back": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", - "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true }, "typical": { @@ -19048,44 +10188,29 @@ } } }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "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": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "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": { - "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 - } + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" } }, "text-table": { @@ -19094,57 +10219,12 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "requires": { - "any-promise": "^1.0.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "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-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -19155,140 +10235,24 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.2" + "punycode": "^2.1.1" } }, "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" - }, - "tslint": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", - "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.13.0", - "tsutils": "^2.29.0" - }, - "dependencies": { - "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" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "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" - } - }, - "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 - }, - "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 - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "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 - }, - "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" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, "tsscmp": { "version": "1.0.6", @@ -19297,9 +10261,9 @@ "dev": true }, "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -19313,116 +10277,64 @@ } } }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "prelude-ls": "^1.2.1" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "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" - } - }, - "typescript": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", - "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==", - "dev": true - }, - "typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "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" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" } }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "typescript": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "ua-parser-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.2.tgz", + "integrity": "sha512-00y/AXhx0/SsnI51fTc0rLRmafiGOM4/O+ny10Ps7f+j/b8p/ZY11ytMgznXkOVo4GQ+KwQG5UQLkLGirsACRg==", "dev": true }, - "upper-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "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": { - "tslib": "^2.0.3" + "buffer": "^5.2.1", + "through": "^2.3.8" } }, - "upper-case-first": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true }, "uri-js": { "version": "4.4.1", @@ -19433,75 +10345,27 @@ "punycode": "^2.1.0" } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true - }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "requires": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "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 }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "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==", + "v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" } }, "vary": { @@ -19510,86 +10374,20 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "optional": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webdriver": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-5.23.0.tgz", - "integrity": "sha512-r7IrbZ2SuTIRyWV8mv4a4hZoFcT9Qt4MznOkdRWPE1sPpZ8lyLZsIEjKCEbHelOzPwURqk+biwGrm4z2OZRAiw==", - "dev": true, - "requires": { - "@types/request": "^2.48.4", - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/protocols": "5.22.1", - "@wdio/utils": "5.23.0", - "lodash.merge": "^4.6.1", - "request": "^2.83.0" - } - }, - "webdriverio": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-5.23.0.tgz", - "integrity": "sha512-hxt6Nuu2bBrTsVk7GfoFRTh63l4fRVXlK9U30RtPbHoWO5tcFdyUz2UTgeHEZ54ea1DQEVPfsgFiLnJULkWp1Q==", - "dev": true, - "requires": { - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/repl": "5.23.0", - "@wdio/utils": "5.23.0", - "archiver": "^3.0.0", - "css-value": "^0.0.1", - "grapheme-splitter": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "lodash.isobject": "^3.0.2", - "lodash.isplainobject": "^4.0.6", - "lodash.zip": "^4.2.0", - "resq": "^1.6.0", - "rgb2hex": "^0.1.0", - "serialize-error": "^5.0.0", - "webdriver": "5.23.0" - } - }, "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true }, "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" } }, "which": { @@ -19601,54 +10399,17 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "wicg-inert": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/wicg-inert/-/wicg-inert-3.1.1.tgz", + "integrity": "sha512-PhBaNh8ur9Xm4Ggy4umelwNIP6pPP1bv3EaWaKqfb/QNme2rdLjm7wIInvV4WhxVHhzA4Spgw9qNSqWtB/ca2A==" }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "wordwrapjs": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", @@ -19668,77 +10429,39 @@ } }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, "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==", + "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": "^1.9.0" + "color-convert": "^2.0.1" } }, "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==", + "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.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "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 - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -19748,279 +10471,25 @@ "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.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", - "dev": true + "ws": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "dev": true, + "requires": {} }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "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-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" - } - }, - "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 - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "yarn-install": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yarn-install/-/yarn-install-1.0.0.tgz", - "integrity": "sha1-V/RQULgu/VcYKzlzxUqgXLXSUjA=", - "dev": true, - "requires": { - "cac": "^3.0.3", - "chalk": "^1.1.3", - "cross-spawn": "^4.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "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" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -20031,41 +10500,20 @@ "fd-slicer": "~1.1.0" } }, - "ylru": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", - "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", - "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 - }, - "zip-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", - "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", "dev": true, "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^2.1.1", - "readable-stream": "^3.4.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" - } - } + "buffer-crc32": "~0.2.3" } + }, + "ylru": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz", + "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==", + "dev": true } } } diff --git a/package.json b/package.json index 27e62ce32..492c29e1d 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,20 @@ { "name": "app-datepicker", - "version": "4.5.1", - "description": "A custom datepicker element based on Google's Material Design built from scratch with lit-element", + "version": "6.0.0-rc.22", + "description": "Google Material Design based date picker built with lit", "keywords": [ + "buildwithlit", "cal", "calendar", - "date", "date-picker", + "date", "datepicker", "lit-element", "lit-html", + "lit", "picker", + "polymer-project", + "polymer", "web-component", "web-components" ], @@ -25,89 +29,112 @@ "email": "wes.ngrongsen@gmail.com", "url": "https://github.com/motss" }, + "type": "module", "exports": { - ".": "./dist/app-datepicker.js", + ".": "./dist/date-picker/app-date-picker.js", + "./date-picker-dialog/*": "./dist/date-picker-dialog/*", + "./date-picker-input-surface/*": "./dist/date-picker-input-surface/*", + "./date-picker-input/*": "./dist/date-picker-input/*", + "./date-picker/*": "./dist/date-picker/*", "./dist/*": "./dist/*", - "./app-datepicker": "./dist/app-datepicker.js", - "./app-datepicker-dialog": "./dist/app-datepicker-dialog.js", - "./datepicker": "./dist/datepicker.js", - "./datepicker-dialog": "./dist/datepicker-dialog.js", - "./typings": "./dist/custom_typings.d.ts" + "./month-calendar/*": "./dist/month-calendar/*", + "./root-element/*": "./dist/root-element/*", + "./year-grid/*": "./dist/year-grid/*" }, - "main": "./dist/app-datepicker.js", - "module": "./dist/app-datepicker.js", - "typings": "./dist/app-datepicker.d.ts", + "main": "./dist/date-picker/app-date-picker.js", + "module": "./dist/date-picker/app-date-picker.js", + "typings": "./dist/date-picker/typings.js", "files": [ "dist/*.*js.map", "dist/*.*js", "dist/*.d.ts.map", "dist/*.d.ts", + "dist/date-picker-dialog/.*js.map", + "dist/date-picker-dialog/*.*js", + "dist/date-picker-dialog/*.d.ts.map", + "dist/date-picker-dialog/*.d.ts", + "dist/date-picker-input-surface/.*js.map", + "dist/date-picker-input-surface/*.*js", + "dist/date-picker-input-surface/*.d.ts.map", + "dist/date-picker-input-surface/*.d.ts", + "dist/date-picker-input/.*js.map", + "dist/date-picker-input/*.*js", + "dist/date-picker-input/*.d.ts.map", + "dist/date-picker-input/*.d.ts", + "dist/date-picker/.*js.map", + "dist/date-picker/*.*js", + "dist/date-picker/*.d.ts.map", + "dist/date-picker/*.d.ts", "dist/helpers/.*js.map", "dist/helpers/*.*js", "dist/helpers/*.d.ts.map", - "dist/helpers/*.d.ts" + "dist/helpers/*.d.ts", + "dist/icon-button/.*js.map", + "dist/icon-button/*.*js", + "dist/icon-button/*.d.ts.map", + "dist/icon-button/*.d.ts", + "dist/mixins/.*js.map", + "dist/mixins/*.*js", + "dist/mixins/*.d.ts.map", + "dist/mixins/*.d.ts", + "dist/month-calendar/.*js.map", + "dist/month-calendar/*.*js", + "dist/month-calendar/*.d.ts.map", + "dist/month-calendar/*.d.ts", + "dist/root-element/.*js.map", + "dist/root-element/*.*js", + "dist/root-element/*.d.ts.map", + "dist/root-element/*.d.ts", + "dist/year-grid/.*js.map", + "dist/year-grid/*.*js", + "dist/year-grid/*.d.ts.map", + "dist/year-grid/*.d.ts", + "!**/*test*/**/*.*" ], "scripts": { - "build": "tsc -p tsconfig.json", - "build:clean": "npm run lint && npm run clean && npm run build:test", - "build:config": "tsc -p tsconfig.wdio.json", - "build:prod": "tsc -p tsconfig.prod.json", - "build:test": "tsc -p tsconfig.test.json", - "check": "package-check", - "clean": "shx rm -rf dist/ src/tests/snapshots/*.png logs/ .*cache *.log", - "lint": "tslint --project tsconfig.json --config tslint.prod.json --format stylish", - "lint:dev": "tslint --config tslint.json --project tsconfig.json --format stylish", - "prepublishOnly": "npm run lint && npm run build:prod", - "serve": "es-dev-server --watch --port 3000 --node-resolve --dedupe", - "test": "npm run build:config && npm run test:dev", - "test:clean": "npm run build:clean && npm t", - "test:dev": "node ./run-tests.js --config-file ./dist/tests/wdio.config.js", - "test:sl": "npm run build:config && env-cmd -f ./.env npm run test:sl:dev", - "test:sl:clean": "npm run build:clean && npm run test:sl", - "test:sl:dev": "node ./run-tests.js --config-file ./dist/tests/wdio.sl.config.js", - "ts": "tsc", - "watch": "tsc --watch" - }, - "husky": { - "hooks": { - "pre-commit": "npm run check && npm run lint && tsc --noEmit" - } + "build": "npm run clean && tsc", + "clean": "sh $(npm root)/@reallyland/tools/cleanup.sh", + "dev": "npm run serve & npm run watch", + "postinstall": "FILE=\"$(npm root)/@reallyland/tools/postinstall.sh\"; if [ -f \"$FILE\" ]; then sh \"$FILE\"; fi", + "lint": "sh $(npm root)/@reallyland/tools/lint-build.sh -c $(npm root)/@reallyland/tools/browser/lit/.eslintrc.json", + "lint-commit": "sh $(npm root)/@reallyland/tools/lint-commit.sh", + "lint:build": "sh $(npm root)/@reallyland/tools/lint-build.sh -c $(npm root)/@reallyland/tools/browser/lit/.build.eslintrc.json", + "pre-commit": "sh $(npm root)/@reallyland/tools/pre-commit.sh", + "prepublishOnly": "npm run lint:build && npm run build", + "serve": "npm x -y @web/dev-server@latest -- wds --node-resolve -dw -p 3030 -a index.html", + "test": "wtr --config wtr.config.mjs --update-snapshots", + "test:helpers": "TEST_HELPERS=true npm run test", + "version": "sh $(npm root)/@reallyland/tools/generate-changelogs.sh && git add *CHANGELOG.md", + "watch": "npm run clean && tsc --watch", + "wtr": "node --max-old-space-size=8192 --trace-deprecation $(npm bin)/wtr --config wtr.config.mjs" }, "dependencies": { - "@material/mwc-button": "^0.20.0", - "lit-element": "^2.4.0", - "lit-html": "^1.4.0", - "nodemod": "^2.7.2", - "tslib": "^2.0.3" + "@material/mwc-base": "^0.25.3", + "@material/mwc-button": "^0.25.3", + "@material/mwc-dialog": "^0.25.3", + "@material/mwc-icon-button": "^0.25.3", + "@material/mwc-menu": "^0.25.3", + "@material/mwc-textfield": "^0.25.3", + "lit": "^2.2.1", + "nodemod": "^3.0.6", + "tslib": "^2.3.1" }, "devDependencies": { - "@reallyland/tsconfig": "^3.0.2", - "@reallyland/tslint-config": "^1.1.1", - "@skypack/package-check": "^0.2.2", - "@types/mocha": "^7.0.2", - "@types/pretty": "^2.0.0", - "@types/request": "^2.48.5", - "@wdio/cli": "^5.23.0", - "@wdio/local-runner": "^5.23.0", - "@wdio/mocha-framework": "^5.23.0", - "@wdio/sauce-service": "^5.22.1", - "@wdio/selenium-standalone-service": "^5.16.10", - "@wdio/spec-reporter": "^5.23.0", - "axe-core": "^4.0.2", - "env-cmd": "^10.1.0", - "es-dev-server": "^2.1.0", - "husky": "^4.3.0", - "pretty": "^2.0.0", - "pwa-helpers": "^0.9.1", - "reify": "^0.20.12", - "shx": "^0.3.2", - "tslint": "^6.1.3", - "typescript": "^4.0.3", - "webdriverio": "^5.23.0" + "@open-wc/testing": "^3.1.2", + "@reallyland/tools": "^0.0.13", + "@rollup/plugin-node-resolve": "^13.0.6", + "@web/dev-server-esbuild": "^0.2.16", + "@web/dev-server-rollup": "^0.3.15", + "@web/test-runner": "^0.13.27", + "@web/test-runner-commands": "^0.6.1", + "@web/test-runner-playwright": "^0.8.8", + "eslint-plugin-lit": "^1.6.1", + "eslint-plugin-lit-a11y": "^2.2.0", + "hanbi": "^1.0.1" }, "engines": { - "node": ">= 10.18.1", - "npm": ">= 6.13.4" + "node": ">= 16.x", + "npm": ">= 8.x" }, "publishConfig": { "access": "public" diff --git a/run-tests.js b/run-tests.js deleted file mode 100644 index 9ad20dad8..000000000 --- a/run-tests.js +++ /dev/null @@ -1,119 +0,0 @@ -const { createConfig, startServer } = require('es-dev-server'); -const { performance } = require('perf_hooks'); -const Launcher = require('@wdio/cli').default; - -function debug(message, ...args) { - const timestamp = new Date().toJSON() - .replace('T', ' ') - .replace('Z', '') - - console.debug( - `[${timestamp}] ${message}`, - ...args - ); -} - -function to3Dp(x) { - return Math.floor(x * 1e3) / 1e3; -} - -function toHumanTime(timestamp) { - if (timestamp < 1e3) return `${timestamp}ms`; - if (timestamp < (1e3 * 60)) return `${to3Dp(timestamp / 1e3)}s`; - if (timestamp < (1e3 * 60 * 60)) return `${to3Dp(timestamp / (1e3 * 60))}m`; - if (timestamp < (1e3 * 60 * 60 * 24)) return `${to3Dp(timestamp / (1e3 * 60 * 60))}h`; - - return `${to3Dp(timestamp / (1e3 * 60 * 60 * 24))}`; -} - -function readArg(argName) { - const args = process.argv; - const configFileIdx = process.argv.findIndex(n => n === argName); - - if (configFileIdx < 0 || configFileIdx === args.length - 1) { - throw new Error(`${argName} is not defined`); - } - - return args[configFileIdx + 1]; -} - -async function main() { - /** - * Not all ports are supported by Sauce Connect Proxy. - * - * @see https://wiki.saucelabs.com/display/DOCS/Sauce+Connect+Proxy+FAQs, - */ - const PORT = process.env.PORT || 4000; - const mainStartAt = performance.now(); - const config = createConfig({ - port: PORT, - nodeResolve: true, - logStartup: false, - logCompileErrors: false, - logErrorsToBrowser: true, - // babel = false, - // babelConfig, - // babelExclude = [], - // babelModernExclude = [], - // babelModuleExclude = [], - // basePath, - // compress = true, - // fileExtensions = [], - // hostname, - // http2 = false, - // logStartup, - // moduleDirs = ['node_modules'], - // nodeResolve = false, - // open = false, - // port, - // preserveSymlinks = false, - // sslCert, - // sslKey, - // watch = false, - // logErrorsToBrowser = false, - // polyfills = _constants.polyfillsModes.AUTO, - // responseTransformers, - // debug = false - }); - - const { server } = await startServer(config); - const gracefulShutdown = (code) => { - server.close((err) => { - const mainDuration = performance.now() - mainStartAt; - - debug(`Finished in ${toHumanTime(mainDuration)}`); - - if (err) console.error(`[ERROR] Failed to close server`, err); - else { - debug(`Server closed`); - } - - process.exit(code); - }); - - // force shutdown after 15s timeout - setTimeout(() => { - debug(`Could not close server in time, forcefully shutting down`); - process.exit(code); - }, (15e3)); - }; - - debug(`es-dev-server running at port ${PORT}...`); - - [ - 'SIGTERM', // kill - 'SIGINT', // Ctrl or Cmd + C - ].forEach(n => process.on(n, gracefulShutdown)); - - const wdio = new Launcher(readArg('--config-file')); - const code = await wdio.run(); - - debug(`Completed. Closing server...`); - - gracefulShutdown(code); -} - -main().catch((err) => { - console.error('Fail to run tests', err); - process.exit(1); -}); diff --git a/src/__demo__/demo-app.ts b/src/__demo__/demo-app.ts new file mode 100644 index 000000000..2c3d08ddc --- /dev/null +++ b/src/__demo__/demo-app.ts @@ -0,0 +1,152 @@ +import '../date-picker/app-date-picker.js'; +import '../date-picker-input/app-date-picker-input.js'; + +// import '../date-picker-dialog/app-date-picker-dialog.js'; +// import '../date-picker-input-surface/app-date-picker-input-surface.js'; +import { css, html } from 'lit'; +import { customElement, queryAsync } from 'lit/decorators.js'; + +import type { AppDatePicker } from '../date-picker/app-date-picker.js'; +import type { AppDatePickerDialog } from '../date-picker-dialog/app-date-picker-dialog.js'; +import type { AppDatePickerDialogBase } from '../date-picker-dialog/app-date-picker-dialog-base.js'; +import { appDatePickerDialogBaseName, appDatePickerDialogName } from '../date-picker-dialog/constants.js'; +import type { AppDatePickerInput } from '../date-picker-input/app-date-picker-input.js'; +import { appDatePickerInputName } from '../date-picker-input/constants.js'; +import { RootElement } from '../root-element/root-element.js'; +import type { CustomEventDetail } from '../typings.js'; + +@customElement('demo-app') +export class DemoApp extends RootElement { + @queryAsync(appDatePickerDialogName) dialog!: Promise; + @queryAsync(appDatePickerDialogBaseName) dialogBase!: Promise; + @queryAsync(appDatePickerInputName) input!: Promise; + + public static override styles = [ + css` + :host { + display: block; + + padding-bottom: 999px; + } + :host > * + * { + margin: 16px 0 0; + } + + * { + box-sizing: border-box; + } + + app-date-picker { + border: 1px solid #000; + } + /* app-date-picker::part(today), + app-date-picker::part(today)::before, + app-date-picker::part(toyear)::before { + color: red; + } */ + + @media (prefers-color-scheme: dark) { + app-date-picker { + border-color: #fff; + } + } + `, + ]; + + protected override firstUpdated(_changedProperties: Map): void { + Object.defineProperty(globalThis, '__demoApp', { + value: { + datePicker1: this.query('#datePicker1'), + datePicker2: this.query('#datePicker2'), + datePickerInput1: this.query('#datePickerInput1'), + datePickerDialog1: this.query('#datePickerDialog1'), + }, + }); + } + + protected override render() { + return html` + + + + + + + + + + + + + + + + `; + } + + #showDialog = async (ev: MouseEvent) => { + const { dataset } = ev.currentTarget as HTMLButtonElement; + const dialog = this.query(`#${dataset.id}`); + const task = globalThis.customElements.whenDefined(appDatePickerDialogName); + + await import('../date-picker-dialog/app-date-picker-dialog.js'); + await task; + + dialog?.show(); + + console.debug(`Dialog #${dataset.id}`, { + value: dialog?.value, + valueAsDate: dialog?.valueAsDate, + valueAsNumber: new Date(dialog?.valueAsNumber as number), + }); + }; + + #dateUpdated = ({ + detail, + currentTarget, + }: CustomEvent): void => { + const { id } = currentTarget as AppDatePicker; + + console.debug({ + id, + detail, + }); + }; +} diff --git a/src/__tests__/constants.ts b/src/__tests__/constants.ts new file mode 100644 index 000000000..4798ecb14 --- /dev/null +++ b/src/__tests__/constants.ts @@ -0,0 +1 @@ +export const promiseTimeout = 3e3 as const; diff --git a/src/__tests__/date-picker-dialog/app-date-picker-dialog.test.ts b/src/__tests__/date-picker-dialog/app-date-picker-dialog.test.ts new file mode 100644 index 000000000..e9be9acac --- /dev/null +++ b/src/__tests__/date-picker-dialog/app-date-picker-dialog.test.ts @@ -0,0 +1,341 @@ +import '../../date-picker/app-date-picker'; +import '../../date-picker-dialog/app-date-picker-dialog'; + +import type { Button } from '@material/mwc-button'; +import { expect, fixture, html } from '@open-wc/testing'; + +import { DateTimeFormat } from '../../constants'; +import type { AppDatePicker } from '../../date-picker/app-date-picker'; +import { appDatePickerName } from '../../date-picker/constants'; +import type { AppDatePickerDialog } from '../../date-picker-dialog/app-date-picker-dialog'; +import type { AppDatePickerDialogBase } from '../../date-picker-dialog/app-date-picker-dialog-base'; +import { appDatePickerDialogBaseName, appDatePickerDialogName } from '../../date-picker-dialog/constants'; +import type { DialogClosedEventDetail, DialogClosingEventDetailAction } from '../../date-picker-dialog/typings'; +import { toDateString } from '../../helpers/to-date-string'; +import { toResolvedDate } from '../../helpers/to-resolved-date'; +import type { AppMonthCalendar } from '../../month-calendar/app-month-calendar'; +import { appMonthCalendarName } from '../../month-calendar/constants'; +import type { CustomEventDetail, DatePickerProperties } from '../../typings'; +import type { DeepNonNullableAndRequired, OmitKey } from '../../utility-typings'; +import type { AppYearGrid } from '../../year-grid/app-year-grid'; +import { appYearGridName } from '../../year-grid/constants'; +import { promiseTimeout } from '../constants'; +import { eventOnce } from '../test-utils/event-once'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(appDatePickerDialogName, () => { + const elementSelectors = { + calendarDay: (label: string) => `td.calendar-day[aria-label="${label}"]`, + datePicker: appDatePickerName, + datePickerDialogBase: appDatePickerDialogBaseName, + dialogActionCancel: `mwc-button[dialogaction="cancel"]`, + dialogActionReset: `mwc-button[data-dialog-action="reset"]`, + dialogActionSet: `mwc-button[dialogaction="set"]`, + monthCalendar: appMonthCalendarName, + yearGrid: appYearGridName, + } as const; + const formatter = DateTimeFormat('en-US', { + year: 'numeric', + month: 'short', + day: 'numeric', + }); + const properties: DeepNonNullableAndRequired> = { + chooseMonthLabel: '選擇月份', + chooseYearLabel: '選擇年份', + disabledDates: '2020-02-02', + disabledDays: '2', + firstDayOfWeek: 2, + locale: 'en-SG', + max: '2200-12-31', + min: '1970-12-31', + nextMonthLabel: '下個月份', + previousMonthLabel: '上個月份', + selectedDateLabel: '選定日期', + selectedYearLabel: '選定年份', + shortWeekLabel: '週', + showWeekNumber: true, + startView: 'yearGrid', + todayLabel: '今日', + toyearLabel: '今年', + value: '2020-02-02', + weekLabel: '週目', + weekNumberTemplate: '%s週目', + weekNumberType: 'first-day-of-year', + }; + + it('renders', async () => { + const confirmLabel = '確定' as const; + const dismissLabel = '取消' as const; + const resetLabel = '重置' as const; + + const el = await new Promise(async (resolve) => { + const element = await fixture( + html` resolve(element)} + >` + ); + + for (const [key, value] of Object.entries(properties)) { + Object.assign(element, { [key]: value }); + } + + await element.updateComplete; + + globalThis.setTimeout(() => resolve(element), promiseTimeout); + }); + + const datePickerDialogBase = + el.query(elementSelectors.datePickerDialogBase); + const datePicker = el.query(elementSelectors.datePicker); + + await datePicker?.updateComplete; + await datePickerDialogBase?.updateComplete; + + for (const [key, value] of Object.entries(properties)) { + expect(datePicker?.[key as keyof DatePickerProperties]).equal(value, `${key} not matched`); + } + + expect(datePickerDialogBase).exist; + expect(datePicker).exist; + expect(datePickerDialogBase?.hasAttribute('open')).true; + expect(el.valueAsDate).deep.equal(new Date(properties.value)); + expect(el.valueAsNumber).equal(+new Date(properties.value)); + + const dialogActionReset = el.query(elementSelectors.dialogActionReset); + const dialogActionCancel = el.query(elementSelectors.dialogActionCancel); + const dialogActionSet = el.query(elementSelectors.dialogActionSet); + + expect(dialogActionReset).exist.text(resetLabel); + expect(dialogActionCancel).exist.text(dismissLabel); + expect(dialogActionSet).exist.text(confirmLabel); + }); + + it('always reopens with the correct startView', async () => { + const el = await fixture( + html`` + ); + + let openedTask = eventOnce< + typeof el, + 'opened', + CustomEvent + >(el, 'opened'); + + const datePickerDialogBase = + el.query(elementSelectors.datePickerDialogBase); + let datePicker = datePickerDialogBase?.query(elementSelectors.datePicker); + + // initially no date picker is rendered + expect(datePickerDialogBase).exist; + expect(datePicker).not.exist; + expect(datePickerDialogBase?.hasAttribute('open')).false; + + el.show(); + let opened = await openedTask; + await datePicker?.updateComplete; + await datePickerDialogBase?.updateComplete; + await el.updateComplete; + + datePicker = el.query(elementSelectors.datePicker); + let yearGrid = datePicker?.query(elementSelectors.yearGrid); + + // ensure dialog opens with date picker rendered in year grid view + expect(opened).not.undefined; + expect(datePicker).exist; + expect(datePickerDialogBase?.hasAttribute('open')).true; + expect(yearGrid).exist; + + const closedTask = eventOnce< + typeof el, + 'closed', + CustomEvent + >(el, 'closed'); + + el.hide(); + const closed = await closedTask; + await datePicker?.updateComplete; + await datePickerDialogBase?.updateComplete; + await el.updateComplete; + + datePicker = el.query(elementSelectors.datePicker); + + expect(closed).not.undefined; + expect(datePicker).not.exist; + expect(datePickerDialogBase?.hasAttribute('open')).false; + + openedTask = eventOnce< + typeof el, + 'opened', + CustomEvent + >(el, 'opened'); + + el.show(); + opened = await openedTask; + await datePicker?.updateComplete; + await datePickerDialogBase?.updateComplete; + await el.updateComplete; + + datePicker = el.query(elementSelectors.datePicker); + const monthCalendar = datePicker?.query(elementSelectors.monthCalendar); + yearGrid = datePicker?.query(elementSelectors.yearGrid); + + expect(opened).not.undefined; + expect(datePicker).exist; + expect(monthCalendar).not.exist; + expect(yearGrid).exist; + + expect(datePickerDialogBase?.hasAttribute('open')).true; + }); + + type CaseSelectsAndConfirmsNewDate = [ + _message: string, + newValue: string, + dialogAction: DialogClosingEventDetailAction, + expectedDialogOpen: boolean, + expectedDialogValue: string + ]; + const casesSelectAndConfirmNewDate: CaseSelectsAndConfirmsNewDate[] = [ + ['but does not confirm a new date', '2020-02-04', 'cancel', false, properties.value], + ['and confirms a new date', '2020-02-04', 'set', false, '2020-02-04'], + ['a new date but resets it', '2020-02-04', 'reset', true, toDateString(toResolvedDate())], + ]; + + casesSelectAndConfirmNewDate.forEach((a) => { + const [ + , + testNewValue, + testDialogAction, + expectedDatePickerDialogHasAttributeOpen, + expectedDatePickerDialogValue, + ] = a; + + it( + messageFormatter(`selects %s`, a), + async () => { + const el = await fixture( + html`` + ); + + const openedTask = eventOnce< + typeof el, + 'opened', + CustomEvent + >(el, 'opened'); + + let datePickerDialogBase = + el.query(elementSelectors.datePickerDialogBase); + let datePicker = + datePickerDialogBase?.query(elementSelectors.datePicker); + let monthCalendar = + datePicker?.query(elementSelectors.monthCalendar); + + el.show(); + const opened = await openedTask; + await monthCalendar?.updateComplete; + await datePicker?.updateComplete; + await datePickerDialogBase?.updateComplete; + await el.updateComplete; + + datePickerDialogBase = + el.query(elementSelectors.datePickerDialogBase); + datePicker = + datePickerDialogBase?.querySelector(elementSelectors.datePicker); + monthCalendar = + datePicker?.query(elementSelectors.monthCalendar); + const dialogActionReset = + datePickerDialogBase?.querySelector`); + + const focusedElement = await focusElement(Promise.resolve(el)); + + expect(document.activeElement).dom.equal(focusedElement); + }); + + it('focuses element with optional callback', async () => { + const el = await fixture(html``); + + const focusedElement = await new Promise(async (resolve) => { + await focusElement(Promise.resolve(el), (n => { + resolve(n); + })); + }); + + expect(document.activeElement).dom.equal(focusedElement); + }); + +}); diff --git a/src/__tests__/helpers/is-in-current-month.test.ts b/src/__tests__/helpers/is-in-current-month.test.ts new file mode 100644 index 000000000..b9435869c --- /dev/null +++ b/src/__tests__/helpers/is-in-current-month.test.ts @@ -0,0 +1,37 @@ +import { expect } from '@open-wc/testing'; + +import { isInCurrentMonth } from '../../helpers/is-in-current-month'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(isInCurrentMonth.name, () => { + type CaseIsInCurrentMonth = [ + target: Date, + source: Date, + expected: boolean + ]; + const casesIsInCurrentMonth: CaseIsInCurrentMonth[] = [ + [ + new Date('2020-02-02'), + new Date('2020-02-12'), + true, + ], + [ + new Date('2020-02-02'), + new Date('2020-03-12'), + false, + ], + ]; + casesIsInCurrentMonth.forEach(a => { + const [testTarget, testSource, expected] = a; + + it( + messageFormatter('returns if %s is current month of %s', a), + () => { + const result = isInCurrentMonth(testTarget, testSource); + + expect(result).equal(expected); + } + ); + }); + +}); diff --git a/src/__tests__/helpers/nullish-attribute-converter.test.ts b/src/__tests__/helpers/nullish-attribute-converter.test.ts new file mode 100644 index 000000000..ffa17cf43 --- /dev/null +++ b/src/__tests__/helpers/nullish-attribute-converter.test.ts @@ -0,0 +1,30 @@ +import { expect } from '@open-wc/testing'; + +import { nullishAttributeConverter } from '../../helpers/nullish-attribute-converter'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(nullishAttributeConverter.name, () => { + type CaseNullishAttributeConverter = [ + value: unknown, + expected: string | undefined + ]; + const casesNullishAttributeConverter: CaseNullishAttributeConverter[] = [ + [null, undefined], + [undefined, undefined], + ['', undefined], + ['test', 'test'], + ]; + casesNullishAttributeConverter.forEach((a) => { + it( + messageFormatter('returns normalized attribute value (value=%s)', a), + () => { + const [testValue, expected] = a; + + const result = nullishAttributeConverter(testValue); + + expect(result).equal(expected); + } + ); + }); + +}); diff --git a/src/__tests__/helpers/split-string.test.ts b/src/__tests__/helpers/split-string.test.ts new file mode 100644 index 000000000..f2e12ee99 --- /dev/null +++ b/src/__tests__/helpers/split-string.test.ts @@ -0,0 +1,54 @@ +import { expect } from '@open-wc/testing'; + +import { splitString } from '../../helpers/split-string'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(splitString.name, () => { + const str = 'hello, world, everyone'; + const expected = str.split(/,\s*/); + + type CaseSplitString = [ + source: string, + expected: string[] + ]; + const casesSplitString: CaseSplitString[] = [ + ['', []], + [str, expected], + ]; + casesSplitString.forEach((a) => { + it( + messageFormatter('splits string (%s)', a), + () => { + const [testSource, expected] = a; + const result = splitString(testSource); + + expect(result).deep.equal(expected); + } + ); + }); + + type CaseSplitStringWithOptionalCallbackAndSeparator = [ + separator?: RegExp + ]; + const casesSplitStringWithOptionalCallback: CaseSplitStringWithOptionalCallbackAndSeparator[] = [ + [], + [/,\s/], + ]; + casesSplitStringWithOptionalCallback.forEach((a) => { + it( + messageFormatter('splits string with optional callback and optional separator (%s)', a), + () => { + const [testSeparator] = a; + + const result = splitString<[string]>( + str, + (n) => [n], + testSeparator + ); + + expect(result).deep.equal(expected.map(n => [n])); + } + ); + }); + +}); diff --git a/src/__tests__/helpers/to-closest-target.test.ts b/src/__tests__/helpers/to-closest-target.test.ts new file mode 100644 index 000000000..9e9405240 --- /dev/null +++ b/src/__tests__/helpers/to-closest-target.test.ts @@ -0,0 +1,57 @@ +import { expect, fixture, html } from '@open-wc/testing'; + +import { toClosestTarget } from '../../helpers/to-closest-target'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(toClosestTarget.name, () => { + type CaseToClosestTarget = [ + selector: string, + elementNode: unknown, + textContext: string | undefined + ]; + + const casesToClosestTarget: CaseToClosestTarget[] = [ + ['button', HTMLButtonElement, 'Click me'], + ['input', undefined, undefined], + ]; + casesToClosestTarget.forEach((a) => { + const [testSelector, expectedElementNode, expectedTextContext] = a; + + it( + messageFormatter('returns closest target (selector=%s)', a), + async () => { + let resolver: NonNullable['0']>; + const task = new Promise( + (resolve) => resolver = resolve + ); + const onClick: EventListenerObject = { + handleEvent(ev) { + const closest = toClosestTarget(ev, testSelector); + + resolver(closest); + }, + }; + const el = await fixture( + html` +
+ +
+ ` + ); + + const buttonEl = el.querySelector('button'); + + buttonEl?.click(); + + const closest = await task; + + expectedElementNode ? + expect(closest).instanceOf(expectedElementNode) : + expect(closest).equal(expectedElementNode); + + expect(closest?.textContent).equal(expectedTextContext); + } + ); + }); + +}); diff --git a/src/__tests__/helpers/to-date-string.test.ts b/src/__tests__/helpers/to-date-string.test.ts new file mode 100644 index 000000000..7a67a08c5 --- /dev/null +++ b/src/__tests__/helpers/to-date-string.test.ts @@ -0,0 +1,14 @@ +import { expect } from '@open-wc/testing'; + +import { toDateString } from '../../helpers/to-date-string'; + +describe(toDateString.name, () => { + it('returns date string', () => { + const testDateStr = '2020-02-02'; + + const result = toDateString(new Date(testDateStr)); + + expect(result).equal(testDateStr); + }); + +}); diff --git a/src/__tests__/helpers/to-day-diff-inclusive.test.ts b/src/__tests__/helpers/to-day-diff-inclusive.test.ts new file mode 100644 index 000000000..c34ff7e7a --- /dev/null +++ b/src/__tests__/helpers/to-day-diff-inclusive.test.ts @@ -0,0 +1,36 @@ +import { expect } from '@open-wc/testing'; + +import { toDayDiffInclusive } from '../../helpers/to-day-diff-inclusive'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(toDayDiffInclusive.name, () => { + type CaseToDayDiffInclusive = [ + min: number | Date, + max: number | Date, + expected: number + ]; + const casesToDayDiffInclusive: CaseToDayDiffInclusive[] = [ + [new Date('2020-02-02'), new Date('2020-02-03'), 2], + [+new Date('2020-02-02'), new Date('2020-02-03'), 2], + [new Date('2020-02-02'), +new Date('2020-02-03'), 2], + [+new Date('2020-02-02'), +new Date('2020-02-03'), 2], + + // other ranges + [new Date('2020-02-02'), new Date('2020-02-01'), 0], + [+new Date('2020-02-02'), +new Date('2020-02-04'), 3], + [+new Date('2020-02-02T08:00:00.000+08:00'), +new Date('2020-02-02T20:00:00.00+08:00'), 1], + ]; + casesToDayDiffInclusive.forEach((a) => { + const [testMin, testMax, expected] = a; + + it( + messageFormatter('returns date range (min=%s, max=%s)', a), + () => { + const result = toDayDiffInclusive(testMin, testMax); + + expect(result).equal(expected); + } + ); + }); + +}); diff --git a/src/__tests__/helpers/to-formatters.test.ts b/src/__tests__/helpers/to-formatters.test.ts new file mode 100644 index 000000000..4ec707b57 --- /dev/null +++ b/src/__tests__/helpers/to-formatters.test.ts @@ -0,0 +1,30 @@ +import { expect } from '@open-wc/testing'; + +import { toFormatters } from '../../helpers/to-formatters'; +import type { Formatters } from '../../typings'; + +describe(toFormatters.name, () => { + it('returns formatters', () => { + const testLocale = 'en-US'; + const result = toFormatters(testLocale); + + expect(result).haveOwnProperty('locale', testLocale); + + const props: (keyof Omit)[] = [ + 'dateFormat', + 'dayFormat', + 'fullDateFormat', + 'longMonthFormat', + 'longMonthYearFormat', + 'longWeekdayFormat', + 'narrowWeekdayFormat', + 'yearFormat', + ]; + + props.forEach( + n => + expect(result).haveOwnProperty(n) + ); + }); + +}); diff --git a/src/__tests__/helpers/to-multi-calendars.test.ts b/src/__tests__/helpers/to-multi-calendars.test.ts new file mode 100644 index 000000000..2f3dd7adf --- /dev/null +++ b/src/__tests__/helpers/to-multi-calendars.test.ts @@ -0,0 +1,162 @@ +import { expect } from '@open-wc/testing'; + +import { toFormatters } from '../../helpers/to-formatters'; +import { toMultiCalendars } from '../../helpers/to-multi-calendars'; +import type { ToMultiCalendarsInit } from '../../helpers/typings'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(toMultiCalendars.name, () => { + const locale = 'en-US'; + const { + dayFormat, + fullDateFormat, + longWeekdayFormat, + narrowWeekdayFormat, + } = toFormatters(locale); + const defaultInit: ToMultiCalendarsInit = { + currentDate: new Date('2020-02-02'), + dayFormat, + fullDateFormat, + locale, + longWeekdayFormat, + narrowWeekdayFormat, + }; + + type CaseOptionalCount = [ + partialInit: Partial, + expected: number + ]; + const casesOptionalCount: CaseOptionalCount[] = [ + [ + {}, + 1, + ], + [ + { + count: 2, + }, + 3, + ], + ]; + + casesOptionalCount.forEach((a) => { + const [testPartialInit, expected] = a; + + it( + messageFormatter('returns calendar with optional count (%j)', a), + () => { + const result = toMultiCalendars({ + ...defaultInit, + ...testPartialInit, + }); + + expect(result.calendars).have.length(expected); + expect(result.disabledDatesSet.size).equal(0); + expect(result.disabledDaysSet.size).equal(0); + } + ); + }); + + type CaseOptionalMinMax = [ + partialInit: Partial, + expectedCalendars: number, + expectedMonthRows: number[] + ]; + const casesOptionalMinMax: CaseOptionalMinMax[] = [ + [ + { + min: new Date('2020-01-01'), + }, + 1, + [6], + ], + [ + { + max: new Date('2020-03-03'), + }, + 1, + [6], + ], + [ + { + min: new Date('2020-01-01'), + max: new Date('2020-03-03'), + }, + 1, + [6], + ], + [ + { + min: new Date('2020-03-03'), + }, + 1, + [0], + ], + [ + { + max: new Date('2020-01-01'), + }, + 1, + [0], + ], + ]; + casesOptionalMinMax.forEach((a) => { + const [testPartialInit, expectedCalendars, expectedMonthRows] = a; + + it( + messageFormatter('returns calendar with optional min, max (%j)', a), + () => { + const result = toMultiCalendars({ + ...defaultInit, + ...testPartialInit, + }); + + expect(result.calendars).have.length(expectedCalendars); + expect( + result.calendars.map(n => n.calendar.length) + ).deep.equal(expectedMonthRows); + expect(result.disabledDatesSet.size).equal(0); + expect(result.disabledDaysSet.size).equal(0); + } + ); + }); + + type CaseOptionalDisabledDatesDays = [ + partialInit: Partial, + expectedDisabledDates: number, + expectedDisabledDays: number + ]; + const casesOptionalDisabledDatesDays: CaseOptionalDisabledDatesDays[] = [ + [ + { + disabledDates: [new Date('2020-02-01'), new Date('2020-02-10')], + }, + 2, + 0, + ], + [ + { + disabledDays: [0, 2], + }, + 8, + 2, + ], + ]; + casesOptionalDisabledDatesDays.forEach((a) => { + const [testPartialInit, expectedDisabledDates, expectedDisabledDays] = a; + + it( + messageFormatter('returns calendar with optional disabled dates, days (partialInit=%j)', a), + () => { + const result = toMultiCalendars({ + ...defaultInit, + ...testPartialInit, + }); + + expect(result.disabledDatesSet.size).equal(expectedDisabledDates); + expect(result.disabledDaysSet.size).equal(expectedDisabledDays); + } + ); + }); + +}); diff --git a/src/__tests__/helpers/to-next-selectable-date.test.ts b/src/__tests__/helpers/to-next-selectable-date.test.ts new file mode 100644 index 000000000..51249466a --- /dev/null +++ b/src/__tests__/helpers/to-next-selectable-date.test.ts @@ -0,0 +1,203 @@ +import { expect } from '@open-wc/testing'; + +import { toNextSelectableDate } from '../../helpers/to-next-selectable-date'; +import type { ToNextSelectableDateInit } from '../../helpers/typings'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(toNextSelectableDate.name, () => { + const defaultInit: ToNextSelectableDateInit = { + date: new Date('2020-02-02'), + disabledDatesSet: new Set(), + disabledDaysSet: new Set(), + key: 'ArrowRight', + maxTime: +new Date('2020-03-03'), + minTime: +new Date('2020-01-01'), + }; + + type CaseNextSelectableDateFOrNonDisabledDate = [ + partialInit: Partial, + expected: Date + ]; + const casesNextSelectableDateForNonDisabledDate: CaseNextSelectableDateFOrNonDisabledDate[] = [ + [ + {}, + new Date('2020-02-02'), + ], + [ + { + minTime: +new Date('2020-02-02'), + maxTime: +new Date('2020-02-02'), + }, + new Date('2020-02-02'), + ], + ]; + casesNextSelectableDateForNonDisabledDate.forEach((a) => { + const [partialInit, expected] = a; + + it( + messageFormatter('returns next selectable date for non-disabled date (%j)', a), + () => { + const result = toNextSelectableDate({ + ...defaultInit, + ...partialInit, + }); + + expect(result).deep.equal(expected); + } + ); + }); + + type CaseNextSelectableDateForDisabledDate = [ + partialInit: Partial, + expected: Date + ]; + const casesNextSelectableDateForDisabledDate: CaseNextSelectableDateForDisabledDate[] = [ + // disabled dates to non-disabled dates + [ + { + disabledDatesSet: new Set([+new Date('2020-02-02')]), + key: 'ArrowLeft', + }, + new Date('2020-02-01'), + ], + [ + { + disabledDatesSet: new Set([+new Date('2020-02-02')]), + key: 'ArrowRight', + }, + new Date('2020-02-03'), + ], + + // > 1 disabled dates to non-disabled dates + [ + { + disabledDatesSet: new Set([ + +new Date('2020-02-01'), + +new Date('2020-02-02'), + ]), + key: 'ArrowLeft', + }, + new Date('2020-01-31'), + ], + [ + { + disabledDatesSet: new Set([ + +new Date('2020-02-02'), + +new Date('2020-02-03'), + ]), + key: 'ArrowRight', + }, + new Date('2020-02-04'), + ], + + // > 1 disabled dates to non-disabled dates with min/ max dates + [ + { + disabledDatesSet: new Set([ + +new Date('2020-02-01'), + +new Date('2020-02-02'), + ]), + key: 'ArrowLeft', + minTime: +new Date('2020-01-31'), + }, + new Date('2020-01-31'), + ], + [ + { + disabledDatesSet: new Set([ + +new Date('2020-02-02'), + +new Date('2020-02-03'), + ]), + key: 'ArrowRight', + maxTime: +new Date('2020-02-04'), + }, + new Date('2020-02-04'), + ], + + // disabled date before min to min + [ + { + date: new Date('2019-02-02'), + key: 'ArrowLeft', + }, + new Date(defaultInit.minTime), + ], + [ + { + date: new Date('2019-02-02'), + key: 'ArrowRight', + }, + new Date(defaultInit.minTime), + ], + + // disabled date after max to max + [ + { + date: new Date('2020-04-03'), + key: 'ArrowRight', + }, + new Date(defaultInit.maxTime), + ], + [ + { + date: new Date('2020-04-03'), + key: 'ArrowLeft', + }, + new Date(defaultInit.maxTime), + ], + + // disabled min/ max to non-disabled date after/ before min/ max + [ + { + date: new Date('2020-02-01'), + disabledDatesSet: new Set([ + +new Date('2020-02-01'), + ]), + key: 'ArrowLeft', + minTime: +new Date('2020-02-01'), + }, + new Date('2020-02-02'), + ], + [ + { + date: new Date('2020-04-03'), + disabledDatesSet: new Set([ + +new Date('2020-04-03'), + ]), + key: 'ArrowRight', + maxTime: +new Date('2020-04-03'), + }, + new Date('2020-04-02'), + ], + + // disabled max to non-disabled min + [ + { + date: new Date('2020-04-03'), + disabledDatesSet: new Set([ + +new Date('2020-04-03'), + ]), + key: 'ArrowRight', + minTime: +new Date('2020-04-02'), + maxTime: +new Date('2020-04-03'), + }, + new Date('2020-04-02'), + ], + ]; + casesNextSelectableDateForDisabledDate.forEach((a) => { + const [partialInit, expected] = a; + + it( + messageFormatter('returns next selectable date for disabled date (%j)', a), + () => { + const result = toNextSelectableDate({ + ...defaultInit, + ...partialInit, + }); + + expect(result).deep.equal(expected); + } + ); + }); + +}); diff --git a/src/__tests__/helpers/to-next-selected-date.test.ts b/src/__tests__/helpers/to-next-selected-date.test.ts new file mode 100644 index 000000000..a0173e3b9 --- /dev/null +++ b/src/__tests__/helpers/to-next-selected-date.test.ts @@ -0,0 +1,128 @@ +import { expect } from '@open-wc/testing'; + +import { toNextSelectedDate } from '../../helpers/to-next-selected-date'; +import type { ToNextSelectedDateInit } from '../../helpers/typings'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(toNextSelectedDate.name, () => { + const defaultInit: ToNextSelectedDateInit = { + currentDate: new Date('2020-02-02'), + date: new Date('2020-02-02'), + disabledDatesSet: new Set(), + disabledDaysSet: new Set(), + hasAltKey: false, + key: 'ArrowRight', + maxTime: +new Date('2020-01-01'), + minTime: +new Date('2020-03-03'), + }; + + type CaseNextSelectedDate = [ + partialInit: Partial, + expected: Date + ]; + const casesNextSelectedDate: CaseNextSelectedDate[] = [ + // all supported keys + [ + { key: ' ' }, + defaultInit.date, + ], + [ + { key: 'ArrowDown' }, + new Date('2020-02-09'), + ], + [ + { key: 'ArrowLeft' }, + new Date('2020-02-01'), + ], + [ + { key: 'ArrowRight' }, + new Date('2020-02-03'), + ], + [ + { key: 'ArrowUp' }, + new Date('2020-01-26'), + ], + [ + { key: 'End' }, + new Date('2020-02-29'), + ], + [ + { key: 'Enter' }, + defaultInit.date, + ], + [ + { key: 'Home' }, + new Date('2020-02-01'), + ], + [ + { key: 'PageDown' }, + new Date('2020-03-02'), + ], + [ + { key: 'PageUp' }, + new Date('2020-01-02'), + ], + [ + { hasAltKey: true, key: 'PageDown' }, + new Date('2021-02-02'), + ], + [ + { hasAltKey: true, key: 'PageUp' }, + new Date('2019-02-02'), + ], + [ + { key: 'PageUp' }, + new Date('2020-01-02'), + ], + [ + { key: 'Tab' }, + defaultInit.date, + ], + + // not in current month + [ + { currentDate: new Date('2020-03-03') }, + new Date('2020-03-01'), + ], + + // maxTime + next navigation key + [ + { key: 'ArrowRight', maxTime: +new Date('2020-02-02') }, + new Date('2020-02-02'), + ], + + // minTime + previous navigation key + [ + { key: 'ArrowLeft', minTime: +new Date('2020-02-02') }, + new Date('2020-02-02'), + ], + + // in leap year, 2020-01-31 to next month to 2020-02-29 from 2020-02-31 + [ + { currentDate: new Date('2020-01-01'), date: new Date('2020-01-31'), key: 'PageDown' }, + new Date('2020-02-29'), + ], + + // in leap year, 2020-02-29 to next year to 2021-02-28 from 2021-02-29 + [ + { currentDate: new Date('2020-02-01'), date: new Date('2020-02-29'), hasAltKey: true, key: 'PageDown' }, + new Date('2021-02-28'), + ], + ]; + casesNextSelectedDate.forEach((a) => { + const [testPartialInit, expected] = a; + + it( + messageFormatter('returns next selected date (partialInit=%j)', a), + () => { + const result = toNextSelectedDate({ + ...defaultInit, + ...testPartialInit, + }); + + expect(result).deep.equal(expected); + } + ); + }); + +}); diff --git a/src/__tests__/helpers/to-resolved-date.test.ts b/src/__tests__/helpers/to-resolved-date.test.ts new file mode 100644 index 000000000..1e857e9ab --- /dev/null +++ b/src/__tests__/helpers/to-resolved-date.test.ts @@ -0,0 +1,42 @@ +import { expect } from '@open-wc/testing'; +import { toUTCDate } from 'nodemod/dist/calendar/helpers/to-utc-date.js'; + +import { toResolvedDate } from '../../helpers/to-resolved-date'; +import type { MaybeDate } from '../../helpers/typings'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(toResolvedDate.name, () => { + const today = new Date(); + const date1 = new Date(1); + + type CaseResolvedDate = [ + date: MaybeDate | undefined, + expected: Date + ]; + const casesResolvedDate: CaseResolvedDate[] = [ + ['', new Date(NaN)], + ['0', new Date(NaN)], + ['1', toUTCDate(date1.getUTCFullYear(), date1.getUTCMonth(), date1.getUTCDate())], + ['2020-02-02', new Date('2020-02-02')], + [+new Date('2020-02-02'), new Date('2020-02-02')], + [0, new Date(NaN)], + [NaN, new Date(NaN)], + [new Date('2020-02-02'), new Date('2020-02-02')], + [new Date('2020-02-02').toJSON(), new Date('2020-02-02')], + [null, new Date(NaN)], + [undefined, toUTCDate(today.getFullYear(), today.getMonth(), today.getDate())], + ]; + casesResolvedDate.forEach((a) => { + const [testDate, expected] = a; + + it( + messageFormatter('returns resolved date (%s)', a), + () => { + const result = toResolvedDate(testDate); + + expect(result).deep.equal(expected); + } + ); + }); + +}); diff --git a/src/__tests__/helpers/to-year-list.test.ts b/src/__tests__/helpers/to-year-list.test.ts new file mode 100644 index 000000000..7ed7fb201 --- /dev/null +++ b/src/__tests__/helpers/to-year-list.test.ts @@ -0,0 +1,31 @@ +import { expect } from '@open-wc/testing'; + +import { toYearList } from '../../helpers/to-year-list'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(toYearList.name, () => { + type CaseYearList = [ + min: Date, + max: Date, + expected: number[] + ]; + const casesYearList: CaseYearList[] = [ + [new Date('2020-02-02'), new Date('2020-02-01'), []], + [new Date('2020-02-02'), new Date('2020-02-02'), [2020]], + [new Date('2020-02-02'), new Date('2020-02-03'), [2020]], + [new Date('2019-02-02'), new Date('2020-02-02'), [2019, 2020]], + ]; + casesYearList.forEach((a) => { + const [testMin, testMax, expected] = a; + + it( + messageFormatter('returns year list (min=%s, max=%s)', a), + () => { + const result = toYearList(testMin, testMax); + + expect(result).deep.equal(expected); + } + ); + }); + +}); diff --git a/src/__tests__/helpers/warn-undefined-element.test.ts b/src/__tests__/helpers/warn-undefined-element.test.ts new file mode 100644 index 000000000..1867652d1 --- /dev/null +++ b/src/__tests__/helpers/warn-undefined-element.test.ts @@ -0,0 +1,30 @@ +import { expect } from '@open-wc/testing'; +import { stubMethod } from 'hanbi'; + +import { warnUndefinedElement } from '../../helpers/warn-undefined-element'; +import { RootElement } from '../../root-element/root-element'; + +const warn = stubMethod(console, 'warn'); + +describe(warnUndefinedElement.name, () => { + const elementName = 'test-element' as const; + const elementName2 = 'test-element-2' as const; + + afterEach(() => { + warn.reset(); + }); + + it('does not warn defined element', () => { + globalThis.customElements.define(elementName, class A extends RootElement {}); + + warnUndefinedElement(elementName); + + expect(warn.called).false; + }); + + it('warns undefined element', () => { + warnUndefinedElement(elementName2); + + expect(warn.lastCall?.args).deep.equal([`${elementName2} is required`]); + }); +}); diff --git a/src/__tests__/icon-button/app-icon-button.test.ts b/src/__tests__/icon-button/app-icon-button.test.ts new file mode 100644 index 000000000..48e1a9226 --- /dev/null +++ b/src/__tests__/icon-button/app-icon-button.test.ts @@ -0,0 +1,30 @@ +import '../../icon-button/app-icon-button'; + +import { expect, fixture, html } from '@open-wc/testing'; +import { sendKeys } from '@web/test-runner-commands'; + +import type { AppIconButton } from '../../icon-button/app-icon-button'; +import { appIconButtonName } from '../../icon-button/constants'; + +describe(appIconButtonName, () => { + it('renders', async () => { + const el = await fixture(html` + + `); + + expect(await el.ripple).not.exist; + + el.focus(); + + /** + * NOTE(motss): `.click()` and `.focus()` does not render any ripple. + * So we need to actually focus with keypress or mouse click. + */ + await sendKeys({ press: 'Enter' }); + + // Force layout + await el.layout(); + + expect(await el.ripple).exist; + }); +}); diff --git a/src/__tests__/month-calendar/app-month-calendar.test.ts b/src/__tests__/month-calendar/app-month-calendar.test.ts new file mode 100644 index 000000000..7de3f9b7d --- /dev/null +++ b/src/__tests__/month-calendar/app-month-calendar.test.ts @@ -0,0 +1,500 @@ +import '../../month-calendar/app-month-calendar'; + +import { expect, fixture } from '@open-wc/testing'; +import { html } from '@open-wc/testing-helpers'; +import type { SendKeysPayload } from '@web/test-runner-commands'; +import { sendKeys } from '@web/test-runner-commands'; +import { calendar } from 'nodemod/dist/calendar/calendar.js'; +import { getWeekdays } from 'nodemod/dist/calendar/helpers/get-weekdays.js'; +import type { GetWeekdaysInit } from 'nodemod/dist/calendar/helpers/typings'; +import type { CalendarInit } from 'nodemod/dist/calendar/typings'; + +import type { confirmKeySet, navigationKeySetGrid} from '../../constants'; +import { labelShortWeek} from '../../constants'; +import { weekNumberTemplate } from '../../constants'; +import { labelWeek } from '../../constants'; +import { labelSelectedDate, labelToday } from '../../constants'; +import { toDateString } from '../../helpers/to-date-string'; +import { toFormatters } from '../../helpers/to-formatters'; +import type { AppMonthCalendar } from '../../month-calendar/app-month-calendar'; +import { appMonthCalendarName } from '../../month-calendar/constants'; +import type { MonthCalendarData } from '../../month-calendar/typings'; +import type { CustomEventDetail, InferredFromSet } from '../../typings'; +import { messageFormatter } from '../test-utils/message-formatter'; +import { queryDeepActiveElement } from '../test-utils/query-deep-active-element'; + +describe(appMonthCalendarName, () => { + const locale = 'en-US'; + const formatters = toFormatters(locale); + const calendarInit: CalendarInit = { + date: new Date('2020-02-02'), + dayFormat: formatters.dayFormat, + fullDateFormat: formatters.fullDateFormat, + locale, + disabledDates: [], + disabledDays: [], + firstDayOfWeek: 0, + max: new Date('2100-12-31'), + min: new Date('1970-01-01'), + showWeekNumber: false, + weekNumberTemplate, + weekNumberType: 'first-4-day-week', + }; + const weekdaysInit: GetWeekdaysInit = { + longWeekdayFormat: formatters.longWeekdayFormat, + narrowWeekdayFormat: formatters.narrowWeekdayFormat, + firstDayOfWeek: calendarInit.firstDayOfWeek, + showWeekNumber: calendarInit.showWeekNumber, + shortWeekLabel: labelShortWeek, + weekLabel: labelWeek, + }; + const calendarResult = calendar(calendarInit); + const data: MonthCalendarData = { + calendar: calendarResult.calendar, + currentDate: calendarInit.date, + date: calendarInit.date, + disabledDatesSet: calendarResult.disabledDatesSet, + disabledDaysSet: calendarResult.disabledDaysSet, + formatters, + max: calendarInit.max as Date, + min: calendarInit.min as Date, + selectedDateLabel: labelSelectedDate, + showCaption: false, + showWeekNumber: false, + todayDate: calendarInit.date, + todayLabel: labelToday, + weekdays: getWeekdays(weekdaysInit), + }; + const elementSelectors = { + calendarCaption: '.calendar-caption', + calendarDay: 'td.calendar-day', + calendarDayWeekNumber: 'th.calendar-day.week-number', + calendarTable: '.calendar-table', + disabledCalendarDay: 'td.calendar-day[aria-disabled="true"]', + hiddenCalendarDay: 'td.calendar-day[aria-hidden="true"]', + monthCalendar: '.month-calendar', + selectedCalendarDay: 'td.calendar-day[aria-selected="true"]', + tabbableCalendarDay: 'td.calendar-day[tabindex="0"]', + todayCalendarDay: 'td.calendar-day.day--today', + weekday: 'th.weekday', + } as const; + + type CaseRenderMonthCalendar = [ + _message: string, + data: MonthCalendarData | undefined, + shouldRender: boolean + ]; + const casesRenderMonthCalendar: CaseRenderMonthCalendar[] = [ + ['', data, true], + ['nothing', undefined, false], + ]; + casesRenderMonthCalendar.forEach(a => { + const [, testData, testShouldRender] = a; + + it(messageFormatter('renders %s(data=%j)', a), async () => { + const el = await fixture( + html`` + ); + + const monthCalendar = el.query( + elementSelectors.monthCalendar + ); + const calendarTable = el.query( + elementSelectors.calendarTable + ); + + if (testShouldRender) { + expect(monthCalendar).exist; + expect(calendarTable).exist; + } else { + expect(monthCalendar).not.exist; + expect(calendarTable).not.exist; + } + }); + }); + + it('renders first day of calendar month of current date when it has a different month than selected date', async () => { + const testCurrentDate = new Date('2020-03-03'); + const testCalendar = calendar({ + ...calendarInit, + date: testCurrentDate, + }); + const el = await fixture( + html`` + ); + + const expected = new Date('2020-03-01'); + const tabbableCalendarDay = el.query( + `${elementSelectors.tabbableCalendarDay}[aria-label="${formatters.fullDateFormat(expected)}"]` + ); + + expect(tabbableCalendarDay).exist; + expect(tabbableCalendarDay?.fullDate).deep.equal(expected); + }); + + type CaseRenderElement = [ + _message: string, + partialData: Partial, + elementSelector: string + ]; + const casesRenderElement: CaseRenderElement[] = [ + ['calendar caption', { showCaption: true }, elementSelectors.calendarCaption], + ['week numbers', { showWeekNumber: true }, elementSelectors.calendarDayWeekNumber], + [ + 'disabled day', + { + disabledDatesSet: new Set([+new Date('2020-02-15')]), + }, + `${elementSelectors.disabledCalendarDay}[aria-label="${ + formatters.fullDateFormat(new Date('2020-02-15')) + }"]`, + ], + ]; + casesRenderElement.forEach(a => { + const [, testPartialData, testElementSelector] = a; + it(messageFormatter('renders %s', a), async () => { + const testCalendar = calendar({ + ...calendarInit, + ...( + testPartialData.disabledDatesSet && { + disabledDates: [...testPartialData.disabledDatesSet].map(n => new Date(n)), + } + ), + showWeekNumber: testPartialData.showWeekNumber, + }); + const el = await fixture( + html`` + ); + + const element = el.query( + testElementSelector + ); + + expect(element).exist; + }); + }); + + type CaseSelectNewDate = [ + eventType: 'click' | 'keydown', + keyPayloads: (Partial | InferredFromSet + >>)[], + selectedDate: Date + ]; + const casesSelectNewDate: CaseSelectNewDate[] = [ + ['click', [], new Date('2020-02-09')], + [ + 'keydown', + [ + { down: 'ArrowDown' }, + { up: 'ArrowDown' }, + ], + data.date, + ], + [ + 'keydown', + [ + { down: 'ArrowDown' }, + { up: 'ArrowDown' }, + { press: ' ' }, + ], + data.date, + ], + [ + 'keydown', + [ + { down: 'ArrowDown' }, + { up: 'ArrowDown' }, + { press: 'Enter' }, + ], + data.date, + ], + ]; + casesSelectNewDate.forEach(a => { + const [testEventType, testKeyPayloads, testSelectedDate] = a; + it( + messageFormatter('selects new date (eventType=%s, sendKeysPayloads=%j)', a), + async () => { + const el = await fixture( + html`` + ); + + const dateUpdatedEventTask = new Promise((resolve) => { + el.addEventListener('date-updated', function fn(ev) { + resolve((ev as CustomEvent).detail); + + el.removeEventListener('date-updated', fn); + }); + }); + + const selectedDate = el.query( + `${elementSelectors.calendarDay}[aria-label="${ + formatters.fullDateFormat(testSelectedDate) + }"]` + ); + + expect(selectedDate).exist; + + selectedDate?.focus(); + + if (testEventType === 'click') { + selectedDate?.click(); + } else { + for (const n of testKeyPayloads) { + await sendKeys(n as SendKeysPayload); + } + } + + el.requestUpdate(); + + await el.updateComplete; + const dateUpdatedEvent = await dateUpdatedEventTask; + + const newSelectedDate = el.query( + elementSelectors.selectedCalendarDay + ); + + expect(newSelectedDate).exist; + expect(newSelectedDate?.getAttribute('aria-label')).equal( + formatters.fullDateFormat(calendarInit.date) + ); + expect(newSelectedDate?.fullDate).deep.equal(calendarInit.date); + + const isKeypress = testEventType === 'keydown'; + const expectedDate = new Date('2020-02-09'); + const expectedDateUpdatedEvent: CustomEventDetail['date-updated']['detail'] = { + isKeypress, + value: toDateString(expectedDate), + valueAsDate: expectedDate, + valueAsNumber: +expectedDate, + ...(isKeypress && { key: testKeyPayloads[0].down }), + }; + + expect(dateUpdatedEvent).deep.equal(expectedDateUpdatedEvent); + expect(el.root.activeElement?.isEqualNode(newSelectedDate ?? null)); + } + ); + }); + + it('tabs new element', async () => { + const el = await fixture( + html`` + ); + + const calendarTable = el.query(elementSelectors.calendarTable); + + expect(calendarTable).exist; + + calendarTable?.focus(); + + let activeElement = queryDeepActiveElement(); + + expect(activeElement?.isEqualNode(calendarTable)).true; + + await sendKeys({ down: 'Tab' } as SendKeysPayload); + await sendKeys({ up: 'Tab' } as SendKeysPayload); + + activeElement = queryDeepActiveElement(); + + const selectedDate = el.query( + `${elementSelectors.calendarDay}[aria-label="${ + formatters.fullDateFormat(calendarInit.date) + }"]` + ); + + expect(activeElement).exist; + expect(activeElement?.isEqualNode(selectedDate)).true; + }); + + type CaseNotSelectNewDate = [ + partialDate: Partial, + elementSelector: string + ]; + const casesNotSelectNewDate: CaseNotSelectNewDate[] = [ + [{}, elementSelectors.calendarTable], + [{}, elementSelectors.hiddenCalendarDay], + [ + {}, + `${elementSelectors.disabledCalendarDay}[aria-label="${ + formatters.fullDateFormat(new Date(calendarInit.date)) + }"]`, + ], + [ + { + disabledDatesSet: new Set([+new Date('2020-02-15')]), + }, + `${elementSelectors.disabledCalendarDay}[aria-label="${ + formatters.fullDateFormat(new Date('2020-02-15')) + }"]`, + ], + ]; + casesNotSelectNewDate.forEach(a => { + const [testPartialData, testElementSelector] = a; + it( + messageFormatter('does not select new date (partialData=%j, elementSelector=%s)', a), + async () => { + const testCalendar = calendar({ + ...calendarInit, + ...( + testPartialData.disabledDatesSet && { + disabledDates: [...testPartialData.disabledDatesSet].map(n => new Date(n)), + } + ), + }); + const el = await fixture( + html`` + ); + + const newSelectedDate = el.query( + testElementSelector + ); + + newSelectedDate?.focus(); + newSelectedDate?.click(); + + await el.updateComplete; + + const selectedDate = el.query( + elementSelectors.selectedCalendarDay + ); + + /** + * NOTE(motss): Selected date remains unchanged after selecting new date + */ + expect(selectedDate).exist; + expect(selectedDate?.getAttribute('aria-label')).equal( + formatters.fullDateFormat(data.date) + ); + } + ); + }); + + it('renders correct attributes for selected today', async () => { + const el = await fixture( + html`` + ); + + const selectedDate = el.query(elementSelectors.selectedCalendarDay); + const todayDate = el.query(elementSelectors.todayCalendarDay); + + expect(selectedDate).exist; + expect(todayDate).exist; + expect(selectedDate?.isEqualNode(todayDate)).true; + + expect(selectedDate).attr('title', labelSelectedDate); + expect(todayDate).attr('title', labelSelectedDate); + + expect(todayDate?.part.contains('today')).true; + }); + + type CaseWeekdayTitles = [ + partialMonthCalendarData: Partial, + partialWeekdaysInit: Partial, + expectedWeekdayTitles: string[] + ]; + const casesWeekdayTitles: CaseWeekdayTitles[] = [ + [{}, {}, ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']], + [{ showWeekNumber: true }, { showWeekNumber: true }, [labelWeek, 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']], + [{ showWeekNumber: true }, { showWeekNumber: true, shortWeekLabel: '週', weekLabel: '週目' }, ['週目', 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']], + ]; + casesWeekdayTitles.forEach((a) => { + const [ + testPartialMonthCalendarData, + testPartialWeekdaysInit, + expectedWeekdayTitles, + ] = a; + + it( + messageFormatter('renders correct title for weekdays (partialMonthCalendarData=%j, partialWeekdaysInit=%j)', a), + async () => { + const testData: MonthCalendarData = { + ...data, + ...testPartialMonthCalendarData, + }; + + const el = await fixture( + html`` + ); + + const weekdays = el.queryAll(elementSelectors.weekday); + + expect(weekdays.map(n => n.title)).deep.equal(expectedWeekdayTitles); + } + ); + }); + + type CaseSelectedDateLabelAndTodayDateLabel = [ + testSelectedDateLabel: string | undefined, + testTodayDateLabel: string | undefined, + expectedSelectedDateLabel: string | undefined, + expectedTodayDateLabel: string | undefined + ]; + const casesSelectedDateLabelAndTodayDateLabel: CaseSelectedDateLabelAndTodayDateLabel[] = [ + [undefined, undefined, undefined, undefined], + ['', '', '', ''], + [labelSelectedDate, labelToday, labelSelectedDate, labelToday], + ]; + casesSelectedDateLabelAndTodayDateLabel.forEach((a) => { + const [ + testSelectedDateLabel, + testTodayDateLabel, + expectedSelectedDateLabel, + expectedTodayDateLabel, + ] = a; + + it( + messageFormatter('renders correct title (selectedDateLabel=%s, todayDateLabel=%s)', a), + async () => { + const todayFullDate = new Date(data.todayDate); + const todayUTCDate = todayFullDate.getUTCDate(); + + const date = new Date(new Date(todayFullDate).setUTCDate(todayUTCDate + 2)); + const testData: MonthCalendarData = { + ...data, + date, + selectedDateLabel: testSelectedDateLabel as string, + todayLabel: testTodayDateLabel as string, + }; + + const el = await fixture( + html`` + ); + + const selectedDate = el.query(elementSelectors.selectedCalendarDay); + const todayDate = el.query(elementSelectors.todayCalendarDay); + + expect(selectedDate).exist; + expect(todayDate).exist; + + if (expectedSelectedDateLabel == null && expectedTodayDateLabel == null) { + expect(selectedDate).not.attr('title'); + expect(todayDate).not.attr('title'); + } else { + expect(selectedDate).attr('title', expectedSelectedDateLabel); + expect(todayDate).attr('title', expectedTodayDateLabel); + } + } + ); + }); + +}); diff --git a/src/__tests__/test-utils/event-once.ts b/src/__tests__/test-utils/event-once.ts new file mode 100644 index 000000000..9ede317d8 --- /dev/null +++ b/src/__tests__/test-utils/event-once.ts @@ -0,0 +1,49 @@ +import { promiseTimeout } from '../constants'; + +export function eventOnce< + T extends HTMLElement, + EventName, + ResolvedCustomEvent extends CustomEvent +>( + node: T, + eventName: EventName, + timeout?: number +): Promise { + return new Promise((resolve) => { + node.addEventListener(eventName as unknown as keyof HTMLElementEventMap, ( + ev + ) => { + /** + * NOTE: Rewire these properties/ functions because the actual value will be lost due to + * wrapping inside a Promise: + * + * 1. `.composedPath()` + * 1. `.currentTarget` + * 1. `.target` + * + * Using `Object.assign` or `{...}` does not work either. + */ + const resolvedEvent = new CustomEvent(eventName as unknown as string, ev); + const composedPath = ev.composedPath(); + + ['composedPath'].forEach((n) => { + Object.defineProperty(resolvedEvent, n, { + value: () => composedPath, + }); + }); + ['currentTarget', 'target'].forEach((n) => { + Object.defineProperty(resolvedEvent, n, { + value: ev?.[n as keyof typeof ev], + }); + }); + + resolve(resolvedEvent as ResolvedCustomEvent); + }); + + // Race with event listener + globalThis.setTimeout( + () => resolve(undefined), + timeout ?? promiseTimeout + ); + }); +} diff --git a/src/__tests__/test-utils/it-each.ts b/src/__tests__/test-utils/it-each.ts new file mode 100644 index 000000000..c5ad2ea8e --- /dev/null +++ b/src/__tests__/test-utils/it-each.ts @@ -0,0 +1,28 @@ +import { messageFormatter } from './message-formatter'; + +type Params = Parameters; + +function eachFn(groups: T[]) { + return (...args: Params) => { + const [title, cb] = args; + + groups.forEach((group) => { + it( + messageFormatter(title, group), + cb?.bind(group as never) + ); + }); + }; +} + +globalThis.it && Object.assign(globalThis.it, { + each: eachFn, +}); + +interface TestFunction extends Mocha.TestFunction { + each: typeof eachFn; +} + +const it = globalThis.it as TestFunction; + +export { it }; diff --git a/src/__tests__/test-utils/message-formatter.ts b/src/__tests__/test-utils/message-formatter.ts new file mode 100644 index 000000000..0581f2f2f --- /dev/null +++ b/src/__tests__/test-utils/message-formatter.ts @@ -0,0 +1,24 @@ +const re = /%s|%j/g; + +function replacer(_: string, v: unknown): unknown { + return v instanceof Set || v instanceof Map ? + Array.from(v) : + v; +} + +export function messageFormatter(message: string, group: T): string { + let i = 0; + + return message.replace( + re, + (s) => { + const value = Array.isArray(group) ? group[i++] : group; + + try { + return value == null ? String(value) : value?.toJSON(); + } catch { + return s === '%j' ? JSON.stringify(value, replacer): String(value); + } + } + ); +} diff --git a/src/__tests__/test-utils/query-deep-active-element.ts b/src/__tests__/test-utils/query-deep-active-element.ts new file mode 100644 index 000000000..43449e729 --- /dev/null +++ b/src/__tests__/test-utils/query-deep-active-element.ts @@ -0,0 +1,14 @@ +export function queryDeepActiveElement( +): HTMLElement | null { + let element = document.activeElement as HTMLElement | null; + + while (element?.shadowRoot) { + const shadowElement = element.shadowRoot.activeElement as HTMLElement | null; + + if (shadowElement) { + element = shadowElement; + } + } + + return element; +} diff --git a/src/__tests__/year-grid-button/app-year-grid-button.test.ts b/src/__tests__/year-grid-button/app-year-grid-button.test.ts new file mode 100644 index 000000000..17deff84d --- /dev/null +++ b/src/__tests__/year-grid-button/app-year-grid-button.test.ts @@ -0,0 +1,17 @@ +import '../../year-grid-button/app-year-grid-button'; + +import { expect, fixture, html } from '@open-wc/testing'; + +import type { AppYearGridButton } from '../../year-grid-button/app-year-grid-button'; +import { appYearGridButtonName } from '../../year-grid-button/constants'; + +describe(appYearGridButtonName, () => { + it('renders', async () => { + const el = await fixture( + html`` + ); + + expect(el.query(`button[aria-label="test"]`)).exist; + }); + +}); diff --git a/src/__tests__/year-grid/app-year-grid.test.ts b/src/__tests__/year-grid/app-year-grid.test.ts new file mode 100644 index 000000000..ecfa4c763 --- /dev/null +++ b/src/__tests__/year-grid/app-year-grid.test.ts @@ -0,0 +1,272 @@ +import '../../year-grid/app-year-grid'; + +import { expect, fixture, html } from '@open-wc/testing'; +import { sendKeys } from '@web/test-runner-commands'; + +import type { confirmKeySet} from '../../constants'; +import { labelSelectedYear, labelToyear } from '../../constants'; +import { toFormatters } from '../../helpers/to-formatters'; +import { toResolvedDate } from '../../helpers/to-resolved-date'; +import type { CustomEventDetail, InferredFromSet } from '../../typings'; +import type { AppYearGrid } from '../../year-grid/app-year-grid'; +import { appYearGridName } from '../../year-grid/constants'; +import type { YearGridData } from '../../year-grid/typings'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(appYearGridName, () => { + const data: YearGridData = { + date: new Date('2020-02-02'), + formatters: toFormatters('en-US'), + max: new Date('2021-03-03'), + min: new Date('2019-01-01'), + selectedYearLabel: labelSelectedYear, + toyearLabel: labelToyear, + }; + const elementSelectors = { + selectedYear: '.year-grid-button[aria-selected="true"]', + todayYear: '.year-grid-button.year--today', + yearGrid: '.year-grid', + yearGridButton: '.year-grid-button', + }; + + it('renders', async () => { + const el = await fixture(html``); + + const yearGridButtonAttrsList = Array.from( + el.queryAll(elementSelectors.yearGridButton) ?? [] + ).map<[string, string, string, string]>(n => [ + n.getAttribute('data-year') ?? '', + n.getAttribute('aria-label') ?? '', + n.getAttribute('tabindex') ?? '', + n.getAttribute('aria-selected') ?? '', + ]); + + expect(el.query(elementSelectors.yearGrid)).exist; + expect(yearGridButtonAttrsList).deep.equal([ + ['2019', '2019', '-1', 'false'], + ['2020', '2020', '0', 'true'], + ['2021', '2021', '-1', 'false'], + ]); + }); + + it('renders nothing', async () => { + const el = await fixture( + html`` + ); + + expect(el.query(elementSelectors.yearGrid)).not.exist; + }); + + it('focuses new year with keyboard', async () => { + const el = await fixture(html``); + + const newSelectedYear = el.query( + `${elementSelectors.yearGridButton}[data-year="${data.date.getUTCFullYear()}"]` + ); + + newSelectedYear?.focus(); + + await sendKeys({ + down: 'ArrowDown', + }); + + await el.updateComplete; + + const yearGridButtonAttrsList = Array.from( + el.queryAll(elementSelectors.yearGridButton) ?? [] + ).map<[string, string, string, string]>(n => [ + n.getAttribute('data-year') ?? '', + n.getAttribute('aria-label') ?? '', + n.getAttribute('tabindex') ?? '', + n.getAttribute('aria-selected') ?? '', + ]); + + expect(yearGridButtonAttrsList).deep.equal([ + ['2019', '2019', '-1', 'false'], + ['2020', '2020', '-1', 'true'], + ['2021', '2021', '0', 'false'], + ]); + }); + + type CaseSelectNewYear = [ + eventType: 'click' | 'keyup', + key: InferredFromSet, + newSelectedYear: number + ]; + const casesSelectNewYear: CaseSelectNewYear[] = [ + ['click', ' ', data.max.getUTCFullYear()], + ['keyup', ' ', data.date.getUTCFullYear()], + ['keyup', 'Enter', data.date.getUTCFullYear()], + ]; + casesSelectNewYear.forEach(a => { + const [testEventType, testKey, testNewSelectedYear] = a; + + it( + messageFormatter('selects new year (event.type=%s, key=%s)', a), + async () => { + const el = await fixture(html``); + + const yearUpdatedEventTask = new Promise((resolve) => { + function fn(ev: Event) { + resolve((ev as CustomEvent).detail); + el.removeEventListener('year-updated', fn); + } + + el.addEventListener('year-updated', fn); + }); + + const newSelectedYear = el.query( + `${elementSelectors.yearGridButton}[data-year="${testNewSelectedYear}"]` + ); + + newSelectedYear?.focus(); + + if (testEventType === 'click') { + newSelectedYear?.click(); + } else { + await sendKeys({ + down: 'ArrowDown', + }); + + // keypress triggers click event + await sendKeys({ + press: testKey, + }); + } + + await el.updateComplete; + const yearUpdatedEvent = await yearUpdatedEventTask; + + const yearGridButtonAttrsList = Array.from( + el.queryAll(elementSelectors.yearGridButton) ?? [] + ).map<[string, string, string, string]>(n => [ + n.getAttribute('data-year') ?? '', + n.getAttribute('aria-label') ?? '', + n.getAttribute('tabindex') ?? '', + n.getAttribute('aria-selected') ?? '', + ]); + const expectedYearUpdatedEvent: CustomEventDetail['year-updated']['detail'] = { + year: data.max.getUTCFullYear(), + }; + + expect(yearGridButtonAttrsList).deep.equal([ + ['2019', '2019', '-1', 'false'], + ['2020', '2020', '-1', 'true'], + ['2021', '2021', '0', 'false'], + ]); + expect(yearUpdatedEvent).deep.equal(expectedYearUpdatedEvent); + } + ); + }); + + it('does not focus/ select new year when click on irrelevant element', async () => { + const el = await fixture(html``); + + const newSelectedYear = el.query( + elementSelectors.yearGrid + ); + + newSelectedYear?.focus(); + newSelectedYear?.click(); + + await el.updateComplete; + + const yearGridButtonAttrsList = Array.from( + el.queryAll(elementSelectors.yearGridButton) ?? [] + ).map<[string, string, string, string]>(n => [ + n.getAttribute('data-year') ?? '', + n.getAttribute('aria-label') ?? '', + n.getAttribute('tabindex') ?? '', + n.getAttribute('aria-selected') ?? '', + ]); + + expect(yearGridButtonAttrsList).deep.equal([ + ['2019', '2019', '-1', 'false'], + ['2020', '2020', '0', 'true'], + ['2021', '2021', '-1', 'false'], + ]); + }); + + it('renders correct attributes for selected today year', async () => { + const todayDate = toResolvedDate(); + const max = new Date(new Date(todayDate).setUTCFullYear(todayDate.getUTCFullYear() + 2)); + const min = new Date(new Date(todayDate).setUTCFullYear(todayDate.getUTCFullYear() - 2)); + + const testData: YearGridData = { + ...data, + date: todayDate, + max, + min, + }; + const el = await fixture(html``); + + const selectedYear = el.query(elementSelectors.selectedYear); + const todayYear = el.query(elementSelectors.todayYear); + + expect(selectedYear).exist; + expect(todayYear).exist; + expect(selectedYear?.isEqualNode(todayYear)).true; + + expect(selectedYear).attr('title', labelSelectedYear); + expect(todayYear).attr('title', labelSelectedYear); + + expect(todayYear?.part.contains('toyear')).true; + }); + + type CaseSelectedYearLabelAndTodayYearLabel = [ + selectedYearLabel: string | undefined, + todayYearLabel: string | undefined, + expectedSelectedYearLabel: string | undefined, + expectedTodayYearLabel: string | undefined + ]; + const casesSelectedYearLabelAndTodayYearLabel: CaseSelectedYearLabelAndTodayYearLabel[] = [ + [undefined, undefined, undefined, undefined], + ['', '', '', ''], + [labelSelectedYear, labelToyear, labelSelectedYear, labelToyear], + ]; + casesSelectedYearLabelAndTodayYearLabel.forEach(a => { + const [ + testSelectedYearLabel, + testTodayYearLabel, + expectedSelectedYearLabel, + expectedTodayYearLabel, + ] = a; + + it( + messageFormatter('renders correct title (selectedYearLabel=%s, todayYearLabel=%s)', a), + async () => { + const dataMax = new Date(data.max); + const dataMin = new Date(data.min); + const todayFullYear = toResolvedDate().getUTCFullYear(); + + const min = new Date(dataMin.setUTCFullYear(todayFullYear - 2)); + const testData: YearGridData = { + ...data, + max: new Date(dataMax.setUTCFullYear(todayFullYear + 1)), + min, + date: min, + selectedYearLabel: testSelectedYearLabel as string, + toyearLabel: testTodayYearLabel as string, + }; + + const el = await fixture(html``); + + const selectedYear = el.query(elementSelectors.selectedYear); + const todayYear = el.query(elementSelectors.todayYear); + + expect(selectedYear).exist; + expect(todayYear).exist; + + if (expectedSelectedYearLabel == null && expectedTodayYearLabel == null) { + expect(selectedYear).not.attr('title'); + expect(todayYear).not.attr('title'); + } else { + expect(selectedYear).attr('title', expectedSelectedYearLabel); + + expect(todayYear).attr('title', expectedTodayYearLabel); + } + } + ); + }); + +}); diff --git a/src/__tests__/year-grid/to-next-selected-year.test.ts b/src/__tests__/year-grid/to-next-selected-year.test.ts new file mode 100644 index 000000000..9406fcf07 --- /dev/null +++ b/src/__tests__/year-grid/to-next-selected-year.test.ts @@ -0,0 +1,102 @@ +import { expect } from '@open-wc/testing'; + +import { toNextSelectedYear } from '../../year-grid/to-next-selected-year'; +import type { ToNextSelectableYearInit } from '../../year-grid/typings'; +import { messageFormatter } from '../test-utils/message-formatter'; + +describe(toNextSelectedYear.name, () => { + const defaultInit: ToNextSelectableYearInit = { + key: 'ArrowUp', + max: new Date('2021-01-01'), + min: new Date('2019-01-01'), + year: 2020, + }; + const defaultInitWithGrid: ToNextSelectableYearInit = { + key: 'ArrowUp', + max: new Date('2032-01-01'), + min: new Date('2017-01-01'), + year: 2022, + }; + + type CaseNextSelectedYear = [ + partialInit: Partial, + expected: number + ]; + const casesNextSelectedYear: CaseNextSelectedYear[] = [ + // cap at min or max + [ + {}, + defaultInit.min.getUTCFullYear(), + ], + [ + { key: 'ArrowDown' }, + defaultInit.max.getUTCFullYear(), + ], + [ + { key: 'ArrowLeft' }, + defaultInit.min.getUTCFullYear(), + ], + [ + { key: 'ArrowRight' }, + defaultInit.max.getUTCFullYear(), + ], + [ + { key: 'End' }, + defaultInit.max.getUTCFullYear(), + ], + [ + { key: 'Home' }, + defaultInit.min.getUTCFullYear(), + ], + [ + { key: ' ' }, + defaultInit.year, + ], + + // within min and max + [ + { ...defaultInitWithGrid }, + defaultInitWithGrid.year - 4, + ], + [ + { ...defaultInitWithGrid, key: 'ArrowDown' }, + defaultInitWithGrid.year + 4, + ], + [ + { ...defaultInitWithGrid, key: 'ArrowLeft' }, + defaultInitWithGrid.year - 1, + ], + [ + { ...defaultInitWithGrid, key: 'ArrowRight' }, + defaultInitWithGrid.year + 1, + ], + [ + { ...defaultInitWithGrid, key: 'End' }, + defaultInitWithGrid.max.getUTCFullYear(), + ], + [ + { ...defaultInitWithGrid, key: 'Home' }, + defaultInitWithGrid.min.getUTCFullYear(), + ], + [ + { ...defaultInitWithGrid, key: ' ' }, + defaultInitWithGrid.year, + ], + ]; + casesNextSelectedYear.forEach(a => { + const [testPartialInit, expected] = a; + + it( + messageFormatter('returns next selected year (init=%j)', a), + () => { + const result = toNextSelectedYear({ + ...defaultInit, + ...testPartialInit, + }); + + expect(result).equal(expected); + } + ); + }); + +}); diff --git a/src/app-datepicker-dialog.ts b/src/app-datepicker-dialog.ts deleted file mode 100644 index 9e613ce9a..000000000 --- a/src/app-datepicker-dialog.ts +++ /dev/null @@ -1,12 +0,0 @@ -import './app-datepicker.js'; -import { DATEPICKER_DIALOG_NAME } from './constants.js'; -import { DatepickerDialog } from './datepicker-dialog.js'; -import { customElementsDefine } from './helpers/custom-elements-define.js'; - -customElementsDefine(DATEPICKER_DIALOG_NAME, DatepickerDialog); - -declare global { - interface HTMLElementTagNameMap { - 'app-datepicker-dialog': DatepickerDialog; - } -} diff --git a/src/app-datepicker-icons.ts b/src/app-datepicker-icons.ts deleted file mode 100644 index e5267be89..000000000 --- a/src/app-datepicker-icons.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { html } from 'lit-element'; - -// tslint:disable:max-line-length -export const iconChevronLeft = html``; -export const iconChevronRight = html``; -// tslint:enable:max-line-length diff --git a/src/app-datepicker.ts b/src/app-datepicker.ts deleted file mode 100644 index f281881a2..000000000 --- a/src/app-datepicker.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { DATEPICKER_NAME } from './constants.js'; -import { Datepicker } from './datepicker.js'; -import { customElementsDefine } from './helpers/custom-elements-define.js'; - -customElementsDefine(DATEPICKER_NAME, Datepicker); - -declare global { - interface HTMLElementTagNameMap { - 'app-datepicker': Datepicker; - } -} diff --git a/src/common-styles.ts b/src/common-styles.ts deleted file mode 100644 index b3cb15cef..000000000 --- a/src/common-styles.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { css } from 'lit-element'; - -export const resetButton = css` -button { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - - position: relative; - display: block; - margin: 0; - padding: 0; - background: none; /** NOTE: IE11 fix */ - color: inherit; - border: none; - font: inherit; - text-align: left; - text-transform: inherit; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -`; -export const resetAnchor = css` -a { - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - - position: relative; - display: inline-block; - background: initial; - color: inherit; - font: inherit; - text-transform: inherit; - text-decoration: none; - outline: none; -} -a:focus, -a:focus.page-selected { - text-decoration: underline; -} -`; -export const resetSvgIcon = css` -svg { - display: block; - min-width: var(--svg-icon-min-width, 24px); - min-height: var(--svg-icon-min-height, 24px); - fill: var(--svg-icon-fill, currentColor); - pointer-events: none; -} -`; -export const absoluteHidden = css`[hidden] { display: none !important; }`; -export const datepickerVariables = css` -:host { - display: block; - - /* --app-datepicker-width: 300px; */ - /* --app-datepicker-primary-color: #4285f4; */ - /* --app-datepicker-header-height: 80px; */ -} - -* { - box-sizing: border-box; -} -`; diff --git a/src/constants.ts b/src/constants.ts index 89b870767..9cadbc321 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,28 +1,23 @@ -import { KEY_CODES_MAP } from './custom_typings.js'; +import { toResolvedDate } from './helpers/to-resolved-date.js'; +import { keyArrowDown, keyArrowLeft, keyArrowRight, keyArrowUp, keyEnd, keyEnter, keyHome, keyPageDown, keyPageUp, keySpace } from './key-values.js'; -export const INTL_DATE_TIME_FORMAT = Intl && Intl.DateTimeFormat; - -const UP_KEYS = [ - KEY_CODES_MAP.ARROW_UP, - KEY_CODES_MAP.PAGE_UP, - KEY_CODES_MAP.HOME, -]; -const DOWN_KEYS = [ - KEY_CODES_MAP.ARROW_DOWN, - KEY_CODES_MAP.PAGE_DOWN, - KEY_CODES_MAP.END, -]; - -export const PREV_KEY_CODES_SET = new Set([KEY_CODES_MAP.ARROW_LEFT, ...UP_KEYS]); -export const NEXT_KEY_CODES_SET = new Set([KEY_CODES_MAP.ARROW_RIGHT, ...DOWN_KEYS]); -export const NEXT_DAY_KEY_CODES_SET = new Set([KEY_CODES_MAP.ARROW_RIGHT, ...UP_KEYS]); -export const PREV_DAY_KEY_CODES_SET = new Set([KEY_CODES_MAP.ARROW_LEFT, ...DOWN_KEYS]); -export const ALL_NAV_KEYS_SET = new Set([ - KEY_CODES_MAP.ARROW_LEFT, - KEY_CODES_MAP.ARROW_RIGHT, - ...UP_KEYS, - ...DOWN_KEYS, -]); - -export const DATEPICKER_NAME = 'app-datepicker'; -export const DATEPICKER_DIALOG_NAME = 'app-datepicker-dialog'; +export const confirmKeySet = new Set([keyEnter, keySpace]); +export const DateTimeFormat = Intl.DateTimeFormat; +export const labelChooseMonth = 'Choose month' as const; +export const labelChooseYear = 'Choose year' as const; +export const labelNextMonth = 'Next month' as const; +export const labelPreviousMonth = 'Previous month' as const; +export const labelSelectedDate = 'Selected date' as const; +export const labelSelectedYear = 'Selected year' as const; +export const labelShortWeek = 'Wk' as const; +export const labelToday = 'Today' as const; +export const labelToyear = 'Toyear' as const; +export const labelWeek = 'Week' as const; +export const MAX_DATE = toResolvedDate('2100-12-31'); +export const navigationKeyListNext = [keyArrowDown, keyPageDown, keyEnd]; +export const navigationKeyListPrevious = [keyArrowUp, keyPageUp, keyHome]; +export const navigationKeySetDayNext = new Set([...navigationKeyListNext, keyArrowRight]); +export const navigationKeySetDayPrevious = new Set([...navigationKeyListPrevious, keyArrowLeft]); +export const navigationKeySetGrid = new Set([...navigationKeySetDayNext, ...navigationKeySetDayPrevious]); +export const startViews = ['calendar', 'yearGrid'] as const; +export const weekNumberTemplate = 'Week %s' as const; diff --git a/src/custom_typings.ts b/src/custom_typings.ts deleted file mode 100644 index 4c47a332c..000000000 --- a/src/custom_typings.ts +++ /dev/null @@ -1,95 +0,0 @@ -import type { DateTimeFormatter } from 'nodemod/dist/calendar/calendar_typing.js'; - -// #region TS helpers -export type Nullable = { - [P in keyof T]: T[P] | null; -}; -// #endregion TS helpers - -// #region part attribute -type HTMLButtonElementPart = - | 'calendar-selector' - | 'month-selector' - | 'year-selector' - | 'year'; -type HTMLDivElementPart = - | 'actions' - | 'body' - | 'calendar-view' - | 'calendar' - | 'calendars' - | 'day' - | 'dialog-content' - | 'header' - | 'label' - | 'month-selectors' - | 'scrim' - | 'toolbar' - | 'weekday' - | 'year-list-view' - | 'year-list'; -type HTMLElementMWCButtonPart = - | 'clear' - | 'confirm' - | 'dismiss'; -type HTMLTableCellElementPart = /** Both td and th have the same instance */ - | 'calendar-day' - | 'calendar-weekday'; -type HTMLTableElementPart = 'table'; -type HTMLTableRowElementPart = 'weekdays'; -export type HTMLElementPart = - | HTMLButtonElementPart - | HTMLDivElementPart - | HTMLElementMWCButtonPart - | HTMLTableCellElementPart - | HTMLTableElementPart - | HTMLTableRowElementPart; -// #endregion part attribute - -export type StartView = 'calendar' | 'yearList'; - -export type MonthUpdateType = 'previous' | 'next'; - -export interface Formatters { - dayFormat: DateTimeFormatter; - fullDateFormat: DateTimeFormatter; - longWeekdayFormat: DateTimeFormatter; - narrowWeekdayFormat: DateTimeFormatter; - longMonthYearFormat: DateTimeFormatter; - dateFormat: DateTimeFormatter; - yearFormat: DateTimeFormatter; - - locale: string; -} - -export const enum KEY_CODES_MAP { - // CTRL = 17, - // ALT = 18, - ESCAPE = 27, - SHIFT = 16, - TAB = 9, - ENTER = 13, - SPACE = 32, - PAGE_UP = 33, - PAGE_DOWN = 34, - END = 35, - HOME = 36, - ARROW_LEFT = 37, - ARROW_UP = 38, - ARROW_RIGHT = 39, - ARROW_DOWN = 40, -} - -export interface FocusTrap { - disconnect(): void; -} - -export interface DatepickerValueUpdated { - isKeypress: boolean; - keyCode?: KEY_CODES_MAP; - value: string; -} - -export interface DatepickerFirstUpdated extends Pick { - firstFocusableElement: HTMLElement; -} diff --git a/src/date-picker-dialog/app-date-picker-dialog-base.ts b/src/date-picker-dialog/app-date-picker-dialog-base.ts new file mode 100644 index 000000000..c683e96d6 --- /dev/null +++ b/src/date-picker-dialog/app-date-picker-dialog-base.ts @@ -0,0 +1,13 @@ +import { customElement } from 'lit/decorators.js'; + +import { appDatePickerDialogBaseName } from './constants.js'; +import { DatePickerDialogBase } from './date-picker-dialog-base.js'; + +@customElement(appDatePickerDialogBaseName) +export class AppDatePickerDialogBase extends DatePickerDialogBase {} + +declare global { + interface HTMLElementTagNameMap { + [appDatePickerDialogBaseName]: AppDatePickerDialogBase; + } +} diff --git a/src/date-picker-dialog/app-date-picker-dialog.ts b/src/date-picker-dialog/app-date-picker-dialog.ts new file mode 100644 index 000000000..1b9f33704 --- /dev/null +++ b/src/date-picker-dialog/app-date-picker-dialog.ts @@ -0,0 +1,13 @@ +import { customElement } from 'lit/decorators.js'; + +import { appDatePickerDialogName } from './constants.js'; +import { DatePickerDialog } from './date-picker-dialog.js'; + +@customElement(appDatePickerDialogName) +export class AppDatePickerDialog extends DatePickerDialog {} + +declare global { + interface HTMLElementTagNameMap { + [appDatePickerDialogName]: AppDatePickerDialog; + } +} diff --git a/src/date-picker-dialog/constants.ts b/src/date-picker-dialog/constants.ts new file mode 100644 index 000000000..d0d50222a --- /dev/null +++ b/src/date-picker-dialog/constants.ts @@ -0,0 +1,2 @@ +export const appDatePickerDialogBaseName = 'app-date-picker-dialog-base' as const; +export const appDatePickerDialogName = 'app-date-picker-dialog' as const; diff --git a/src/date-picker-dialog/date-picker-dialog-base.ts b/src/date-picker-dialog/date-picker-dialog-base.ts new file mode 100644 index 000000000..22182c01c --- /dev/null +++ b/src/date-picker-dialog/date-picker-dialog-base.ts @@ -0,0 +1,13 @@ +import { Dialog } from '@material/mwc-dialog'; + +import { ElementMixin } from '../mixins/element-mixin.js'; +import { resetShadowRoot } from '../stylings.js'; +import { datePickerDialogBaseStyling } from './stylings.js'; + +export class DatePickerDialogBase extends ElementMixin(Dialog) { + public static override styles = [ + ...Dialog.styles, + resetShadowRoot, + datePickerDialogBaseStyling, + ]; +} diff --git a/src/date-picker-dialog/date-picker-dialog.ts b/src/date-picker-dialog/date-picker-dialog.ts new file mode 100644 index 000000000..d88350b89 --- /dev/null +++ b/src/date-picker-dialog/date-picker-dialog.ts @@ -0,0 +1,232 @@ +import '@material/mwc-button'; +import '@material/mwc-dialog'; +import '../date-picker/app-date-picker.js'; +import './app-date-picker-dialog-base.js'; + +import type { TemplateResult } from 'lit'; +import { html, nothing } from 'lit'; +import { property, queryAsync, state } from 'lit/decorators.js'; + +import type { AppDatePicker } from '../date-picker/app-date-picker.js'; +import { appDatePickerName } from '../date-picker/constants.js'; +import { slotDatePicker } from '../helpers/slot-date-picker.js'; +import { toDateString } from '../helpers/to-date-string.js'; +import { toResolvedDate } from '../helpers/to-resolved-date.js'; +import { DatePickerMinMaxMixin } from '../mixins/date-picker-min-max-mixin.js'; +import { DatePickerMixin } from '../mixins/date-picker-mixin.js'; +import { RootElement } from '../root-element/root-element.js'; +import { baseStyling } from '../stylings.js'; +import type { CustomEventDetail } from '../typings.js'; +import { datePickerDialogStyling } from './stylings.js'; +import type { DatePickerDialogChangedProperties, DatePickerDialogProperties, DialogClosedEventDetail, DialogClosingEventDetail } from './typings.js'; + +export class DatePickerDialog extends DatePickerMixin(DatePickerMinMaxMixin(RootElement)) implements DatePickerDialogProperties { + public get valueAsDate(): Date { + return this.#valueAsDate; + } + + public get valueAsNumber(): number { + return +this.#valueAsDate; + } + + @property({ type: String }) public confirmLabel = 'set'; + @property({ type: String }) public dismissLabel = 'cancel'; + @property({ type: Boolean }) public open = false; + @property({ type: String }) public resetLabel = 'reset'; + @queryAsync(appDatePickerName) private _datePicker!: Promise; + @state() private _rendered = false; + + #isResetAction = false; + #selectedDate: Date; + #valueAsDate: Date; + + public static override styles = [ + baseStyling, + datePickerDialogStyling, + ]; + + public constructor() { + super(); + + this.#selectedDate = this.#valueAsDate = toResolvedDate(); + } + + protected override willUpdate(changedProperties: DatePickerDialogChangedProperties): void { + super.willUpdate(changedProperties); + + if (!this._rendered && this.open) { + this._rendered = true; + } + } + + protected override updated(changedProperties: DatePickerDialogChangedProperties): void { + /** + * NOTE(motss): `value` should always update `#selectedDate` and `#valueAsDate`. + */ + if (changedProperties.has('value')) { + this.#selectedDate = this.#valueAsDate = toResolvedDate(this.value); + } + } + + protected override render(): TemplateResult { + const { + _rendered, + confirmLabel, + dismissLabel, + open, + resetLabel, + } = this; + + return html` + + ${_rendered ? html` + ${this.open ? this.$renderSlot() : nothing} + +
+ ${resetLabel} + ${dismissLabel} +
+ + ${confirmLabel} + ` : nothing} +
+ `; + } + + public hide(): void { + this.open = false; + } + + public show(): void { + this.open = true; + } + + protected $onDatePickerDateUpdated({ + detail: { + valueAsDate, + }, + }: CustomEvent): void { + this.#selectedDate = new Date(valueAsDate); + + /** + * Reset `value` when it is a reset action or `value` is nullish + */ + if (this.#isResetAction || !this.value) { + this.#isResetAction = false; + this.#valueAsDate = new Date(valueAsDate); + + this.value = toDateString(valueAsDate); + } + } + + protected $onDatePickerFirstUpdated({ + detail: { + valueAsDate, + }, + }: CustomEvent): void { + this.#selectedDate = this.#valueAsDate = valueAsDate; + } + + protected $renderSlot(): TemplateResult { + const { + chooseMonthLabel, + chooseYearLabel, + disabledDates, + disabledDays, + firstDayOfWeek, + locale, + max, + min, + nextMonthLabel, + previousMonthLabel, + selectedDateLabel, + selectedYearLabel, + shortWeekLabel, + showWeekNumber, + startView, + todayLabel, + toyearLabel, + value, + weekLabel, + weekNumberTemplate, + weekNumberType, + } = this; + + return slotDatePicker({ + chooseMonthLabel, + chooseYearLabel, + disabledDates, + disabledDays, + firstDayOfWeek, + locale, + max, + min, + nextMonthLabel, + onDatePickerDateUpdated: this.$onDatePickerDateUpdated, + onDatePickerFirstUpdated: this.$onDatePickerFirstUpdated, + previousMonthLabel, + selectedDateLabel, + selectedYearLabel, + shortWeekLabel, + showWeekNumber, + startView, + todayLabel, + toyearLabel, + value, + weekLabel, + weekNumberTemplate, + weekNumberType, + }); + } + + #onClosed = async (ev: CustomEvent): Promise => { + const datePicker = await this._datePicker; + + this.hide(); + datePicker && (datePicker.startView = 'calendar'); + this.fire({ detail: ev.detail, type: 'closed' }); + }; + + #onClosing = ({ + detail, + }: CustomEvent): void => { + if (detail.action === 'set') { + const selectedDate = this.#selectedDate; + + this.#valueAsDate = new Date(selectedDate); + + this.value = toDateString(selectedDate); + } + + this.fire({ detail, type: 'closing' }); + }; + + #onOpened = ({ detail }: CustomEvent): void => { + this.fire({ detail, type: 'opened' }); + }; + + #onOpening = ({ detail }: CustomEvent): void => { + this.fire({ detail, type: 'opening' }); + }; + + #onResetClick = () => { + this.#isResetAction = true; + this.value = undefined; + }; +} diff --git a/src/date-picker-dialog/stylings.ts b/src/date-picker-dialog/stylings.ts new file mode 100644 index 000000000..8f691062a --- /dev/null +++ b/src/date-picker-dialog/stylings.ts @@ -0,0 +1,56 @@ +import { css } from 'lit'; + +export const datePickerDialogBaseStyling = css` +/* mwc-dialog CSS Variables: */ +/* --mdc-dialog-scrim-color: rgba(0, 0, 0, 0.32) */ +/* --mdc-dialog-heading-ink-color: rgba(0, 0, 0, 0.87) */ +/* --mdc-dialog-content-ink-color: rgba(0, 0, 0, 0.6) */ +/* --mdc-dialog-scroll-divider-color: rgba(0, 0, 0, 0.12) */ +/* --mdc-dialog-min-width: 280px */ +/* --mdc-dialog-max-width: 560px */ +/* --mdc-dialog-max-height: calc(100% - 32px) */ +/* --mdc-dialog-box-shadow: mdc elevation 24 */ +/* --mdc-dialog-z-index: 7 */ + +:host { + --mdc-dialog-min-width: 256px; +} + +.mdc-dialog .mdc-dialog__surface, +.mdc-dialog .mdc-dialog__content { + --mdc-shape-medium: var(--_shape); + + border-radius: var(--_shape); + overflow: initial; +} + +.mdc-dialog .mdc-dialog__content { + align-self: center; + + background-color: inherit; + padding: 0; +} + +app-date-picker { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.mdc-dialog .mdc-dialog__actions { + border-radius: var(--_shape); + border-top-left-radius: 0; + border-top-right-radius: 0; +} +`; + +export const datePickerDialogStyling = css` +.secondary-actions { + display: flex; + justify-content: flex-end; + + margin: 0; +} +.secondary-actions mwc-button + mwc-button { + margin: 0 0 0 8px; +} +`; diff --git a/src/date-picker-dialog/typings.ts b/src/date-picker-dialog/typings.ts new file mode 100644 index 000000000..02cc996aa --- /dev/null +++ b/src/date-picker-dialog/typings.ts @@ -0,0 +1,23 @@ +import type { Dialog } from '@material/mwc-dialog'; + +import type { ChangedProperties, DatePickerProperties } from '../typings'; + +export type DatePickerDialogChangedProperties = ChangedProperties; + +export interface DatePickerDialogProperties extends DialogProperties, DatePickerProperties { + confirmLabel: string; + dismissLabel: string; + hide(): void; + resetLabel: string; + show(): void; +} + +export type DialogClosedEventDetail = DialogClosingEventDetail; + +export interface DialogClosingEventDetail { + action: DialogClosingEventDetailAction; +} + +export type DialogClosingEventDetailAction = 'cancel' | 'reset' | 'set'; + +type DialogProperties = Pick; diff --git a/src/date-picker-input-surface/app-date-picker-input-surface.ts b/src/date-picker-input-surface/app-date-picker-input-surface.ts new file mode 100644 index 000000000..1da576631 --- /dev/null +++ b/src/date-picker-input-surface/app-date-picker-input-surface.ts @@ -0,0 +1,13 @@ +import { customElement } from 'lit/decorators.js'; + +import { appDatePickerInputSurfaceName } from './constants.js'; +import { DatePickerInputSurface } from './date-picker-input-surface.js'; + +@customElement(appDatePickerInputSurfaceName) +export class AppDatePickerInputSurface extends DatePickerInputSurface {} + +declare global { + interface HTMLElementTagNameMap { + [appDatePickerInputSurfaceName]: AppDatePickerInputSurface; + } +} diff --git a/src/date-picker-input-surface/constants.ts b/src/date-picker-input-surface/constants.ts new file mode 100644 index 000000000..624ae4b04 --- /dev/null +++ b/src/date-picker-input-surface/constants.ts @@ -0,0 +1 @@ +export const appDatePickerInputSurfaceName = 'app-date-picker-input-surface' as const; diff --git a/src/date-picker-input-surface/date-picker-input-surface.ts b/src/date-picker-input-surface/date-picker-input-surface.ts new file mode 100644 index 000000000..0dcaba318 --- /dev/null +++ b/src/date-picker-input-surface/date-picker-input-surface.ts @@ -0,0 +1,36 @@ +import { MenuSurface } from '@material/mwc-menu/mwc-menu-surface.js'; + +import { appDatePickerName } from '../date-picker/constants.js'; +import { appDatePickerInputName } from '../date-picker-input/constants.js'; +import { ElementMixin } from '../mixins/element-mixin.js'; +import { baseStyling, resetShadowRoot } from '../stylings.js'; +import type { InferredFromSet } from '../typings.js'; +import { DatePickerInputSurfaceStyling } from './stylings.js'; + +const alwaysOpenElementSet = new Set([ + appDatePickerInputName, + appDatePickerName, +]); + +export class DatePickerInputSurface extends ElementMixin(MenuSurface) { + public static override styles = [ + ...MenuSurface.styles, + baseStyling, + resetShadowRoot, + DatePickerInputSurfaceStyling, + ]; + + protected override onBodyClick(ev: MouseEvent) { + const elements = + (ev.composedPath() as HTMLElement[]) + .filter(({ nodeType }) => nodeType === Node.ELEMENT_NODE); + const shouldClose = + elements.some(n => n.classList.contains('calendar-day')) || + !elements.some( + n => + alwaysOpenElementSet.has(n.localName as InferredFromSet) + ); + + shouldClose && this.close(); + } +} diff --git a/src/date-picker-input-surface/stylings.ts b/src/date-picker-input-surface/stylings.ts new file mode 100644 index 000000000..d837bd48f --- /dev/null +++ b/src/date-picker-input-surface/stylings.ts @@ -0,0 +1,24 @@ +import { css } from 'lit'; + +export const DatePickerInputSurfaceStyling = css` +:host { + /* mwc-menu-surface CSS Variables: */ + /* --mdc-menu-max-height: 604px */ + /* --mdc-menu-min-width: 112px */ + /* --mdc-menu-max-width: calc(100vw - 32px) */ + /* --mdc-menu-theme-surface: #fff */ + /* --mdc-menu-theme-on-surface: #000 */ + /* --mdc-shape-medium: 4px */ + + --mdc-shape-medium: var(--_shape); + + display: block; + position: absolute; /* NOTE(motss): Set this so that surface can be placed on top of its anchor element */ + top: 0; /** NOTE(motss): This ensures inputSurface renders downwards on top of input */ + bottom: 0; /** NOTE(motss): This ensures inputSurface renders upwards on top of input */ +} + +.mdc-menu-surface.mdc-menu-surface--open { + overflow: initial; +} +`; diff --git a/src/date-picker-input/app-date-picker-input.ts b/src/date-picker-input/app-date-picker-input.ts new file mode 100644 index 000000000..81f512886 --- /dev/null +++ b/src/date-picker-input/app-date-picker-input.ts @@ -0,0 +1,13 @@ +import { customElement } from 'lit/decorators.js'; + +import { appDatePickerInputName } from './constants.js'; +import { DatePickerInput } from './date-picker-input.js'; + +@customElement(appDatePickerInputName) +export class AppDatePickerInput extends DatePickerInput {} + +declare global { + interface HTMLElementTagNameMap { + [appDatePickerInputName]: AppDatePickerInput; + } +} diff --git a/src/date-picker-input/constants.ts b/src/date-picker-input/constants.ts new file mode 100644 index 000000000..6d65ea516 --- /dev/null +++ b/src/date-picker-input/constants.ts @@ -0,0 +1,5 @@ +import type { TextFieldType } from '@material/mwc-textfield'; + +export const appDatePickerInputClearLabel = 'Clear' as const; +export const appDatePickerInputName = 'app-date-picker-input' as const; +export const appDatePickerInputType = 'date' as TextFieldType; diff --git a/src/date-picker-input/date-picker-input.ts b/src/date-picker-input/date-picker-input.ts new file mode 100644 index 000000000..ee7094c42 --- /dev/null +++ b/src/date-picker-input/date-picker-input.ts @@ -0,0 +1,408 @@ +import '@material/mwc-textfield'; +import '../icon-button/app-icon-button.js'; + +import { TextField } from '@material/mwc-textfield'; +import type { TemplateResult } from 'lit'; +import { nothing } from 'lit'; +import { html } from 'lit'; +import { property, queryAsync, state } from 'lit/decorators.js'; +import { ifDefined } from 'lit/directives/if-defined.js'; +import { live } from 'lit/directives/live.js'; + +import { DateTimeFormat } from '../constants.js'; +import type { AppDatePicker } from '../date-picker/app-date-picker.js'; +import { appDatePickerName } from '../date-picker/constants.js'; +import type { AppDatePickerInputSurface } from '../date-picker-input-surface/app-date-picker-input-surface.js'; +import { appDatePickerInputSurfaceName } from '../date-picker-input-surface/constants.js'; +import { slotDatePicker } from '../helpers/slot-date-picker.js'; +import { toDateString } from '../helpers/to-date-string.js'; +import { warnUndefinedElement } from '../helpers/warn-undefined-element.js'; +import type { AppIconButton } from '../icon-button/app-icon-button.js'; +import { appIconButtonName } from '../icon-button/constants.js'; +import { iconClear } from '../icons.js'; +import { keyEnter, keyEscape, keySpace, keyTab } from '../key-values.js'; +import { DatePickerMinMaxMixin } from '../mixins/date-picker-min-max-mixin.js'; +import { DatePickerMixin } from '../mixins/date-picker-mixin.js'; +import { ElementMixin } from '../mixins/element-mixin.js'; +import type { DatePickerMixinProperties } from '../mixins/typings.js'; +import { baseStyling } from '../stylings.js'; +import type { ChangedProperties, CustomEventDetail, DatePickerProperties } from '../typings.js'; +import { appDatePickerInputClearLabel, appDatePickerInputType } from './constants.js'; +import { datePickerInputStyling } from './stylings.js'; + +export class DatePickerInput extends ElementMixin(DatePickerMixin(DatePickerMinMaxMixin(TextField))) implements DatePickerMixinProperties { + public override iconTrailing = 'clear'; + public override type = appDatePickerInputType; + + public get valueAsDate(): Date | null { + return this.#valueAsDate || null; + } + + public get valueAsNumber(): number { + return Number(this.#valueAsDate || NaN); + } + + @property({ type: String }) public clearLabel = appDatePickerInputClearLabel; + @queryAsync('.mdc-text-field__input') protected $input!: Promise; + @queryAsync(appDatePickerInputSurfaceName) protected $inputSurface!: Promise; + @queryAsync(appDatePickerName) protected $picker!: Promise; + @state() private _lazyLoaded = false; + @state() private _open = false; + @state() private _valueText = ''; + + #disconnect: () => void = () => undefined; + #focusElement: HTMLElement | undefined = undefined; + #isClearAction = false; + #lazyLoading = false; + #picker: AppDatePicker | undefined = undefined; + #selectedDate: Date | undefined; + #valueAsDate: Date | undefined; + #valueFormatter = this.$toValueFormatter(); + + public static override styles = [ + ...TextField.styles, + baseStyling, + datePickerInputStyling, + ]; + + public override disconnectedCallback(): void { + super.disconnectedCallback(); + + this.#disconnect(); + } + + public override async firstUpdated(): Promise { + super.firstUpdated(); + + const input = await this.$input; + if (input) { + const onBodyKeyup = async (ev: KeyboardEvent) => { + if (ev.key === keyEscape) { + this.closePicker(); + } else if (ev.key === keyTab) { + const inputSurface = await this.$inputSurface; + const isTabInsideInputSurface = (ev.composedPath() as HTMLElement[]).find( + n => n.nodeType === Node.ELEMENT_NODE && + n.isEqualNode(inputSurface) + ); + + if (!isTabInsideInputSurface) this.closePicker(); + } + }; + const onClick = () => this._open = true; + const onKeyup = (ev: KeyboardEvent) => { + if ([keySpace, keyEnter].some(n => n === ev.key)) { + onClick(); + } + }; + + document.body.addEventListener('keyup', onBodyKeyup); + input.addEventListener('keyup', onKeyup); + input.addEventListener('click', onClick); + + this.#disconnect = () => { + document.body.removeEventListener('keyup', onBodyKeyup); + input.removeEventListener('keyup', onKeyup); + input.removeEventListener('click', onClick); + }; + } + } + + public override willUpdate(changedProperties: ChangedProperties): void { + super.willUpdate(changedProperties); + + if (changedProperties.has('locale')) { + const newLocale = ( + this.locale || DateTimeFormat().resolvedOptions().locale + ) as string; + + this.locale = newLocale; + + this.#valueFormatter = this.$toValueFormatter(); + this.#updateValues(this.value); + } + + if (changedProperties.has('value')) { + this.#updateValues(this.value); + } + } + + public override async updated(): Promise { + if (this._open && this._lazyLoaded) { + const picker = await this.$picker; + + picker?.queryAll?.(appIconButtonName).forEach(n => n.layout()); + } + } + + public override render(): TemplateResult { + const { + _lazyLoaded, + _open, + } = this; + + if (!_lazyLoaded && _open) this.#lazyLoad(); + + return html` + ${super.render()} + ${_lazyLoaded ? this.$renderContent() : nothing} + `; + } + + public closePicker(): void { + this._open = false; + } + + public reset(): void { + this.#onResetClick(); + } + + public showPicker(): void { + this._open = true; + } + + protected override renderInput(shouldRenderHelperText: boolean): TemplateResult { + /** + * NOTE: All these code are copied from original implementation. + */ + const autocapitalizeOrUndef = this.autocapitalize ? + this.autocapitalize as ( + 'off' | 'none' | 'on' | 'sentences' | 'words' | 'characters') : + undefined; + const showValidationMessage = this.validationMessage && !this.isUiValid; + const ariaLabelledbyOrUndef = this.label ? 'label' : undefined; + const ariaControlsOrUndef = + shouldRenderHelperText ? 'helper-text' : undefined; + const ariaDescribedbyOrUndef = + this.focused || this.helperPersistent || showValidationMessage ? + 'helper-text' : + undefined; + + return html` + `; + } + + protected override renderTrailingIcon(): TemplateResult { + return html` + + ${iconClear} + + `; + } + + protected $renderContent(): TemplateResult { + warnUndefinedElement(appDatePickerInputSurfaceName); + + return html` + ${ + /** + * NOTE(motss): This removes/ renders datePicker with a clean slate. + */ + this._open ? this.$renderSlot() : nothing + } + `; + } + + protected $renderSlot(): TemplateResult { + const { + chooseMonthLabel, + chooseYearLabel, + disabledDates, + disabledDays, + firstDayOfWeek, + locale, + max, + min, + nextMonthLabel, + previousMonthLabel, + selectedDateLabel, + selectedYearLabel, + shortWeekLabel, + showWeekNumber, + startView, + todayLabel, + toyearLabel, + value, + weekLabel, + weekNumberTemplate, + weekNumberType, + } = this; + + return slotDatePicker({ + chooseMonthLabel, + chooseYearLabel, + disabledDates, + disabledDays, + firstDayOfWeek, + locale, + max, + min, + nextMonthLabel, + onDatePickerDateUpdated: this.#onDatePickerDateUpdated, + onDatePickerFirstUpdated: this.#onDatePickerFirstUpdated, + previousMonthLabel, + selectedDateLabel, + selectedYearLabel, + shortWeekLabel, + showWeekNumber, + startView, + todayLabel, + toyearLabel, + value, + weekLabel, + weekNumberTemplate, + weekNumberType, + }); + } + + protected $toValueFormatter(): Intl.DateTimeFormat { + return DateTimeFormat(this.locale, { + year: 'numeric', + month: 'short', + day: 'numeric', + }); + } + + /** + * FIXME(motss): Unable to test the lazy loading in `wtr` due to: + * 1. Unable to dynamically import `.js` file + * 2. Unable to dedupe the same custom element caused by dynamic import with import maps + * + * Therefore, defer testing the lazy loading until there is a way to test it in `wtr`. + */ + /* c8 ignore start */ + #lazyLoad = async (): Promise => { + if (this._lazyLoaded || this.#lazyLoading) return; + + const deps = [ + appDatePickerName, + appDatePickerInputSurfaceName, + ] as const; + + if (deps.some(n => globalThis.customElements.get(n) == null)) { + this.#lazyLoading = true; + + const tasks = deps.map(n => globalThis.customElements.whenDefined(n)); + const imports = [ + '../date-picker/app-date-picker.js', + '../date-picker-input-surface/app-date-picker-input-surface.js', + ].map(n => import(n)); + + try { + await Promise.all(imports); + await Promise.all(tasks); + } catch (error) { + console.error(error); + } + } + + /** + * NOTE(motss): `#lazyLoad()` is called within `render()` so this needs to wait for next update + * to re-trigger update when it updates `_lazyLoaded`. + */ + await this.updateComplete; + + this.#lazyLoading = false; + this._lazyLoaded = true; + }; + /* c8 ignore stop */ + + #onResetClick = (): void => { + this.#isClearAction = true; + this.#selectedDate = this.#valueAsDate = undefined; + + this.value = this._valueText = ''; + }; + + #onClosed = ({ detail }: CustomEvent): void => { + this._open = false; + this.fire({ detail, type: 'closed' }); + }; + + #onDatePickerDateUpdated = async (ev: CustomEvent): Promise => { + const { + isKeypress, + key, + valueAsDate, + } = ev.detail; + + /** + * NOTE: When the input date is cleared, the date picker's `date` will be updated and `#isClearAction` + * is used to prevent `valueAsDate` from updating empty `value`. + * + * The flow of execution is as follows: + * + * 1. Clear input value + * 2. Set `#isClearAction=true` + * 3. `date` updated but `#isClearAction` is true so do nothing and reset `#isClearAction` + * 4. At this point, new value can be set via keyboard or mouse + */ + if (!this.#isClearAction) { + this.#selectedDate = valueAsDate; + + if (!isKeypress || (key === keyEnter || key === keySpace)) { + this.value = toDateString(this.#selectedDate); + isKeypress && (await this.$inputSurface)?.close(); + } + } else { + this.#isClearAction = false; + } + }; + + #onDatePickerFirstUpdated = ({ + currentTarget, + detail: { + focusableElements: [focusableElement], + valueAsDate, + }, + }: CustomEvent): void => { + this.#focusElement = focusableElement; + this.#picker = currentTarget as AppDatePicker; + this.#selectedDate = valueAsDate; + }; + + #onOpened = async ({ detail }: CustomEvent): Promise => { + await this.#picker?.updateComplete; + await this.updateComplete; + + this.#focusElement?.focus(); + this.fire({ detail, type: 'opened' }); + }; + + #updateValues = (value: string): void => { + if (value) { + const valueDate = new Date(value); + + this.#selectedDate = this.#valueAsDate = valueDate; + this._valueText = this.#valueFormatter.format(valueDate); + } else { + this.#onResetClick(); + } + }; +} diff --git a/src/date-picker-input/stylings.ts b/src/date-picker-input/stylings.ts new file mode 100644 index 000000000..37a2e3ccc --- /dev/null +++ b/src/date-picker-input/stylings.ts @@ -0,0 +1,30 @@ +import { css } from 'lit'; + +export const datePickerInputStyling = css` +:host { + /* mwc-textfield CSS variables: */ + /* --mdc-text-field-filled-border-radius: 4px 4px 0 0 */ + /* --mdc-text-field-idle-line-color: rgba(0, 0, 0, 0.42) */ + /* --mdc-text-field-hover-line-color: rgba(0, 0, 0, 0.87) */ + /* --mdc-text-field-disabled-line-color: rgba(0, 0, 0, 0.06) */ + /* --mdc-text-field-outlined-idle-border-color: rgba(0, 0, 0, 0.38) */ + /* --mdc-text-field-outlined-hover-border-color: rgba(0, 0, 0, 0.87) */ + /* --mdc-text-field-outlined-disabled-border-color: rgba(0, 0, 0, 0.06) */ + /* --mdc-text-field-fill-color: rgb(245, 245, 245) */ + /* --mdc-text-field-disabled-fill-color: rgb(250, 250, 250) */ + /* --mdc-text-field-ink-color: rgba(0, 0, 0, 0.87) */ + /* --mdc-text-field-label-ink-color: rgba(0, 0, 0, 0.6) */ + /* --mdc-text-field-disabled-ink-color: rgba(0, 0, 0, 0.37) */ + + position: relative; +} + +.mdc-text-field__icon--trailing { + padding: 0; +} + +.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing { + color: var(--date-picker-input-icon, rgba(0, 0, 0, 0.54)); + pointer-events: auto; +} +`; diff --git a/src/date-picker/app-date-picker.ts b/src/date-picker/app-date-picker.ts new file mode 100644 index 000000000..1845fbd54 --- /dev/null +++ b/src/date-picker/app-date-picker.ts @@ -0,0 +1,13 @@ +import { customElement } from 'lit/decorators.js'; + +import { appDatePickerName } from './constants.js'; +import { DatePicker } from './date-picker.js'; + +@customElement(appDatePickerName) +export class AppDatePicker extends DatePicker {} + +declare global { + interface HTMLElementTagNameMap { + [appDatePickerName]: AppDatePicker; + } +} diff --git a/src/date-picker/constants.ts b/src/date-picker/constants.ts new file mode 100644 index 000000000..264cf07a0 --- /dev/null +++ b/src/date-picker/constants.ts @@ -0,0 +1 @@ +export const appDatePickerName = 'app-date-picker' as const; diff --git a/src/date-picker/date-picker.ts b/src/date-picker/date-picker.ts new file mode 100644 index 000000000..23e43d173 --- /dev/null +++ b/src/date-picker/date-picker.ts @@ -0,0 +1,496 @@ +import '../icon-button/app-icon-button.js'; +import '../month-calendar/app-month-calendar.js'; +import '../year-grid/app-year-grid.js'; + +import type { TemplateResult } from 'lit'; +import { html, nothing } from 'lit'; +import { queryAsync, state } from 'lit/decorators.js'; +import { classMap } from 'lit/directives/class-map.js'; +import { ifDefined } from 'lit/directives/if-defined.js'; +import { calendar } from 'nodemod/dist/calendar/calendar.js'; +import { getWeekdays } from 'nodemod/dist/calendar/helpers/get-weekdays.js'; +import { toUTCDate } from 'nodemod/dist/calendar/helpers/to-utc-date.js'; + +import { DateTimeFormat, MAX_DATE, startViews } from '../constants.js'; +import { clampValue } from '../helpers/clamp-value.js'; +import { dateValidator } from '../helpers/date-validator.js'; +import { focusElement } from '../helpers/focus-element.js'; +import { isInCurrentMonth } from '../helpers/is-in-current-month.js'; +import { splitString } from '../helpers/split-string.js'; +import { toDateString } from '../helpers/to-date-string.js'; +import { toFormatters } from '../helpers/to-formatters.js'; +import { toResolvedDate } from '../helpers/to-resolved-date.js'; +import type { MaybeDate } from '../helpers/typings.js'; +import { appIconButtonName } from '../icon-button/constants.js'; +import type { IconButton } from '../icon-button/icon-button.js'; +import { iconArrowDropdown, iconChevronLeft, iconChevronRight } from '../icons.js'; +import { DatePickerMinMaxMixin } from '../mixins/date-picker-min-max-mixin.js'; +import { DatePickerMixin } from '../mixins/date-picker-mixin.js'; +import type { AppMonthCalendar } from '../month-calendar/app-month-calendar.js'; +import { RootElement } from '../root-element/root-element.js'; +import { baseStyling, resetShadowRoot, webkitScrollbarStyling } from '../stylings.js'; +import type { CustomEventDetail, DatePickerProperties, Formatters, StartView, ValueUpdatedEvent } from '../typings.js'; +import type { AppYearGrid } from '../year-grid/app-year-grid.js'; +import { datePickerStyling } from './stylings.js'; +import type { DatePickerChangedProperties } from './typings.js'; + +export class DatePicker extends DatePickerMixin(DatePickerMinMaxMixin(RootElement)) implements DatePickerProperties { + public get valueAsDate(): Date { + return this.#valueAsDate; + } + + public get valueAsNumber(): number { + return +this.#valueAsDate; + } + + @queryAsync('app-month-calendar') private readonly _monthCalendar!: Promise; + + @queryAsync('[data-navigation="previous"]') private readonly _navigationPrevious!: Promise; + + @queryAsync('[data-navigation="next"]') private readonly _navigationNext!: Promise; + + @queryAsync('.year-dropdown') private readonly _yearDropdown!: Promise; + + @queryAsync('app-year-grid') private readonly _yearGrid!: Promise; + + @state() private _currentDate: Date; + + @state() private _max: Date; + + @state() private _min: Date; + + @state() private _selectedDate: Date; + + #formatters: Formatters; + #focusNavButtonWithKey = false; + #today: Date; + #valueAsDate: Date; + + public static override styles = [ + baseStyling, + resetShadowRoot, + datePickerStyling, + webkitScrollbarStyling, + ]; + + constructor() { + super(); + + const todayDate = toResolvedDate(); + + this._min = new Date(todayDate); + this._max = new Date(MAX_DATE); + this.#today = todayDate; + this._selectedDate = new Date(todayDate); + this._currentDate = new Date(todayDate); + this.#formatters = toFormatters(this.locale); + this.#valueAsDate = new Date(todayDate); + } + + public override willUpdate(changedProperties: DatePickerChangedProperties): void { + if (changedProperties.has('locale')) { + const newLocale = ( + this.locale || DateTimeFormat().resolvedOptions().locale + ) as string; + + this.#formatters = toFormatters(newLocale); + this.locale = newLocale; + } + + const dateRangeProps = [ + 'max', + 'min', + 'value', + ] as (keyof Pick)[]; + if ( + dateRangeProps.some(n => changedProperties.has(n)) + ) { + const todayDate = this.#today; + + const [ + newMax, + newMin, + newValue, + ] = ( + [ + ['max', MAX_DATE], + ['min', todayDate], + ['value', todayDate], + ] as [keyof Pick, Date][] + ).map( + ([propKey, resetValue]) => { + const currentValue = this[propKey]; + const defaultValue = toResolvedDate( + /** + * The value from `changedProperties` can only be undefined when first init. + * This also means that subsequent changes will not affect the outcome because any + * invalid value will be dropped in favor of previous valid value. + */ + changedProperties.get(propKey) as MaybeDate ?? resetValue + ); + const valueWithReset = currentValue === undefined ? resetValue : currentValue; + + return dateValidator(valueWithReset, defaultValue); + } + ); + + /** + * NOTE: Ensure new `value` is clamped between new `min` and `max` as `newValue` will only + * contain valid date but its value might be a out-of-range date. + */ + const valueDate = toResolvedDate( + clampValue(+newMin.date, +newMax.date, +newValue.date) + ); + + this._min = newMin.date; + this._max = newMax.date; + this._currentDate = new Date(valueDate); + this._selectedDate = new Date(valueDate); + this.#valueAsDate = new Date(valueDate); + + /** + * Always override `min` and `max` when they are set with falsy values. + */ + if (!this.max) this.max = toDateString(newMax.date); + if (!this.min) this.min = toDateString(newMin.date); + + /** + * Always override `value` when its value is not a string and dispatch `date-updated` event. + */ + if (!this.value) { + const valueStr = toDateString(valueDate); + + this.value = valueStr; + + this.fire({ + detail: { + isKeypress: false, + value: valueStr, + valueAsDate: new Date(valueDate), + valueAsNumber: +valueDate, + }, + type: 'date-updated', + }); + } + } + + if (changedProperties.has('startView')) { + const oldStartView = + (changedProperties.get('startView') || 'calendar') as StartView; + + const { + _max, + _min, + _selectedDate, + startView, + } = this; + + /** + * NOTE: Reset to old `startView` to ensure a valid value. + */ + if (!startViews.includes(startView)) { + this.startView = oldStartView; + } + + if (startView === 'calendar') { + const newSelectedYear = new Date( + clampValue( + +_min, + +_max, + +_selectedDate + ) + ); + + this._selectedDate = newSelectedYear; + } + } + + } + + protected override async firstUpdated(): Promise { + const valueAsDate = this.#valueAsDate; + + this.fire({ + detail: { + focusableElements: await this.#queryAllFocusable(), + value: toDateString(valueAsDate), + valueAsDate: new Date(valueAsDate), + valueAsNumber: +valueAsDate, + }, + type: 'first-updated', + }); + } + + protected override async updated( + changedProperties: DatePickerChangedProperties + ): Promise { + const { + _currentDate, + _max, + _min, + _navigationNext, + _navigationPrevious, + _yearDropdown, + startView, + } = this; + + /** + * NOTE: Focus `.year-dropdown` when switching from year grid to calendar view. + */ + if ( + changedProperties.get('startView') === 'yearGrid' as StartView && + startView === 'calendar' + ) { + (await _yearDropdown)?.focus(); + } + + /** + * NOTE: Focus new navigation button when navigating months with keyboard, e.g. + * next button will not show in Dec 2020 when `max=2020-12-31` so previous button should be + * focused instead. + */ + if (startView === 'calendar') { + if (changedProperties.has('_currentDate') && this.#focusNavButtonWithKey) { + isInCurrentMonth(_min, _currentDate) && focusElement(_navigationNext); + isInCurrentMonth(_max, _currentDate) && focusElement(_navigationPrevious); + + this.#focusNavButtonWithKey = false; + } + } + } + + protected override render(): TemplateResult { + const { + _currentDate, + _max, + _min, + chooseMonthLabel, + chooseYearLabel, + showWeekNumber, + startView, + } = this; + const formatters = this.#formatters; + + const { longMonthYearFormat } = formatters; + const selectedYearMonth = longMonthYearFormat(_currentDate); + const isStartViewYearGrid = startView === 'yearGrid'; + const label = isStartViewYearGrid ? chooseMonthLabel : chooseYearLabel; + + return html` +
+
+

${selectedYearMonth}

+ + ${iconArrowDropdown} +
+ + ${ + isStartViewYearGrid ? + nothing : + html` +
+ ${this.#renderNavigationButton('previous', isInCurrentMonth(_min, _currentDate))} + ${this.#renderNavigationButton('next', isInCurrentMonth(_max, _currentDate))} +
+ ` + } +
+ +
${ + (isStartViewYearGrid ? this.#renderYearGrid : this.#renderCalendar)() + }
+ `; + } + + #navigateMonth = (ev: MouseEvent): void =>{ + const currentDate = this._currentDate; + const isPreviousNavigation = ( + ev.currentTarget as HTMLButtonElement + ).getAttribute('data-navigation') === 'previous'; + + const newCurrentDate = toUTCDate( + currentDate.getUTCFullYear(), + currentDate.getUTCMonth() + (isPreviousNavigation ? -1 : 1), + 1 + ); + + this._currentDate = newCurrentDate; + + /** + * `.detail=1` means mouse click in `@click` for all browsers except IE11. + */ + this.#focusNavButtonWithKey = ev.detail === 0; + }; + + #queryAllFocusable = async () : Promise => { + const isStartViewCalendar = this.startView === 'calendar'; + const focusable = [ + ...this.queryAll(appIconButtonName), + (await (isStartViewCalendar ? this._monthCalendar : this._yearGrid)) + ?.query(`.${ + isStartViewCalendar ? 'calendar-day' : 'year-grid-button' + }[aria-selected="true"]`), + ].filter(Boolean) as HTMLElement[]; + + return focusable; + }; + + #renderCalendar = (): TemplateResult => { + const { + _currentDate, + _max, + _min, + _selectedDate, + disabledDates, + disabledDays, + firstDayOfWeek, + locale, + selectedDateLabel, + shortWeekLabel, + showWeekNumber, + todayLabel, + weekLabel, + weekNumberTemplate, + weekNumberType, + } = this; + const currentDate = _currentDate; + const formatters = this.#formatters; + const max = _max; + const min = _min; + const selectedDate = _selectedDate; + const { + dayFormat, + fullDateFormat, + longWeekdayFormat, + narrowWeekdayFormat, + } = this.#formatters; + + const weekdays = getWeekdays({ + firstDayOfWeek, + longWeekdayFormat, + narrowWeekdayFormat, + shortWeekLabel, + showWeekNumber, + weekLabel, + }); + const { + calendar: calendarMonth, + disabledDatesSet, + disabledDaysSet, + } = calendar({ + date: currentDate, + dayFormat, + disabledDates: splitString(disabledDates, toResolvedDate), + disabledDays: splitString(disabledDays, Number), + firstDayOfWeek, + fullDateFormat, + locale, + max, + min, + showWeekNumber, + weekNumberTemplate, + weekNumberType, + }); + + return html` + + `; + }; + + #renderNavigationButton = ( + navigationType: 'previous' | 'next', + shouldSkipRender = true + ): TemplateResult => { + const isPreviousNavigationType = navigationType === 'previous'; + const label = isPreviousNavigationType ? this.previousMonthLabel : this.nextMonthLabel; + + return shouldSkipRender ? + html`
` : + html` + ${isPreviousNavigationType ? iconChevronLeft : iconChevronRight} + `; + }; + + #renderYearGrid = (): TemplateResult => { + const { + _max, + _min, + _selectedDate, + selectedYearLabel, + toyearLabel, + } = this; + + return html` + + `; + }; + + #updateSelectedDate = ({ + detail: { value }, + }: CustomEvent): void => { + const selectedDate = new Date(value); + + this._selectedDate = selectedDate; + this._currentDate = new Date(selectedDate); + + /** + * Always update `value` just like other native element such as `input`. + */ + this.value = toDateString(selectedDate); + }; + + #updateStartView = (): void => { + this.startView = this.startView === 'yearGrid' ? 'calendar' : 'yearGrid'; + }; + + #updateYear = ({ + detail: { year }, + }: CustomEvent): void => { + this._currentDate = new Date(this._currentDate.setUTCFullYear(year)); + this.startView = 'calendar'; + }; +} diff --git a/src/date-picker/stylings.ts b/src/date-picker/stylings.ts new file mode 100644 index 000000000..9ae327709 --- /dev/null +++ b/src/date-picker/stylings.ts @@ -0,0 +1,106 @@ +import { css } from 'lit'; + +export const datePickerStyling = css` +:host { + --_col: 7; + --_row: 6; + + --_body-h: calc(4px + calc(32px * 7)); /** 228px */; + --_h: calc(var(--_header-h) + var(--_body-h)); /** 52 + 228 = 280 */ + --_header-h: 52px; + --_w: calc((16px * 2) + (32px * var(--_col))); /** 32 + 224 = 256 */ + + display: flex; + flex-direction: column; + + min-width: var(--date-picker-min-width, var(--_w)); + min-height: var(--date-picker-min-height, var(--_h)); + max-width: var(--date-picker-max-width, var(--_w)); + max-height: var(--date-picker-max-height, var(--_h)); + width: 100%; + height: 100%; + background-color: var(--_surface); + color: var(--_on-surface); + border-radius: var(--_shape); + overscroll-behavior: contain; +} +:host([startview="calendar"][showweeknumber]) { + --_col: 8; +} + +.header { + display: grid; + grid-auto-flow: column; + justify-content: space-between; + + min-height: var(--_header-h); + max-height: var(--_header-h); + height: 100%; + padding: 4px 0 0 24px; + border-radius: var(--_shape); + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +/** #region header */ +.month-and-year-selector { + display: flex; + align-items: center; + font-size: 13px; +} + +.selected-year-month { + margin: 0; + white-space: nowrap; +} + +.year-dropdown, +[data-navigation="previous"], +[data-navigation="next"] { + min-width: 48px; + min-height: 48px; + max-width: 48px; + max-height: 48px; + width: 48px; + height: 48px; +} + +.year-dropdown { + margin: 0 0 0 -8px; + transition: transform 300ms cubic-bezier(0, 0, .4, 1); + will-change: transform; +} +:host([startview="yearGrid"]) .year-dropdown { + transform: rotateZ(180deg); +} + +.month-pagination { + display: flex; + margin: 0 -4px 0 0; +} +/** #endregion header */ + +.body { + border-radius: var(--_shape); + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.calendar, +.year-grid { + min-height: var(--_body-h); + max-height: var(--_body-h); + height: 100%; + overflow-x: hidden; /** NOTE(rongsen): Disabling overflow-x to avoid infrequent overflowing. */ + overflow-y: auto; +} + +.calendar { + padding: 0 16px 8px; +} + +.year-grid { + padding: 4px 20px 8px 12px; + overscroll-behavior: contain; +} +`; diff --git a/src/date-picker/typings.ts b/src/date-picker/typings.ts new file mode 100644 index 000000000..b06a5dbbb --- /dev/null +++ b/src/date-picker/typings.ts @@ -0,0 +1,8 @@ +import type { ChangedProperties, DatePickerProperties } from '../typings.js'; + +export type DatePickerChangedProperties = ChangedProperties; diff --git a/src/datepicker-dialog.ts b/src/datepicker-dialog.ts deleted file mode 100644 index b7787e587..000000000 --- a/src/datepicker-dialog.ts +++ /dev/null @@ -1,378 +0,0 @@ -export interface DatepickerDialogClosed extends Pick { - opened: boolean; -} -export type DatepickerDialogOpened = DatepickerDialogClosed & DatepickerFirstUpdated; - -import '@material/mwc-button/mwc-button.js'; -import { css, html, LitElement, property, query } from 'lit-element'; - -import type { WeekNumberType } from 'nodemod/dist/calendar/calendar_typing.js'; -import { datepickerVariables } from './common-styles.js'; -import type { - DatepickerFirstUpdated, - DatepickerValueUpdated, - FocusTrap, - HTMLElementPart, - StartView, -} from './custom_typings.js'; -import { KEY_CODES_MAP } from './custom_typings.js'; -import type { Datepicker } from './datepicker.js'; -import { animateElement } from './helpers/animate-element.js'; -import { dispatchCustomEvent } from './helpers/dispatch-custom-event.js'; -import { getResolvedDate } from './helpers/get-resolved-date.js'; -import { getResolvedLocale } from './helpers/get-resolved-locale.js'; -import { setFocusTrap } from './helpers/set-focus-trap.js'; -import { toFormattedDateString } from './helpers/to-formatted-date-string.js'; - -export class DatepickerDialog extends LitElement { - static get styles() { - // tslint:disable: max-line-length - return [ - datepickerVariables, - css` - :host { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - display: none; - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - pointer-events: none; - z-index: var(--app-datepicker-dialog-z-index, 24); - -webkit-tap-highlight-color: rgba(0,0,0,0); - } - - .scrim, - .content-container { - pointer-events: auto; - } - - .scrim { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: var(--app-datepicker-dialog-scrim-bg-color, rgba(0, 0, 0, .55)); - visibility: hidden; - z-index: 22; - } - - .content-container { - position: absolute; - top: 50%; - left: 50%; - max-width: 100%; - max-height: 100%; - background-color: var(--app-datepicker-bg-color, #fff); - transform: translate3d(-50%, -50%, 0); - border-radius: var(--app-datepicker-dialog-border-radius, 8px); - will-change: transform, opacity; - overflow: hidden; - visibility: hidden; - opacity: 0; - z-index: 23; - box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14), - 0 9px 46px 8px rgba(0, 0, 0, 0.12), - 0 11px 15px -7px rgba(0, 0, 0, 0.4); - } - - .datepicker { - --app-datepicker-border-top-left-radius: 8px; - --app-datepicker-border-top-right-radius: 8px; - } - - .actions-container { - display: flex; - align-items: center; - justify-content: flex-end; - - margin: 0; - padding: 12px; - background-color: inherit; - --mdc-theme-primary: var(--app-datepicker-accent-color, #1a73e8); - } - - mwc-button[dialog-confirm] { - margin: 0 0 0 8px; - } - - .clear { - margin: 0 auto 0 0; - } - - /** - * NOTE: IE11-only fix via CSS hack. - * Visit https://bit.ly/2DEUNZu|CSS for more relevant browsers' hacks. - */ - @media screen and (-ms-high-contrast: none) { - mwc-button[dialog-dismiss] { - min-width: 10ch; - } - } - `, - ]; - // tslint:enable: max-line-length - } - - @property({ type: Number, reflect: true }) - public firstDayOfWeek: number = 0; - - @property({ type: Boolean, reflect: true }) - public showWeekNumber: boolean = false; - - @property({ type: String, reflect: true }) - public weekNumberType: WeekNumberType = 'first-4-day-week'; - - @property({ type: Boolean, reflect: true }) - public landscape: boolean = false; - - @property({ type: String, reflect: true }) - public startView: StartView = 'calendar'; - - @property({ type: String, reflect: true }) - public min?: string; - - @property({ type: String, reflect: true }) - public max?: string; - - @property({ type: String }) - public value: string = toFormattedDateString(getResolvedDate()); - - @property({ type: String }) - public locale: string = getResolvedLocale(); - - @property({ type: String }) - public disabledDays: string = ''; - - @property({ type: String }) - public disabledDates?: string; - - @property({ type: String }) - public weekLabel: string = 'Wk'; - - @property({ type: Number }) - public dragRatio: number = .15; - - @property({ type: String }) - public clearLabel: string = 'clear'; - - @property({ type: String }) - public dismissLabel: string = 'cancel'; - - @property({ type: String }) - public confirmLabel: string = 'set'; - - @property({ type: Boolean }) - public noFocusTrap: boolean = false; - - @property({ type: Boolean }) - public alwaysResetValue: boolean = false; - - @query('.content-container') - private _contentContainer?: HTMLDivElement; - - @query('mwc-button[dialog-confirm]') - private _dialogConfirm?: HTMLElement; - - private _hasNativeWebAnimation: boolean = 'animate' in HTMLElement.prototype; - private _focusable?: HTMLElement; - private _focusTrap?: FocusTrap; - private _opened: boolean = false; - - public async open(): Promise { - await this.updateComplete; - - if (this._opened) return; - - this.removeAttribute('aria-hidden'); - this.style.display = 'block'; - this._opened = true; - - if (this.alwaysResetValue && this._datepicker) this._datepicker.value = this.value; - - await this.requestUpdate(); - - const contentContainer = this._contentContainer!; - - this._scrim!.style.visibility = contentContainer.style.visibility = 'visible'; - - await animateElement(contentContainer, { - hasNativeWebAnimation: this._hasNativeWebAnimation, - keyframes: [ - { opacity: '0' }, - { opacity: '1' }, - ], - }); - - contentContainer.style.opacity = '1'; - - const focusable = this._focusable!; - - if (!this.noFocusTrap) { - this._focusTrap = setFocusTrap(this, [focusable, this._dialogConfirm!])!; - } - - focusable.focus(); - - dispatchCustomEvent(this, 'datepicker-dialog-opened', { - firstFocusableElement: focusable, - opened: true, - value: this.value, - }); - } - - public async close(): Promise { - await this.updateComplete; - - if (!this._opened) return; - - this._opened = false; - this._scrim!.style.visibility = ''; - - const contentContainer = this._contentContainer!; - - await animateElement(contentContainer, { - hasNativeWebAnimation: this._hasNativeWebAnimation, - keyframes: [ - { opacity: '1' }, - { opacity: '0' }, - ], - }); - - contentContainer.style.opacity = - contentContainer.style.visibility = ''; - - this.setAttribute('aria-hidden', 'true'); - this.style.display = 'none'; - - if (!this.noFocusTrap) this._focusTrap!.disconnect(); - - dispatchCustomEvent( - this, 'datepicker-dialog-closed', { opened: false, value: this.value }); - } - - protected shouldUpdate() { - return !this.hasAttribute('aria-hidden'); - } - - protected firstUpdated() { - this.setAttribute('role', 'dialog'); - this.setAttribute('aria-label', 'datepicker'); - this.setAttribute('aria-modal', 'true'); - this.setAttribute('aria-hidden', 'true'); - this.addEventListener('keyup', (ev: KeyboardEvent) => { - if (ev.keyCode === KEY_CODES_MAP.ESCAPE) this.close(); - }); - - dispatchCustomEvent(this, 'datepicker-dialog-first-updated', { - value: this.value, - firstFocusableElement: this._focusable!, - }); - } - - // tslint:disable-next-line: function-name - protected _getUpdateComplete() { - const datepicker = this._datepicker; - - return ( - datepicker ? datepicker.updateComplete : Promise.resolve() - ).then(() => super._getUpdateComplete()); - } - - protected render() { - return html` -
- - ${this._opened ? html`
- - -
- ${this.clearLabel} - - ${this.dismissLabel} - ${this.confirmLabel} -
-
` : null} - `; - } - - private _padStart(val: number) { - return `0${val}`.slice(-2); - } - - private _setToday() { - const today = getResolvedDate(); - const fy = today.getFullYear(); - const m = today.getMonth(); - const d = today.getDate(); - - this._datepicker!.value = [`${fy}`].concat([1 + m, d].map(this._padStart)).join('-'); - } - - private _updateValue() { - this.value = this._datepicker!.value; - } - - private _update() { - this._updateValue(); - - return this.close(); - } - - private _updateWithKey(ev: CustomEvent) { - const { isKeypress, keyCode } = ev.detail; - - if (!isKeypress || keyCode !== KEY_CODES_MAP.ENTER && keyCode !== KEY_CODES_MAP.SPACE) return; - - return this._update(); - } - - private _setFocusable(ev: CustomEvent) { - this._focusable = ev.detail && ev.detail.firstFocusableElement; - this._updateValue(); - } - - private get _datepicker() { - return this.shadowRoot!.querySelector('.datepicker'); - } - - private get _scrim() { - return this.shadowRoot!.querySelector('.scrim'); - } - -} - -declare global { - // #region HTML element type extension - interface HTMLElement { - part: HTMLElementPart; - } - // #endregion HTML element type extension - - interface HTMLElementEventMap { - 'datepicker-dialog-closed': CustomEvent; - 'datepicker-dialog-first-updated': CustomEvent; - 'datepicker-dialog-opened': CustomEvent; - } -} diff --git a/src/datepicker.ts b/src/datepicker.ts deleted file mode 100644 index 45227724f..000000000 --- a/src/datepicker.ts +++ /dev/null @@ -1,1236 +0,0 @@ -interface ParamUpdatedChanged extends Omit { - _selectedDate: Date; - _focusedDate: Date; - _startView: StartView; -} - -import { - css, - eventOptions, - html, - LitElement, - property, - query, - TemplateResult, -} from 'lit-element'; -import { cache } from 'lit-html/directives/cache.js'; -import { classMap } from 'lit-html/directives/class-map.js'; -import { repeat } from 'lit-html/directives/repeat.js'; - -import type { WeekNumberType } from 'nodemod/dist/calendar/calendar_typing.js'; -import { toUTCDate } from 'nodemod/dist/calendar/helpers/to-utc-date.js'; -import { iconChevronLeft, iconChevronRight } from './app-datepicker-icons.js'; -import { datepickerVariables, resetButton } from './common-styles.js'; -import { ALL_NAV_KEYS_SET } from './constants.js'; -import type { - DatepickerFirstUpdated, - DatepickerValueUpdated, - Formatters, - HTMLElementPart, - MonthUpdateType, - StartView, -} from './custom_typings.js'; -import { KEY_CODES_MAP } from './custom_typings.js'; -import { animateElement } from './helpers/animate-element.js'; -import { computeNextFocusedDate } from './helpers/compute-next-focus-date.js'; -import { dispatchCustomEvent } from './helpers/dispatch-custom-event.js'; -import { findShadowTarget } from './helpers/find-shadow-target.js'; -import { getDateRange } from './helpers/get-date-range.js'; -import { getFormatters } from './helpers/get-formatters.js'; -import { getMultiCalendars } from './helpers/get-multi-calendars.js'; -import { getResolvedDate } from './helpers/get-resolved-date.js'; -import { getResolvedLocale } from './helpers/get-resolved-locale.js'; -import { hasClass } from './helpers/has-class.js'; -import { isValidDate } from './helpers/is-valid-date.js'; -import { makeNumberPrecise } from './helpers/make-number-precise.js'; -import { passiveHandler } from './helpers/passive-handler.js'; -import { splitString } from './helpers/split-string.js'; -import { targetScrollTo } from './helpers/target-scroll-to.js'; -import { toFormattedDateString } from './helpers/to-formatted-date-string.js'; -import { toYearList } from './helpers/to-year-list.js'; -import { updateYearWithMinMax } from './helpers/update-year-with-min-max.js'; -import type { TrackerHandlers } from './tracker.js'; -import { Tracker } from './tracker.js'; - -export class Datepicker extends LitElement { - public static styles = [ - // tslint:disable:max-line-length - datepickerVariables, - resetButton, - css` - :host { - width: 312px; - /** NOTE: Magic number as 16:9 aspect ratio does not look good */ - /* height: calc((var(--app-datepicker-width) / .66) - var(--app-datepicker-footer-height, 56px)); */ - background-color: var(--app-datepicker-bg-color, #fff); - color: var(--app-datepicker-color, #000); - border-radius: - var(--app-datepicker-border-top-left-radius, 0) - var(--app-datepicker-border-top-right-radius, 0) - var(--app-datepicker-border-bottom-right-radius, 0) - var(--app-datepicker-border-bottom-left-radius, 0); - contain: content; - overflow: hidden; - } - :host([landscape]) { - display: flex; - - /** - */ - min-width: calc(568px - 16px * 2); - width: calc(568px - 16px * 2); - } - - .datepicker-header + .datepicker-body { - border-top: 1px solid var(--app-datepicker-separator-color, #ddd); - } - :host([landscape]) > .datepicker-header + .datepicker-body { - border-top: none; - border-left: 1px solid var(--app-datepicker-separator-color, #ddd); - } - - .datepicker-header { - display: flex; - flex-direction: column; - align-items: flex-start; - - position: relative; - padding: 16px 24px; - } - :host([landscape]) > .datepicker-header { - /** :this. + :this. */ - min-width: calc(14ch + 24px * 2); - } - - .btn__year-selector, - .btn__calendar-selector { - color: var(--app-datepicker-selector-color, rgba(0, 0, 0, .55)); - cursor: pointer; - /* outline: none; */ - } - .btn__year-selector.selected, - .btn__calendar-selector.selected { - color: currentColor; - } - - /** - * NOTE: IE11-only fix. This prevents formatted focused date from overflowing the container. - */ - .datepicker-toolbar { - width: 100%; - } - - .btn__year-selector { - font-size: 16px; - font-weight: 700; - } - .btn__calendar-selector { - font-size: 36px; - font-weight: 700; - line-height: 1; - } - - .datepicker-body { - position: relative; - width: 100%; - overflow: hidden; - } - - .datepicker-body__calendar-view { - min-height: 56px; - } - - .calendar-view__month-selector { - display: flex; - align-items: center; - - position: absolute; - top: 0; - left: 0; - width: 100%; - padding: 0 8px; - z-index: 1; - } - - .month-selector-container { - max-height: 56px; - height: 100%; - } - .month-selector-container + .month-selector-container { - margin: 0 0 0 auto; - } - - .btn__month-selector { - padding: calc((56px - 24px) / 2); - /** - * NOTE: button element contains no text, only SVG. - * No extra height will incur with such setting. - */ - line-height: 0; - } - .btn__month-selector > svg { - fill: currentColor; - } - - .calendars-container { - display: flex; - justify-content: center; - - position: relative; - top: 0; - left: calc(-100%); - width: calc(100% * 3); - transform: translateZ(0); - will-change: transform; - /** - * NOTE: Required for Pointer Events API to work on touch devices. - * Native \`pan-y\` action will be fired by the browsers since we only care about the - * horizontal direction. This is great as vertical scrolling still works even when touch - * event happens on a datepicker's calendar. - */ - touch-action: pan-y; - /* outline: none; */ - } - - .year-list-view__full-list { - max-height: calc(48px * 7); - overflow-y: auto; - - scrollbar-color: var(--app-datepicker-scrollbar-thumb-bg-color, rgba(0, 0, 0, .35)) rgba(0, 0, 0, 0); - scrollbar-width: thin; - } - .year-list-view__full-list::-webkit-scrollbar { - width: 8px; - background-color: rgba(0, 0, 0, 0); - } - .year-list-view__full-list::-webkit-scrollbar-thumb { - background-color: var(--app-datepicker-scrollbar-thumb-bg-color, rgba(0, 0, 0, .35)); - border-radius: 50px; - } - .year-list-view__full-list::-webkit-scrollbar-thumb:hover { - background-color: var(--app-datepicker-scrollbar-thumb-hover-bg-color, rgba(0, 0, 0, .5)); - } - - .calendar-weekdays > th, - .weekday-label { - color: var(--app-datepicker-weekday-color, rgba(0, 0, 0, .55)); - font-weight: 400; - transform: translateZ(0); - will-change: transform; - } - - .calendar-container, - .calendar-label, - .calendar-table { - width: 100%; - } - - .calendar-container { - position: relative; - padding: 0 16px 16px; - } - - .calendar-table { - -moz-user-select: none; - -webkit-user-select: none; - user-select: none; - - border-collapse: collapse; - border-spacing: 0; - text-align: center; - } - - .calendar-label { - display: flex; - align-items: center; - justify-content: center; - - height: 56px; - font-weight: 500; - text-align: center; - } - - .calendar-weekday, - .full-calendar__day { - position: relative; - width: calc(100% / 7); - height: 0; - padding: calc(100% / 7 / 2) 0; - outline: none; - text-align: center; - } - .full-calendar__day:not(.day--disabled):focus { - outline: #000 dotted 1px; - outline: -webkit-focus-ring-color auto 1px; - } - :host([showweeknumber]) .calendar-weekday, - :host([showweeknumber]) .full-calendar__day { - width: calc(100% / 8); - padding-top: calc(100% / 8); - padding-bottom: 0; - } - :host([showweeknumber]) th.weekday-label { - padding: 0; - } - - /** - * NOTE: Interesting fact! That is ::after will trigger paint when dragging. This will trigger - * layout and paint on **ONLY** affected nodes. This is much cheaper as compared to rendering - * all :::after of all calendar day elements. When dragging the entire calendar container, - * because of all layout and paint trigger on each and every ::after, this becomes a expensive - * task for the browsers especially on low-end devices. Even though animating opacity is much - * cheaper, the technique does not work here. Adding 'will-change' will further reduce overall - * painting at the expense of memory consumption as many cells in a table has been promoted - * a its own layer. - */ - .full-calendar__day:not(.day--empty):not(.day--disabled):not(.weekday-label) { - transform: translateZ(0); - will-change: transform; - } - .full-calendar__day:not(.day--empty):not(.day--disabled):not(.weekday-label).day--focused::after, - .full-calendar__day:not(.day--empty):not(.day--disabled):not(.day--focused):not(.weekday-label):hover::after { - content: ''; - display: block; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: var(--app-datepicker-accent-color, #1a73e8); - border-radius: 50%; - opacity: 0; - pointer-events: none; - } - .full-calendar__day:not(.day--empty):not(.day--disabled):not(.weekday-label) { - cursor: pointer; - pointer-events: auto; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - } - .full-calendar__day.day--focused:not(.day--empty):not(.day--disabled):not(.weekday-label)::after, - .full-calendar__day.day--today.day--focused:not(.day--empty):not(.day--disabled):not(.weekday-label)::after { - opacity: 1; - } - - .calendar-weekday > .weekday, - .full-calendar__day > .calendar-day { - display: flex; - align-items: center; - justify-content: center; - - position: absolute; - top: 5%; - left: 5%; - width: 90%; - height: 90%; - color: currentColor; - font-size: 14px; - pointer-events: none; - z-index: 1; - } - .full-calendar__day.day--today { - color: var(--app-datepicker-accent-color, #1a73e8); - } - .full-calendar__day.day--focused, - .full-calendar__day.day--today.day--focused { - color: var(--app-datepicker-focused-day-color, #fff); - } - .full-calendar__day.day--empty, - .full-calendar__day.weekday-label, - .full-calendar__day.day--disabled > .calendar-day { - pointer-events: none; - } - .full-calendar__day.day--disabled:not(.day--today) { - color: var(--app-datepicker-disabled-day-color, rgba(0, 0, 0, .55)); - } - - .year-list-view__list-item { - position: relative; - width: 100%; - padding: 12px 16px; - text-align: center; - /** NOTE: Reduce paint when hovering and scrolling, but this increases memory usage */ - /* will-change: opacity; */ - /* outline: none; */ - } - .year-list-view__list-item::after { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: var(--app-datepicker-focused-year-bg-color, #000); - opacity: 0; - pointer-events: none; - } - .year-list-view__list-item:focus::after { - opacity: .05; - } - .year-list-view__list-item.year--selected { - color: var(--app-datepicker-accent-color, #1a73e8); - font-size: 24px; - font-weight: 500; - } - - @media (any-hover: hover) { - .btn__month-selector:hover, - .year-list-view__list-item:hover { - cursor: pointer; - } - .full-calendar__day:not(.day--empty):not(.day--disabled):not(.day--focused):not(.weekday-label):hover::after { - opacity: .15; - } - .year-list-view__list-item:hover::after { - opacity: .05; - } - } - - @supports (background: -webkit-canvas(squares)) { - .calendar-container { - padding: 56px 16px 16px; - } - - table > caption { - position: absolute; - top: 0; - left: 50%; - transform: translate3d(-50%, 0, 0); - will-change: transform; - } - } - `, - // tslint:enable:max-line-length - ]; - - @property({ type: Number, reflect: true }) - public firstDayOfWeek: number = 0; - - @property({ type: Boolean, reflect: true }) - public showWeekNumber: boolean = false; - - @property({ type: String, reflect: true }) - public weekNumberType: WeekNumberType = 'first-4-day-week'; - - @property({ type: Boolean, reflect: true }) - public landscape: boolean = false; - - @property({ type: String, reflect: true }) - public get startView() { - return this._startView!; - } - public set startView(val: StartView) { - /** - * NOTE: Defaults to `START_VIEW.CALENDAR` when `val` is falsy. - */ - const defaultVal: StartView = !val ? 'calendar' : val; - - /** - * NOTE: No-op when `val` is not falsy and not valid accepted values. - */ - if (defaultVal !== 'calendar' && defaultVal !== 'yearList') return; - - const oldVal = this._startView; - - this._startView = defaultVal; - this.requestUpdate('startView', oldVal); - } - - @property({ type: String, reflect: true }) - public get min() { - return this._hasMin ? toFormattedDateString(this._min!) : ''; - } - public set min(val: string) { - const valDate = getResolvedDate(val); - const isValidMin = isValidDate(val, valDate); - - this._min = isValidMin ? valDate : this._todayDate; - this._hasMin = isValidMin; - this.requestUpdate('min'); - } - - @property({ type: String, reflect: true }) - public get max() { - return this._hasMax ? toFormattedDateString(this._max!) : ''; - } - public set max(val: string) { - const valDate = getResolvedDate(val); - const isValidMax = isValidDate(val, valDate); - - this._max = isValidMax ? valDate : this._maxDate; - this._hasMax = isValidMax; - this.requestUpdate('max'); - } - - @property({ type: String }) - public get value() { - return toFormattedDateString(this._focusedDate); - } - public set value(val: string) { - const valDate = getResolvedDate(val); - const validValue = isValidDate(val, valDate) ? valDate : this._todayDate; - - this._focusedDate = new Date(validValue); - this._selectedDate = this._lastSelectedDate = new Date(validValue); - // this.valueAsDate = newDate; - // this.valueAsNumber = +newDate; - } - - @property({ type: String }) - public locale: string = getResolvedLocale(); - - @property({ type: String }) - public disabledDays: string = ''; - - @property({ type: String }) - public disabledDates: string = ''; - - @property({ type: String }) - public weekLabel: string = 'Wk'; - - @property({ type: Boolean }) - public inline: boolean = false; - - @property({ type: Number }) - public dragRatio: number = .15; - - public get datepickerBodyCalendarView() { - return this.shadowRoot!.querySelector('.datepicker-body__calendar-view'); - } - - public get calendarsContainer() { - return this.shadowRoot!.querySelector('.calendars-container'); - } - - @property({ type: Date, attribute: false }) - private _selectedDate: Date; - - @property({ type: Date, attribute: false }) - private _focusedDate: Date; - - @property({ type: String, attribute: false }) - private _startView?: StartView; - - @query('.year-list-view__full-list') - private _yearViewFullList?: HTMLDivElement; - - @query('.btn__year-selector') - private _buttonSelectorYear?: HTMLButtonElement; - - @query('.year-list-view__list-item') - private _yearViewListItem?: HTMLButtonElement; - - private _min: Date; - private _max: Date; - private _hasMin: boolean = false; - private _hasMax: boolean = false; - private _todayDate: Date; - private _maxDate: Date; - private _yearList: number[]; - private _formatters: Formatters; - private _disabledDaysSet: Set = new Set(); - private _disabledDatesSet: Set = new Set(); - private _lastSelectedDate?: Date; - private _tracker?: Tracker; - private _dx: number = -Infinity; - private _hasNativeWebAnimation: boolean = 'animate' in HTMLElement.prototype; - private _updatingDateWithKey: boolean = false; - - public constructor() { - super(); - - const todayDate = getResolvedDate(); - const allFormatters = getFormatters(this.locale); - const formattedTodayDate = toFormattedDateString(todayDate); - const max = getResolvedDate('2100-12-31'); - - this.value = formattedTodayDate; - this.startView = 'calendar'; - - this._min = new Date(todayDate); - this._max = new Date(max); - this._todayDate = todayDate; - this._maxDate = max; - this._yearList = toYearList(todayDate, max); - this._selectedDate = new Date(todayDate); - this._focusedDate = new Date(todayDate); - this._formatters = allFormatters; - } - - public disconnectedCallback() { - super.disconnectedCallback(); - - if (this._tracker) { - this._tracker.disconnect(); - this._tracker = undefined; - } - } - - protected render() { - /** - * NOTE: Update `_formatters` when `locale` changes. - */ - if (this._formatters.locale !== this.locale) this._formatters = getFormatters(this.locale); - - /** - * NOTE(motss): For perf reason, initialize all formatters for calendar rendering - */ - const datepickerBodyContent: TemplateResult = - 'yearList' === this._startView ? - this._renderDatepickerYearList() : this._renderDatepickerCalendar(); - const datepickerHeaderContent: null | TemplateResult = this.inline ? - null : - html`
${ - this._renderHeaderSelectorButton() - }
`; - - return html` - ${datepickerHeaderContent} -
${cache(datepickerBodyContent)}
- `; - } - - protected firstUpdated() { - let firstFocusableElement: HTMLElement; - - if ('calendar' === this._startView) { - firstFocusableElement = ( - this.inline ? - this.shadowRoot!.querySelector('.btn__month-selector') : - this._buttonSelectorYear - )!; - } else { - firstFocusableElement = this._yearViewListItem!; - } - - dispatchCustomEvent( - this, 'datepicker-first-updated', { firstFocusableElement, value: this.value }); - } - - protected updated(changed: Map) { - const startView = this._startView; - - if (changed.has('min') || changed.has('max')) { - this._yearList = toYearList(this._min, this._max); - - if ('yearList' === startView) this.requestUpdate(); - - /** - * Reset 'value' when 'value' is not withing the date range. - * - * 1. Check if there is valid date range which has >= 1 day - * 2. Check if 'value' < 'min'. If true, set to 'min'. Else, proceed to 3.. - * 3. Check if 'value' > 'max'. If true, set to 'max'. - */ - const minTime = +this._min; - const maxTime = +this._max; - - if (getDateRange(minTime, maxTime) > 864e5) { - const focusedDateTime = +this._focusedDate; - - let newValue = focusedDateTime; - - if (focusedDateTime < minTime) newValue = minTime; - if (focusedDateTime > maxTime) newValue = maxTime; - - this.value = toFormattedDateString(new Date(newValue)); - } - } - - if (changed.has('_startView') || changed.has('startView')) { - if ('yearList' === startView) { - const selectedYearScrollTop = - 48 * (this._selectedDate.getUTCFullYear() - this._min.getUTCFullYear() - 2); - - targetScrollTo(this._yearViewFullList!, { top: selectedYearScrollTop, left: 0 }); - } - - if ('calendar' === startView && null == this._tracker) { - const calendarsContainer = this.calendarsContainer; - - let $down = false; - let $move = false; - let $transitioning = false; - - if (calendarsContainer) { - const handlers: TrackerHandlers = { - down: () => { - if ($transitioning) return; - - $down = true; - this._dx = 0; - }, - move : (pointer, oldPointer) => { - if ($transitioning || !$down) return; - - const dx = this._dx; - const hasMin = - (dx < 0 && hasClass(calendarsContainer, 'has-max-date')) || - (dx > 0 && hasClass(calendarsContainer, 'has-min-date')); - - if (!hasMin && Math.abs(dx) > 0 && $down) { - $move = true; - calendarsContainer.style.transform = `translateX(${makeNumberPrecise(dx)}px)`; - } - - this._dx = hasMin ? 0 : dx + (pointer.x - oldPointer.x); - }, - up: async (_$, _$$, ev) => { - if ($down && $move) { - const dx = this._dx; - const maxWidth = calendarsContainer.getBoundingClientRect().width / 3; - const didPassThreshold = Math.abs(dx) > (Number(this.dragRatio) * maxWidth); - const transitionDuration = 350; - const transitionEasing = 'cubic-bezier(0, 0, .4, 1)'; - const transformTo = - didPassThreshold ? makeNumberPrecise(maxWidth * (dx < 0 ? -1 : 1)) : 0; - - $transitioning = true; - - await animateElement(calendarsContainer, { - hasNativeWebAnimation: this._hasNativeWebAnimation, - keyframes: [ - { transform: `translateX(${dx}px)` }, - { - transform: `translateX(${transformTo}px)`, - }, - ], - options: { - duration: transitionDuration, - easing: transitionEasing, - }, - }); - - if (didPassThreshold) { - this._updateMonth(dx < 0 ? 'next' : 'previous').handleEvent(); - } - - $down = $move = $transitioning = false; - this._dx = -Infinity; - - calendarsContainer.removeAttribute('style'); - dispatchCustomEvent(this, 'datepicker-animation-finished'); - } else if ($down) { - this._updateFocusedDate(ev as MouseEvent); - - $down = $move = false; - this._dx = -Infinity; - } - }, - }; - - this._tracker = new Tracker(calendarsContainer, handlers); - } - } - - /** - * When `_startView` is previously defined which means not first updated but switching from - * another view, focus year selector button. - */ - if (changed.get('_startView') && 'calendar' === startView) { - this._focusElement('[part="year-selector"]'); - } - } - - /** - * Focus to new focused date when updating with keyboard. - * It is to provide better support for screen reader. - */ - if (this._updatingDateWithKey) { - this._focusElement('[part="calendars"]:nth-of-type(2) .day--focused'); - this._updatingDateWithKey = false; - } - } - - private _focusElement(selector: string) { - const focusedTarget = this.shadowRoot!.querySelector(selector); - - if (focusedTarget) focusedTarget.focus(); - } - - private _renderHeaderSelectorButton() { - const { yearFormat, dateFormat } = this._formatters!; - const isCalendarView = this.startView === 'calendar'; - const focusedDate = this._focusedDate; - const formattedDate = dateFormat(focusedDate); - const formatterFy = yearFormat(focusedDate); - - return html` - - -
- -
- `; - } - - private _renderDatepickerYearList() { - const { yearFormat } = this._formatters; - const focusedDateFy = this._focusedDate.getUTCFullYear(); - - return html` -
-
- ${this._yearList.map(n => - html``) - }
-
- `; - } - - private _renderDatepickerCalendar() { - const { - longMonthYearFormat, - dayFormat, - fullDateFormat, - longWeekdayFormat, - narrowWeekdayFormat, - } = this._formatters; - const disabledDays = splitString(this.disabledDays, Number); - const disabledDates = splitString(this.disabledDates, getResolvedDate); - const showWeekNumber = this.showWeekNumber; - const $focusedDate = this._focusedDate; - const firstDayOfWeek = this.firstDayOfWeek; - const todayDate = getResolvedDate(); - const $selectedDate = this._selectedDate; - const $max = this._max; - const $min = this._min; - - const { calendars, disabledDaysSet, disabledDatesSet, weekdays } = getMultiCalendars({ - dayFormat, - fullDateFormat, - longWeekdayFormat, - narrowWeekdayFormat, - firstDayOfWeek, - - disabledDays, - disabledDates, - locale: this.locale, - selectedDate: $selectedDate, - showWeekNumber: this.showWeekNumber, - weekNumberType: this.weekNumberType, - max: $max, - min: $min, - weekLabel: this.weekLabel, - }); - const hasMinDate = !calendars[0].calendar.length; - const hasMaxDate = !calendars[2].calendar.length; - - const weekdaysContent = weekdays.map( - o => html` -
${o.value}
- ` - ); - const calendarsContent = repeat(calendars, n => n.key, ({ calendar }, ci) => { - if (!calendar.length) { - return html`
`; - } - - const calendarAriaId = `calendarcaption${ci}`; - const midCalendarFullDate = calendar[1][1].fullDate; - const isMidCalendar = ci === 1; - const $newFocusedDate: Date = - isMidCalendar && !this._isInVisibleMonth($focusedDate, $selectedDate) ? - computeNextFocusedDate({ - disabledDaysSet, - disabledDatesSet, - hasAltKey: false, - keyCode: KEY_CODES_MAP.HOME, - focusedDate: $focusedDate, - selectedDate: $selectedDate, - minTime: +$min, - maxTime: +$max, - }) : - $focusedDate; - - return html` -
- - - - - ${weekdaysContent} - - - ${ - calendar.map((calendarRow) => { - return html`${ - calendarRow.map((calendarCol, i) => { - const { disabled, fullDate, label, value } = calendarCol; - - /** Week label, if any */ - if (!fullDate && value && showWeekNumber && i < 1) { - return html``; - } - - /** Empty day */ - if (!value || !fullDate) { - return html``; - } - - const curTime = +new Date(fullDate); - const isCurrentDate = +$focusedDate === curTime; - const shouldTab = isMidCalendar && $newFocusedDate.getUTCDate() === Number(value); - - return html` - - `; - }) - }`; - }) - } -
-
${ - midCalendarFullDate ? longMonthYearFormat(midCalendarFullDate) : '' - }
-
${value} -
${value}
-
-
- `; - }); - - /** NOTE: Updates disabled dates and days with computed Sets. */ - this._disabledDatesSet = disabledDatesSet; - this._disabledDaysSet = disabledDaysSet; - - /** - * FIXME(motss): Allow users to customize the aria-label for accessibility and i18n reason. - */ - return html` -
-
-
${hasMinDate ? null : html` - - `}
- -
${hasMaxDate ? null : html` - - `}
-
- -
${calendarsContent}
-
- `; - } - - private _updateView(view: StartView) { - const handleUpdateView = () => { - if ('calendar' === view) { - this._selectedDate = this._lastSelectedDate = - new Date(updateYearWithMinMax(this._focusedDate, this._min, this._max)); - } - - this._startView = view; - }; - - return passiveHandler(handleUpdateView); - } - - private _updateMonth(updateType: MonthUpdateType) { - const handleUpdateMonth = () => { - const calendarsContainer = this.calendarsContainer; - - if (null == calendarsContainer) return this.updateComplete; - - const dateDate = this._lastSelectedDate || this._selectedDate; - const minDate = this._min; - const maxDate = this._max; - - const isPreviousMonth = updateType === 'previous'; - - const newSelectedDate = toUTCDate( - dateDate.getUTCFullYear(), - dateDate.getUTCMonth() + (isPreviousMonth ? -1 : 1), - 1); - const newSelectedDateFy = newSelectedDate.getUTCFullYear(); - const newSelectedDateM = newSelectedDate.getUTCMonth(); - - const minDateFy = minDate.getUTCFullYear(); - const minDateM = minDate.getUTCMonth(); - - const maxDateFy = maxDate.getUTCFullYear(); - const maxDateM = maxDate.getUTCMonth(); - - /** - * NOTE: Instead of debouncing/ throttling the animation when switching between - * calendar months, this prevents subsequent animation that can cause an issue - * where a blank calendar comes into view to be queued by ensuring the new updated - * selected date's month always fall between the defined `_min` and `_max` values. - * Not only does it prevents the aforementioned issue but also avoid adding too much - * delay in between animations. Happy spamming the animations as you wish! 😄 🎉 - */ - const isLessThanYearAndMonth = newSelectedDateFy < minDateFy || - (newSelectedDateFy <= minDateFy && newSelectedDateM < minDateM); - const isMoreThanYearAndMonth = newSelectedDateFy > maxDateFy || - (newSelectedDateFy >= maxDateFy && newSelectedDateM > maxDateM); - if (isLessThanYearAndMonth || isMoreThanYearAndMonth) return this.updateComplete; - - /** - * NOTE: This improves spamming animations via gestures but relying on another property - * to keep track of the last/ latest selected date so that when you spam click on - * the navigate next button 3 times, based on the expected mental model and behavior, - * the calendar month should switch 3 times, e.g. Jan 2020 -> 3 clicks -> Apr 2020. - */ - this._lastSelectedDate = newSelectedDate; - this._selectedDate = this._lastSelectedDate!; - - return this.updateComplete; - }; - - return passiveHandler(handleUpdateMonth); - } - - @eventOptions({ passive: true }) - private _updateYear(ev: MouseEvent) { - const selectedYearEl = findShadowTarget( - ev, - (n: HTMLElement) => hasClass(n, 'year-list-view__list-item') - ); - - if (selectedYearEl == null) return; - - /** - * 2 things to do here: - * - Update `_selectedDate` and `_focusedDate` with update `year` value of old focused date - * - Update `_startView` to `START_VIEW.CALENDAR` - */ - - const newFocusedDate = updateYearWithMinMax( - new Date(this._focusedDate).setUTCFullYear(+selectedYearEl.year), - this._min, - this._max - ); - - this._selectedDate = this._lastSelectedDate = new Date(newFocusedDate); - this._focusedDate = new Date(newFocusedDate); - this._startView = 'calendar'; - } - - private _updateFocusedDate(ev: MouseEvent) { - const selectedDayEl = findShadowTarget( - ev, - (n: HTMLElement) => hasClass(n, 'full-calendar__day') - ); - - /** NOTE: Required condition check else these will trigger unwanted re-rendering */ - if (selectedDayEl == null || - [ - 'day--empty', - 'day--disabled', - 'day--focused', - 'weekday-label', - ].some(n => hasClass(selectedDayEl, n))) return; - - this._focusedDate = new Date(selectedDayEl.fullDate); - - dispatchCustomEvent(this, 'datepicker-value-updated', { - isKeypress: false, - value: this.value, - }); - } - - // Left Move focus to the previous day. Will move to the last day of the previous month, - // if the current day is the first day of a month. - // Right Move focus to the next day. Will move to the first day of the following month, - // if the current day is the last day of a month. - // Up Move focus to the same day of the previous week. - // Will wrap to the appropriate day in the previous month. - // Down Move focus to the same day of the following week. - // Will wrap to the appropriate day in the following month. - // PgUp Move focus to the same date of the previous month. If that date does not exist, - // focus is placed on the last day of the month. - // PgDn Move focus to the same date of the following month. If that date does not exist, - // focus is placed on the last day of the month. - // Alt+PgUp Move focus to the same date of the previous year. - // If that date does not exist (e.g leap year), focus is placed on the last day of the month. - // Alt+PgDn Move focus to the same date of the following year. - // If that date does not exist (e.g leap year), focus is placed on the last day of the month. - // Home Move to the first day of the month. - // End Move to the last day of the month - // Tab / Shift+Tab If the datepicker is in modal mode, navigate between calender grid and - // close/previous/next selection buttons, otherwise move to the field following/preceding the - // date textbox associated with the datepicker - // Enter / Space Fill the date textbox with the selected date then close the datepicker widget. - @eventOptions({ passive: true }) - private _updateFocusedDateWithKeyboard(ev: KeyboardEvent) { - const keyCode = ev.keyCode; - - /** NOTE: Skip updating and fire an event to notify of updated focused date. */ - if (KEY_CODES_MAP.ENTER === keyCode || KEY_CODES_MAP.SPACE === keyCode) { - dispatchCustomEvent(this, 'datepicker-value-updated', { - keyCode, - - isKeypress: true, - value: this.value, - }); - - /** - * Always update focused date to avoid the following scenario: - * - * 1. Navigate to March 2020 via mouse clicks - * 2. Click to select '2020-03-30' - * 3. Navigate to February 2020 via mouse clicks - * 4. Tab to first focusable calendar day and hit Enter or Space - * 5. Focused date should update to first focusable calendar day instead of '2020-03-20' - */ - this._focusedDate = new Date(this._selectedDate); - - return; - } - - /** NOTE: Skip for TAB key and other non-related keys */ - if (keyCode === KEY_CODES_MAP.TAB || !ALL_NAV_KEYS_SET.has(keyCode)) return; - - const selectedDate = this._selectedDate; - const nextFocusedDate = computeNextFocusedDate({ - keyCode, - selectedDate, - - disabledDatesSet: this._disabledDatesSet, - disabledDaysSet: this._disabledDaysSet, - focusedDate: this._focusedDate, - hasAltKey: ev.altKey, - maxTime: +this._max, - minTime: +this._min, - }); - - /** - * NOTE: Update `_selectedDate` and `_lastSelectedDate` if - * new focused date is no longer in the same month or year. - */ - if (!this._isInVisibleMonth(nextFocusedDate, selectedDate)) { - this._selectedDate = this._lastSelectedDate = nextFocusedDate; - } - - this._focusedDate = nextFocusedDate; - this._updatingDateWithKey = true; - - dispatchCustomEvent(this, 'datepicker-value-updated', { - keyCode, - - isKeypress: true, - value: this.value, - }); - } - - private _isInVisibleMonth(dateA: Date, dateB: Date) { - const dateAFy = dateA.getUTCFullYear(); - const dateAM = dateA.getUTCMonth(); - const dateBFY = dateB.getUTCFullYear(); - const dateBM = dateB.getUTCMonth(); - - return dateAFy === dateBFY && dateAM === dateBM; - } - -} - -declare global { - // #region HTML element type extensions - interface HTMLButtonElement { - year: number; - } - - interface HTMLElement { - part: HTMLElementPart; - } - - interface HTMLTableCellElement { - day: string; - fullDate: Date; - } - // #endregion HTML element type extensions - - interface HTMLElementEventMap { - 'datepicker-first-updated': CustomEvent; - 'datepicker-animation-finished': CustomEvent; - 'datepicker-value-updated': CustomEvent; - } -} - -// FIXED: To look into `passive` event listener option in future. -// FIXED: To reflect value on certain properties according to specs/ browser impl: min, max, value. -// FIXED: `disabledDates` are not supported -// FIXED: Updating `min` via attribute or property breaks entire UI -// FIXED: To improve date navigation using keyboard. Disabled date are selectable with Left, Right -// arrows. -// FIXED: To add support for labels such week number for better i18n -// FIXED: To fix hardcoded `_yearList` when `min` has no initial value. -// FIXED: PgUp/ PgDown on new date that does not exist should fallback to last day of month. -// FIXED: Update year should update `_lastSelectedDate` -// FIXED: Showing blank calendar when updating year -// FIXED: Buggy condition check for max date when updating month -// FIXED: Gestures are broken on landscape mode. -// FIXED: `landscape` attribute breaks layout. -// FIXED: Do not update focused date while dragging/ swiping calendar -// FIXED: app-datepicker's initial-render.spec.ts fails for unknown reason -// FIXED: `disabledDays` is broken with `firstDayOfWeek` -// FIXED: When a new property is set, it re-renders the calendar to last focused date but -// FIXED: Add test for custom events never updates the selected date -// FIXED: Replace Web Animations for better support for animations on older browsers. -// FIXED: Keyboard navigate to next month (Mar) and click on left arrow, (Jan) is shown. -// FIXED: To finalize cases where focused date does not exist in current month for each key pressed -// TODO: To support `valueAsDate` and `valueAsNumber`. -// TODO: To support RTL layout. diff --git a/src/helpers/animate-element.ts b/src/helpers/animate-element.ts deleted file mode 100644 index 4f498b626..000000000 --- a/src/helpers/animate-element.ts +++ /dev/null @@ -1,41 +0,0 @@ -interface AnimateElementOptions { - hasNativeWebAnimation?: boolean; - keyframes?: Keyframe[]; - options?: KeyframeAnimationOptions; -} - -export async function animateElement( - node: HTMLElement, - opts: AnimateElementOptions -): Promise { - const { - hasNativeWebAnimation = false, - keyframes = [], - options = { duration: 100 }, - } = opts || {}; - - if (!Array.isArray(keyframes) || !keyframes.length) return; - - return new Promise((y) => { - if (hasNativeWebAnimation) { - const animationEnd = node.animate(keyframes, options); - - animationEnd.onfinish = () => y(); - } else { - const [, endFrame] = keyframes || []; - const transitionEnd = () => { - node.removeEventListener('transitionend', transitionEnd); - y(); - }; - - node.addEventListener('transitionend', transitionEnd); - node.style.transitionDuration = `${options.duration}ms`; - - if (options.easing) node.style.transitionTimingFunction = options.easing; - - Object.keys(endFrame).forEach((n) => { - if (n) (node.style as any)[n] = endFrame[n]; - }); - } - }); -} diff --git a/src/helpers/clamp-value.ts b/src/helpers/clamp-value.ts new file mode 100644 index 000000000..a719c10cb --- /dev/null +++ b/src/helpers/clamp-value.ts @@ -0,0 +1,10 @@ +export function clampValue( + min: number, + max: number, + value: number +): number { + return Math.min( + Math.max(min, value), + max + ); +} diff --git a/src/helpers/custom-elements-define.ts b/src/helpers/custom-elements-define.ts deleted file mode 100644 index 223b192bf..000000000 --- a/src/helpers/custom-elements-define.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function customElementsDefine(tagName: string, baseClass: T) { - if (window.customElements && !window.customElements.get(tagName)) { - window.customElements.define(tagName, baseClass as unknown as any); - } -} diff --git a/src/helpers/date-validator.ts b/src/helpers/date-validator.ts new file mode 100644 index 000000000..19afa5206 --- /dev/null +++ b/src/helpers/date-validator.ts @@ -0,0 +1,12 @@ +import { toResolvedDate } from './to-resolved-date.js'; +import type { DateValidatorResult, MaybeDate } from './typings.js'; + +export function dateValidator(value: MaybeDate, defaultDate: Date): DateValidatorResult { + const dateDate = toResolvedDate(value); + const isValid = !Number.isNaN(+dateDate); + + return { + date: isValid ? dateDate : defaultDate, + isValid, + }; +} diff --git a/src/helpers/dispatch-custom-event.ts b/src/helpers/dispatch-custom-event.ts deleted file mode 100644 index 5e571b2a1..000000000 --- a/src/helpers/dispatch-custom-event.ts +++ /dev/null @@ -1,11 +0,0 @@ -export function dispatchCustomEvent( - target: HTMLElement, - eventName: string, - detail?: T -) { - return target.dispatchEvent(new CustomEvent(eventName, { - detail, - bubbles: true, - composed: true, - })); -} diff --git a/src/helpers/find-shadow-target.ts b/src/helpers/find-shadow-target.ts deleted file mode 100644 index 839226508..000000000 --- a/src/helpers/find-shadow-target.ts +++ /dev/null @@ -1,11 +0,0 @@ -type AnyEventType = CustomEvent | KeyboardEvent | MouseEvent | PointerEvent; - -export function findShadowTarget( - ev: AnyEventType, - callback: (n: HTMLElement) => boolean -): T { - return (ev.composedPath() as HTMLElement[]).find((n) => { - if (n instanceof HTMLElement) return callback(n); - return false; - }) as T; -} diff --git a/src/helpers/focus-element.ts b/src/helpers/focus-element.ts new file mode 100644 index 000000000..90c7f2b93 --- /dev/null +++ b/src/helpers/focus-element.ts @@ -0,0 +1,13 @@ +export async function focusElement( + asyncSelector: Promise, + thenCallback?: (element: NonNullable) => void | Promise +): Promise { + const resolvedElement = await asyncSelector; + + if (resolvedElement) { + resolvedElement.focus(); + thenCallback?.(resolvedElement as NonNullable); + } + + return resolvedElement; +} diff --git a/src/helpers/get-date-range.ts b/src/helpers/get-date-range.ts deleted file mode 100644 index 9f6411171..000000000 --- a/src/helpers/get-date-range.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function getDateRange(min: number | Date, max: number | Date): number { - return +max - +min; -} diff --git a/src/helpers/get-formatters.ts b/src/helpers/get-formatters.ts deleted file mode 100644 index 7d06eb165..000000000 --- a/src/helpers/get-formatters.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { getFormatter } from 'nodemod/dist/calendar/get-formatter.js'; -import { INTL_DATE_TIME_FORMAT } from '../constants.js'; -import type { Formatters } from '../custom_typings.js'; - -export function getFormatters(locale: string): Formatters { - const dateFmt = INTL_DATE_TIME_FORMAT(locale, { - timeZone: 'UTC', - weekday: 'short', - month: 'short', - day: 'numeric', - }); - const dayFmt = INTL_DATE_TIME_FORMAT(locale, { timeZone: 'UTC', day: 'numeric' }); - const fullDateFmt = INTL_DATE_TIME_FORMAT(locale, { - timeZone: 'UTC', - year: 'numeric', - month: 'short', - day: 'numeric', - }); - const longMonthYearFmt = INTL_DATE_TIME_FORMAT(locale, { - timeZone: 'UTC', - year: 'numeric', - month: 'long', - }); - const longWeekdayFmt = INTL_DATE_TIME_FORMAT(locale, { timeZone: 'UTC', weekday: 'long' }); - const narrowWeekdayFmt = INTL_DATE_TIME_FORMAT(locale, { timeZone: 'UTC', weekday: 'narrow' }); - const yearFmt = INTL_DATE_TIME_FORMAT(locale, { timeZone: 'UTC', year: 'numeric' }); - - return { - locale, - - dateFormat: getFormatter(dateFmt), - dayFormat: getFormatter(dayFmt), - fullDateFormat: getFormatter(fullDateFmt), - longMonthYearFormat: getFormatter(longMonthYearFmt), - longWeekdayFormat: getFormatter(longWeekdayFmt), - narrowWeekdayFormat: getFormatter(narrowWeekdayFmt), - yearFormat: getFormatter(yearFmt), - }; -} diff --git a/src/helpers/get-resolved-locale.ts b/src/helpers/get-resolved-locale.ts deleted file mode 100644 index 7eb8d9814..000000000 --- a/src/helpers/get-resolved-locale.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { INTL_DATE_TIME_FORMAT } from '../constants.js'; - -export function getResolvedLocale() { - return ( - INTL_DATE_TIME_FORMAT && - INTL_DATE_TIME_FORMAT().resolvedOptions && - INTL_DATE_TIME_FORMAT().resolvedOptions().locale - ) || 'en-US'; -} diff --git a/src/helpers/get-selectable-date.ts b/src/helpers/get-selectable-date.ts deleted file mode 100644 index 83b516fe8..000000000 --- a/src/helpers/get-selectable-date.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { toUTCDate } from 'nodemod/dist/calendar/helpers/to-utc-date.js'; -import { NEXT_DAY_KEY_CODES_SET, PREV_DAY_KEY_CODES_SET } from '../constants.js'; -import { getDateRange } from './get-date-range.js'; - -interface ParamsGetNextSelectableDate { - keyCode: KeyboardEvent['keyCode']; - disabledDaysSet: Set; - disabledDatesSet: Set; - focusedDate: Date; - maxTime: number; - minTime: number; -} - -export function getNextSelectableDate({ - keyCode, - disabledDaysSet, - disabledDatesSet, - focusedDate, - maxTime, - minTime, -}: ParamsGetNextSelectableDate): Date { - const focusedDateTime = +focusedDate; - - let isLessThanMinTime = focusedDateTime < minTime; - let isMoreThanMaxTime = focusedDateTime > maxTime; - - // Bail when there is no valid date range (< 1 day). - if (getDateRange(minTime, maxTime) < 864e5) return focusedDate; - - let isDisabledDay = - isLessThanMinTime || - isMoreThanMaxTime || - disabledDaysSet.has((focusedDate as Date).getUTCDay()) || - disabledDatesSet.has(focusedDateTime); - - if (!isDisabledDay) return focusedDate; - - let selectableFocusedDateTime = 0; - let selectableFocusedDate = isLessThanMinTime === isMoreThanMaxTime ? - focusedDate : new Date(isLessThanMinTime ? minTime - 864e5 : 864e5 + maxTime); - - const fy = selectableFocusedDate.getUTCFullYear(); - const m = selectableFocusedDate.getUTCMonth(); - let d = selectableFocusedDate.getUTCDate(); - - while (isDisabledDay) { - if (isLessThanMinTime || (!isMoreThanMaxTime && NEXT_DAY_KEY_CODES_SET.has(keyCode))) d += 1; - if (isMoreThanMaxTime || (!isLessThanMinTime && PREV_DAY_KEY_CODES_SET.has(keyCode))) d -= 1; - - selectableFocusedDate = toUTCDate(fy, m, d); - selectableFocusedDateTime = +selectableFocusedDate; - - if (!isLessThanMinTime) { - isLessThanMinTime = selectableFocusedDateTime < minTime; - - if (isLessThanMinTime) { - selectableFocusedDate = new Date(minTime); - selectableFocusedDateTime = +selectableFocusedDate; - d = selectableFocusedDate.getUTCDate(); - } - } - - if (!isMoreThanMaxTime) { - isMoreThanMaxTime = selectableFocusedDateTime > maxTime; - - if (isMoreThanMaxTime) { - selectableFocusedDate = new Date(maxTime); - selectableFocusedDateTime = +selectableFocusedDate; - d = selectableFocusedDate.getUTCDate(); - } - } - - isDisabledDay = - disabledDaysSet.has(selectableFocusedDate.getUTCDay()) || - disabledDatesSet.has(selectableFocusedDateTime); - } - - return selectableFocusedDate; -} diff --git a/src/helpers/has-class.ts b/src/helpers/has-class.ts deleted file mode 100644 index ee97ef213..000000000 --- a/src/helpers/has-class.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function hasClass(target: HTMLElement, className: string) { - return target.classList.contains(className); -} diff --git a/src/helpers/is-in-current-month.ts b/src/helpers/is-in-current-month.ts new file mode 100644 index 000000000..67cf76bfe --- /dev/null +++ b/src/helpers/is-in-current-month.ts @@ -0,0 +1,8 @@ +export function isInCurrentMonth(targetDate: Date, sourceDate: Date): boolean { + const targetDateFy = targetDate.getUTCFullYear(); + const targetDateM = targetDate.getUTCMonth(); + const sourceDateFY = sourceDate.getUTCFullYear(); + const sourceDateM = sourceDate.getUTCMonth(); + + return targetDateFy === sourceDateFY && targetDateM === sourceDateM; +} diff --git a/src/helpers/is-valid-date.ts b/src/helpers/is-valid-date.ts deleted file mode 100644 index d481e5de5..000000000 --- a/src/helpers/is-valid-date.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function isValidDate(date: string, dateDate: Date) { - return !(date == null || !(dateDate instanceof Date) || isNaN(+dateDate)); -} diff --git a/src/helpers/make-number-precise.ts b/src/helpers/make-number-precise.ts deleted file mode 100644 index 25e87e0c4..000000000 --- a/src/helpers/make-number-precise.ts +++ /dev/null @@ -1,11 +0,0 @@ -export function makeNumberPrecise(num: number) { - /** - * NOTE(motss): Different browser will use different precision in CSS `transform`: - * - * * Edge 17/ FF63 - use 2 decimals - * * Safari 10.1/ Chrome 41 - use as many decimals as possible - * * Chrome 70 - use 3 decimals - * - */ - return (num - Math.floor(num)) > 0 ? +num.toFixed(3) : num; -} diff --git a/src/helpers/nullish-attribute-converter.ts b/src/helpers/nullish-attribute-converter.ts new file mode 100644 index 000000000..537b06196 --- /dev/null +++ b/src/helpers/nullish-attribute-converter.ts @@ -0,0 +1,4 @@ +import type { ComplexAttributeConverter } from 'lit'; + +export const nullishAttributeConverter: NonNullable['toAttribute']> = + (value: T) => value || undefined; diff --git a/src/helpers/passive-handler.ts b/src/helpers/passive-handler.ts deleted file mode 100644 index 9af8d77f4..000000000 --- a/src/helpers/passive-handler.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function passiveHandler(cb: (...params: any[]) => any) { - return { passive: true, handleEvent: cb }; -} diff --git a/src/helpers/set-focus-trap.ts b/src/helpers/set-focus-trap.ts deleted file mode 100644 index a849713c5..000000000 --- a/src/helpers/set-focus-trap.ts +++ /dev/null @@ -1,50 +0,0 @@ -import type { FocusTrap } from '../custom_typings.js'; -import { KEY_CODES_MAP } from '../custom_typings.js'; -import { findShadowTarget } from './find-shadow-target.js'; - -export function setFocusTrap( - target: HTMLElement, - focusableElements: HTMLElement[] -): FocusTrap | null { - if (target == null || focusableElements == null) return null; - - const [firstEl, lastEl] = focusableElements; - const keydownCallback = (ev: KeyboardEvent) => { - const isTabKey = ev.keyCode === KEY_CODES_MAP.TAB; - const isShiftTabKey = ev.shiftKey && isTabKey; - - if (!isTabKey && !isShiftTabKey) return; - - // const focusedTarget = ev.target as HTMLElement; - const isFocusingLastEl = findShadowTarget(ev, n => n.isEqualNode(lastEl)) != null; - - if (isFocusingLastEl && !isShiftTabKey) { - ev.preventDefault(); - ev.stopImmediatePropagation(); - - // focusedTarget.blur(); - firstEl.focus(); - return; - } - - const isFocusingFirstEl = findShadowTarget(ev, n => n.isEqualNode(firstEl)) != null; - - if (isFocusingFirstEl && isShiftTabKey) { - ev.preventDefault(); - ev.stopImmediatePropagation(); - - // focusedTarget.blur(); - /** - * NOTE: `.focus()` native `` - ); - }); - - it(`renders with defined 'alwaysresetvalue'`, async () => { - type A = [boolean, boolean, boolean, string, string, string]; - - const expectedAlwaysResetValue: boolean = true; - const [ - initialProp, - attr, - prop, - - value, - value2, - - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - const n2 = root.querySelector(b)!; - const initialAlwaysResetValue = n.alwaysResetValue; - - n.min = '2000-01-01'; - n.value = '2020-02-02'; - n.setAttribute('alwaysresetvalue', d); - n2.value = '2020-02-20'; - - await n2.updateComplete; - await n.updateComplete; - - await n.close(); - await n.open(); - await n.updateComplete; - - const focusedDate = n2.shadowRoot!.querySelector(c); - - done([ - initialAlwaysResetValue, - n.hasAttribute('alwaysresetvalue'), - n.alwaysResetValue, - - n.value, - n2.value, - focusedDate?.outerHTML ?? '', - ] as A); - }, - DATEPICKER_DIALOG_NAME, - DATEPICKER_NAME, - toSelector('.day--focused'), - expectedAlwaysResetValue); - - strictEqual(initialProp, false); - allStrictEqual([prop, attr], expectedAlwaysResetValue); - allStrictEqual([value, value2], '2020-02-02'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
2
- `); - }); - - it(`renders with different 'firstdayofweek' and 'disableddays'`, async () => { - type A = [ - string, - string, - - string, - null, - - number, - number, - - string, - string, - ]; - - const expectedFirstdayofweek: string = '1'; - const expectedDisableddays: string = '3,5'; - const values: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.setAttribute('firstdayofweek', c); - n.setAttribute('disableddays', d); - - await n.updateComplete; - - done([ - n.getAttribute('firstdayofweek'), - n2.getAttribute('firstdayofweek'), - - n.getAttribute('disableddays'), - n2.getAttribute('disableddays'), - - n.firstDayOfWeek, - n2.firstDayOfWeek, - - n.disabledDays, - n2.disabledDays, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedFirstdayofweek, expectedDisableddays); - - deepStrictEqual(values, [ - expectedFirstdayofweek, - expectedFirstdayofweek, - - expectedDisableddays, - null, - - Number(expectedFirstdayofweek), - Number(expectedFirstdayofweek), - - expectedDisableddays, - expectedDisableddays, - ] as A); - }); - -}); diff --git a/src/tests/app-datepicker-dialog/events.spec.ts b/src/tests/app-datepicker-dialog/events.spec.ts deleted file mode 100644 index c5c989b3c..000000000 --- a/src/tests/app-datepicker-dialog/events.spec.ts +++ /dev/null @@ -1,189 +0,0 @@ -import { DATEPICKER_DIALOG_NAME, DATEPICKER_NAME } from '../../constants.js'; -import type { DatepickerValueUpdated } from '../../custom_typings.js'; -import { KEY_CODES_MAP } from '../../custom_typings.js'; -import type { DatepickerDialog } from '../../datepicker-dialog.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import { - deepStrictEqual, - strictEqual, -} from '../helpers/typed-assert.js'; - -describe(`${DATEPICKER_DIALOG_NAME}::events`, () => { - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - it(`fires 'datepicker-value-updated' event (Enter, Space)`, async () => { - const keys = [ - KEY_CODES_MAP.ENTER, - KEY_CODES_MAP.SPACE, - ]; - const results: boolean[] = []; - - for (const k of keys) { - const result: boolean = await browser.executeAsync(async (a, b, c, done) => { - const domTriggerKey = (root: HTMLElement, keyCode: number) => { - const ev = new CustomEvent('keyup', { keyCode } as any); - - Object.defineProperty(ev, 'keyCode', { value: keyCode }); - - root.dispatchEvent(ev); - }; - - const n: DatepickerDialog = document.createElement(a); - - n.locale = 'en-US'; - n.min = '2000-01-01'; - n.value = '2020-02-20'; - - document.body.appendChild(n); - - await n.open(); - await n.updateComplete; - - const n2 = n.shadowRoot!.querySelector(b)!; - const n3 = n2.shadowRoot!.querySelector('.calendars-container')!; - - domTriggerKey(n3, KEY_CODES_MAP.ARROW_LEFT); - - const enteredValue = new Promise((yay) => { - let timer = -1; - - n.addEventListener( - 'datepicker-value-updated', - function handler(ev: CustomEvent) { - const { isKeypress, keyCode, value } = ev.detail; - const selectedValue = isKeypress && ( - keyCode === KEY_CODES_MAP.ENTER || keyCode === KEY_CODES_MAP.SPACE - ) ? value : ''; - - clearTimeout(timer); - yay(selectedValue); - n.removeEventListener('datepicker-value-updated', handler); - } - ); - - timer = window.setTimeout(() => yay(''), 15e3); - }); - - domTriggerKey(n3, c); - - await n.updateComplete; - - document.body.removeChild(n); - - done((await enteredValue) === '2020-02-19'); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, k); - - results.push(result); - } - - deepStrictEqual(results, [true, true]); - }); - - it(`fires 'datepicker-dialog-first-updated'`, async () => { - const result = await browser.executeAsync(async (a, done) => { - const n: DatepickerDialog = document.createElement(a); - - const firstUpdated = new Promise((yay) => { - let timer = -1; - - function handler() { - clearTimeout(timer); - yay(true); - n.removeEventListener('datepicker-dialog-first-updated', handler); - } - n.addEventListener('datepicker-dialog-first-updated', handler); - - timer = window.setTimeout(() => yay(false), 15e3); - }); - - document.body.appendChild(n); - - n.locale = 'en-US'; - - await n.updateComplete; - - const firstUpdatedResult = await firstUpdated; - - document.body.removeChild(n); - - done(firstUpdatedResult); - }, DATEPICKER_DIALOG_NAME); - - strictEqual(result, true); - }); - - it(`fires 'datepicker-dialog-opened'`, async () => { - const result = await browser.executeAsync(async (a, done) => { - const n: DatepickerDialog = document.createElement(a)!; - - const dialogOpened = new Promise((yay) => { - let timer = -1; - - function handler() { - clearTimeout(timer); - yay(true); - n.removeEventListener('datepicker-dialog-opened', handler); - } - n.addEventListener('datepicker-dialog-opened', handler); - - timer = window.setTimeout(() => yay(false), 15e3); - }); - - document.body.appendChild(n); - - n.locale = 'en-US'; - - await n.open(); - await n.updateComplete; - - const dialogOpenedResult = await dialogOpened; - - document.body.removeChild(n); - - done(dialogOpenedResult); - }, DATEPICKER_DIALOG_NAME); - - strictEqual(result, true); - }); - - it(`fires 'datepicker-dialog-closed'`, async () => { - const result = await browser.executeAsync(async (a, done) => { - const n: DatepickerDialog = document.createElement(a)!; - - const dialogClosed = new Promise((yay) => { - let timer = -1; - - function handler() { - clearTimeout(timer); - yay(true); - n.removeEventListener('datepicker-dialog-closed', handler); - } - n.addEventListener('datepicker-dialog-closed', handler); - - timer = window.setTimeout(() => yay(false), 15e3); - }); - - document.body.appendChild(n); - - n.locale = 'en-US'; - - await n.open(); - await n.updateComplete; - - await n.close(); - await n.updateComplete; - - const dialogClosedResult = await dialogClosed; - - document.body.removeChild(n); - - done(dialogClosedResult); - }, DATEPICKER_DIALOG_NAME); - - strictEqual(result, true); - }); - -}); diff --git a/src/tests/app-datepicker-dialog/gestures.spec.ts b/src/tests/app-datepicker-dialog/gestures.spec.ts deleted file mode 100644 index f883852b9..000000000 --- a/src/tests/app-datepicker-dialog/gestures.spec.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { DATEPICKER_DIALOG_NAME, DATEPICKER_NAME } from '../../constants.js'; -import type { DatepickerDialog } from '../../datepicker-dialog.js'; -import { APP_INDEX_URL } from '../constants.js'; -import type { DragOptions } from '../helpers/interaction.js'; -import { interaction } from '../helpers/interaction.js'; -import { - allStrictEqual, -} from '../helpers/typed-assert.js'; - -describe('gestures', () => { - const isSafari = browser.capabilities.browserName === 'Safari'; - const actionTypes: DragOptions['type'][] = ['mouse', 'touch']; - const setup = () => browser.executeAsync(async (a, done) => { - const el: DatepickerDialog = document.createElement(a); - - document.body.appendChild(el); - - el.locale = 'en-US'; - - await el.open(); - await el.updateComplete; - - done(); - }, DATEPICKER_DIALOG_NAME); - const cleanup = () => browser.executeAsync((a, done) => { - const el = document.body.querySelector(a); - - if (el) document.body.removeChild(el); - - done(); - }, DATEPICKER_DIALOG_NAME); - - const { dragCalendarsContainer } = interaction({ - isSafari, - elementName: DATEPICKER_DIALOG_NAME, - elementName2: DATEPICKER_NAME, - }); - - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - it(`drags calendar to the left`, async () => { - const results: string[] = []; - - for (const a of actionTypes) { - await setup(); - - const labelText = await dragCalendarsContainer({ - x: 50, - type: a, - }, { - props: { - min: '2000-01-01', - value: '2020-02-02', - }, - }); - - await cleanup(); - - results.push(labelText); - } - - allStrictEqual(results, 'January 2020'); - }); - - it(`drags calendar to the right`, async () => { - const results: string[] = []; - - for (const a of actionTypes) { - await setup(); - - const labelText = await dragCalendarsContainer({ - x: -50, - type: a, - }, { - props: { - min: '2020-02-01', - max: '2021-02-02', - value: '2020-02-02', - }, - }); - - await cleanup(); - - results.push(labelText); - } - - allStrictEqual(results, 'March 2020'); - }); - -}); diff --git a/src/tests/app-datepicker-dialog/initial-render.spec.ts b/src/tests/app-datepicker-dialog/initial-render.spec.ts deleted file mode 100644 index 2e5f45be4..000000000 --- a/src/tests/app-datepicker-dialog/initial-render.spec.ts +++ /dev/null @@ -1,223 +0,0 @@ -import { DATEPICKER_DIALOG_NAME, DATEPICKER_NAME } from '../../constants.js'; -import type { HTMLElementPart } from '../../custom_typings.js'; -import type { DatepickerDialog } from '../../datepicker-dialog.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import { sanitizeText } from '../helpers/sanitize-text.js'; -import { - allStrictEqual, - deepStrictEqual, - strictEqual, -} from '../helpers/typed-assert.js'; - -describe(`${DATEPICKER_DIALOG_NAME}::initial_render`, () => { - describe('calendar view', () => { - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: DatepickerDialog = document.createElement(a); - - document.body.appendChild(el); - - el.locale = 'en-US'; - - await el.updateComplete; - - done(); - }, DATEPICKER_DIALOG_NAME); - }); - - afterEach(async () => { - await browser.executeAsync((a, done) => { - const el = document.body.querySelector(a)!; - - if (el) document.body.removeChild(el); - - done(); - }, DATEPICKER_DIALOG_NAME); - }); - - it(`takes snapshot`, async () => { - const browserName = browser.capabilities.browserName; - - await browser.executeAsync(async (a, done) => { - const n = document.body.querySelector(a)!; - - await n.open(); - await n.updateComplete; - - done(); - }, DATEPICKER_DIALOG_NAME); - - await browser.saveScreenshot( - `./src/tests/snapshots/${DATEPICKER_DIALOG_NAME}/initial-render-calendar-view-${browserName}.png` - ); - }); - - it(`renders with accessibility-specific attributes`, async () => { - type A = [string, string, string, string]; - - const values: A = await browser.executeAsync(async (a, done) => { - const n = document.body.querySelector(a)!; - - done([ - n.getAttribute('role'), - n.getAttribute('aria-label'), - n.getAttribute('aria-modal'), - n.getAttribute('aria-hidden'), - ] as A); - }, DATEPICKER_DIALOG_NAME); - - deepStrictEqual(values, [ - 'dialog', - 'datepicker', - 'true', - 'true', - ]); - }); - - it(`has 'display: none'`, async () => { - const el = await $(DATEPICKER_DIALOG_NAME); - - const displayValue = await el.getCSSProperty('display'); - - strictEqual(displayValue.value, 'none'); - }); - - it(`renders no and scrim is hidden`, async () => { - type A = [boolean, boolean]; - - const values: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b); - const n3 = n.shadowRoot!.querySelector('.scrim')!; - - done([ - n2 == null, - getComputedStyle(n3).visibility === 'hidden', - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME); - - allStrictEqual(values, true); - }); - - it(`renders today's date`, async () => { - type A = [string, string]; - - const [ - prop, - todayValue, - ]: A = await browser.executeAsync(async (a, done) => { - const n = document.body.querySelector(a)!; - - /** - * NOTE: Get the today's date from the browser instead of - * from the environment where the testing command is run. - */ - const now = new Date(); - const today = [`${now.getFullYear()}`] - .concat([1 + now.getMonth(), now.getDate()].map(o => `0${o}`.slice(-2))) - .join('-'); - - done([ - n.value, - today, - ] as A); - }, DATEPICKER_DIALOG_NAME); - - strictEqual(prop, todayValue); - }); - - it(`renders year list view`, async () => { - const hasYearListView: boolean = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.startView = 'yearList'; - - await n.open(); - await n.updateComplete; - - const n2 = n.shadowRoot!.querySelector(b)!; - - done( - n2.shadowRoot!.querySelector('.datepicker-body__year-list-view') == null - ); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME); - - strictEqual(hasYearListView, false); - }); - - it(`renders with scrim and action buttons when opened`, async () => { - type A = [boolean, boolean, string[]]; - - const [ - hasVisibleScrim, - hasActionButtons, - actionLabels, - ]: A = await browser.executeAsync(async (a, done) => { - const n = document.body.querySelector(a)!; - - await n.open(); - await n.updateComplete; - - const root = n.shadowRoot!; - const n2 = root.querySelector('.scrim')!; - const n3s = Array.from(root.querySelectorAll('mwc-button')!); - - done([ - getComputedStyle(n2).visibility === 'visible', - n3s.length === 3, - n3s.map(o => o.textContent), - ]); - }, DATEPICKER_DIALOG_NAME); - - allStrictEqual([hasVisibleScrim, hasActionButtons], true); - deepStrictEqual(actionLabels.map(n => sanitizeText(n)), ['clear', 'cancel', 'set']); - }); - - it(`has contents with 'part' attributes`, async () => { - type A = boolean; - - const results: A[] = []; - const parts = [ - [['scrim'], false], - [ - [ - 'actions', - 'clear', - 'confirm', - 'dialog-content', - 'dismiss', - 'scrim', - ], - true, - ], - ] as [HTMLElementPart[], boolean][]; - - for (const part of parts) { - const result: A = await browser.executeAsync(async (a, [b, c], done) => { - const n = document.body.querySelector(a)!; - - if (c) { - await n.open(); - await n.updateComplete; - } - - const partContents = - (b as HTMLElementPart[]).map(o => n.shadowRoot!.querySelector(`[part="${o}"]`)); - - done(partContents.every(o => o instanceof HTMLElement) as A); - }, DATEPICKER_DIALOG_NAME, part); - - results.push(result); - } - - allStrictEqual(results, true); - }); - - }); - -}); diff --git a/src/tests/app-datepicker-dialog/keyboards.spec.ts b/src/tests/app-datepicker-dialog/keyboards.spec.ts deleted file mode 100644 index 2b270f3bf..000000000 --- a/src/tests/app-datepicker-dialog/keyboards.spec.ts +++ /dev/null @@ -1,603 +0,0 @@ -import { DATEPICKER_DIALOG_NAME, DATEPICKER_NAME } from '../../constants.js'; -import { KEY_CODES_MAP } from '../../custom_typings.js'; -import type { DatepickerDialog } from '../../datepicker-dialog.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import { cleanHtml } from '../helpers/clean-html.js'; -import { prettyHtml } from '../helpers/pretty-html.js'; -import { toSelector } from '../helpers/to-selector.js'; -import { - allStrictEqual, - deepStrictEqual, - ok, - strictEqual, -} from '../helpers/typed-assert.js'; - -describe(`${DATEPICKER_DIALOG_NAME}::keyboards`, () => { - const focusElement = async (selector: string, inDialog: boolean = false) => { - return browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - const n3 = (d ? n : n2).shadowRoot!.querySelector(c)!; - - n3.focus(); - - await n.updateComplete; - await new Promise(y => setTimeout(() => y(n3.focus()))); - await n.updateComplete; - - done(); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, selector, inDialog); - }; - const tapElements = async ( - selectors: string[], - keys: string[] - ): Promise => { - for (const s of selectors) { - await focusElement(s); - await browser.keys(keys); - } - }; - - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: DatepickerDialog = document.createElement(a); - - el.locale = 'en-US'; - // Reset `min` and `value` here before running tests - el.min = '2000-01-01'; - el.value = '2020-02-20'; - - document.body.appendChild(el); - - await el.open(); - await el.updateComplete; - - done(); - }, DATEPICKER_DIALOG_NAME); - }); - - afterEach(async () => { - await browser.executeAsync((a, done) => { - const el = document.body.querySelector(a); - - if (el) document.body.removeChild(el); - - done(); - }, DATEPICKER_DIALOG_NAME); - }); - - it(`switches to year list view`, async () => { - await tapElements(['.btn__year-selector'], ['Space']); - - const hasYearListView: boolean = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const yearListView = n2.shadowRoot!.querySelector(c)!; - - done(yearListView != null); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, '.datepicker-body__year-list-view'); - - ok(hasYearListView); - }); - - it(`switches to calendar view`, async () => { - await browser.executeAsync(async (a, done) => { - const n = document.body.querySelector(a)!; - - n.startView = 'yearList'; - - await n.updateComplete; - - done(); - }, DATEPICKER_DIALOG_NAME); - - await tapElements(['.btn__calendar-selector'], ['Space']); - - const hasCalendarView: boolean = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const yearListView = n2.shadowRoot!.querySelector(c)!; - - done(yearListView != null); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, '.datepicker-body__calendar-view'); - - ok(hasCalendarView); - }); - - it(`focuses date after navigating away when switching to calendar view`, async () => { - type A = [boolean, string]; - - await tapElements([ - `.btn__month-selector[aria-label="Next month"]`, - `.btn__year-selector`, - ], ['Space']); - - const hasYearListView: boolean = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const yearListView = n2.shadowRoot!.querySelector(c)!; - - done(yearListView != null); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, '.datepicker-body__year-list-view'); - - await tapElements([`.btn__calendar-selector`], ['Space']); - - const [ - hasCalendarView, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const root = n2.shadowRoot!; - - const yearListView = root.querySelector(c)!; - const focusedDate = root.querySelector(d)!; - - done([ - yearListView != null, - focusedDate.outerHTML, - ] as A); - }, - DATEPICKER_DIALOG_NAME, - DATEPICKER_NAME, - '.datepicker-body__calendar-view', - toSelector('.day--focused')); - - allStrictEqual([hasCalendarView, hasYearListView], true); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
20
- - `); - }); - - it(`switches back to calendar view when new year is selected`, async () => { - type A = [string, string]; - type B = [string, string, string, string, string[]]; - - const [ - prop, - prop2, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - done([ - n.value, - n2.value, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME); - - await tapElements([ - '.btn__year-selector', - [ - `.year-list-view__list-item.year--selected`, - `+ .year-list-view__list-item`, - `+ .year-list-view__list-item`, - ].join(' '), - ], ['Space']); - - const [ - prop3, - prop4, - yearSelectorButtonContent, - calendarLabelContent, - calendarDaysContents, - ]: B = await browser.executeAsync(async (a, b, c, d, e, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const root = n2.shadowRoot!; - - const yearSelectorButton = root.querySelector(c)!; - const calendarLabel = root.querySelector(d)!; - const calendarDays = Array.from( - root.querySelectorAll(e), o => o.textContent); - - done([ - n.value, - n2.value, - yearSelectorButton.outerHTML, - calendarLabel.outerHTML, - calendarDays, - ] as B); - }, - DATEPICKER_DIALOG_NAME, - DATEPICKER_NAME, - '.btn__year-selector', - toSelector('.calendar-label'), - toSelector('.full-calendar__day')); - - allStrictEqual([prop, prop2, prop3], '2020-02-20'); - strictEqual(prop4, '2022-02-20'); - - strictEqual(cleanHtml(yearSelectorButtonContent), prettyHtml` - - `); - strictEqual(cleanHtml(calendarLabelContent), prettyHtml` -
February 2022
- `); - deepStrictEqual(calendarDaysContents.map(n => cleanHtml(n.trim())), [ - '', '', 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, - 27, 28, '', '', '', '', '', - '', '', '', '', '', '', '', - ].map(String)); - }); - - it(`closes dialog when dismiss button is tapped`, async () => { - type A = [string, string]; - - await focusElement(`.actions-container > mwc-button[dialog-dismiss]`, true); - - await browser.keys(['Space']); - - // Wait for dialog closes - await (await $(DATEPICKER_DIALOG_NAME)).waitForDisplayed(undefined, true); - - const [ - cssDisplay, - ariaHiddenAttr, - ]: A = await browser.executeAsync(async (a, done) => { - const n = document.body.querySelector(a)!; - - await n.updateComplete; - - done([ - getComputedStyle(n).display, - n.getAttribute('aria-hidden'), - ] as A); - }, DATEPICKER_DIALOG_NAME); - - strictEqual(cssDisplay, 'none'); - strictEqual(ariaHiddenAttr, 'true'); - }); - - it(`closes dialog with new focused date when confirm button is tapped`, async () => { - type A = [string, string, string]; - type B = [string, string, string]; - - // FIXME: Using keyboard to select new focused date is tedious and inconsistent. - // Here updates via `value` property. - const [ - prop, - prop2, - focusedDateContent, - ]: C = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n2.value = '2020-02-13'; - - await n2.updateComplete; - - const focusedDate = n2.shadowRoot!.querySelector(c)!; - - done([ - n.value, - n2.value, - focusedDate.outerHTML, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, toSelector('.day--focused')); - - await focusElement(`.actions-container > mwc-button[dialog-confirm]`, true); - - await browser.keys(['Space']); - - await (await $(DATEPICKER_DIALOG_NAME)).waitForDisplayed(undefined, true); - - const [ - prop3, - cssDisplay, - ariaHiddenAttr, - ]: B = await browser.executeAsync(async (a, done) => { - const n = document.body.querySelector(a)!; - - await n.updateComplete; - - done([ - n.value, - getComputedStyle(n).display, - n.getAttribute('aria-hidden'), - // === '2020-02-13' - ] as B); - }, DATEPICKER_DIALOG_NAME); - - strictEqual(prop, '2020-02-20'); - allStrictEqual([prop2, prop3], '2020-02-13'); - strictEqual(cssDisplay, 'none'); - strictEqual(ariaHiddenAttr, 'true'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
13
- - `); - }); - - it(`reset value when clear button is tapped`, async () => { - type A = [string, string]; - type B = string; - - const [ - initialVal, - todayValue, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const padStart = (v: number) => `0${v}`.slice(-2); - const today = new Date(); - const fy = today.getFullYear(); - const m = today.getMonth(); - const d = today.getDate(); - const todayVal = [`${fy}`].concat([1 + m, d].map(padStart)).join('-'); - - n.min = `${fy - 10}-01-01`; - n2.value = `${fy - 1}-01-01`; - n.max = `${fy + 10}-01-01`; - - await n2.updateComplete; - await n.updateComplete; - - done([n2.value, todayVal] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME); - - await focusElement('mwc-button.clear', true); - await browser.keys(['Space']); - - const prop: B = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - done(n2.value as B); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME); - - strictEqual(initialVal, `${Number(todayValue.slice(0, 4)) - 1}-01-01`); - strictEqual(prop, todayValue); - }); - - // region helpers - type C = [string, string, string]; - - const focusCalendarsContainer = async (): Promise => { - return await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - const n3 = n2.shadowRoot!.querySelector(c)!; - - n3.focus(); - - await n.updateComplete; - await new Promise(y => setTimeout(() => y(n3.focus()))); - await n.updateComplete; - - let activeElement = document.activeElement; - - while (activeElement?.shadowRoot) { - activeElement = activeElement.shadowRoot.activeElement; - } - - done( - `.${Array.from(activeElement?.classList.values() ?? []).join('.')}` - ); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, '.calendars-container'); - }; - // FIXME: Helper as a workaround until `browser.keys()` supports Alt - // on all browsers on local and CI. - const browserKeys = async (keyCode: number, altKey: boolean = false) => { - await focusCalendarsContainer(); - - return browser.executeAsync(async (a, b, c, d, e, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - const n3 = n2.shadowRoot!.querySelector(c)!; - - const opt: any = { keyCode: d, altKey: e }; - const ev = new CustomEvent('keyup', opt); - - Object.keys(opt).forEach((o) => { - Object.defineProperty(ev, o, { value: opt[o] }); - }); - - n3.dispatchEvent(ev); - - done(); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, '.calendars-container', keyCode, altKey); - }; - const getValuesAfterKeys = async ( - key: number, - altKey: boolean = false - ): Promise => { - await focusCalendarsContainer(); - - await browserKeys(key, altKey); - - const [prop, prop2, content]: C = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const focusedDate = n2.shadowRoot!.querySelector(c)!; - - done([ - n.value, - n2.value, - focusedDate.outerHTML, - ] as C); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, toSelector('.day--focused')); - - return [prop, prop2, cleanHtml(content)]; - }; - // #endregion helpers - - it(`focuses date (ArrowLeft)`, async () => { - const [ - prop, - prop2, - focusedDateContent, - ]: C = await getValuesAfterKeys(KEY_CODES_MAP.ARROW_LEFT); - - strictEqual(prop, '2020-02-20'); - strictEqual(prop2, '2020-02-19'); - strictEqual(focusedDateContent, prettyHtml` - -
19
- - `); - }); - - it(`focuses date (ArrowRight)`, async () => { - const [ - prop, - prop2, - focusedDateContent, - ]: C = await getValuesAfterKeys(KEY_CODES_MAP.ARROW_RIGHT); - - strictEqual(prop, '2020-02-20'); - strictEqual(prop2, '2020-02-21'); - strictEqual(focusedDateContent, prettyHtml` - -
21
- - `); - }); - - it(`focuses date (ArrowUp)`, async () => { - const [ - prop, - prop2, - focusedDateContent, - ]: C = await getValuesAfterKeys(KEY_CODES_MAP.ARROW_UP); - - strictEqual(prop, '2020-02-20'); - strictEqual(prop2, `2020-02-13`); - strictEqual(focusedDateContent, prettyHtml` - -
13
- - `); - }); - - it(`focuses date (ArrowDown)`, async () => { - const [ - prop, - prop2, - focusedDateContent, - ]: C = await getValuesAfterKeys(KEY_CODES_MAP.ARROW_DOWN); - - strictEqual(prop, '2020-02-20'); - strictEqual(prop2, '2020-02-27'); - strictEqual(focusedDateContent, prettyHtml` - -
27
- - `); - }); - - it(`focuses date (PageUp)`, async () => { - const [ - prop, - prop2, - focusedDateContent, - ]: C = await getValuesAfterKeys(KEY_CODES_MAP.PAGE_UP); - - strictEqual(prop, '2020-02-20'); - strictEqual(prop2, '2020-01-20'); - strictEqual(focusedDateContent, prettyHtml` - -
20
- - `); - }); - - it(`focuses date (PageDown)`, async () => { - const [ - prop, - prop2, - focusedDateContent, - ]: C = await getValuesAfterKeys(KEY_CODES_MAP.PAGE_DOWN); - - strictEqual(prop, '2020-02-20'); - strictEqual(prop2, '2020-03-20'); - strictEqual(focusedDateContent, prettyHtml` - -
20
- - `); - }); - - it(`focuses date (Home)`, async () => { - const [ - prop, - prop2, - focusedDateContent, - ]: C = await getValuesAfterKeys(KEY_CODES_MAP.HOME); - - strictEqual(prop, '2020-02-20'); - strictEqual(prop2, '2020-02-01'); - strictEqual(focusedDateContent, prettyHtml` - -
1
- - `); - }); - - it(`focuses date (End)`, async () => { - const [ - prop, - prop2, - focusedDateContent, - ]: C = await getValuesAfterKeys(KEY_CODES_MAP.END); - - strictEqual(prop, '2020-02-20'); - strictEqual(prop2, '2020-02-29'); - strictEqual(focusedDateContent, prettyHtml` - -
29
- - `); - }); - - it(`focuses date (Alt + PageUp)`, async () => { - const [ - prop, - prop2, - focusedDateContent, - ]: C = await getValuesAfterKeys(KEY_CODES_MAP.PAGE_UP, true); - - strictEqual(prop, '2020-02-20'); - strictEqual(prop2, '2019-02-20'); - strictEqual(focusedDateContent, prettyHtml` - -
20
- - `); - }); - - it(`focuses date (Alt + PageDown)`, async () => { - const [ - prop, - prop2, - focusedDateContent, - ]: C = await getValuesAfterKeys(KEY_CODES_MAP.PAGE_DOWN, true); - - strictEqual(prop, '2020-02-20'); - strictEqual(prop2, '2021-02-20'); - strictEqual(focusedDateContent, prettyHtml` - -
20
- - `); - }); - -}); diff --git a/src/tests/app-datepicker-dialog/mouses.spec.ts b/src/tests/app-datepicker-dialog/mouses.spec.ts deleted file mode 100644 index ceb66254d..000000000 --- a/src/tests/app-datepicker-dialog/mouses.spec.ts +++ /dev/null @@ -1,491 +0,0 @@ -import { DATEPICKER_DIALOG_NAME, DATEPICKER_NAME } from '../../constants.js'; -import type { DatepickerDialog } from '../../datepicker-dialog.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import type { PrepareOptions } from '../custom_typings.js'; -import { cleanHtml } from '../helpers/clean-html.js'; -import { prettyHtml } from '../helpers/pretty-html.js'; -import { toSelector } from '../helpers/to-selector.js'; -import { - allStrictEqual, - deepStrictEqual, - ok, - strictEqual, -} from '../helpers/typed-assert.js'; - -describe(`${DATEPICKER_DIALOG_NAME}::mouses`, () => { - const isSafari = browser.capabilities.browserName === 'Safari'; - - const clickElements = async (classes: string[], prepareOptions?: PrepareOptions) => { - if (prepareOptions) { - await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const { props, attrs }: PrepareOptions = b; - - if (props) { - Object.keys(props).forEach((o) => { - (n as any)[o] = (props as any)[o]; - }); - } - - if (attrs) { - Object.keys(attrs).forEach((o) => { - n.setAttribute(o.toLowerCase(), String((attrs as any)[o])); - }); - } - - await n.updateComplete; - - done(); - }, DATEPICKER_DIALOG_NAME, prepareOptions); - } - - /** - * NOTE: [20191229] Due to a bug in Safari 13, Safari is not able - * to recognize any clicks but it has yet to release the patch to - * stable Safari and any older versions of Safari. As of writing, - * only Safari TP has it fixed. - * - * Therefore, this helper is here to imperatively calling `.click()` - * in the browser the tests run when it detects a Safari browser. - * - * @see https://bugs.webkit.org/show_bug.cgi?id=202589 - */ - for (const cls of classes) { - if (isSafari) { - await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - const n3 = n2.shadowRoot!.querySelector(c)!; - - if (n3 instanceof HTMLButtonElement || n3.tagName === 'MWC-BUTTON') { - n3.click(); - } else { - // Simulate click event on non natively focusable elements. - // This is for selecting new focused date in the table. - ['touchstart', 'touchend'].forEach((o) => { - n3.dispatchEvent(new CustomEvent(o, { bubbles: true, composed: true })); - }); - } - - await n.updateComplete; - - done(); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, cls); - } else { - const el = await $(DATEPICKER_DIALOG_NAME); - const el2 = (await el.shadow$(DATEPICKER_NAME)) as unknown as WebdriverIOAsync.Element; - const el3 = (await el2.shadow$(cls)) as unknown as WebdriverIOAsync.Element; - - await el3.click(); - } - } - }; - - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: DatepickerDialog = document.createElement(a); - - el.locale = 'en-US'; - // Reset `min` and `value` here before running tests - el.min = '2000-01-01'; - el.value = '2020-02-20'; - - document.body.appendChild(el); - - await el.open(); - await el.updateComplete; - - done(); - }, DATEPICKER_DIALOG_NAME); - }); - - afterEach(async () => { - await browser.executeAsync((a, done) => { - const el = document.body.querySelector(a); - - if (el) document.body.removeChild(el); - - done(); - }, DATEPICKER_DIALOG_NAME); - }); - - it(`switches to year list view`, async () => { - await clickElements(['.btn__year-selector']); - - const hasYearListView: boolean = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const yearListView = n2.shadowRoot!.querySelector(c); - - done(yearListView != null); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, '.datepicker-body__year-list-view'); - - ok(hasYearListView); - }); - - it(`switches to calendar view`, async () => { - await clickElements(['.btn__calendar-selector'], { - props: { - startView: 'yearList', - }, - }); - - const hasCalendarView: boolean = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const calendarView = n2.shadowRoot!.querySelector(c); - - done(calendarView != null); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, '.datepicker-body__calendar-view'); - - ok(hasCalendarView); - }); - - it(`selects new year`, async () => { - type A = [string, string, string, string, string[]]; - - await clickElements([ - '.btn__year-selector', - [ - `.year-list-view__list-item.year--selected`, - `+ .year-list-view__list-item`, - `+ .year-list-view__list-item`, - ].join(' '), - ]); - - const [ - prop, - prop2, - yearSelectorButtonContent, - calendarLabelContent, - calendarDaysContents, - ]: A = await browser.executeAsync(async (a, b, c, d, e, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const root = n2.shadowRoot!; - - const yearSelectorButton = root.querySelector(c)!; - const calendarLabel = root.querySelector(d)!; - const calendarDays = Array.from( - root.querySelectorAll(e), o => o.textContent); - - done([ - n.value, - n2.value, - yearSelectorButton.outerHTML, - calendarLabel.outerHTML, - calendarDays, - ] as A); - }, - DATEPICKER_DIALOG_NAME, - DATEPICKER_NAME, - '.btn__year-selector', - toSelector('.calendar-label'), - toSelector('.full-calendar__day')); - - strictEqual(prop, '2020-02-20'); - strictEqual(prop2, '2022-02-20'); - - strictEqual(cleanHtml(yearSelectorButtonContent), prettyHtml` - - `); - strictEqual(cleanHtml(calendarLabelContent), prettyHtml` -
February 2022
- `); - deepStrictEqual(calendarDaysContents.map(n => cleanHtml(n.trim())), [ - '', '', 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, - 27, 28, '', '', '', '', '', - '', '', '', '', '', '', '', - ].map(String)); - }); - - it(`navigates to next month`, async () => { - type A = [string, string[]]; - - await clickElements([`.btn__month-selector[aria-label="Next month"]`]); - - const [ - calendarLabelContent, - calendarDaysContents, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const root = n2.shadowRoot!; - - const calendarLabel = root.querySelector(c)!; - const calendarDays = Array.from( - root.querySelectorAll(d), o => o.textContent); - - done([ - calendarLabel.outerHTML, - calendarDays, - ] as A); - }, - DATEPICKER_DIALOG_NAME, - DATEPICKER_NAME, - toSelector('.calendar-label'), - toSelector('.full-calendar__day')); - - strictEqual( - cleanHtml(calendarLabelContent), - prettyHtml`
March 2020
` - ); - deepStrictEqual(calendarDaysContents.map(n => cleanHtml(n.trim())), [ - 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, '', '', '', '', - '', '', '', '', '', '', '', - ].map(String)); - }); - - it(`navigates to previous month`, async () => { - type A = [string, string[]]; - - await clickElements([`.btn__month-selector[aria-label="Previous month"]`]); - - const [ - calendarLabelContent, - calendarDaysContents, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const root = n2.shadowRoot!; - - const calendarLabel = root.querySelector(c)!; - const calendarDays = Array.from( - root.querySelectorAll(d), o => o.textContent); - - done([ - calendarLabel.outerHTML, - calendarDays, - ] as A); - }, - DATEPICKER_DIALOG_NAME, - DATEPICKER_NAME, - toSelector('.calendar-label'), - toSelector('.full-calendar__day')); - - strictEqual( - cleanHtml(calendarLabelContent), - prettyHtml`
January 2020
` - ); - deepStrictEqual(calendarDaysContents.map(n => cleanHtml(n.trim())), [ - '', '', '', 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, '', - '', '', '', '', '', '', '', - ].map(String)); - }); - - it(`selects new focused date`, async () => { - type A = [string, string, string]; - - await clickElements([ - toSelector(`.full-calendar__day[aria-label="Feb 13, 2020"]`), - ]); - - const [ - prop, - prop2, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const root = n2.shadowRoot!; - - const focusedDate = root.querySelector(c)!; - - done([ - n.value, - n2.value, - focusedDate.outerHTML, - ] as A); - }, - DATEPICKER_DIALOG_NAME, - DATEPICKER_NAME, - toSelector('.day--focused')); - - strictEqual(prop, '2020-02-20'); - strictEqual(prop2, '2020-02-13'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
13
- - `); - }); - - it(`closes dialog when dismiss button is clicked`, async () => { - type A = [string, string]; - - const [ - cssDisplay, - ariaHiddenAttr, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const dialogDismissButton = n.shadowRoot!.querySelector(b)!; - - const dialogClosed = new Promise((yay) => { - let timer = -1; - - function handler() { - clearTimeout(timer); - yay(true); - n.removeEventListener('datepicker-dialog-closed', handler); - } - n.addEventListener('datepicker-dialog-closed', handler); - - timer = window.setTimeout(() => yay(false), 15e3); - }); - - dialogDismissButton.click(); - - await n.updateComplete; - await dialogClosed; - - done([ - getComputedStyle(n).display, - n.getAttribute('aria-hidden'), - ] as A); - }, DATEPICKER_DIALOG_NAME, `.actions-container > mwc-button[dialog-dismiss]`); - - strictEqual(cssDisplay, 'none'); - strictEqual(ariaHiddenAttr, 'true'); - }); - - it(`closes dialog with new focused date when confirm button is clicked`, async () => { - type A = [string, string, string, string, string, string]; - - await clickElements([ - toSelector(`.full-calendar__day[aria-label="Feb 13, 2020"]`), - ]); - - const [ - prop, - prop2, - prop3, - cssDisplay, - ariaHiddenAttr, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - const dialogConfirmButton = root.querySelector(c)!; - const n2 = root.querySelector(b)!; - - const focusedDate = n2.shadowRoot!.querySelector(d)!; - - const propVal = n.value; - const propVal2 = n2.value; - const focusedDateVal = focusedDate.outerHTML; - - const dialogClosed = new Promise((yay) => { - let timer = -1; - - function handler() { - clearTimeout(timer); - yay(true); - n.removeEventListener('datepicker-dialog-closed', handler); - } - n.addEventListener('datepicker-dialog-closed', handler); - - timer = window.setTimeout(() => yay(false), 15e3); - }); - - dialogConfirmButton.click(); - - await n.updateComplete; - await dialogClosed; - - done([ - propVal, - propVal2, - n.value, - - getComputedStyle(n).display, - n.getAttribute('aria-hidden'), - focusedDateVal, - ] as A); - }, - DATEPICKER_DIALOG_NAME, - DATEPICKER_NAME, - `.actions-container > mwc-button[dialog-confirm]`, - toSelector('.day--focused')); - - strictEqual(prop, '2020-02-20'); - allStrictEqual([prop2, prop3], '2020-02-13'); - strictEqual(cssDisplay, 'none'); - strictEqual(ariaHiddenAttr, 'true'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
13
- - `); - }); - - it(`reset value when clear button is clicked`, async () => { - type A = [string, string, string]; - - const [ - initialProp, - prop, - todayValue, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - const n2 = root.querySelector(b)!; - - const padStart = (v: number) => `0${v}`.slice(-2); - const today = new Date(); - const fy = today.getFullYear(); - const m = today.getMonth(); - const d = today.getDate(); - const todayVal = [`${fy}`].concat([1 + m, d].map(padStart)).join('-'); - - n.min = `${fy - 10}-01-01`; - n2.value = `${fy - 1}-01-01`; - n.max = `${fy + 10}-01-01`; - - await n2.updateComplete; - await n.updateComplete; - - const propVal = n2.value; - - const clearButton = root.querySelector(c)!; - - clearButton.click(); - - const propVal2 = n2.value; - - done([ - propVal, - propVal2, - todayVal, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, 'mwc-button.clear'); - - strictEqual(initialProp, `${Number(todayValue.slice(0, 4)) - 1}-01-01`); - strictEqual(prop, todayValue); - }); - -}); diff --git a/src/tests/app-datepicker-dialog/properties.spec.ts b/src/tests/app-datepicker-dialog/properties.spec.ts deleted file mode 100644 index dda964f45..000000000 --- a/src/tests/app-datepicker-dialog/properties.spec.ts +++ /dev/null @@ -1,605 +0,0 @@ -import type { WeekNumberType } from 'nodemod/dist/calendar/calendar_typing.js'; -import { DATEPICKER_DIALOG_NAME, DATEPICKER_NAME } from '../../constants.js'; -import type { StartView } from '../../custom_typings.js'; -import type { DatepickerDialog } from '../../datepicker-dialog.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import { cleanHtml } from '../helpers/clean-html.js'; -import { prettyHtml } from '../helpers/pretty-html.js'; -import { toSelector } from '../helpers/to-selector.js'; -import { - allStrictEqual, - deepStrictEqual, - strictEqual, -} from '../helpers/typed-assert.js'; - -describe(`${DATEPICKER_DIALOG_NAME}::properties`, () => { - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: DatepickerDialog = document.createElement(a); - - document.body.appendChild(el); - - el.locale = 'en-US'; - - await el.open(); - await el.updateComplete; - - done(); - }, DATEPICKER_DIALOG_NAME); - }); - - afterEach(async () => { - await browser.executeAsync((a, done) => { - const el = document.body.querySelector(a)!; - - if (el) document.body.removeChild(el); - - done(); - }, DATEPICKER_DIALOG_NAME); - }); - - it(`takes snapshot`, async () => { - const browserName = browser.capabilities.browserName; - - await browser.saveScreenshot( - `./src/tests/snapshots/${DATEPICKER_DIALOG_NAME}/properties-0-${browserName}.png`); - - await browser.executeAsync(async (a, done) => { - const el = document.body.querySelector(a)!; - - el.min = '2020-01-15'; - el.value = '2020-01-17'; - - await el.updateComplete; - - done(); - }, DATEPICKER_DIALOG_NAME); - - await browser.saveScreenshot( - `./src/tests/snapshots/${DATEPICKER_DIALOG_NAME}/properties-1-${browserName}.png`); - }); - - it(`renders with initial properties`, async () => { - type A = [ - number, number, - WeekNumberType, WeekNumberType, - StartView, StartView, - ]; - - const values: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - done([ - n.firstDayOfWeek, - n2.firstDayOfWeek, - - n.weekNumberType, - n2.weekNumberType, - - n.startView, - n2.startView, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME); - - deepStrictEqual(values, [ - 0, 0, - 'first-4-day-week', 'first-4-day-week', - 'calendar', 'calendar', - ] as A); - }); - - it(`renders with defined 'min'`, async () => { - type A = [string, string]; - - const expectedMin = '2000-01-01'; - const values: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.min = c; - - await n.updateComplete; - - done([ - n.min, - n2.min, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedMin); - - allStrictEqual(values, expectedMin); - }); - - it(`renders with defined 'max'`, async () => { - type A = [string, string]; - - const expectedMax = '2020-02-27'; - const values: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.min = '2000-01-01'; - n.max = c; - - await n.updateComplete; - - done([ - n.max, - n2.max, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedMax); - - allStrictEqual(values, expectedMax); - }); - - it(`renders with defined 'value'`, async () => { - type A = [string, string]; - - const expectedValue = '2020-02-20'; - const values: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.min = '2000-01-01'; - n.max = '2020-12-31'; - n.value = c; - - await n.updateComplete; - - done([ - n.value, - n2.value, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedValue); - - allStrictEqual(values, expectedValue); - }); - - it(`renders with defined 'startView'`, async () => { - type A = [StartView, StartView]; - - const expectedStartView: StartView = 'calendar'; - const values: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.startView = c; - - await n.updateComplete; - - done([ - n.startView, - n2.startView, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedStartView); - - allStrictEqual(values, expectedStartView); - }); - - it(`renders with defined 'firstDayOfWeek'`, async () => { - type A = [number, number]; - - const expectedFirstDayOfWeek = 1; - const values: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.firstDayOfWeek = c; - - await n.updateComplete; - - done([ - n.firstDayOfWeek, - n2.firstDayOfWeek, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedFirstDayOfWeek); - - allStrictEqual(values, expectedFirstDayOfWeek); - }); - - it(`renders with defined 'showWeekNumber'`, async () => { - type A = [boolean, boolean]; - - const expectedShowWeekNumber: boolean = true; - const values: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.showWeekNumber = c; - - await n.updateComplete; - - done([ - n.showWeekNumber, - n2.showWeekNumber, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedShowWeekNumber); - - allStrictEqual(values, expectedShowWeekNumber); - }); - - it(`renders with defined 'weekNumberType'`, async () => { - type A = [WeekNumberType, WeekNumberType]; - - const expectedWeekNumberType: WeekNumberType = 'first-4-day-week'; - const values: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.weekNumberType = c; - - await n.updateComplete; - - done([ - n.weekNumberType, - n2.weekNumberType, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedWeekNumberType); - - allStrictEqual(values, expectedWeekNumberType); - }); - - it(`renders with defined 'landscape'`, async () => { - type A = [boolean, boolean]; - - const expectedLandscape: boolean = true; - const values: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.landscape = c; - - await n.updateComplete; - - done([ - n.landscape, - n2.landscape, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedLandscape); - - allStrictEqual(values, expectedLandscape); - }); - - it(`renders with defined 'locale'`, async () => { - type A = [string, string]; - - const expectedLocale: string = 'ja-JP'; - const values: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.locale = c; - - await n.updateComplete; - - done([ - n.locale, - n2.locale, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedLocale); - - allStrictEqual(values, expectedLocale); - }); - - it(`renders with defined 'disabledDays'`, async () => { - type A = [string, string]; - - const expectedDisabledDays: string = '3,5'; - const values: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.disabledDays = c; - - await n.updateComplete; - - done([ - n.disabledDays, - n2.disabledDays, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedDisabledDays); - - allStrictEqual(values, expectedDisabledDays); - }); - - it(`renders with defined 'disabledDates'`, async () => { - type A = [string, string]; - - const expectedDisabledDates: string = '2020-02-02,2020-02-15'; - const values: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.disabledDates = c; - - await n.updateComplete; - - done([ - n.disabledDates, - n2.disabledDates, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedDisabledDates); - - allStrictEqual(values, expectedDisabledDates); - }); - - it(`renders with defined 'dragRatio'`, async () => { - type A = [number, number]; - - const dragRatio = .5; - const values: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.querySelector(a)!; - - n.dragRatio = c; - - await n.updateComplete; - - const n2 = n.shadowRoot!.querySelector(b)!; - - done([ - n.dragRatio, - n2.dragRatio, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, dragRatio); - - allStrictEqual(values, dragRatio); - }); - - it(`renders with defined 'weekLabel'`, async () => { - type A = [string, string, string]; - - const expectedWeekLabel: string = '周数'; - const [ - initialLabel, - ...others - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - const iniialWeekLabel = n.weekLabel; - - n.weekLabel = c; - - await n.updateComplete; - - done([ - iniialWeekLabel, - n.weekLabel, - n2.weekLabel, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedWeekLabel); - - strictEqual(initialLabel, 'Wk'); - allStrictEqual(others, expectedWeekLabel); - }); - - it(`renders with defined 'clearLabel'`, async () => { - type A = [string, string, string]; - - const expectedClearLabel: string = '重設'; - const [ - initialClearLabel, - ...others - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - const initialLabel = n.clearLabel; - - n.clearLabel = c; - - await n.updateComplete; - - const clearButton = root.querySelector(b); - - done([ - initialLabel, - n.clearLabel, - clearButton?.textContent ?? '', - ] as A); - }, DATEPICKER_DIALOG_NAME, `[part="clear"]`, expectedClearLabel); - - strictEqual(initialClearLabel, 'clear'); - allStrictEqual(others, expectedClearLabel); - }); - - it(`renders with defined 'dismissLabel'`, async () => { - type A = [string, string, string]; - - const expectedDismissLabel: string = '取消'; - const [ - initialDismissLabel, - ...others - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - const initialLabel = n.dismissLabel; - - n.dismissLabel = c; - - await n.updateComplete; - - const clearButton = root.querySelector(b); - - done([ - initialLabel, - n.dismissLabel, - clearButton?.textContent ?? '', - ] as A); - }, DATEPICKER_DIALOG_NAME, `[part="dismiss"]`, expectedDismissLabel); - - strictEqual(initialDismissLabel, 'cancel'); - allStrictEqual(others, expectedDismissLabel); - }); - - it(`renders with defined 'confirmLabel'`, async () => { - type A = [string, string, string]; - - const expectedConfirmLabel: string = '取消'; - const [ - initialConfirmLabel, - ...others - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - const initialLabel = n.confirmLabel; - - n.confirmLabel = c; - - await n.updateComplete; - - const clearButton = root.querySelector(b); - - done([ - initialLabel, - n.confirmLabel, - clearButton?.textContent ?? '', - ] as A); - }, DATEPICKER_DIALOG_NAME, `[part="confirm"]`, expectedConfirmLabel); - - strictEqual(initialConfirmLabel, 'set'); - allStrictEqual(others, expectedConfirmLabel); - }); - - it(`renders with defined 'noFocusTrap'`, async () => { - type A = [boolean, boolean, string]; - - const expectedNoFocusTap: boolean = true; - const [ - initialProp, - prop, - activeElementContent, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const getDeepActiveElement = () => { - let $n = document.activeElement; - while ($n?.shadowRoot) { $n = $n.shadowRoot.activeElement; } - return $n; - }; - - const n = document.body.querySelector(a)!; - const initialNoFocusTrap = n.noFocusTrap; - - n.min = '2000-01-01'; - n.value = '2020-02-02'; - n.noFocusTrap = c; - - await n.updateComplete; - - const confirmButton = n.querySelector(b); - - confirmButton?.focus(); - - const tabEvent = new CustomEvent('keyup'); - - Object.defineProperty(tabEvent, 'keyCode', { value: 9 }); - n.dispatchEvent(tabEvent); - - await n.updateComplete; - - done([ - initialNoFocusTrap, - n.noFocusTrap, - - getDeepActiveElement()?.outerHTML ?? '', - ] as A); - }, DATEPICKER_DIALOG_NAME, `[part="confirm"]`, expectedNoFocusTap); - - strictEqual(initialProp, false); - strictEqual(prop, expectedNoFocusTap); - strictEqual( - cleanHtml(activeElementContent), - prettyHtml`` - ); - }); - - it(`renders with defined 'alwaysResetValue'`, async () => { - type A = [boolean, boolean, string, string, string]; - - const expectedAlwaysResetValue: boolean = true; - const [ - initialProp, - prop, - - value, - value2, - - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - const n2 = root.querySelector(b)!; - const initialAlwaysResetValue = n.alwaysResetValue; - - n.min = '2000-01-01'; - n.value = '2020-02-02'; - n.alwaysResetValue = d; - n2.value = '2020-02-20'; - - await n2.updateComplete; - await n.updateComplete; - - await n.close(); - await n.open(); - await n.updateComplete; - - const focusedDate = n2.shadowRoot!.querySelector(c); - - done([ - initialAlwaysResetValue, - n.alwaysResetValue, - - n.value, - n2.value, - focusedDate?.outerHTML ?? '', - ] as A); - }, - DATEPICKER_DIALOG_NAME, - DATEPICKER_NAME, - toSelector('.day--focused'), - expectedAlwaysResetValue); - - strictEqual(initialProp, false); - strictEqual(prop, expectedAlwaysResetValue); - allStrictEqual([value, value2], '2020-02-02'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
2
- `); - }); - - it(`renders with different 'firstDayOfWeek' and 'disabledDays'`, async () => { - type A = [number, number, string, string]; - - const expectedFirstDayOfWeek: number = 1; - const expectedDisabledDays: string = '3,5'; - const values: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - n.firstDayOfWeek = c; - n.disabledDays = d; - - await n.updateComplete; - - done([ - n.firstDayOfWeek, - n2.firstDayOfWeek, - - n.disabledDays, - n2.disabledDays, - ] as A); - }, DATEPICKER_DIALOG_NAME, DATEPICKER_NAME, expectedFirstDayOfWeek, expectedDisabledDays); - - deepStrictEqual(values, [ - expectedFirstDayOfWeek, - expectedFirstDayOfWeek, - - expectedDisabledDays, - expectedDisabledDays, - ]); - }); - -}); diff --git a/src/tests/app-datepicker-dialog/tests.ts b/src/tests/app-datepicker-dialog/tests.ts deleted file mode 100644 index 9bac050c0..000000000 --- a/src/tests/app-datepicker-dialog/tests.ts +++ /dev/null @@ -1,8 +0,0 @@ -import './a11y.spec.js'; -import './attributes.spec.js'; -import './events.spec.js'; -import './gestures.spec.js'; -import './initial-render.spec.js'; -import './keyboards.spec.js'; -import './mouses.spec.js'; -import './properties.spec.js'; diff --git a/src/tests/app-datepicker/a11y.spec.ts b/src/tests/app-datepicker/a11y.spec.ts deleted file mode 100644 index b6bc59ffc..000000000 --- a/src/tests/app-datepicker/a11y.spec.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { DATEPICKER_NAME } from '../../constants.js'; -import type { StartView } from '../../custom_typings.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import { deepStrictEqual } from '../helpers/typed-assert.js'; - -interface A11ySuccess { - type: 'success'; -} -interface A11yError { - type: 'error'; - name: string; - message: string; - stack: string; -} -type A11yReport = A11ySuccess | A11yError; - -describe('a11y', () => { - const toError = (result: null | A11yReport) => { - if (result?.type === 'success') return ''; - - const { message, name, stack } = (result ?? {}) as A11yError; - - const err = new Error(message); - - if (name) err.name = name; - if (stack) err.stack = stack; - - return err; - }; - - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: Datepicker = document.createElement(a)!; - - document.body.appendChild(el); - - el.locale = 'en-US'; - - await el.updateComplete; - - done(); - }, DATEPICKER_NAME); - }); - - afterEach(async () => { - await browser.executeAsync(async (a, done) => { - const el = document.body.querySelector(a)!; - - if (el) document.body.removeChild(el); - - done(); - }, DATEPICKER_NAME); - }); - - it(`is accessible`, async () => { - const resultsTasks = [ - 'calendar' as StartView, - 'yearList' as StartView, - ].map>(async (startView) => { - const report = await browser.executeAsync(async (a, b, done) => { - try { - const el = document.body.querySelector(a)!; - - el.startView = b; - - await el.updateComplete; - - await (window as any).axeReport(el); - - done({ type: 'success' }); - } catch (e) { - done({ - type: 'error', - name: e.name, - message: e.message, - stack: e.stack, - }); - } - }, DATEPICKER_NAME, startView); - - return report; - }); - const results = await Promise.all(resultsTasks); - - deepStrictEqual( - (results).every(n => n.type === 'success'), - true, - toError(results.find(n => n.type === 'error') ?? { - type: 'error', - message: 'Test failed with unknown accessibility error', - name: 'error', - stack: '', - }) - ); - }); - -}); diff --git a/src/tests/app-datepicker/attributes.spec.ts b/src/tests/app-datepicker/attributes.spec.ts deleted file mode 100644 index 168e9f951..000000000 --- a/src/tests/app-datepicker/attributes.spec.ts +++ /dev/null @@ -1,688 +0,0 @@ -import type { WeekNumberType } from 'nodemod/dist/calendar/calendar_typing.js'; - -import { DATEPICKER_NAME } from '../../constants.js'; -import type { StartView } from '../../custom_typings.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import { cleanHtml } from '../helpers/clean-html.js'; -import { prettyHtml } from '../helpers/pretty-html.js'; -import { toSelector } from '../helpers/to-selector.js'; -import { - allStrictEqual, - deepStrictEqual, - ok, - strictEqual, -} from '../helpers/typed-assert.js'; - -describe('attributes', () => { - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: Datepicker = document.createElement(a); - - el.locale = 'en-US'; - el.min = '2000-01-01'; - - document.body.appendChild(el); - - await el.updateComplete; - - done(); - }, DATEPICKER_NAME); - }); - - afterEach(async () => { - await browser.executeAsync((a, done) => { - const el = document.body.querySelector(a)!; - - document.body.removeChild(el); - - done(); - }, DATEPICKER_NAME); - }); - - it(`takes snapshot (attributes)`, async () => { - const browserName = browser.capabilities.browserName; - - await browser.saveScreenshot( - `./src/tests/snapshots/${DATEPICKER_NAME}/attributes-0-${browserName}.png`); - - await browser.executeAsync(async (a, done) => { - const el = document.body.querySelector(a)!; - - el.min = '2020-01-15'; - el.value = '2020-01-17'; - await el.updateComplete; - - done(); - }, DATEPICKER_NAME); - - await browser.saveScreenshot( - `./src/tests/snapshots/${DATEPICKER_NAME}/attributes-1-${browserName}.png`); - }); - - it(`renders with defined 'min'`, async () => { - type A = [string, string, string, string]; - const [ - prop, - attr, - lastDisabledDateContent, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - - n.value = '2020-01-17'; - n.setAttribute('min', '2020-01-15'); - await n.updateComplete; - - const root = n.shadowRoot!; - - const disabledDates = Array.from(root.querySelectorAll(b)); - const lastDisabledDate = disabledDates[disabledDates.length - 1]; - - const focusedDate = root.querySelector(c); - - done([ - n.min, - n.getAttribute('min'), - lastDisabledDate.outerHTML, - focusedDate.outerHTML, - ] as A); - }, DATEPICKER_NAME, toSelector('.day--disabled'), toSelector('.day--focused')); - - allStrictEqual([prop, attr], '2020-01-15'); - strictEqual(cleanHtml(lastDisabledDateContent), prettyHtml` - -
14
- - `); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
17
- - `); - }); - - it(`renders with defined 'max'`, async () => { - type A = [string, string, string, string]; - - const [ - prop, - attr, - firstDisabledDateContent, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - - n.value = '2020-01-15'; - n.min = '2000-01-01'; - n.setAttribute('max', '2020-01-17'); - - await n.updateComplete; - - const root = n.shadowRoot!; - - const firstDisabledDate = root.querySelector(b)!; - const focusedDate = root.querySelector(c)!; - - done([ - n.max, - n.getAttribute('max'), - firstDisabledDate.outerHTML, - focusedDate.outerHTML, - ] as A); - }, DATEPICKER_NAME, toSelector('.day--disabled'), toSelector('.day--focused')); - - allStrictEqual([prop, attr], '2020-01-17'); - strictEqual(cleanHtml(firstDisabledDateContent), prettyHtml` - -
18
- - `); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
15
- - `); - }); - - it(`renders with defined 'value'`, async () => { - type A = [string, string, string, string]; - - const [ - prop, - attr, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.min = '2000-01-01'; - n.max = '2020-12-31'; - n.setAttribute('value', '2020-01-15'); - - await n.updateComplete; - - const focusedDate = n.shadowRoot!.querySelector(b)!; - - done([ - n.value, - n.getAttribute('value'), - focusedDate.outerHTML, - ]); - }, DATEPICKER_NAME, toSelector('.day--focused')); - - allStrictEqual([prop, attr], '2020-01-15'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
15
- - `); - }); - - it(`renders with defined 'startview'`, async () => { - type A = [StartView, StartView, boolean]; - - const [ - prop, - attr, - hasYearListView, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.setAttribute('startview', 'yearList' as StartView); - - await n.updateComplete; - - const yearListView = n.shadowRoot!.querySelector(b)!; - - done([ - n.startView, - n.getAttribute('startview'), - yearListView != null, - ] as A); - }, DATEPICKER_NAME, '.datepicker-body__year-list-view'); - - allStrictEqual([prop, attr], 'yearList'); - ok(hasYearListView); - }); - - it(`renders with defined 'firstdayofweek'`, async () => { - type A = [number, string, string, string]; - - const [ - prop, - attr, - firstWeekdayLabelContent, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.setAttribute('firstdayofweek', '2'); - - await n.updateComplete; - - const root = n.shadowRoot!; - - const firstWeekdayLabel = root.querySelector(b)!; - const focusedDate = root.querySelector(c)!; - - done([ - n.firstDayOfWeek, - n.getAttribute('firstdayofweek'), - firstWeekdayLabel.outerHTML, - focusedDate.outerHTML, - ] as A); - }, - DATEPICKER_NAME, - toSelector('th'), - toSelector('tbody > tr:nth-of-type(3) > td:nth-of-type(2)')); - - strictEqual(prop, 2); - strictEqual(attr, '2'); - strictEqual(cleanHtml(firstWeekdayLabelContent), prettyHtml` - -
T
- - `); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
15
- - `); - }); - - it(`renders with defined 'showweeknumber'`, async () => { - type A = [boolean, string, string, string[]]; - - const [ - prop, - attr, - weekNumberLabelContent, - weekNumbersContents, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - - n.value = '2020-01-15'; - n.setAttribute('showweeknumber', ''); - - await n.updateComplete; - - const root = n.shadowRoot!; - - const weekNumberLabel = root.querySelector(b)!; - const weekNumbers = Array.from( - root.querySelectorAll(c), o => o.outerHTML); - - done([ - n.showWeekNumber, - n.getAttribute('showweeknumber'), - weekNumberLabel.outerHTML, - weekNumbers, - ] as A); - }, - DATEPICKER_NAME, - toSelector(`th[aria-label="Week"]`), - toSelector('tbody > tr > th')); - - strictEqual(prop, true); - strictEqual(attr, ''); - strictEqual( - cleanHtml(weekNumberLabelContent), - prettyHtml` - -
Wk
- - ` - ); - deepStrictEqual( - weekNumbersContents.map(n => cleanHtml(n)), - [1, 2, 3, 4, 5].map((n) => { - return prettyHtml( - `${n}` - ); - }) - ); - }); - - it(`renders with defined 'weeknumbertype'`, async () => { - type A = [WeekNumberType, WeekNumberType, string[]]; - - const [ - prop, - attr, - weekNumbersContents, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.value = '2020-01-15'; - n.showWeekNumber = true; - n.setAttribute('weeknumbertype', 'first-full-week' as WeekNumberType); - - await n.updateComplete; - - const weekNumbers = Array.from( - n.shadowRoot!.querySelectorAll(b), o => o.outerHTML); - - done([ - n.weekNumberType, - n.getAttribute('weeknumbertype'), - weekNumbers, - ] as A); - }, DATEPICKER_NAME, toSelector('tbody > tr > th')); - - allStrictEqual([prop, attr], 'first-full-week'); - deepStrictEqual( - weekNumbersContents.map(n => cleanHtml(n)), - [52, 1, 2, 3, 4].map((n) => { - return prettyHtml( - `${n}` - ); - }) - ); - - }); - - it(`renders with defined 'landscape'`, async () => { - type A = [boolean, string, string]; - - const [ - prop, - attr, - cssDisplay, - ]: A = await browser.executeAsync(async (a, done) => { - const n = document.body.querySelector(a)!; - - n.setAttribute('landscape', ''); - - await n.updateComplete; - - done([ - n.landscape, - n.getAttribute('landscape'), - getComputedStyle(n).display, - ] as A); - }, DATEPICKER_NAME); - - strictEqual(prop, true); - strictEqual(attr, ''); - strictEqual(cssDisplay, 'flex'); - }); - - it(`renders with defined 'locale'`, async () => { - type A = [string, string, string, string[]]; - - const [ - prop, - attr, - focusedDateContent, - weekdayLabelsContents, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.setAttribute('locale', 'ja-JP'); - - await n.updateComplete; - - const root = n.shadowRoot!; - - const focusedDate = root.querySelector(b)!; - const weekdayLabels = Array.from( - root.querySelectorAll(c), o => o.outerHTML); - - done([ - n.locale, - n.getAttribute('locale'), - focusedDate.outerHTML, - weekdayLabels, - ] as A); - }, DATEPICKER_NAME, toSelector('.day--focused'), toSelector('.calendar-weekdays > th')); - - allStrictEqual([prop, attr], 'ja-JP'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
15日
- - `); - deepStrictEqual(weekdayLabelsContents.map(n => cleanHtml(n)), [ - '日', - '月', - '火', - '水', - '木', - '金', - '土', - ].map((n) => { - return prettyHtml( - ` -
${n}
- ` - ); - })); - }); - - it(`renders with defined 'disableddays'`, async () => { - type A = [string, string, string[]]; - - const [ - prop, - attr, - disabledDatesContents, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.setAttribute('disableddays', '1,5'); - - await n.updateComplete; - - const disabledDates = Array.from( - n.shadowRoot!.querySelectorAll(b), o => o.outerHTML); - - done([ - n.disabledDays, - n.getAttribute('disableddays'), - disabledDates, - ] as A); - }, DATEPICKER_NAME, toSelector('.day--disabled')); - - allStrictEqual([prop, attr], '1,5'); - deepStrictEqual( - disabledDatesContents.map(n => cleanHtml(n)), - [3, 6, 10, 13, 17, 20, 24, 27, 31].map((n) => { - return prettyHtml(` - -
${n}
- - `); - }) - ); - }); - - it(`renders with defined 'disableddates'`, async () => { - type A = [string, string, string[]]; - - const disableddates = [ - '2020-01-03', - '2020-01-09', - '2020-01-21', - '2020-01-27', - ].join(','); - const [ - prop, - attr, - disabledDatesContents, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.setAttribute('disableddates', c); - - await n.updateComplete; - - const disabledDates = Array.from( - n.shadowRoot!.querySelectorAll(b), o => o.outerHTML); - - done([ - n.disabledDates, - n.getAttribute('disableddates'), - disabledDates, - ] as A); - }, DATEPICKER_NAME, toSelector('.day--disabled'), disableddates); - - allStrictEqual([prop, attr], disableddates); - deepStrictEqual(disabledDatesContents.map(n => cleanHtml(n)), [3, 9, 21, 27].map((n) => { - return prettyHtml(` - -
${n}
- - `); - })); - }); - - it(`renders with defined 'inline'`, async () => { - type A = [boolean, string, null]; - - const [ - prop, - attr, - noDatepickerHeader, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.setAttribute('inline', ''); - - await n.updateComplete; - - const datepickerHeader = n.shadowRoot!.querySelector(b); - - done([ - n.inline, - n.getAttribute('inline'), - datepickerHeader, - ] as A); - }, DATEPICKER_NAME, '.datepicker-header'); - - strictEqual(prop, true); - strictEqual(attr, ''); - strictEqual(noDatepickerHeader, null); - }); - - it(`renders with optional 'dragratio'`, async () => { - type A = [number, string]; - - const dragRatio = .5; - const [ - prop, - attr, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.setAttribute('dragratio', `${b}`); - - await n.updateComplete; - - done([ - n.dragRatio, - n.getAttribute('dragratio'), - ] as A); - }, DATEPICKER_NAME, dragRatio); - - strictEqual(prop, dragRatio); - strictEqual(attr, `${dragRatio}`); - }); - - it(`renders with defined 'weeklabel'`, async () => { - type A = [string, string, string]; - - const weekLabel = '周数'; - const [ - prop, - attr, - weekNumberLabelContent, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - - n.value = '2020-01-15'; - n.showWeekNumber = true; - n.setAttribute('weeklabel', c); - - await n.updateComplete; - - const weekNumberLabel = n.shadowRoot!.querySelector(b)!; - - done([ - n.weekLabel, - n.getAttribute('weeklabel'), - weekNumberLabel.outerHTML, - ] as A); - }, DATEPICKER_NAME, toSelector(`th[aria-label="${weekLabel}"]`), weekLabel); - - allStrictEqual([prop, attr], weekLabel); - strictEqual( - cleanHtml(weekNumberLabelContent), - prettyHtml` - -
周数
- ` - ); - }); - - it(`renders with different 'showweeknumber', 'firstdayofweek', and 'disableddays'`, async () => { - type A = [number, string, string, string, boolean, string, string[]]; - - const props: number[] = []; - const attrs: string[] = []; - const props2: string[] = []; - const attrs2: string[] = []; - const showWeekNumberProps: boolean[] = []; - const focusedDateContents: string[] = []; - const disabledDatesContents: string[][] = []; - - for (const showWeekNumber of [true, false]) { - const [ - prop, - attr, - prop2, - attr2, - prop3, - focusedDateContent, - disabledDatesContent, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.setAttribute('firstdayofweek', '2'); - n.setAttribute('disableddays', '1,5'); - - if (b) { - n.setAttribute('showweeknumber', ''); - } else { - n.removeAttribute('showweeknumber'); - } - - await n.updateComplete; - - const root = n.shadowRoot!; - - const focusedDate = root.querySelector(c)!; - const disabledDates = Array.from( - root.querySelectorAll(d), o => o.outerHTML); - - done([ - n.firstDayOfWeek, - n.getAttribute('firstdayofweek'), - n.disabledDays, - n.getAttribute('disableddays'), - n.showWeekNumber, - focusedDate.outerHTML, - disabledDates, - ] as A); - }, - DATEPICKER_NAME, - showWeekNumber, - toSelector('tbody > tr:nth-of-type(3) > td:nth-of-type(2)'), - toSelector('.day--disabled')); - - props.push(prop); - attrs.push(attr); - props2.push(prop2); - attrs2.push(attr2); - showWeekNumberProps.push(prop3); - focusedDateContents.push(focusedDateContent); - disabledDatesContents.push(disabledDatesContent); - } - - allStrictEqual(props, 2); - allStrictEqual(attrs, '2'); - allStrictEqual(props2.concat(attrs2), '1,5'); - deepStrictEqual(showWeekNumberProps, [true, false]); - allStrictEqual(focusedDateContents.map(n => cleanHtml(n)), prettyHtml` - -
15
- - `); - - const expectedDisabledDatesContent = [ - 3, 6, 10, 13, 17, 20, 24, 27, 31, - ].map((n) => { - return prettyHtml(` - -
${n}
- - `); - }); - deepStrictEqual(disabledDatesContents[0].map(n => cleanHtml(n)), expectedDisabledDatesContent); - deepStrictEqual(disabledDatesContents[1].map(n => cleanHtml(n)), expectedDisabledDatesContent); - }); - -}); diff --git a/src/tests/app-datepicker/edge-cases.spec.ts b/src/tests/app-datepicker/edge-cases.spec.ts deleted file mode 100644 index a2fd4ebe0..000000000 --- a/src/tests/app-datepicker/edge-cases.spec.ts +++ /dev/null @@ -1,329 +0,0 @@ -import { DATEPICKER_NAME } from '../../constants.js'; -import { KEY_CODES_MAP } from '../../custom_typings.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import type { PrepareOptions } from '../custom_typings.js'; -import { cleanHtml } from '../helpers/clean-html.js'; -import { interaction } from '../helpers/interaction.js'; -import { prettyHtml } from '../helpers/pretty-html.js'; -import { toSelector } from '../helpers/to-selector.js'; -import { - allStrictEqual, - deepStrictEqual, - strictEqual, -} from '../helpers/typed-assert.js'; - -describe('edge cases', () => { - const isSafari = browser.capabilities.browserName === 'Safari'; - const { - browserKeys, - clickElements, - focusCalendarsContainer, - } = interaction({ isSafari, elementName: DATEPICKER_NAME }); - - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: Datepicker = document.createElement(a); - - el.locale = 'en-US'; - el.min = '2000-01-01'; - el.value = '2020-02-02'; - - document.body.appendChild(el); - await el.updateComplete; - - done(); - }, DATEPICKER_NAME); - }); - - afterEach(async () => { - await browser.executeAsync((a, done) => { - const el = document.body.querySelector(a)!; - - document.body.removeChild(el); - - done(); - }, DATEPICKER_NAME); - }); - - it(`updates month after navigating with keyboard and mouse`, async () => { - type A = [string, string]; - - const getValues = () => browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const calendarLabel = n.shadowRoot!.querySelector(b)!; - - done([ - n.value, - calendarLabel.outerHTML, - ] as A); - }, DATEPICKER_NAME, toSelector('.calendar-label')); - - await focusCalendarsContainer(); - await browserKeys(KEY_CODES_MAP.PAGE_DOWN); - await browserKeys(KEY_CODES_MAP.PAGE_DOWN); - - const [prop, calendarLabelContent] = await getValues(); - - await clickElements([ - `.btn__month-selector[aria-label="Previous month"]`, - ]); - - const [prop2, calendarLabelContent2] = await getValues(); - - allStrictEqual([prop, prop2], '2020-04-02'); - strictEqual(cleanHtml(calendarLabelContent), prettyHtml` -
April 2020
- `); - strictEqual(cleanHtml(calendarLabelContent2), prettyHtml` -
March 2020
- `); - }); - - // #region helper - type B = [string, string]; - const getValuesAfterKeys = async ( - key: number, - altKey: boolean = false, - prepareOptions?: PrepareOptions - ): Promise => { - await browser.executeAsync(async (a, b: PrepareOptions, done) => { - const n = document.body.querySelector(a)!; - - if (b) { - const attrs = b.attrs ?? {}; - const props = b.props ?? {}; - - Object.keys(attrs ?? {}).forEach((k) => { - (n as any)[k] = (attrs as any)[k]; - }); - - Object.keys(props ?? {}).forEach((k) => { - (n as any)[k] = (props as any)[k]; - }); - } else { - n.min = '2000-01-01'; - n.value = '2020-02-29'; - } - - await n.updateComplete; - - done(); - }, DATEPICKER_NAME, prepareOptions); - - await clickElements(Array.from('123', () => ( - `.btn__month-selector[aria-label="Next month"]` - ))); - - await focusCalendarsContainer(); - await browserKeys(key, altKey); - - const [prop, content]: B = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const focusedDate = n.shadowRoot!.querySelector(b)!; - - done([ - n.value, - focusedDate.outerHTML, - ] as B); - }, DATEPICKER_NAME, toSelector('.day--focused')); - - return [prop, cleanHtml(content)]; - }; - // #endregion helper - - it(`focuses first day of month when focused date does not exist (Arrows)`, async () => { - const arrowKeys: KEY_CODES_MAP[] = [ - KEY_CODES_MAP.ARROW_DOWN, - KEY_CODES_MAP.ARROW_LEFT, - KEY_CODES_MAP.ARROW_RIGHT, - KEY_CODES_MAP.ARROW_UP, - ]; - const props: string[] = []; - const focusedDateContents: string[] = []; - - for (const arrowKey of arrowKeys) { - const [prop, focusedDateContent] = await getValuesAfterKeys(arrowKey); - - props.push(prop); - focusedDateContents.push(focusedDateContent); - } - - allStrictEqual(props, '2020-05-01'); - allStrictEqual(focusedDateContents, prettyHtml` - -
1
- - `); - }); - - it(`focuses first day of month when focused date does not exist (Home, End)`, async () => { - const arrowKeys: KEY_CODES_MAP[] = [ - KEY_CODES_MAP.HOME, - KEY_CODES_MAP.END, - ]; - const props: string[] = []; - const focusedDateContents: string[] = []; - - for (const arrowKey of arrowKeys) { - const [prop, focusedDateContent] = await getValuesAfterKeys(arrowKey); - - props.push(prop); - focusedDateContents.push(focusedDateContent); - } - - deepStrictEqual(props, ['2020-05-01', '2020-05-31']); - deepStrictEqual(focusedDateContents, [1, 31].map(n => prettyHtml(` - -
${n}
- - `))); - }); - - it(`focuses first day of month when focused date does not exist (PageDown, PageUp)`, - async () => { - const arrowKeys: KEY_CODES_MAP[] = [ - KEY_CODES_MAP.PAGE_DOWN, - KEY_CODES_MAP.PAGE_UP, - ]; - const props: string[] = []; - const focusedDateContents: string[] = []; - - for (const arrowKey of arrowKeys) { - const [prop, focusedDateContent] = await getValuesAfterKeys(arrowKey); - - props.push(prop); - focusedDateContents.push(focusedDateContent); - } - - deepStrictEqual(props, ['2020-06-01', '2020-04-01']); - deepStrictEqual(focusedDateContents, ['Jun', 'Apr'].map(n => prettyHtml(` - -
1
- - `))); - }); - - it(`focuses first day of month when focused date does not exist (Alt + {PageDown, PageUp})`, - async () => { - const arrowKeys: KEY_CODES_MAP[] = [ - KEY_CODES_MAP.PAGE_DOWN, - KEY_CODES_MAP.PAGE_UP, - ]; - const props: string[] = []; - const focusedDateContents: string[] = []; - - for (const arrowKey of arrowKeys) { - const [prop, focusedDateContent] = await getValuesAfterKeys(arrowKey, true); - - props.push(prop); - focusedDateContents.push(focusedDateContent); - } - - deepStrictEqual(props, ['2021-05-01', '2019-05-01']); - deepStrictEqual(focusedDateContents, [2021, 2019].map(n => prettyHtml(` - -
1
- - `))); - }); - - it(`focuses first focusable day of month (Enter, Space)`, async () => { - const keys: KEY_CODES_MAP[] = [KEY_CODES_MAP.ENTER, KEY_CODES_MAP.SPACE]; - const props: string[] = []; - const focusedDateContents: string[] = []; - - for (const key of keys) { - const [prop, focusedDateContent] = await getValuesAfterKeys(key, false, { - props: { - min: '2000-01-01', - value: '2019-11-30', - }, - }); - - props.push(prop); - focusedDateContents.push(focusedDateContent); - } - - allStrictEqual(props, '2020-02-01'); - allStrictEqual(focusedDateContents.map(n => cleanHtml(n)), prettyHtml` - -
1
- - `); - }); - - it(`reset invalid 'value' to 'min' or 'max'`, async () => { - type A = [string, string, string, string]; - - const inputs: [string, string, undefined | string][] = [ - // Reset to 'min' - ['2020-02-02', '2020-02-27', '2020-01-01'], - - // Reset to 'max' - ['2020-02-02', '2020-02-27', '2020-03-01'], - ['2020-02-02', '2020-02-27', ''], - ['2020-02-02', '2020-02-27', 'lol'], - ['2020-02-02', '2020-02-27', undefined], - ]; - const maxValues: string[] = []; - const minValues: string[] = []; - const values: string[] = []; - const focusedDateContents: string[] = []; - - for (const input of inputs) { - const [ - minProp, - maxProp, - valueProp, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, d, e, done) => { - const n = document.body.querySelector(a)!; - - n.min = b; - n.max = c; - n.value = d; - - while (!(await n.updateComplete)) { - /** Loop until all renders complete (Chrome needs this but not FF) */ - } - - const focusedDate = n.shadowRoot!.querySelector(e); - - done([ - n.min, - n.max, - n.value, - focusedDate?.outerHTML || '', - ] as A); - }, DATEPICKER_NAME, ...input, toSelector('.day--focused')); - - minValues.push(minProp); - maxValues.push(maxProp); - values.push(valueProp); - focusedDateContents.push(focusedDateContent); - } - - allStrictEqual(maxValues, '2020-02-27'); - allStrictEqual(minValues, '2020-02-02'); - deepStrictEqual(focusedDateContents.map(n => cleanHtml(n)), [ - prettyHtml` - -
2
- - `, - ...Array.from('1234', () => prettyHtml(` - -
27
- - `)), - ]); - }); - -}); diff --git a/src/tests/app-datepicker/events.spec.ts b/src/tests/app-datepicker/events.spec.ts deleted file mode 100644 index 3c7c51b6e..000000000 --- a/src/tests/app-datepicker/events.spec.ts +++ /dev/null @@ -1,221 +0,0 @@ -import { DATEPICKER_NAME } from '../../constants.js'; -import type { DatepickerFirstUpdated, DatepickerValueUpdated } from '../../custom_typings.js'; -import { KEY_CODES_MAP } from '../../custom_typings.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import { toSelector } from '../helpers/to-selector.js'; -import { - allStrictEqual, - deepStrictEqual, - strictEqual, -} from '../helpers/typed-assert.js'; - -describe('events', () => { - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - it(`fires 'datepicker-first-updated'`, async () => { - type A = [string, string, string]; - - const resultValues: string[] = []; - const resultContents: string[] = []; - let todayDateValue: string = ''; - - /** - * This ensures the datepicker returns the correct first focusable element - * when it renders in inline mode and in normal mode. - */ - for (const inlineVal of [true, false]) { - const [val, todayVal, content]: A = await browser.executeAsync(async (a, b, done) => { - const n: Datepicker = document.createElement(a)!; - - /** - * NOTE: Get the today's date from the browser instead of - * from the environment where the testing command is run. - */ - const now = new Date(); - const today = [`${now.getFullYear()}`] - .concat([1 + now.getMonth(), now.getDate()].map(o => `0${o}`.slice(-2))) - .join('-'); - - const firstUpdated: Promise = new Promise((yay) => { - let timer = -1; - - n.addEventListener('datepicker-first-updated', function handler( - ev: CustomEvent - ) { - const { firstFocusableElement, value } = ev.detail; - const elementTag = firstFocusableElement.localName; - const selectorCls = - Array.from(firstFocusableElement.classList).find(o => o.indexOf('selector') >= 0); - - clearTimeout(timer); - yay([ - value, - today, - `${elementTag}${selectorCls ? `.${selectorCls}` : ''}`, - ] as A); - n.removeEventListener('datepicker-first-updated', handler); - }); - - timer = window.setTimeout(() => yay(['', '', '']), 15e3); - }); - - n.locale = 'en-US'; - n.min = '2000-01-01'; - n.inline = b; - - document.body.appendChild(n); - - await n.updateComplete; - - const firstUpdatedResult = await firstUpdated; - - document.body.removeChild(n); - - done(firstUpdatedResult); - }, DATEPICKER_NAME, inlineVal); - - resultValues.push(val); - resultContents.push(content); - todayDateValue = todayVal; - } - - allStrictEqual(resultValues, todayDateValue); - deepStrictEqual(resultContents, [ - `button.btn__month-selector`, - `button.btn__year-selector`, - ]); - }); - - it(`fires 'datepicker-value-selected' event (Enter, Space)`, async () => { - const keys = [ - KEY_CODES_MAP.ENTER, - KEY_CODES_MAP.SPACE, - ]; - const results: boolean[] = []; - - for (const k of keys) { - const result: boolean = await browser.executeAsync(async (a, b, done) => { - const domTriggerKey = (root: HTMLElement, keyCode: number) => { - const ev = new CustomEvent('keyup', { keyCode } as any); - - Object.defineProperty(ev, 'keyCode', { value: keyCode }); - - root.dispatchEvent(ev); - }; - - const n: Datepicker = document.createElement(a); - - n.locale = 'en-US'; - n.min = '2000-01-01'; - n.value = '2020-02-20'; - - document.body.appendChild(n); - - await n.updateComplete; - - const n2 = n.shadowRoot!.querySelector('.calendars-container')!; - - domTriggerKey(n2, KEY_CODES_MAP.ARROW_LEFT); - - const enteredValue = new Promise((yay) => { - let timer = -1; - - n.addEventListener( - 'datepicker-value-updated', - function handler(ev: CustomEvent) { - const { isKeypress, keyCode, value } = ev.detail; - const selectedValue = isKeypress && ( - keyCode === KEY_CODES_MAP.ENTER || keyCode === KEY_CODES_MAP.SPACE - ) ? value : ''; - - clearTimeout(timer); - yay(selectedValue); - n.removeEventListener('datepicker-value-updated', handler); - } - ); - - timer = window.setTimeout(() => yay(''), 15e3); - }); - - domTriggerKey(n2, b); - - await n.updateComplete; - - document.body.removeChild(n); - - done((await enteredValue) === '2020-02-19'); - }, DATEPICKER_NAME, k); - - results.push(result); - } - - deepStrictEqual(results, [true, true]); - }); - - it(`fires 'datepicker-value-updated' when clicks to select new date`, async () => { - type A = [string, boolean, string]; - - const [ - prop, - isKeypressVal, - selectedVal, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n: Datepicker = document.createElement(a); - - n.locale = 'en-US'; - n.min = '2000-01-01'; - n.value = '2020-02-02'; - - document.body.appendChild(n); - - await n.updateComplete; - - const valueUpdated = new Promise((yay) => { - let timer = -1; - - n.addEventListener( - 'datepicker-value-updated', - function handler(ev: CustomEvent) { - clearTimeout(timer); - yay(ev.detail); - n.removeEventListener('datepicker-value-updated', handler); - } - ); - - timer = window.setTimeout(() => yay(null), 15e3); - }); - - const n2 = n.shadowRoot!.querySelector(b)!; - - if (n2 instanceof HTMLButtonElement || n2.tagName === 'MWC-BUTTON') { - n2.click(); - } else { - // Simulate click event on non natively focusable elements. - // This is for selecting new focused date in the table. - ['touchstart', 'touchend'].forEach((o) => { - n2.dispatchEvent(new CustomEvent(o, { bubbles: true, composed: true })); - }); - } - - await n.updateComplete; - const { isKeypress, value } = (await valueUpdated) ?? {} as DatepickerValueUpdated; - - document.body.removeChild(n); - - done([ - n.value, - isKeypress, - value, - ] as A); - }, - DATEPICKER_NAME, - toSelector(`.full-calendar__day[aria-label="Feb 13, 2020"]`)); - - allStrictEqual([prop, selectedVal], '2020-02-13'); - strictEqual(isKeypressVal, false); - }); - -}); diff --git a/src/tests/app-datepicker/gestures.spec.ts b/src/tests/app-datepicker/gestures.spec.ts deleted file mode 100644 index f6e5db45c..000000000 --- a/src/tests/app-datepicker/gestures.spec.ts +++ /dev/null @@ -1,192 +0,0 @@ -import { DATEPICKER_NAME } from '../../constants.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import type { PrepareOptions } from '../custom_typings.js'; -import { interaction } from '../helpers/interaction.js'; -import type { DragOptions } from '../helpers/interaction.js'; -import { - allStrictEqual, -} from '../helpers/typed-assert.js'; - -describe('gestures', () => { - const isSafari = browser.capabilities.browserName === 'Safari'; - const { dragCalendarsContainer } = interaction({ isSafari, elementName: DATEPICKER_NAME }); - const actionTypes: DragOptions['type'][] = ['mouse', 'touch']; - const setup = () => browser.executeAsync(async (a, done) => { - const el: Datepicker = document.createElement(a); - - document.body.appendChild(el); - - el.locale = 'en-US'; - - await el.updateComplete; - - done(); - }, DATEPICKER_NAME); - const cleanup = () => browser.executeAsync((a, done) => { - const els = document.body.querySelectorAll(a); - - els.forEach(n => document.body.removeChild(n)); - - done(); - }, DATEPICKER_NAME); - - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - it(`drags calendar to the left`, async () => { - const results: string[] = []; - - for (const a of actionTypes) { - await setup(); - - const labelText = await dragCalendarsContainer({ - x: 50, - type: a, - }, { - props: { - min: '2000-01-01', - value: '2020-02-02', - }, - }); - - await cleanup(); - - results.push(labelText); - } - - allStrictEqual(results, 'January 2020'); - }); - - it(`drags calendar to the right`, async () => { - const results: string[] = []; - - for (const a of actionTypes) { - await setup(); - - const labelText = await dragCalendarsContainer({ - x: -50, - type: a, - }, { - props: { - min: '2020-02-01', - max: '2021-02-02', - value: '2020-02-02', - }, - }); - - await cleanup(); - - results.push(labelText); - } - - allStrictEqual(results, 'March 2020'); - }); - - it(`does not drag calendar`, async function doesNotDragCalendar() { - const opts = actionTypes.reduce<[DragOptions, PrepareOptions][]>((p, n) => { - return p.concat([ - [{ - x: 10, - step: 1, // Use smaller step for small value of x - type: n, - }, { - props: { - min: '2000-01-01', - value: '2020-02-01', - }, - }], - [{ - x: 50, - type: n, - }, { - props: { - min: '2020-02-01', - value: '2020-02-27', - }, - }], - [{ - x: -10, - step: 1, // Use smaller step for small value of x - type: n, - }, { - props: { - min: '2000-01-01', - max: '2021-01-01', - value: '2020-02-01', - }, - }], - [{ - x: -50, - type: n, - }, { - props: { - min: '2000-01-01', - max: '2020-02-27', - value: '2020-02-01', - }, - }], - ]); - }, []); - const results: string[] = []; - - // Explicitly extend timeout based on the length of sequential tests. - this.timeout(opts.length * 10e3); - - for (const opt of opts) { - await setup(); - - const labelText = await dragCalendarsContainer(...opt); - - await cleanup(); - - results.push(labelText); - } - - allStrictEqual(results, 'February 2020'); - }); - - it(`continues dragging after reaching the min/ max date`, async () => { - const opts = actionTypes.reduce<[DragOptions, PrepareOptions][]>((p, n) => { - return p.concat([ - [{ - x: 50, - x2: -100, - type: n, - }, { - props: { - min: '2020-02-01', - max: '2021-02-01', - value: '2020-02-27', - }, - }], - [{ - x: -100, - x2: 50, - type: n, - }, { - props: { - min: '2000-01-01', - max: '2020-04-27', - value: '2020-04-21', - }, - }], - ]); - }, []); - const results: string[] = []; - - for (const opt of opts) { - await setup(); - - const labelText = await dragCalendarsContainer(...opt); - - await cleanup(); - - results.push(labelText); - } - - allStrictEqual(results, 'March 2020'); - }); - -}); diff --git a/src/tests/app-datepicker/initial-render.spec.ts b/src/tests/app-datepicker/initial-render.spec.ts deleted file mode 100644 index 40adb14fe..000000000 --- a/src/tests/app-datepicker/initial-render.spec.ts +++ /dev/null @@ -1,295 +0,0 @@ -import { DATEPICKER_NAME } from '../../constants.js'; -import type { HTMLElementPart, StartView } from '../../custom_typings.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import { cleanHtml } from '../helpers/clean-html.js'; -import { prettyHtml } from '../helpers/pretty-html.js'; -import { toSelector } from '../helpers/to-selector.js'; -import { - allStrictEqual, - deepStrictEqual, - strictEqual, -} from '../helpers/typed-assert.js'; - -describe('initial render', () => { - describe('calendar view', () => { - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: Datepicker = document.createElement(a); - - el.locale = 'en-US'; - el.min = '2000-01-01'; - el.value = '2020-02-02'; - - document.body.appendChild(el); - - await el.updateComplete; - - done(); - }, DATEPICKER_NAME); - }); - - afterEach(async () => { - await browser.executeAsync((a, done) => { - const el = document.body.querySelector(a)!; - - document.body.removeChild(el); - - done(); - }, DATEPICKER_NAME); - }); - - it(`takes snapshot`, async () => { - const browserName = browser.capabilities.browserName; - - await browser.saveScreenshot( - `./src/tests/snapshots/${DATEPICKER_NAME}/initial-render-calendar-view-${browserName}.png` - ); - }); - - it(`renders initial content`, async () => { - const prop: string = await browser.executeAsync(async (a, done) => { - const n = document.body.querySelector(a)!; - - done(n.locale); - }, DATEPICKER_NAME); - - strictEqual(prop, 'en-US'); - }); - - it(`renders calendar view`, async () => { - type A = [string, string[]]; - - const [ - calendarLabelContent, - calendarDaysContents, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - - const root = n.shadowRoot!; - - const calendarLabel = root.querySelector(b)!; - const calendarDays = Array.from( - root.querySelectorAll(c), o => o.textContent); - - done([ - calendarLabel.outerHTML, - calendarDays, - ] as A); - }, DATEPICKER_NAME, toSelector('.calendar-label'), toSelector('.full-calendar__day')); - - strictEqual( - cleanHtml(calendarLabelContent), - prettyHtml`
February 2020
` - ); - // NOTE: Safari returns text content with unnecessary whitespaces - deepStrictEqual(calendarDaysContents.map(n => n.trim()), [ - '', '', '', '', '', '', 1, - 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, - '', '', '', '', '', '', '', - ].map(String)); - }); - - it(`renders today's date`, async () => { - type A = [string, string, number]; - - const [ - todayDateContent, - dateLabel, - calendarDay, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - // Reset focused date - n.value = ''; - - await n.updateComplete; - - const n2 = n.shadowRoot!.querySelector(b)!; - - /** - * NOTE: Get the today's date from the browser instead of - * from the environment where the testing command is run. - */ - const now = new Date(); - const formattedDate = Intl.DateTimeFormat('en-US', { - year: 'numeric', - month: 'short', - day: 'numeric', - }).format(now); - - done([ - n2.outerHTML, - formattedDate, - now.getDate(), - ] as A); - }, DATEPICKER_NAME, toSelector('.day--today')); - - strictEqual(cleanHtml(todayDateContent, { - showToday: true, - showFocused: false, - }), prettyHtml(` - -
${calendarDay}
- - `)); - }); - - it(`focuses date based on 'value'`, async () => { - const focusedDateContent: string = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const focusedDate = n.shadowRoot!.querySelector(b)!; - - done(focusedDate.outerHTML); - }, DATEPICKER_NAME, toSelector('.day--focused')); - - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
2
- - `); - }); - - }); - - describe('year list view', () => { - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: Datepicker = document.createElement(a); - - el.locale = 'en-US'; - el.min = '2000-01-01'; - el.startView = 'yearList'; - el.value = '2020-02-02'; - - document.body.appendChild(el); - - await el.updateComplete; - - done(); - }, DATEPICKER_NAME); - }); - - afterEach(async () => { - await browser.executeAsync((a, done) => { - const el = document.body.querySelector(a)!; - - document.body.removeChild(el); - - done(); - }, DATEPICKER_NAME); - }); - - it(`takes snapshot`, async () => { - const browserName = browser.capabilities.browserName; - - await browser.saveScreenshot( - `./src/tests/snapshots/${DATEPICKER_NAME}/initial-render-year-view-${browserName}.png` - ); - }); - - it(`renders initial content`, async () => { - const yearListItemsContents: string[] = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const yearListItems = Array.from( - n.shadowRoot!.querySelectorAll(b), o => o.textContent); - - done(yearListItems); - }, DATEPICKER_NAME, '.year-list-view__list-item'); - - deepStrictEqual( - yearListItemsContents.map(n => n.trim()), - Array.from(Array(2100 - 2000 + 1), (_, i) => `${2000 + i}`) - ); - }); - - it(`focuses this year`, async () => { - const focusedYearContent: string = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const focusedYear = n.shadowRoot!.querySelector(b)!; - - done(focusedYear.outerHTML); - }, DATEPICKER_NAME, '.year-list-view__list-item.year--selected'); - - strictEqual(cleanHtml(focusedYearContent), prettyHtml` - - `); - }); - - it(`has contents with 'part' attributes`, async () => { - type A = boolean; - - const results: A[] = []; - const parts: [HTMLElementPart[], StartView][] = [ - [ - [ - 'body', - 'calendar', - 'calendar-day', - 'calendar-selector', - 'calendar-view', - 'calendars', - 'day', - 'header', - 'label', - 'month-selector', - 'month-selectors', - 'table', - 'toolbar', - 'weekday', - 'weekdays', - 'year-selector', - ], - 'calendar', - ], - [ - [ - 'body', - 'calendar-selector', - 'header', - 'toolbar', - 'year', - 'year-list', - 'year-list-view', - 'year-selector', - ], - 'yearList', - ], - ]; - - for (const part of parts) { - const result: A = await browser.executeAsync(async (a, [b, c], done) => { - const n = document.body.querySelector(a)!; - - n.startView = c; - await n.updateComplete; - - const partContents = - (b as HTMLElementPart[]).map(o => n.shadowRoot!.querySelector(`[part="${o}"]`)); - - done(partContents.every(o => o instanceof HTMLElement) as A); - }, DATEPICKER_NAME, part); - - results.push(result); - } - - allStrictEqual(results, true); - }); - - }); - -}); diff --git a/src/tests/app-datepicker/keyboards.spec.ts b/src/tests/app-datepicker/keyboards.spec.ts deleted file mode 100644 index b7fc51e55..000000000 --- a/src/tests/app-datepicker/keyboards.spec.ts +++ /dev/null @@ -1,632 +0,0 @@ -import { DATEPICKER_NAME } from '../../constants.js'; -import { KEY_CODES_MAP } from '../../custom_typings.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import type { PrepareOptions } from '../custom_typings.js'; -import { cleanHtml } from '../helpers/clean-html.js'; -import { interaction } from '../helpers/interaction.js'; -import { prettyHtml } from '../helpers/pretty-html.js'; -import { toSelector } from '../helpers/to-selector.js'; -import { - deepStrictEqual, - strictEqual, -} from '../helpers/typed-assert.js'; - -const { focusCalendarsContainer, browserKeys } = interaction({ elementName: DATEPICKER_NAME }); - -describe('keyboards', () => { - // #region helper - type A = [string, string]; - const getValuesAfterKeys = async ( - key: number, - altKey: boolean = false, - prepareOptions?: PrepareOptions - ): Promise
=> { - await focusCalendarsContainer(prepareOptions); - await browserKeys(key, altKey); - - const [prop, content]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - await n.updateComplete; - - const focusedDate = n.shadowRoot!.querySelector(b); - - done([ - n.value, - focusedDate?.outerHTML ?? '', - ] as A); - }, DATEPICKER_NAME, toSelector('.day--focused')); - - return [prop, cleanHtml(content)]; - }; - // #endregion helper - - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: Datepicker = document.createElement(a); - - el.locale = 'en-US'; - // Reset `min` and `value` here before running tests - el.min = '2000-01-01'; - el.value = '2020-02-20'; - - document.body.appendChild(el); - - await el.updateComplete; - - done(); - }, DATEPICKER_NAME); - }); - - afterEach(async () => { - await browser.executeAsync((a, done) => { - const el = document.body.querySelector(a); - - if (el) document.body.removeChild(el); - - done(); - }, DATEPICKER_NAME); - }); - - it(`focuses date (ArrowLeft)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys(KEY_CODES_MAP.ARROW_LEFT); - - strictEqual(prop, `2020-02-19`); - strictEqual(focusedDateContent, prettyHtml` - -
19
- - `); - }); - - it(`focuses date (ArrowLeft + first focusable date + disabled date)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.ARROW_LEFT, - false, { - props: { - disabledDates: '2020-02-19', - value: '2020-02-20', - }, - }); - - strictEqual(prop, `2020-02-18`); - strictEqual(focusedDateContent, prettyHtml` - -
18
- - `); - }); - - it(`focuses date (ArrowRight)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys(KEY_CODES_MAP.ARROW_RIGHT); - - strictEqual(prop, `2020-02-21`); - strictEqual(focusedDateContent, prettyHtml` - -
21
- - `); - }); - - it(`focuses date (ArrowRight + first focusable date + disabled date)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.ARROW_RIGHT, - false, { - props: { - disabledDates: '2020-02-21', - value: '2020-02-20', - }, - }); - - strictEqual(prop, `2020-02-22`); - strictEqual(focusedDateContent, prettyHtml` - -
22
- - `); - }); - - it(`focuses date (ArrowUp)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys(KEY_CODES_MAP.ARROW_UP); - - strictEqual(prop, `2020-02-13`); - strictEqual(focusedDateContent, prettyHtml` - -
13
- - `); - }); - - it(`focuses date (ArrowUp + first focusable date + disabled date)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.ARROW_UP, - false, { - props: { - disabledDates: '2020-02-13', - value: '2020-02-20', - }, - }); - - strictEqual(prop, `2020-02-14`); - strictEqual(focusedDateContent, prettyHtml` - -
14
- - `); - }); - - it(`focuses date (ArrowDown)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys(KEY_CODES_MAP.ARROW_DOWN); - - strictEqual(prop, '2020-02-27'); - strictEqual(focusedDateContent, prettyHtml` - -
27
- - `); - }); - - it(`focuses date (ArrowDown + first focusable date + disabled date)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.ARROW_DOWN, - false, { - props: { - disabledDates: '2020-02-27', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2020-02-26'); - strictEqual(focusedDateContent, prettyHtml` - -
26
- - `); - }); - - it(`focuses date (PageUp)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys(KEY_CODES_MAP.PAGE_UP); - - strictEqual(prop, '2020-01-20'); - strictEqual(focusedDateContent, prettyHtml` - -
20
- - `); - }); - - it(`focuses date (PageUp + first focusable date + disabled date)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_UP, - false, { - props: { - disabledDates: '2020-01-20', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2020-01-21'); - strictEqual(focusedDateContent, prettyHtml` - -
21
- - `); - }); - - it(`focuses date (PageUp + first focusable date + disabled date + min date)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_UP, - false, { - props: { - min: '2020-02-02', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2020-02-02'); - strictEqual(focusedDateContent, prettyHtml` - -
2
- - `); - }); - - it(`focuses date (PageDown)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys(KEY_CODES_MAP.PAGE_DOWN); - - strictEqual(prop, '2020-03-20'); - strictEqual(focusedDateContent, prettyHtml` - -
20
- - `); - }); - - it(`focuses date (PageDown + first focusable date + disabled date)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_DOWN, - false, { - props: { - disabledDates: '2020-03-20', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2020-03-19'); - strictEqual(focusedDateContent, prettyHtml` - -
19
- - `); - }); - - it(`focuses date (PageDown + first focusable date + disabled date + max date)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_DOWN, - false, { - props: { - max: '2020-02-27', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2020-02-27'); - strictEqual(focusedDateContent, prettyHtml` - -
27
- - `); - }); - - it(`focuses date (Home)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys(KEY_CODES_MAP.HOME); - - strictEqual(prop, '2020-02-01'); - strictEqual(focusedDateContent, prettyHtml` - -
1
- - `); - }); - - it(`focuses date (Home + first focusable date + disabled date)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.HOME, - false, { - props: { - disabledDates: '2020-02-01', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2020-02-02'); - strictEqual(focusedDateContent, prettyHtml` - -
2
- - `); - }); - - it(`focuses date (Home + first focusable date + disabled date + min date)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.HOME, - false, { - props: { - min: '2020-02-17', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2020-02-17'); - strictEqual(focusedDateContent, prettyHtml` - -
17
- - `); - }); - - it(`focuses date (End)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys(KEY_CODES_MAP.END); - - strictEqual(prop, '2020-02-29'); - strictEqual(focusedDateContent, prettyHtml` - -
29
- - `); - }); - - it(`focuses date (End + first focusable date + disabled date)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.END, - false, { - props: { - disabledDates: '2020-02-29', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2020-02-28'); - strictEqual(focusedDateContent, prettyHtml` - -
28
- - `); - }); - - it(`focuses date (End + first focusable date + disabled date + max date)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.END, - false, { - props: { - max: '2020-02-27', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2020-02-27'); - strictEqual(focusedDateContent, prettyHtml` - -
27
- - `); - }); - - it(`focuses date (Alt + PageUp)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys(KEY_CODES_MAP.PAGE_UP, true); - - strictEqual(prop, '2019-02-20'); - strictEqual(focusedDateContent, prettyHtml` - -
20
- - `); - }); - - it( - `focuses date (Alt + PageUp + first focusable date + disabled date)`, - async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_UP, - true, { - props: { - disabledDates: '2019-02-20', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2019-02-21'); - strictEqual(focusedDateContent, prettyHtml` - -
21
- - `); - } - ); - - it( - `focuses date (Alt + PageUp + first focusable date + disabled date + min date)`, - async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_UP, - true, { - props: { - min: '2019-02-27', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2019-02-27'); - strictEqual(focusedDateContent, prettyHtml` - -
27
- - `); - } - ); - - it(`focuses date (Alt + PageDown)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_DOWN, - true); - - strictEqual(prop, '2021-02-20'); - strictEqual(focusedDateContent, prettyHtml` - -
20
- - `); - }); - - it( - `focuses date (Alt + PageDown + first focusable date + disabled date)`, - async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_DOWN, - true, { - props: { - disabledDates: '2021-02-20', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2021-02-19'); - strictEqual(focusedDateContent, prettyHtml` - -
19
- - `); - } - ); - - it( - `focuses date (Alt + PageDown + first focusable date + disabled date + max date)`, - async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_DOWN, - true, { - props: { - max: '2021-02-17', - value: '2020-02-20', - }, - }); - - strictEqual(prop, '2021-02-17'); - strictEqual(focusedDateContent, prettyHtml` - -
17
- - `); - } - ); - - it(`focuses last day of month when new date is invalid (PageDown)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_DOWN, - false, { - props: { - min: '2000-01-01', - value: '2020-01-31', - }, - }); - const [prop2, focusedDateContent2] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_DOWN, - false, { - props: { - value: '2020-03-31', - }, - }); - - strictEqual(prop, '2020-02-29'); - strictEqual(focusedDateContent, prettyHtml` - -
29
- - `); - - strictEqual(prop2, '2020-04-30'); - strictEqual(focusedDateContent2, prettyHtml` - -
30
- - `); - }); - - it(`focuses last day of month when new date is invalid (PageUp)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_UP, - false, { - props: { - min: '2000-01-01', - value: '2020-03-31', - }, - }); - const [prop2, focusedDateContent2] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_UP, - false, { - props: { - value: '2020-05-31', - }, - }); - - strictEqual(prop, '2020-02-29'); - strictEqual(focusedDateContent, prettyHtml` - -
29
- - `); - - strictEqual(prop2, '2020-04-30'); - strictEqual(focusedDateContent2, prettyHtml` - -
30
- - `); - }); - - it(`focuses last day of month when new date is invalid (Alt + PageDown)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_DOWN, - true, { - props: { - min: '2000-01-01', - value: '2020-02-29', - }, - }); - - strictEqual(prop, '2021-02-28'); - strictEqual(focusedDateContent, prettyHtml` - -
28
- - `); - }); - - it(`focuses last day of month when new date is invalid (Alt + PageUp)`, async () => { - const [prop, focusedDateContent] = await getValuesAfterKeys( - KEY_CODES_MAP.PAGE_UP, - true, { - props: { - min: '2000-01-01', - value: '2020-02-29', - }, - }); - - strictEqual(prop, '2019-02-28'); - strictEqual(focusedDateContent, prettyHtml` - -
28
- - `); - }); - - it(`updates 'tabindex' on all affected dates (ArrowLeft)`, async () => { - const focusedDateSelector = toSelector('.day--focused'); - const getFocusedDate = (s: string): Promise => - browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - done(n.shadowRoot?.querySelector(b)?.outerHTML ?? ''); - }, DATEPICKER_NAME, s); - - const initialFocusedDateContent = await getFocusedDate(focusedDateSelector); - - await focusCalendarsContainer(); - await browserKeys(KEY_CODES_MAP.ARROW_LEFT); - - const [ - oldFocusedDateContent, - newFocusedDateContent, - ]: [string, string] = await Promise.all([ - getFocusedDate(toSelector(`[aria-label="Feb 20, 2020"]`)), - getFocusedDate(focusedDateSelector), - ]); - - deepStrictEqual( - [ - initialFocusedDateContent, - oldFocusedDateContent, - ].map(n => cleanHtml(n, { showTabindex: true })), - ['0', '-1'].map((n) => { - const isTab = '0' === n; - - return prettyHtml(` - -
20
- - `); - }) - ); - strictEqual(cleanHtml(newFocusedDateContent, { showTabindex: true }), prettyHtml` - -
19
- - `); - }); - -}); diff --git a/src/tests/app-datepicker/mouses.spec.ts b/src/tests/app-datepicker/mouses.spec.ts deleted file mode 100644 index 51c557ea7..000000000 --- a/src/tests/app-datepicker/mouses.spec.ts +++ /dev/null @@ -1,751 +0,0 @@ -import { DATEPICKER_NAME } from '../../constants.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import type { PrepareOptions } from '../custom_typings.js'; -import { cleanHtml } from '../helpers/clean-html.js'; -import { interaction } from '../helpers/interaction.js'; -import { prettyHtml } from '../helpers/pretty-html.js'; -import { sanitizeText } from '../helpers/sanitize-text.js'; -import { toSelector } from '../helpers/to-selector.js'; -import { - allStrictEqual, - deepStrictEqual, - ok, - strictEqual, -} from '../helpers/typed-assert.js'; - -describe('mouses', () => { - const isSafari = browser.capabilities.browserName === 'Safari'; - const { clickElements } = interaction({ isSafari, elementName: DATEPICKER_NAME }); - - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: Datepicker = document.createElement(a); - - el.locale = 'en-US'; - // Reset `min` and `value` here before running tests - el.min = '2000-01-01'; - el.value = '2020-02-20'; - - document.body.appendChild(el); - - await el.updateComplete; - - done(); - }, DATEPICKER_NAME); - }); - - afterEach(async () => { - await browser.executeAsync((a, done) => { - const el = document.body.querySelector(a); - - if (el) document.body.removeChild(el); - - done(); - }, DATEPICKER_NAME); - }); - - it(`switches to year list view`, async () => { - await clickElements(['.btn__year-selector']); - - const hasYearListView: boolean = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - const yearListView = n.shadowRoot!.querySelector(b)!; - - done(yearListView != null); - }, DATEPICKER_NAME, '.datepicker-body__year-list-view'); - - ok(hasYearListView); - }); - - it(`switches to calendar view`, async () => { - await clickElements(['.btn__calendar-selector'], { - props: { - startView: 'yearList', - }, - }); - - const hasCalendarView: boolean = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const calendarView = n.shadowRoot!.querySelector(b)!; - - done(calendarView != null); - }, DATEPICKER_NAME, '.datepicker-body__calendar-view'); - - ok(hasCalendarView); - }); - - it(`focuses date after navigating away when switching to calendar view`, async () => { - type A = [boolean, string]; - - await clickElements([ - `.btn__month-selector[aria-label="Next month"]`, - `.btn__year-selector`, - ]); - - const hasYearListView: boolean = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const yearListView = n.shadowRoot!.querySelector(b)!; - - done(yearListView != null); - }, DATEPICKER_NAME, '.datepicker-body__year-list-view'); - - await clickElements([`.btn__calendar-selector`]); - - const [ - hasCalendarView, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - const calendarView = root.querySelector(b)!; - const focusedDate = root.querySelector(c)!; - - done([ - calendarView != null, - focusedDate.outerHTML, - ] as A); - }, - DATEPICKER_NAME, - '.datepicker-body__calendar-view', - toSelector('.day--focused')); - - allStrictEqual([hasYearListView, hasCalendarView], true); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
20
- - `); - }); - - it(`switches back to calendar view when new year is selected`, async () => { - type A = [string, string, string, string[]]; - - await clickElements([ - '.btn__year-selector', - [ - `.year-list-view__list-item.year--selected`, - `+ .year-list-view__list-item`, - `+ .year-list-view__list-item`, - ].join(' '), - ]); - - const [ - prop, - yearSelectorButtonContent, - calendarLabelContent, - calendarDaysContents, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - const yearSelectorButton = root.querySelector(b)!; - const calendarLabel = root.querySelector(c)!; - const calendarDays = Array.from( - root.querySelectorAll(d), o => o.textContent); - - done([ - n.value, - yearSelectorButton.outerHTML, - calendarLabel.outerHTML, - calendarDays, - ] as A); - }, - DATEPICKER_NAME, - '.btn__year-selector', - toSelector('.calendar-label'), - toSelector('.full-calendar__day')); - - strictEqual(prop, '2022-02-20'); - strictEqual(cleanHtml(yearSelectorButtonContent), prettyHtml` - - `); - strictEqual(cleanHtml(calendarLabelContent), prettyHtml` -
February 2022
- `); - deepStrictEqual(calendarDaysContents.map(n => sanitizeText(n.trim())), [ - '', '', 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, - 20, 21, 22, 23, 24, 25, 26, - 27, 28, '', '', '', '', '', - '', '', '', '', '', '', '', - ].map(String)); - }); - - it(`selects new focused date in current month`, async () => { - type A = [string, string]; - - await clickElements([toSelector(`.full-calendar__day[aria-label="Feb 13, 2020"]`)]); - - const [ - prop, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const focusedDate = n.shadowRoot!.querySelector(b)!; - - done([ - n.value, - focusedDate.outerHTML, - ] as A); - }, DATEPICKER_NAME, toSelector('.day--focused')); - - strictEqual(prop, '2020-02-13'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
13
- - `); - }); - - it(`selects new focused date in new month`, async () => { - type A = [string, string]; - - await clickElements([ - '.btn__month-selector[aria-label="Next month"]', - toSelector(`.full-calendar__day[aria-label="Mar 18, 2020"]`), - ]); - - const [ - focusedDateContent, - calendarLabelContent, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - - const root = n.shadowRoot!; - - const focusedDate = root.querySelector(b)!; - const calendarLabel = root.querySelector(c)!; - - done([ - focusedDate.outerHTML, - calendarLabel.outerHTML, - ] as A); - }, DATEPICKER_NAME, toSelector('.day--focused'), toSelector('.calendar-label')); - - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
18
- - `); - strictEqual(cleanHtml(calendarLabelContent), prettyHtml` -
March 2020
- `); - }); - - it(`does not show months before 'min'`, async () => { - type A = [boolean, string, string[]]; - - await clickElements([ - `.btn__month-selector[aria-label="Previous month"]`, - ], { - props: { - min: '2020-01-01', - value: '2020-02-02', - }, - }); - - const [ - noPrevMonthSelector, - calendarLabelContent, - calendarDaysContents, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - const prevMonthSelector = root.querySelector(b)!; - const calendarLabel = root.querySelector(c)!; - const calendarDays = Array.from( - root.querySelectorAll(d), o => o.textContent); - - done([ - prevMonthSelector == null, - calendarLabel.outerHTML, - calendarDays, - ] as A); - }, - DATEPICKER_NAME, - `.btn__month-selector[aria-label="Previous month"]`, - toSelector('.calendar-label'), - toSelector('.full-calendar__day') - ); - - ok(noPrevMonthSelector); - strictEqual(cleanHtml(calendarLabelContent), prettyHtml` -
January 2020
- `); - deepStrictEqual(calendarDaysContents.map(n => sanitizeText(n.trim())), [ - '', '', '', 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, '', - '', '', '', '', '', '', '', - ].map(String)); - }); - - it(`does not show months after 'max'`, async () => { - type A = [boolean, string, string[]]; - - await clickElements([ - `.btn__month-selector[aria-label="Next month"]`, - ], { - props: { - max: '2020-03-31', - value: '2020-02-02', - }, - }); - - const [ - noNextMonthSelector, - calendarLabelContent, - calendarDaysContents, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - const nextMonthSelector = root.querySelector(b)!; - const calendarLabel = root.querySelector(c)!; - const calendarDays = Array.from( - root.querySelectorAll(d), o => o.textContent); - - done([ - nextMonthSelector == null, - calendarLabel.outerHTML, - calendarDays, - ] as A); - }, - DATEPICKER_NAME, - `.btn__month-selector[aria-label="Next month"]`, - toSelector('.calendar-label'), - toSelector('.full-calendar__day')); - - ok(noNextMonthSelector); - strictEqual(cleanHtml(calendarLabelContent), prettyHtml` -
March 2020
- `); - deepStrictEqual(calendarDaysContents.map(n => sanitizeText(n.trim())), [ - 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, '', '', '', '', - '', '', '', '', '', '', '', - ].map(String)); - }); - - it(`shows correct 'min' month when spam clicking previous month button`, async () => { - type A = [boolean, string, string[]]; - - await clickElements(Array.from('1234', () => ( - `.btn__month-selector[aria-label="Previous month"]` - )), { - props: { - min: '2020-01-01', - value: '2020-05-02', - }, - }); - - const [ - noPrevMonthSelector, - calendarLabelContent, - calendarDaysContents, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - const prevMonthSelector = root.querySelector(b)!; - const calendarLabel = root.querySelector(c)!; - const calendarDays = Array.from( - root.querySelectorAll(d), o => o.textContent); - - done([ - prevMonthSelector == null, - calendarLabel.outerHTML, - calendarDays, - ] as A); - }, - DATEPICKER_NAME, - `.btn__month-selector[aria-label="Previous month"]`, - toSelector('.calendar-label'), - toSelector('.full-calendar__day')); - - ok(noPrevMonthSelector); - strictEqual(cleanHtml(calendarLabelContent), prettyHtml` -
January 2020
- `); - deepStrictEqual(calendarDaysContents.map(n => sanitizeText(n.trim())), [ - '', '', '', 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, '', - '', '', '', '', '', '', '', - ].map(String)); - }); - - it(`shows correct 'max' month when spam clicking next month button`, async () => { - type A = [boolean, string, string[]]; - - await clickElements(Array.from('1234', () => ( - `.btn__month-selector[aria-label="Next month"]` - )), { - props: { - max: '2020-03-31', - value: '2019-11-02', - }, - }); - - const [ - noNextMonthSelector, - calendarLabelContent, - calendarDaysContents, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - const nextMonthSelector = root.querySelector(b)!; - const calendarLabel = root.querySelector(c)!; - const calendarDays = Array.from( - root.querySelectorAll(d), o => o.textContent); - - done([ - nextMonthSelector == null, - calendarLabel.outerHTML, - calendarDays, - ] as A); - }, - DATEPICKER_NAME, - `.btn__month-selector[aria-label="Next month"]`, - toSelector('.calendar-label'), - toSelector('.full-calendar__day')); - - ok(noNextMonthSelector); - strictEqual(cleanHtml(calendarLabelContent), prettyHtml` -
March 2020
- `); - deepStrictEqual(calendarDaysContents.map(n => sanitizeText(n.trim())), [ - 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, '', '', '', '', - '', '', '', '', '', '', '', - ].map(String)); - }); - - const updateYear = async (newYear: string, prepareOptions?: PrepareOptions) => { - await clickElements([`.btn__year-selector`], prepareOptions); - - const yearIdx: number = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - - const allYears = Array.from( - n.shadowRoot!.querySelectorAll(b), o => o.textContent!); - - done(allYears.findIndex(o => o.trim() === c)); - }, DATEPICKER_NAME, `.year-list-view__list-item`, newYear); - - await clickElements([ - `.year-list-view__list-item${!yearIdx ? '' : `:nth-of-type(${1 + yearIdx})`}`, - ]); - }; - - it(`focuses 'min' when focused date is before 'min' after updating the years`, async () => { - type A = [string, string]; - - await updateYear('2021', { - props: { - min: '2020-04-13', - value: '2020-04-25', - }, - }); - - await clickElements([ - ...Array.from('123', () => `.btn__month-selector[aria-label="Previous month"]`), - toSelector(`.full-calendar__day[aria-label="Jan 15, 2021"]`), - ]); - - await updateYear('2020'); - - const [ - prop, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const focusedDate = n.shadowRoot!.querySelector(b)!; - - done([ - n.value, - focusedDate.outerHTML, - ] as A); - }, DATEPICKER_NAME, toSelector('.day--focused')); - - strictEqual(prop, '2020-04-13'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
13
- - `); - }); - - it(`focuses 'max' when focused date is after 'max' after updating the years`, async () => { - type A = [string, string]; - - await updateYear('2019', { - props: { - max: '2020-04-25', - value: '2020-04-13', - }, - }); - - await clickElements([ - ...Array.from('123', () => `.btn__month-selector[aria-label="Next month"]`), - toSelector(`.full-calendar__day[aria-label="Jul 15, 2019"]`), - ]); - - await updateYear('2020'); - - const [ - prop, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const focusedDate = n.shadowRoot!.querySelector(b)!; - - done([ - n.value, - focusedDate.outerHTML, - ] as A); - }, DATEPICKER_NAME, toSelector('.day--focused')); - - strictEqual(prop, '2020-04-25'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
25
- - `); - }); - - it(`updates focused date in landscape mode after navigating months`, async () => { - type A = [string, string]; - - await clickElements([ - `.btn__month-selector[aria-label="Next month"]`, - ...Array.from('12', () => `.btn__month-selector[aria-label="Previous month"]`), - toSelector(`.full-calendar__day[aria-label="Jan 15, 2020"]`), - ]); - - const [ - prop, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const focusedDate = n.shadowRoot!.querySelector(b)!; - - done([ - n.value, - focusedDate.outerHTML, - ] as A); - }, DATEPICKER_NAME, toSelector('.day--focused')); - - strictEqual(prop, '2020-01-15'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
15
- - `); - }); - - const queryCalendarLabel = async () => { - const label: string = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - done(n2.textContent); - }, DATEPICKER_NAME, toSelector('.calendar-label')); - - return sanitizeText(label); - }; - - it(`resets month after updating 'value' and 'firstDayOfWeek'`, async () => { - type A = [string, string[]]; - - await clickElements( - Array.from('123', () => `.btn__month-selector[aria-label="Next month"]`) - ); - - const calendarLabelContent = await queryCalendarLabel(); - - await browser.executeAsync(async (a, done) => { - const n = document.body.querySelector(a)!; - - n.firstDayOfWeek = 2; - n.value = '2020-02-13'; - - await n.updateComplete; - - done(); - }, DATEPICKER_NAME); - - const calendarLabelContent2 = await queryCalendarLabel(); - - await clickElements( - Array.from('12', () => `.btn__month-selector[aria-label="Next month"]`) - ); - - const [ - calendarLabelContent3, - calendarDaysContents, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - const calendarLabel3 = root.querySelector(b)!; - const calendarDays = Array.from( - root.querySelectorAll(c), o => o.textContent); - - done([ - calendarLabel3.textContent, - calendarDays, - ] as A); - }, DATEPICKER_NAME, toSelector('.calendar-label'), toSelector('.full-calendar__day')); - - strictEqual(calendarLabelContent, `May 2020`); - strictEqual(calendarLabelContent2, `February 2020`); - strictEqual(calendarLabelContent3, `April 2020`); - deepStrictEqual(calendarDaysContents.map(n => sanitizeText(n.trim())), [ - '', 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, '', '', '', '', - '', '', '', '', '', '', '', - ].map(String)); - }); - - it(`resets month after setting 'value' and 'firstdayofweek' attributes`, async () => { - type A = [string, string[]]; - - await clickElements( - Array.from('123', () => `.btn__month-selector[aria-label="Next month"]`) - ); - - const calendarLabelContent = await queryCalendarLabel(); - - await browser.executeAsync(async (a, done) => { - const n = document.body.querySelector(a)!; - - n.setAttribute('firstdayofweek', '2'); - n.setAttribute('value', '2020-02-13'); - - await n.updateComplete; - - done(); - }, DATEPICKER_NAME); - - const calendarLabelContent2 = await queryCalendarLabel(); - - await clickElements( - Array.from('12', () => `.btn__month-selector[aria-label="Next month"]`) - ); - - const [ - calendarLabelContent3, - calendarDaysContents, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - const calendarLabel3 = root.querySelector(b)!; - const calendarDays = Array.from( - root.querySelectorAll(c), o => o.textContent); - - done([ - calendarLabel3.textContent, - calendarDays, - ] as A); - }, DATEPICKER_NAME, toSelector('.calendar-label'), toSelector('.full-calendar__day')); - - strictEqual(calendarLabelContent, `May 2020`); - strictEqual(calendarLabelContent2, `February 2020`); - strictEqual(calendarLabelContent3, `April 2020`); - deepStrictEqual(calendarDaysContents.map(n => sanitizeText(n.trim())), [ - '', 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, '', '', '', '', - '', '', '', '', '', '', '', - ].map(String)); - }); - - it(`selects new focused date with optional 'locale'`, async () => { - type A = [string, string, string, string[]]; - - await clickElements([ - toSelector(`.full-calendar__day[aria-label="2020年2月13日"]`), - ], { - props: { - locale: 'ja-JP', - }, - }); - - const [ - prop, - focusedDateContent, - calendarLabelContent, - calendarDaysContents, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - const focusedDate = root.querySelector(b)!; - const calendarLabel = root.querySelector(c)!; - const calendarDays = Array.from( - root.querySelectorAll(d), o => o.textContent); - - done([ - n.value, - focusedDate.outerHTML, - calendarLabel.outerHTML, - calendarDays, - ] as A); - }, - DATEPICKER_NAME, - toSelector('.day--focused'), - toSelector('.calendar-label'), - toSelector('.full-calendar__day')); - - strictEqual(prop, '2020-02-13'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
13日
- - `); - strictEqual(cleanHtml(calendarLabelContent), prettyHtml` -
2020年2月
- `); - deepStrictEqual(calendarDaysContents.map(n => sanitizeText(n.trim())), [ - '', '', '', '', '', '', 1, - 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, - '', '', '', '', '', '', '', - ].map(n => n && `${n}日`)); - }); - -}); diff --git a/src/tests/app-datepicker/properties.spec.ts b/src/tests/app-datepicker/properties.spec.ts deleted file mode 100644 index a48368382..000000000 --- a/src/tests/app-datepicker/properties.spec.ts +++ /dev/null @@ -1,699 +0,0 @@ -import type { WeekNumberType } from 'nodemod/dist/calendar/calendar_typing.js'; - -import { DATEPICKER_NAME } from '../../constants.js'; -import type { StartView } from '../../custom_typings.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import { cleanHtml } from '../helpers/clean-html.js'; -import { prettyHtml } from '../helpers/pretty-html.js'; -import { toSelector } from '../helpers/to-selector.js'; -import { - allStrictEqual, - deepStrictEqual, - ok, - strictEqual, -} from '../helpers/typed-assert.js'; - -describe('properties', () => { - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: Datepicker = document.createElement(a); - - document.body.appendChild(el); - - el.locale = 'en-US'; - - await el.updateComplete; - - done(); - }, DATEPICKER_NAME); - }); - - afterEach(async () => { - await browser.executeAsync((a, done) => { - const el = document.body.querySelector(a)!; - - document.body.removeChild(el); - - done(); - }, DATEPICKER_NAME); - }); - - it(`takes snapshot (properties)`, async () => { - const browserName = browser.capabilities.browserName; - - await browser.saveScreenshot( - `./src/tests/snapshots/${DATEPICKER_NAME}/properties-0-${browserName}.png`); - - await browser.executeAsync(async (a, done) => { - const el = document.body.querySelector(a)!; - - el.min = '2020-01-15'; - el.value = '2020-01-17'; - - await el.updateComplete; - - done(); - }, DATEPICKER_NAME); - - await browser.saveScreenshot( - `./src/tests/snapshots/${DATEPICKER_NAME}/properties-1-${browserName}.png`); - }); - - it(`renders with defined 'min'`, async () => { - type A = [string, string, string, string]; - - const [ - prop, - attr, - disabledDateContent, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - n.min = '2020-01-15'; - n.value = '2020-01-17'; - - await n.updateComplete; - - const disabledDates = Array.from(root.querySelectorAll(b)); - const lastDisableDate = disabledDates[disabledDates.length - 1]; - - const focusedDate = root.querySelector(c)!; - - // Chrome requires more time to render - await n.updateComplete; - - done([ - n.min, - n.getAttribute('min'), - lastDisableDate.outerHTML, - focusedDate.outerHTML, - ] as A); - }, - DATEPICKER_NAME, - '.day--disabled', - toSelector('.day--focused')); - - allStrictEqual([prop, attr], '2020-01-15'); - strictEqual(cleanHtml(disabledDateContent), prettyHtml` - -
14
- - `); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
17
- - `); - }); - - it(`renders with defined 'max'`, async () => { - type A = [string, string, string, string]; - - const [ - prop, - attr, - disabledDateContent, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - n.min = '2000-01-01'; - n.max = '2020-01-17'; - n.value = '2020-01-15'; - - await n.updateComplete; - - const disabledDates = Array.from(root.querySelectorAll(b)); - - const focusedDate = root.querySelector(c)!; - - // Chrome requires more time to render - await n.updateComplete; - - done([ - n.max, - n.getAttribute('max'), - disabledDates[0].outerHTML, - focusedDate.outerHTML, - ] as A); - }, - DATEPICKER_NAME, - '.day--disabled', - toSelector('.day--focused')); - - allStrictEqual([prop, attr], '2020-01-17'); - strictEqual(cleanHtml(disabledDateContent), prettyHtml` - -
18
- - `); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
15
- - `); - }); - - it(`renders with defined 'value'`, async () => { - type A = [string, string]; - - const [ - prop, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.min = '2000-01-01'; - n.max = '2020-12-31'; - n.setAttribute('value', '2020-01-15'); - - await n.updateComplete; - - const focusedDate = n.shadowRoot!.querySelector(b)!; - - done([ - n.value, - focusedDate.outerHTML, - ] as A); - }, - DATEPICKER_NAME, - toSelector('.day--focused')); - - strictEqual(prop, '2020-01-15'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
15
- - `); - }); - - it(`renders with defined 'startView'`, async () => { - type A = [StartView, StartView, boolean]; - - const [ - prop, - attr, - hasYearListView, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.startView = 'yearList'; - - await n.updateComplete; - - const yearListView = n.shadowRoot!.querySelector(b)!; - - done([ - n.startView, - n.getAttribute('startview'), - yearListView != null, - ] as A); - }, DATEPICKER_NAME, '.datepicker-body__year-list-view'); - - allStrictEqual([prop, attr], 'yearList'); - ok(hasYearListView); - }); - - it(`renders with defined 'firstDayOfWeek'`, async () => { - type A = [number, string, string, string]; - - const [ - prop, - attr, - firstWeekdayLabelContent, - focusedDateContent, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.firstDayOfWeek = 2; - - await n.updateComplete; - - const firstWeekdayLabel = root.querySelector(b)!; - const focusedDate = root.querySelector(c)!; - - done([ - n.firstDayOfWeek, - n.getAttribute('firstdayofweek'), - firstWeekdayLabel.outerHTML, - focusedDate.outerHTML, - ] as A); - }, - DATEPICKER_NAME, - toSelector('th'), - toSelector('tbody > tr:nth-of-type(3) > td:nth-of-type(2)')); - - strictEqual(prop, 2); - strictEqual(attr, '2'); - strictEqual(cleanHtml(firstWeekdayLabelContent), prettyHtml` - -
T
- - `); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
15
- - `); - }); - - it(`renders with defined 'showWeekNumber'`, async () => { - type A = [boolean, string, string, string[]]; - - const [ - prop, - attr, - weekNumberLabelContent, - weekNumbersContents, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.showWeekNumber = true; - - await n.updateComplete; - - const weekNumberLabel = root.querySelector(b)!; - const weekNumbers = Array.from( - root.querySelectorAll(c), o => o.outerHTML); - - done([ - n.showWeekNumber, - n.getAttribute('showweeknumber'), - weekNumberLabel.outerHTML, - weekNumbers, - ] as A); - }, - DATEPICKER_NAME, - toSelector('th[aria-label="Week"]'), - toSelector('tbody > tr > th')); - - strictEqual(prop, true); - strictEqual(attr, ''); - strictEqual( - cleanHtml(weekNumberLabelContent), - prettyHtml` - -
Wk
- ` - ); - deepStrictEqual( - weekNumbersContents.map(n => cleanHtml(n)), - [1, 2, 3, 4, 5].map((n) => { - return prettyHtml( - `${n}` - ); - }) - ); - }); - - it(`renders with defined 'weekNumberType'`, async () => { - type A = [WeekNumberType, WeekNumberType, string[]]; - - const [ - prop, - attr, - weekNumbersContents, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.showWeekNumber = true; - n.weekNumberType = 'first-full-week'; - - await n.updateComplete; - - const weekNumbers = Array.from( - n.shadowRoot!.querySelectorAll(b), o => o.outerHTML); - - done([ - n.weekNumberType, - n.getAttribute('weeknumbertype'), - weekNumbers, - ] as A); - }, - DATEPICKER_NAME, - toSelector('tbody > tr > th')); - - allStrictEqual([prop, attr], 'first-full-week'); - deepStrictEqual( - weekNumbersContents.map(n => cleanHtml(n)), - [52, 1, 2, 3, 4].map((n) => { - return prettyHtml( - `${n}` - ); - }) - ); - - }); - - it(`renders with defined 'landscape'`, async () => { - type A = [boolean, string, string]; - - const [ - prop, - attr, - cssDisplay, - ]: A = await browser.executeAsync(async (a, done) => { - const n = document.body.querySelector(a)!; - - n.landscape = true; - - await n.updateComplete; - - done([ - n.landscape, - n.getAttribute('landscape'), - getComputedStyle(n).display, - ] as A); - }, DATEPICKER_NAME); - - strictEqual(prop, true); - strictEqual(attr, ''); - strictEqual(cssDisplay, 'flex'); - }); - - it(`renders with defined 'locale'`, async () => { - type A = [string, string, string[]]; - - const [ - prop, - focusedDateContent, - weekdayLabelsContents, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.locale = 'ja-JP'; - - await n.updateComplete; - - const focusedDate = root.querySelector(b)!; - const weekdayLabels = Array.from( - root.querySelectorAll(c), o => o.outerHTML); - - done([ - n.locale, - focusedDate.outerHTML, - weekdayLabels, - ] as A); - }, - DATEPICKER_NAME, - toSelector('.day--focused'), - toSelector('.calendar-weekdays > th')); - - strictEqual(prop, 'ja-JP'); - strictEqual(cleanHtml(focusedDateContent), prettyHtml` - -
15日
- - `); - deepStrictEqual(weekdayLabelsContents.map(n => cleanHtml(n)), [ - '日', - '月', - '火', - '水', - '木', - '金', - '土', - ].map((n) => { - return prettyHtml(` - -
${n}
- `); - })); - }); - - it(`renders with defined 'disabledDays'`, async () => { - type A = [string, string[]]; - - const [ - prop, - disabledDatesContents, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.disabledDays = '1,5'; - - await n.updateComplete; - - const disabledDates = Array.from( - n.shadowRoot!.querySelectorAll(b), o => o.outerHTML); - - done([ - n.disabledDays, - disabledDates, - ] as A); - }, DATEPICKER_NAME, toSelector('.day--disabled')); - - strictEqual(prop, '1,5'); - deepStrictEqual( - disabledDatesContents.map(n => cleanHtml(n)), - [ - 3, - 6, - 10, - 13, - 17, - 20, - 24, - 27, - 31, - ].map((n) => { - return prettyHtml(` - -
${n}
- - `); - }) - ); - }); - - it(`renders with defined 'disabledDates'`, async () => { - type A = [string, string[]]; - - const propVal = [ - '2020-01-03', - '2020-01-09', - '2020-01-21', - '2020-01-27', - ].join(','); - - const [ - prop, - disabledDatesContents, - ]: A = await browser.executeAsync(async (a, b, c, done) => { - const n = document.body.querySelector(a)!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.disabledDates = b; - - await n.updateComplete; - - const disabledDates = Array.from( - n.shadowRoot!.querySelectorAll(c), o => o.outerHTML); - - done([ - n.disabledDates, - disabledDates, - ] as A); - }, DATEPICKER_NAME, propVal, toSelector('.day--disabled')); - - strictEqual(prop, propVal); - deepStrictEqual(disabledDatesContents.map(n => cleanHtml(n)), [ - 3, - 9, - 21, - 27, - ].map((n) => { - return prettyHtml(` - -
${n}
- - `); - })); - }); - - it(`renders with defined 'inline'`, async () => { - type A = [boolean, null]; - - const [ - prop, - noDatepickerHeader, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.inline = true; - - await n.updateComplete; - - const datepickerHeader = n.shadowRoot!.querySelector(b); - - done([ - n.inline, - datepickerHeader, - ] as A); - }, DATEPICKER_NAME, '.datepicker-header'); - - strictEqual(prop, true); - strictEqual(noDatepickerHeader, null); - }); - - it(`renders with defined 'dragRatio'`, async () => { - type A = number; - - const dragRatio = .5; - const prop: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.dragRatio = b; - - await n.updateComplete; - - done(n.dragRatio as A); - }, DATEPICKER_NAME, dragRatio); - - strictEqual(prop, dragRatio); - }); - - it(`renders with defined 'weekLabel'`, async () => { - type A = [string, string]; - - const [ - prop, - weekNumberLabelContent, - ]: A = await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.showWeekNumber = true; - n.weekLabel = '周数'; - - await n.updateComplete; - - const weekNumberLabel = n.shadowRoot!.querySelector(b)!; - - done([ - n.weekLabel, - weekNumberLabel.outerHTML, - ] as A); - }, DATEPICKER_NAME, toSelector(`th[aria-label="周数"]`)); - - strictEqual(prop, '周数'); - strictEqual( - cleanHtml(weekNumberLabelContent), - prettyHtml` - -
周数
- ` - ); - }); - - it(`renders with different 'showWeekNumber', 'firstDayOfWeek', and 'disabledDays'`, async () => { - type A = [number, string, string, boolean, string, string[]]; - - const props: number[] = []; - const attrs: string[] = []; - const props2: string[] = []; - const showWeekNumberProps: boolean[] = []; - const focusedDateContents: string[] = []; - const disabledDatesContents: string[][] = []; - - for (const showWeekNumber of [true, false]) { - const [ - prop, - attr, - prop2, - prop3, - focusedDateContent, - disabledDatesContent, - ]: A = await browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const root = n.shadowRoot!; - - n.min = '2000-01-01'; - n.value = '2020-01-15'; - n.firstDayOfWeek = 2; - n.disabledDays = '1,5'; - n.showWeekNumber = b; - - await n.updateComplete; - - const focusedDate = root.querySelector(c)!; - const disabledDates = Array.from( - root.querySelectorAll(d), o => o.outerHTML); - - done([ - n.firstDayOfWeek, - n.getAttribute('firstdayofweek'), - n.disabledDays, - n.showWeekNumber, - focusedDate.outerHTML, - disabledDates, - ] as A); - }, - DATEPICKER_NAME, - showWeekNumber, - toSelector('tbody > tr:nth-of-type(3) > td:nth-of-type(2)'), - toSelector('.day--disabled')); - - props.push(prop); - attrs.push(attr); - props2.push(prop2); - showWeekNumberProps.push(prop3); - focusedDateContents.push(focusedDateContent); - disabledDatesContents.push(disabledDatesContent); - } - - allStrictEqual(props, 2); - allStrictEqual(attrs, '2'); - allStrictEqual(props2, '1,5'); - deepStrictEqual(showWeekNumberProps, [true, false]); - allStrictEqual(focusedDateContents.map(n => cleanHtml(n)), prettyHtml` - -
15
- - `); - - const expectedDisabledDatesContent = [ - 3, - 6, - 10, - 13, - 17, - 20, - 24, - 27, - 31, - ].map((n) => { - return prettyHtml(` - -
${n}
- - `); - }); - deepStrictEqual(disabledDatesContents[0].map(n => cleanHtml(n)), expectedDisabledDatesContent); - deepStrictEqual(disabledDatesContents[1].map(n => cleanHtml(n)), expectedDisabledDatesContent); - }); - -}); diff --git a/src/tests/app-datepicker/tests.ts b/src/tests/app-datepicker/tests.ts deleted file mode 100644 index 3c4272f17..000000000 --- a/src/tests/app-datepicker/tests.ts +++ /dev/null @@ -1,10 +0,0 @@ -import './a11y.spec.js'; -import './attributes.spec.js'; -import './edge-cases.spec.js'; -import './events.spec.js'; -import './gestures.spec.js'; -import './initial-render.spec.js'; -import './keyboards.spec.js'; -import './mouses.spec.js'; -import './properties.spec.js'; -import './timezones.spec.js'; diff --git a/src/tests/app-datepicker/timezones.spec.ts b/src/tests/app-datepicker/timezones.spec.ts deleted file mode 100644 index d75e37b16..000000000 --- a/src/tests/app-datepicker/timezones.spec.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { DATEPICKER_NAME } from '../../constants.js'; -import type { Datepicker } from '../../datepicker.js'; -import { APP_INDEX_URL } from '../constants.js'; -import { - deepStrictEqual, -} from '../helpers/typed-assert.js'; -import { getAllDateStrings } from '../timezones.js'; - -describe('timezones', () => { - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - beforeEach(async () => { - await browser.executeAsync(async (a, done) => { - const el: Datepicker = document.createElement(a); - - el.locale = 'en-US'; - // Reset `min` and `value` here before running tests - el.min = '2000-01-01'; - el.value = '2020-01-01'; - - document.body.appendChild(el); - - await el.updateComplete; - - done(); - }, DATEPICKER_NAME); - }); - - afterEach(async () => { - await browser.executeAsync((a, done) => { - const el = document.body.querySelector(a)!; - - document.body.removeChild(el); - - done(); - }, DATEPICKER_NAME); - }); - - it(`takes snapshot`, async () => { - const browserName = browser.capabilities.browserName; - - await browser.saveScreenshot( - `./src/tests/snapshots/${DATEPICKER_NAME}/timezones-${browserName}.png`); - }); - - it(`resolves to the correct 'value' in different timezones`, async function timezoneTests() { - /** - * Some browsers require more time to run this test as the tests date used here is - * considerably large that makes some browsers to take quite some time to update the - * element in terms of layout and paint. - */ - this.timeout(90e3); - - const allDateStrings = getAllDateStrings(); - const results: string[] = []; - const expected: string[] = allDateStrings.map(n => n[1].value); - - for (const n of allDateStrings) { - const valueProp = await browser.executeAsync( - async (a: string, b: string, done: (a: string) => void) => { - const el = document.body.querySelector(a)!; - - el.value = b; - - await el.updateComplete; - - return done(el.value); - }, - DATEPICKER_NAME, - n[1].date - ); - - results.push(valueProp); - } - - deepStrictEqual(results, expected); - }); - -}); diff --git a/src/tests/constants.ts b/src/tests/constants.ts deleted file mode 100644 index 22c0c0452..000000000 --- a/src/tests/constants.ts +++ /dev/null @@ -1 +0,0 @@ -export const APP_INDEX_URL = 'http://localhost:4000/src/tests/index.html'; diff --git a/src/tests/custom_typings.ts b/src/tests/custom_typings.ts deleted file mode 100644 index 317d57765..000000000 --- a/src/tests/custom_typings.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { LitElement } from 'lit-element'; - -import type { Datepicker } from '../datepicker.js'; - -export type PrepareOptions = Partial< - Record<'props' | 'attrs', Partial>>>; diff --git a/src/tests/custom_wdio.ts b/src/tests/custom_wdio.ts deleted file mode 100644 index 8f45aba74..000000000 --- a/src/tests/custom_wdio.ts +++ /dev/null @@ -1,225 +0,0 @@ -interface ChromeCapability { - browserName: 'chrome'; - 'goog:chromeOptions'?: { - args: string[]; - w3c?: boolean; - }; -} -interface FirefoxCapability { - browserName: 'firefox'; - 'moz:firefoxOptions'?: { - args: string[]; - }; -} -interface SafariCapability { - browserName: 'safari'; - 'apple:safari.options'?: { - technologyPreview: boolean; - }; -} - -interface EdgeCapability { - browserName: 'microsoftedge'; -} - -type BrowsersCapability = - | ChromeCapability - | FirefoxCapability - | SafariCapability - | EdgeCapability; - -interface BaseCapability extends Partial> { - maxInstances?: number; -} - -export type Capability = BaseCapability & BrowsersCapability; - -interface SauceLabsBrowserCapability extends Partial> { - browserVersion: string; - platformName: string; - 'sauce:options'?: SauceLabsOptions; -} - -/** @see https://wiki.saucelabs.com/display/DOCS/Test+Configuration+Options */ -export interface SauceLabsOptions { - ['custom-data']?: Record; - build?: string; - name?: string; - passed?: boolean; - screenResolution?: string; - seleniumVersion?: string; - tags?: string[]; - timeZone?: string; -} - -interface SauceLabsChromeCapability extends SauceLabsBrowserCapability, Omit { - browserName: 'googlechrome'; -} - -type SauceLabsFirefoxCapability = SauceLabsBrowserCapability & FirefoxCapability; - -type SauceLabsSafariCapability = SauceLabsBrowserCapability & SafariCapability; - -type SauceLabsEdgeCapability = SauceLabsBrowserCapability & EdgeCapability; - -export type SauceLabsCapability = - | SauceLabsChromeCapability - | SauceLabsFirefoxCapability - | SauceLabsSafariCapability - | SauceLabsEdgeCapability; - -/** - * Mocha CLI commands - * - * @see https://mochajs.org/#command-line-usage - */ -interface MochaFramework { - framework: 'mocha'; - mochaOpts: { - require?: string[]; - timeout?: number; - ui: 'bdd' | 'tdd'; - checkLeaks?: boolean; - asyncOnly?: boolean; - bail?: boolean; - allowUncaught?: boolean; - reporter?: string; - inlineDiffs?: boolean; - }; -} -interface JasmineFramework { - framework: 'jasmine'; - jasmineNodeOpts: { - defaultTimeoutInterval: number; - grep: null; - invertGrep: null; - expectationResultHandler(passed: unknown, assertion: unknown): void; - }; -} -// interface CucumberFramework { -// require: string[]; -// backtrace: boolean; -// requireModule: string[]; -// dryRun: boolean; -// failFast: boolean; -// format: string[]; -// colors: true; -// snippets: boolean; -// source: boolean; -// profile: string[]; -// strict: boolean; -// tags: string[]; -// timeout: number; -// ignoreUndefinedDefinitions: boolean; - -// /** Cucumber specific overloads */ -// beforeHook(test: unknown, context: unknown, stepData: unknown): void -// beforeHook(test: unknown, context: unknown, stepData: unknown, world: unknown): void - -// /** Cucumber specific overloads */ -// afterHook( -// test: unknown, -// context: unknown, -// { error, result, duration, passed, retries }: any, -// stepData: unknown, -// world?: unknown -// ): void; - -// beforeFeature(uri: string, feature: unknown, scenarios: unknown): void; -// beforeScenario( -// uri: string, feature: unknown, scenarios: unknown, sourceLocation: string): void; -// beforeStep(uri: string, feature: unknown, stepData: unknown, context: unknown): void; -// afterStep( -// uri: string, -// feature: unknown, -// { error, result, duration, passed }: any, -// stepData: unknown, -// context: unknown -// ): void; -// afterScenario( -// uri: string, feature: unknown, scenarios: unknown, sourceLocation: string): void; -// afterFeature(uri: string, feature: unknown, scenarios: unknown): void; -// } - -export type Framework = MochaFramework | JasmineFramework; - -// type Services = -// | 'selenium-standalone' -// | 'sauce'; - -type Reporters = - | 'spec'; - -export type ReportersConfig = [Reporters, Record]; - -interface BaseConfig { - runner: 'local'; - hostname?: string; - port?: number; - path?: string; - protocol?: 'http' | 'https'; - specs: string[]; - exclude: string[]; - maxInstances: number; - logLevel: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent'; - outputDir?: string; - baseUrl: string; - bail: 0 | 1; - waitforTimeout: number; - connectionRetryCount: number; - // services: string[]; - specFileRetries: number; - reporters: (Reporters | ReportersConfig)[]; - filesToWatch?: string[]; - - onPrepare?(config: WdioConfig, capabilities: WdioConfig['capabilities']): void; - beforeSession?(config: WdioConfig, capabilities: WdioConfig['capabilities'], specs: WdioConfig['specs']): void; - before?(config: WdioConfig, capabilities: WdioConfig['capabilities']): void; - beforeSuite?(suite: object): void; - beforeHook?(test: unknown, context: unknown): void; - afterHook?( - test: unknown, context: unknown, { error, result, duration, passed, retries }: any): void; - beforeTest?(test: unknown, context: unknown): void; - beforeCommand?(commandName: string, args: string[]): void; - afterCommand?(commandName: string, args: string[], result: 0 | 1, error: Error): void; - afterTest?( - test: unknown, context: unknown, { error, result, duration, passed, retries }: any): void; - afterSuite?(suite: object): void; - after?(result: 0 | 1, capabilities: WdioConfig['capabilities'], specs: WdioConfig['specs']): void; - afterSession?(config: WdioConfig, capabilities: WdioConfig['capabilities'], specs: WdioConfig['specs']): void; - onComplete?( - exitCode: 0 | 1, - config: WdioConfig, - capabilities: WdioConfig['capabilities'], - results: object - ): void; - onReload?(oldSessionId: string, newSessionId: string): void; -} - -interface SeleniumArgsDrivers { - version: string; -} -interface SeleniumArgs { - drivers: Record<'chrome' | 'firefox', SeleniumArgsDrivers>; -} -interface SeleniumConfig extends BaseConfig { - capabilities: Capability[]; - services: ['selenium-standalone']; - seleniumLogs: 'logs'; - seleniumInstallArgs?: SeleniumArgs; - seleniumArgs?: SeleniumArgs; -} - -interface SauceLabsConfig extends BaseConfig { - services: ['sauce']; - user?: string; - key?: string; - region?: 'us' | 'eu'; - sauceConnect?: boolean; - sauceConnectOpts: Record<'user' | 'accessKey', string>; - capabilities: SauceLabsCapability[]; -} - -type Config = SeleniumConfig | SauceLabsConfig; - -export type WdioConfig = Config & Framework; diff --git a/src/tests/full-icu.spec.ts b/src/tests/full-icu.spec.ts deleted file mode 100644 index e8e71af56..000000000 --- a/src/tests/full-icu.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { APP_INDEX_URL } from './constants.js'; -import { - ok, -} from './helpers/typed-assert.js'; - -function hasFullICU() { - try { - const january = new Date(9e8); - const spanish = new Intl.DateTimeFormat('es', { month: 'long' }); - return spanish.format(january) === 'enero'; - } catch (err) { - return false; - } -} - -describe('full-icu', () => { - before(async () => { - await browser.url(APP_INDEX_URL); - }); - - it(`supports full ICU`, async () => { - ok(hasFullICU()); - }); - -}); diff --git a/src/tests/helpers/clean-html.ts b/src/tests/helpers/clean-html.ts deleted file mode 100644 index 3622a2b98..000000000 --- a/src/tests/helpers/clean-html.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { prettyHtml } from './pretty-html.js'; -import { sanitizeText, SanitizeTextOptions } from './sanitize-text.js'; - -export function cleanHtml(s: string, options?: SanitizeTextOptions) { - return prettyHtml(sanitizeText(s, options)); -} diff --git a/src/tests/helpers/interaction.ts b/src/tests/helpers/interaction.ts deleted file mode 100644 index c16fb9c0f..000000000 --- a/src/tests/helpers/interaction.ts +++ /dev/null @@ -1,420 +0,0 @@ -import type { Datepicker } from '../../datepicker.js'; -import type { PrepareOptions } from '../custom_typings.js'; -import { toSelector } from './to-selector.js'; - -// FIXME: Helper as a workaround until `browser.keys()` supports Alt -// on all browsers on local and CI. -const browserKeys = (elementName: string) => -async (keyCode: number, altKey: boolean = false) => { - return browser.executeAsync(async (a, b, c, d, done) => { - const n = document.body.querySelector(a)!; - const n2 = n.shadowRoot!.querySelector(b)!; - - const opt: any = { keyCode: c, altKey: d }; - const ev = new CustomEvent('keyup', opt); - - Object.keys(opt).forEach((o) => { - Object.defineProperty(ev, o, { value: opt[o] }); - }); - - n2.dispatchEvent(ev); - - done(); - }, elementName, '.calendars-container', keyCode, altKey); -}; - -const clickElements = (elementName: string, isSafari: boolean) => -async (classes: string[], prepareOptions?: PrepareOptions) => { - if (prepareOptions) { - await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - - const { props, attrs }: PrepareOptions = b; - - if (props) { - Object.keys(props).forEach((o) => { - (n as any)[o] = (props as any)[o]; - }); - } - - if (attrs) { - Object.keys(attrs).forEach((o) => { - n.setAttribute(o.toLowerCase(), String((attrs as any)[o])); - }); - } - - await n.updateComplete; - - done(); - }, elementName, prepareOptions); - } - - /** - * NOTE: [20191229] Due to a bug in Safari 13, Safari is not able - * to recognize any clicks but it has yet to release the patch to - * stable Safari and any older versions of Safari. As of writing, - * only Safari TP has it fixed. - * - * Therefore, this helper is here to imperatively calling `.click()` - * in the browser the tests run when it detects a Safari browser. - * - * @see https://bugs.webkit.org/show_bug.cgi?id=202589 - */ - for (const cls of classes) { - if (isSafari) { - await browser.executeAsync(async (a, b, done) => { - const n = document.body.querySelector(a)!; - const n2: HTMLElement = n.shadowRoot!.querySelector(b)!; - - if (n2 instanceof HTMLButtonElement || n2.tagName === 'MWC-BUTTON') { - n2.click(); - } else { - // Simulate click event on non natively focusable elements. - // This is for selecting new focused date in the table. - ['touchstart', 'touchend'].forEach((o) => { - n2.dispatchEvent(new CustomEvent(o, { bubbles: true, composed: true })); - }); - } - - await n.updateComplete; - - done(); - }, elementName, cls); - } else { - const el = await $(elementName); - const el2 = (await el.shadow$(cls)) as unknown as WebdriverIOAsync.Element; - - await el2.click(); - } - } -}; - -const focusCalendarsContainer = (elementName: string) => -async (prepareOptions?: PrepareOptions): Promise => { - return await browser.executeAsync(async (a, b, c, done) => { - const a1 = document.body.querySelector(a)!; - - if (c) { - const { props, attrs }: PrepareOptions = c; - - if (props) { - Object.keys(props).forEach((o) => { - (a1 as any)[o] = (props as any)[o]; - }); - } - - if (attrs) { - Object.keys(attrs).forEach((o) => { - a1.setAttribute(o.toLowerCase(), String((attrs as any)[o])); - }); - } - } - - await a1.updateComplete; - - const b1 = a1.shadowRoot!.querySelector(b)!; - - b1.focus(); - - await a1.updateComplete; - await new Promise(y => setTimeout(() => y(b1.focus()))); - await a1.updateComplete; - - let activeElement = document.activeElement; - - while (activeElement?.shadowRoot) { - activeElement = activeElement.shadowRoot.activeElement; - } - - done( - `.${Array.from(activeElement?.classList.values() ?? []).join('.')}` - ); - }, elementName, '.calendars-container', prepareOptions); -}; - -interface OptionsDragTo { - x: number; - y: number; - dx?: number; - dy?: number; - dx2?: number; - dy2?: number; - step?: number; - type?: 'mouse' | 'touch'; -} -export interface DragOptions extends Partial> { - x2?: number; - y2?: number; -} -interface ComputeStepsOpts { - ix: number; - iy: number; - xn: number; - yn: number; - stepN: number; -} -const dragCalendarsContainer = (elementName: string, elementName2?: string) => { - return async ( - options: DragOptions, - prepareOptions?: PrepareOptions - ): Promise => { - return browser.executeAsync(async (a, b, c, d, e, f, done) => { - try { - const simulateInputEvent = (n: HTMLElement, eventName: string, opts?: PointerEvent) => { - /** - * NOTE: For all MS Edge < 16, `PointerEvent` has a bug where - * `pageX` is always < 10 and it can neither be override-able nor configurable - * unlike other browsers. However, it works perfectly well with real user gestures. - * - * To tackle such weird situation, `MouseEvent` will be used instead - * for all MS Edges as well as IE11. - */ - const isPointerEvent = /^pointer/i.test(eventName) && - !('MSPointerEvent' in window) && - !('MSGestureEvent' in window); - const otherOptions = { - /** - * NOTE: Making sure all events triggered bubbles and - * propagates across shadow boundary. - */ - bubbles: true, - ...opts, - }; - /** - * NOTE: `otherOptions` might contain the following properties for a typical CustomEvent: - * - * 1. `bubbles` - * 2. `cancelable` - * 3. `composed` - * 4. `detail` - * - * In IE11, `new PointerEvent(...)` is not prohibited in script or dev tools. - * In script, all events except `PointerEvent` can be instantiated. - * - * Here, it accidentally becomes a working implementation: - * `new MouseEvent('pointerdown', ...)`, which sounds ridiculous at first, - * but so far this is by far the _only_ way to trigger animations when - * dragging/ swiping the calendar. `Event` and `CustomEvent` will skip running - * the animations which is a good thing but worth to be documented here for - * future reference. - */ - const ev = isPointerEvent ? - new PointerEvent(eventName, otherOptions) : - new MouseEvent(eventName, otherOptions); - - n.dispatchEvent(ev); - }; - const dragTo = async (target: HTMLElement, dragOpts: OptionsDragTo) => { - const { - x = 0, - y = 0, - dx = 0, - dy = 0, - dx2 = 0, - dy2 = 0, - step = 0, - type = 'mouse', - }: OptionsDragTo = dragOpts ?? {}; - const isMouse = type === 'mouse'; - - const toPointerEventOptions = (px: number, py: number) => { - return { - clientX: px, - pageX: px, - offsetX: px, - x: px, - - clientY: py, - pageY: py, - offsetY: py, - y: py, - } as PointerEvent; - }; - const computeSteps = (computeStepsOpts: ComputeStepsOpts) => { - const { - ix, - iy, - xn, - yn, - stepN, - }: ComputeStepsOpts = computeStepsOpts ?? {}; - - const hasX = typeof xn === 'number' && isFinite(xn) && xn !== 0; - const hasY = typeof yn === 'number' && isFinite(yn) && yn !== 0; - - if (!hasX && !hasY) return { x: ix, y: iy, steps: [] }; - - let fx = ix; - let fy = iy; - - const nn = hasX && hasY ? Math.max(xn, yn) : (hasX ? xn : yn); - const maxX = ix + nn; - const maxY = iy + nn; - const total = Math.ceil(Math.abs(nn) / stepN); - const factor = nn < 0 ? -1 : 1; - const temp: [number, number][] = []; - - for (let i = 0; i <= total; i += 1) { - const ni = i * stepN * factor; - const mathFn = factor < 0 ? Math.max : Math.min; - const nx = hasX ? mathFn(maxX, Math.floor(fx + ni)) : 0; - const ny = hasY ? mathFn(maxY, Math.floor(fy + ni)) : 0; - - if (i === total) { - fx = nx; - fy = ny; - } - - temp.push([nx, ny]); - } - - return { x: fx, y: fy, steps: temp }; - }; - - const eachStep = step == null || step <= 0 ? 20 : step; - - let lastX = x; - let lastY = y; - let steps: [number, number][] = []; - - for (const [nx, ny] of [ - [dx, dy], - [dx2, dy2], - ]) { - // Simulate pause before starting subsequent dragging sequences - await new Promise(yay => setTimeout(yay, 500)); - - const results = computeSteps({ - ix: lastX, - iy: lastY, - xn: nx, - yn: ny, - stepN: eachStep, - }); - - if (!results.steps.length) continue; - - lastX = results.x; - lastY = results.y; - steps = steps.concat(results.steps); - } - - simulateInputEvent( - target, - isMouse ? 'mousedown' : 'touchstart', - toPointerEventOptions(x, y)); - - for (const [nx, ny] of steps) { - simulateInputEvent( - target, - isMouse ? 'mousemove' : 'touchmove', - toPointerEventOptions(nx, ny)); - - await new Promise(yay => requestAnimationFrame(yay)); - } - - simulateInputEvent( - target, - isMouse ? 'mouseup' : 'touchend', - toPointerEventOptions(lastX, lastY)); - - return { - done: true, - value: { - x: lastX, - y: lastY, - step: eachStep, - }, - }; - }; - - const a1 = document.body.querySelector(a)!; - const a2 = b == null ? - a1 : - a1.shadowRoot!.querySelector(b)!; - const root = a2.shadowRoot!; - - if (f) { - const { props, attrs }: PrepareOptions = f ?? {}; - - if (props) { - Object.keys(props).forEach((o) => { - (a1 as any)[o] = (props as any)[o]; - }); - } - - if (attrs) { - Object.keys(attrs).forEach((o) => { - a1.setAttribute(o.toLowerCase(), String((attrs as any)[o])); - }); - } - } - - if (b) await a2.updateComplete; - await a1.updateComplete; - - const b1 = root.querySelector(c)!; - - // Setup drag point - const a1Rect = a1.getBoundingClientRect(); - const b1Rect = b1.getBoundingClientRect(); - const left = a1Rect.left + (b1Rect.width * (e.x < 0 ? .78 : .22)); - const right = a1Rect.top + (b1Rect.height * .22); - - const transitionComplete = new Promise((yay) => { - const timer = setTimeout(() => yay(false), 10e3); - - const handler = () => { - clearTimeout(timer); - yay(true); - a1.removeEventListener('datepicker-animation-finished', handler); - }; - a1.addEventListener('datepicker-animation-finished', handler); - }); - - await dragTo(b1, { - ...e, - x: left, - y: right, - dx: e?.x ?? 0, - dy: e?.y ?? 0, - dx2: e?.x2 ?? 0, - dy2: e?.y2 ?? 0, - }); - await transitionComplete; - await a1.updateComplete; - - done(root.querySelector(d)?.textContent ?? ''); - } catch (err) { - done(err.stack); - } - }, - elementName, - elementName2, - '.calendars-container', - toSelector('.calendar-label'), - options, - prepareOptions - ); - }; -}; - -export interface InteractionOption { - elementName: string; - elementName2?: string; - isSafari?: boolean; -} -export const interaction = (options: InteractionOption) => { - const { - elementName, - elementName2, - isSafari, - }: InteractionOption = options ?? {}; - - return { - browserKeys: browserKeys(elementName), - clickElements: clickElements(elementName, isSafari ?? false), - dragCalendarsContainer: dragCalendarsContainer(elementName, elementName2), - focusCalendarsContainer: focusCalendarsContainer(elementName), - }; -}; diff --git a/src/tests/helpers/pretty-html.ts b/src/tests/helpers/pretty-html.ts deleted file mode 100644 index dc765bf73..000000000 --- a/src/tests/helpers/pretty-html.ts +++ /dev/null @@ -1,10 +0,0 @@ -import pretty from 'pretty'; - -export function prettyHtml(content: string | TemplateStringsArray): string { - return pretty( - (content as TemplateStringsArray).raw ? - String.raw(content as TemplateStringsArray) : - content as string, - { ocd: true } - ); -} diff --git a/src/tests/helpers/sanitize-text.ts b/src/tests/helpers/sanitize-text.ts deleted file mode 100644 index a006f82d6..000000000 --- a/src/tests/helpers/sanitize-text.ts +++ /dev/null @@ -1,62 +0,0 @@ -export interface SanitizeTextOptions { - showFocused?: boolean; - showPart?: boolean; - showRole?: boolean; - showTabindex?: boolean; - showToday?: boolean; - showType?: boolean; -} - -export function sanitizeText(content: string, options?: SanitizeTextOptions): string { - const { - showFocused, - showPart, - showRole, - showTabindex, - showToday, - showType, - } = options ?? {}; - - let content2 = content; - - if (!(showFocused ?? true)) { - content2 = content2.replace(/(\s?day--focused|day--focused\s?)/gi, ''); // .day--focused class - } - - if (!(showPart ?? false)) { - content2 = content2.replace(/(\s?part=".+?"|part=".+?"\s?)/gi, ''); // part attribute - } - - if (!(showRole ?? false)) { - content2 = content2.replace(/(\s?role=".+?"|role=".+?"\s?)/gi, ''); // role attribute - } - - if (!(showTabindex ?? false)) { - // tabindex attribute - content2 = content2.replace(/(\s?tabindex=".+?"|tabindex=".+?"\s?)/gi, ''); - } - - if (!(showToday ?? false)) { - content2 = content2.replace(/(\s?day--today|day--today\s?)/gi, ''); // .day--today class - } - - if (!(showType ?? false)) { - content2 = content2.replace(/(\s?type=".+?"|type=".+?"\s?)/gi, ''); // type attribute - } - - return content2 - .replace( - /(?:aria-selected="(.+?)").*?(?:aria-label="(.+?)")/gi, - (_, p1, p2) => `aria-label="${p2}" aria-selected="${p1}"` - ) // Swap aria-selected and aria-label of td in MS Edge - .replace( - /(?:aria-label="(.+?)").*?(?:abbr="(.+?)")/gi, - (_, p1, p2) => `abbr="${p2}" aria-label="${p1}"` - ) // Swap abbr and aria-label of th in MS Edge - .replace(//g, '') // lit-html template placeholder - .replace(/\r?\n/gi, '') // new lines in text - .replace(/(\s?style-scope app-datepicker\s?)/gi, '') // ShadyDOM specific classes - .replace(/(\s?scope="row"|scope="row"\s?)/g, '') // scope="row" attribute in all week labels - .replace(/(\s?class=""|class=""\s?)/g, '') // empty `class` attribute set by ShadyDOM - .replace(/(\s?style=""|style=""\s?)/g, ''); // Unknown `style` set by Firefox -} diff --git a/src/tests/helpers/to-selector.ts b/src/tests/helpers/to-selector.ts deleted file mode 100644 index 09d7c2f81..000000000 --- a/src/tests/helpers/to-selector.ts +++ /dev/null @@ -1,6 +0,0 @@ -export function toSelector(selector: string) { - return [ - `.calendar-container:nth-of-type(2)`, - selector, - ].join(' '); -} diff --git a/src/tests/helpers/typed-assert.ts b/src/tests/helpers/typed-assert.ts deleted file mode 100644 index 57ed6e630..000000000 --- a/src/tests/helpers/typed-assert.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { - deepStrictEqual as dse, - ok as ok2, - strictEqual as se, -} from 'assert'; - -type Message = string | Error | undefined; - -function formatErrorMessage(actual: any, expected: any, message?: Message) { - return message ?? - `\nExpected:\n${JSON.stringify(expected)}\n\nActual:\n${JSON.stringify(actual)}`; -} - -function formatErrorMessageForOk(value: any, message?: Message) { - return message ?? `\nNot all values are the same: \n\n${JSON.stringify(value)}`; -} - -export function allStrictEqual( - values: T[], - expected: T, - message?: Message -) { - return ok2(values.every(n => n === expected), formatErrorMessage(values, expected, message)); -} - -export function deepStrictEqual( - actual: T, - expected: T, - message?: Message -): void { - return dse(actual, expected, formatErrorMessage(actual, expected, message)); -} - -export function ok( - value: T, - message?: Message -): void { - return ok2(value, formatErrorMessageForOk(value, message)); -} - -export function strictEqual( - actual: T, - expected: T, - message?: Message -): void { - return se(actual, expected, formatErrorMessage(actual, expected, message)); -} diff --git a/src/tests/index.html b/src/tests/index.html deleted file mode 100644 index 1e806e0cc..000000000 --- a/src/tests/index.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - app-datepicker tests - - - - - - - - - - - - - - - diff --git a/src/tests/snapshots/.gitignore b/src/tests/snapshots/.gitignore deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/tests/snapshots/app-datepicker-dialog/.gitignore b/src/tests/snapshots/app-datepicker-dialog/.gitignore deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/tests/snapshots/app-datepicker-dialog/attributes-0-MicrosoftEdge.png b/src/tests/snapshots/app-datepicker-dialog/attributes-0-MicrosoftEdge.png deleted file mode 100644 index 7e9881fc3..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/attributes-0-MicrosoftEdge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/attributes-0-Safari.png b/src/tests/snapshots/app-datepicker-dialog/attributes-0-Safari.png deleted file mode 100644 index 72084e3a0..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/attributes-0-Safari.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/attributes-0-chrome.png b/src/tests/snapshots/app-datepicker-dialog/attributes-0-chrome.png deleted file mode 100644 index abd93ad8e..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/attributes-0-chrome.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/attributes-0-firefox.png b/src/tests/snapshots/app-datepicker-dialog/attributes-0-firefox.png deleted file mode 100644 index 1d78e12ae..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/attributes-0-firefox.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/attributes-0-msedge.png b/src/tests/snapshots/app-datepicker-dialog/attributes-0-msedge.png deleted file mode 100644 index 09a0fec33..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/attributes-0-msedge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/attributes-1-MicrosoftEdge.png b/src/tests/snapshots/app-datepicker-dialog/attributes-1-MicrosoftEdge.png deleted file mode 100644 index 8b39939b6..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/attributes-1-MicrosoftEdge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/attributes-1-Safari.png b/src/tests/snapshots/app-datepicker-dialog/attributes-1-Safari.png deleted file mode 100644 index 446ec5900..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/attributes-1-Safari.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/attributes-1-chrome.png b/src/tests/snapshots/app-datepicker-dialog/attributes-1-chrome.png deleted file mode 100644 index ddfd46a48..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/attributes-1-chrome.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/attributes-1-firefox.png b/src/tests/snapshots/app-datepicker-dialog/attributes-1-firefox.png deleted file mode 100644 index a234e86cc..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/attributes-1-firefox.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/attributes-1-msedge.png b/src/tests/snapshots/app-datepicker-dialog/attributes-1-msedge.png deleted file mode 100644 index fc97a3992..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/attributes-1-msedge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-MicrosoftEdge.png b/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-MicrosoftEdge.png deleted file mode 100644 index dd534cb39..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-MicrosoftEdge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-Safari.png b/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-Safari.png deleted file mode 100644 index 0e4416eb3..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-Safari.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-chrome.png b/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-chrome.png deleted file mode 100644 index ff4c185cb..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-chrome.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-firefox.png b/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-firefox.png deleted file mode 100644 index 01b52f5ee..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-firefox.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-msedge.png b/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-msedge.png deleted file mode 100644 index d9e84a2cf..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/initial-render-calendar-view-msedge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/properties-0-MicrosoftEdge.png b/src/tests/snapshots/app-datepicker-dialog/properties-0-MicrosoftEdge.png deleted file mode 100644 index dd534cb39..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/properties-0-MicrosoftEdge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/properties-0-Safari.png b/src/tests/snapshots/app-datepicker-dialog/properties-0-Safari.png deleted file mode 100644 index 0e4416eb3..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/properties-0-Safari.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/properties-0-chrome.png b/src/tests/snapshots/app-datepicker-dialog/properties-0-chrome.png deleted file mode 100644 index ff4c185cb..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/properties-0-chrome.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/properties-0-firefox.png b/src/tests/snapshots/app-datepicker-dialog/properties-0-firefox.png deleted file mode 100644 index 01b52f5ee..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/properties-0-firefox.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/properties-0-msedge.png b/src/tests/snapshots/app-datepicker-dialog/properties-0-msedge.png deleted file mode 100644 index d9e84a2cf..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/properties-0-msedge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/properties-1-MicrosoftEdge.png b/src/tests/snapshots/app-datepicker-dialog/properties-1-MicrosoftEdge.png deleted file mode 100644 index 8b39939b6..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/properties-1-MicrosoftEdge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/properties-1-Safari.png b/src/tests/snapshots/app-datepicker-dialog/properties-1-Safari.png deleted file mode 100644 index 446ec5900..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/properties-1-Safari.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/properties-1-chrome.png b/src/tests/snapshots/app-datepicker-dialog/properties-1-chrome.png deleted file mode 100644 index ddfd46a48..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/properties-1-chrome.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/properties-1-firefox.png b/src/tests/snapshots/app-datepicker-dialog/properties-1-firefox.png deleted file mode 100644 index a234e86cc..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/properties-1-firefox.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker-dialog/properties-1-msedge.png b/src/tests/snapshots/app-datepicker-dialog/properties-1-msedge.png deleted file mode 100644 index fc97a3992..000000000 Binary files a/src/tests/snapshots/app-datepicker-dialog/properties-1-msedge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/.gitignore b/src/tests/snapshots/app-datepicker/.gitignore deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/tests/snapshots/app-datepicker/attributes-0-MicrosoftEdge.png b/src/tests/snapshots/app-datepicker/attributes-0-MicrosoftEdge.png deleted file mode 100644 index 3054559af..000000000 Binary files a/src/tests/snapshots/app-datepicker/attributes-0-MicrosoftEdge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/attributes-0-Safari.png b/src/tests/snapshots/app-datepicker/attributes-0-Safari.png deleted file mode 100644 index 333123ce3..000000000 Binary files a/src/tests/snapshots/app-datepicker/attributes-0-Safari.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/attributes-0-chrome.png b/src/tests/snapshots/app-datepicker/attributes-0-chrome.png deleted file mode 100644 index a5a6d001d..000000000 Binary files a/src/tests/snapshots/app-datepicker/attributes-0-chrome.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/attributes-0-firefox.png b/src/tests/snapshots/app-datepicker/attributes-0-firefox.png deleted file mode 100644 index 7c67041fe..000000000 Binary files a/src/tests/snapshots/app-datepicker/attributes-0-firefox.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/attributes-0-msedge.png b/src/tests/snapshots/app-datepicker/attributes-0-msedge.png deleted file mode 100644 index d23fabd12..000000000 Binary files a/src/tests/snapshots/app-datepicker/attributes-0-msedge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/attributes-1-MicrosoftEdge.png b/src/tests/snapshots/app-datepicker/attributes-1-MicrosoftEdge.png deleted file mode 100644 index 032fd5692..000000000 Binary files a/src/tests/snapshots/app-datepicker/attributes-1-MicrosoftEdge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/attributes-1-Safari.png b/src/tests/snapshots/app-datepicker/attributes-1-Safari.png deleted file mode 100644 index 05bc1fdf5..000000000 Binary files a/src/tests/snapshots/app-datepicker/attributes-1-Safari.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/attributes-1-chrome.png b/src/tests/snapshots/app-datepicker/attributes-1-chrome.png deleted file mode 100644 index 0f2e96fa6..000000000 Binary files a/src/tests/snapshots/app-datepicker/attributes-1-chrome.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/attributes-1-firefox.png b/src/tests/snapshots/app-datepicker/attributes-1-firefox.png deleted file mode 100644 index d8d747276..000000000 Binary files a/src/tests/snapshots/app-datepicker/attributes-1-firefox.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/attributes-1-msedge.png b/src/tests/snapshots/app-datepicker/attributes-1-msedge.png deleted file mode 100644 index d496fa4c6..000000000 Binary files a/src/tests/snapshots/app-datepicker/attributes-1-msedge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/initial-render-calendar-view-MicrosoftEdge.png b/src/tests/snapshots/app-datepicker/initial-render-calendar-view-MicrosoftEdge.png deleted file mode 100644 index 4dbbc990f..000000000 Binary files a/src/tests/snapshots/app-datepicker/initial-render-calendar-view-MicrosoftEdge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/initial-render-calendar-view-Safari.png b/src/tests/snapshots/app-datepicker/initial-render-calendar-view-Safari.png deleted file mode 100644 index 6b18ac264..000000000 Binary files a/src/tests/snapshots/app-datepicker/initial-render-calendar-view-Safari.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/initial-render-calendar-view-chrome.png b/src/tests/snapshots/app-datepicker/initial-render-calendar-view-chrome.png deleted file mode 100644 index 08fedd765..000000000 Binary files a/src/tests/snapshots/app-datepicker/initial-render-calendar-view-chrome.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/initial-render-calendar-view-firefox.png b/src/tests/snapshots/app-datepicker/initial-render-calendar-view-firefox.png deleted file mode 100644 index a97183ae4..000000000 Binary files a/src/tests/snapshots/app-datepicker/initial-render-calendar-view-firefox.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/initial-render-calendar-view-msedge.png b/src/tests/snapshots/app-datepicker/initial-render-calendar-view-msedge.png deleted file mode 100644 index 238d245af..000000000 Binary files a/src/tests/snapshots/app-datepicker/initial-render-calendar-view-msedge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/initial-render-year-view-MicrosoftEdge.png b/src/tests/snapshots/app-datepicker/initial-render-year-view-MicrosoftEdge.png deleted file mode 100644 index caaf27f65..000000000 Binary files a/src/tests/snapshots/app-datepicker/initial-render-year-view-MicrosoftEdge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/initial-render-year-view-Safari.png b/src/tests/snapshots/app-datepicker/initial-render-year-view-Safari.png deleted file mode 100644 index ac4febec8..000000000 Binary files a/src/tests/snapshots/app-datepicker/initial-render-year-view-Safari.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/initial-render-year-view-chrome.png b/src/tests/snapshots/app-datepicker/initial-render-year-view-chrome.png deleted file mode 100644 index 31255963e..000000000 Binary files a/src/tests/snapshots/app-datepicker/initial-render-year-view-chrome.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/initial-render-year-view-firefox.png b/src/tests/snapshots/app-datepicker/initial-render-year-view-firefox.png deleted file mode 100644 index 8688cde9d..000000000 Binary files a/src/tests/snapshots/app-datepicker/initial-render-year-view-firefox.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/initial-render-year-view-msedge.png b/src/tests/snapshots/app-datepicker/initial-render-year-view-msedge.png deleted file mode 100644 index 79f38e1df..000000000 Binary files a/src/tests/snapshots/app-datepicker/initial-render-year-view-msedge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/properties-0-MicrosoftEdge.png b/src/tests/snapshots/app-datepicker/properties-0-MicrosoftEdge.png deleted file mode 100644 index 075982910..000000000 Binary files a/src/tests/snapshots/app-datepicker/properties-0-MicrosoftEdge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/properties-0-Safari.png b/src/tests/snapshots/app-datepicker/properties-0-Safari.png deleted file mode 100644 index cee450ef5..000000000 Binary files a/src/tests/snapshots/app-datepicker/properties-0-Safari.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/properties-0-chrome.png b/src/tests/snapshots/app-datepicker/properties-0-chrome.png deleted file mode 100644 index 827506a42..000000000 Binary files a/src/tests/snapshots/app-datepicker/properties-0-chrome.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/properties-0-firefox.png b/src/tests/snapshots/app-datepicker/properties-0-firefox.png deleted file mode 100644 index 9303efbe4..000000000 Binary files a/src/tests/snapshots/app-datepicker/properties-0-firefox.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/properties-0-msedge.png b/src/tests/snapshots/app-datepicker/properties-0-msedge.png deleted file mode 100644 index ac9018c86..000000000 Binary files a/src/tests/snapshots/app-datepicker/properties-0-msedge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/properties-1-MicrosoftEdge.png b/src/tests/snapshots/app-datepicker/properties-1-MicrosoftEdge.png deleted file mode 100644 index 032fd5692..000000000 Binary files a/src/tests/snapshots/app-datepicker/properties-1-MicrosoftEdge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/properties-1-Safari.png b/src/tests/snapshots/app-datepicker/properties-1-Safari.png deleted file mode 100644 index 05bc1fdf5..000000000 Binary files a/src/tests/snapshots/app-datepicker/properties-1-Safari.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/properties-1-chrome.png b/src/tests/snapshots/app-datepicker/properties-1-chrome.png deleted file mode 100644 index 0f2e96fa6..000000000 Binary files a/src/tests/snapshots/app-datepicker/properties-1-chrome.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/properties-1-firefox.png b/src/tests/snapshots/app-datepicker/properties-1-firefox.png deleted file mode 100644 index d8d747276..000000000 Binary files a/src/tests/snapshots/app-datepicker/properties-1-firefox.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/properties-1-msedge.png b/src/tests/snapshots/app-datepicker/properties-1-msedge.png deleted file mode 100644 index d496fa4c6..000000000 Binary files a/src/tests/snapshots/app-datepicker/properties-1-msedge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/timezones-MicrosoftEdge.png b/src/tests/snapshots/app-datepicker/timezones-MicrosoftEdge.png deleted file mode 100644 index 74ded7cbd..000000000 Binary files a/src/tests/snapshots/app-datepicker/timezones-MicrosoftEdge.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/timezones-Safari.png b/src/tests/snapshots/app-datepicker/timezones-Safari.png deleted file mode 100644 index 7612aabc0..000000000 Binary files a/src/tests/snapshots/app-datepicker/timezones-Safari.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/timezones-chrome.png b/src/tests/snapshots/app-datepicker/timezones-chrome.png deleted file mode 100644 index 631f0918e..000000000 Binary files a/src/tests/snapshots/app-datepicker/timezones-chrome.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/timezones-firefox.png b/src/tests/snapshots/app-datepicker/timezones-firefox.png deleted file mode 100644 index fd3c7299f..000000000 Binary files a/src/tests/snapshots/app-datepicker/timezones-firefox.png and /dev/null differ diff --git a/src/tests/snapshots/app-datepicker/timezones-msedge.png b/src/tests/snapshots/app-datepicker/timezones-msedge.png deleted file mode 100644 index fbe04106f..000000000 Binary files a/src/tests/snapshots/app-datepicker/timezones-msedge.png and /dev/null differ diff --git a/src/tests/timezones.ts b/src/tests/timezones.ts deleted file mode 100644 index 9ccbc4a3e..000000000 --- a/src/tests/timezones.ts +++ /dev/null @@ -1,86 +0,0 @@ -const timezones = [ - '-12:00', - '-11:00', - '-10:00', - '-09:30', - '-09:00', - '-08:00', - '-07:00', - '-06:00', - '-05:00', - '-04:00', - '-03:30', - '-03:00', - '-02:00', - '-01:00', - '-00:00', - '+00:00', - '+01:00', - '+02:00', - '+03:00', - '+03:30', - '+04:00', - '+04:30', - '+05:00', - '+05:30', - '+05:45', - '+06:00', - '+06:30', - '+07:00', - '+08:00', - '+08:45', - '+09:00', - '+09:30', - '+10:00', - '+10:30', - '+11:00', - '+12:00', - '+12:45', - '+13:00', - '+14:00', -]; - -interface DateStringVal { - date: string; - value: string; -} -export type DateString = [string, DateStringVal]; -export function getAllDateStrings(): DateString[] { - const fullYear = '2020'; - const month = '02'; - const date = '02'; - - const timezonesSet: Map = new Map(); - const hours = Array.from(Array(24), (_, i) => i); - - /** - * NOTE: Different date string with specified timezone will render the date output to be - * different if the local is on another timezone which is also different from the specified - * timezone from the date string. To avoid that, by normalizing the date output to be in UTC - * timezone will most likely mimic the expected behavior as if the date string was the date - * returned by the local browser. - * - * e.g. `2020-02-02T00:00:00.000-12:00` will have different output: - * - * 1. `2020-02-02T02:00:00.000+14:00` in GMT+14 timezone == `2020-02-01T12:00:00.000Z` - * 2. `2020-02-02T00:00:00.000-12:00` in GMT-12 timezone == `2020-02-02T12:00:00.000Z` - * - * There is a clear difference between the 2 different timezone. - */ - for (const timezone of timezones) { - for (const hour of hours) { - const isoDateString = - `${fullYear}-${month}-${date}T${`0${hour}`.slice(-2)}:00:00.000${timezone}`; - const jsonDate = new Date(isoDateString).toJSON(); - - if (timezonesSet.has(jsonDate)) continue; - - timezonesSet.set(jsonDate, { - date: jsonDate, - value: jsonDate.replace(/^(.+)T.+/i, '$1'), - }); - } - } - - return Array.from(timezonesSet); -} diff --git a/src/tests/wdio.config.ts b/src/tests/wdio.config.ts deleted file mode 100644 index ab73db845..000000000 --- a/src/tests/wdio.config.ts +++ /dev/null @@ -1,60 +0,0 @@ -import type { WdioConfig } from './custom_wdio.js'; - -export const config: WdioConfig = { - runner: 'local', - specs: [ - './dist/tests/**/*.spec.js', - // './dist/tests/app-datepicker/tests.js', - // './dist/tests/app-datepicker-dialog/tests.js', - ], - exclude: [], - maxInstances: 36, - capabilities: [ - { - browserName: 'chrome', - 'goog:chromeOptions': { - args: [ - 'disable-background-timer-throttling', - 'disable-gpu', - 'disable-renderer-backgrounding', - 'headless', - 'no-sandbox', - 'window-size=800,600', - ], - w3c: true, - }, - maxInstances: 10, - }, - { - browserName: 'firefox', - 'moz:firefoxOptions': { - args: [ - '--window-size=800,600', - '--headless', - ], - }, - maxInstances: 10, - }, - ], - logLevel: 'error', - bail: 1, - baseUrl: 'http://localhost', - waitforTimeout: 10e3, - connectionRetryCount: 2, - - services: [ - 'selenium-standalone', - ], - seleniumLogs: 'logs', - - framework: 'mocha', - specFileRetries: 1, - reporters: ['spec'], - mochaOpts: { - checkLeaks: true, - inlineDiffs: true, - require: ['reify'], - timeout: 30e3, - ui: 'bdd', - }, -}; diff --git a/src/tests/wdio.sl.config.ts b/src/tests/wdio.sl.config.ts deleted file mode 100644 index 4cb7cf610..000000000 --- a/src/tests/wdio.sl.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -import type { - SauceLabsCapability, - WdioConfig, -} from './custom_wdio.js'; - -import { config as baseConfig } from './wdio.config.js'; - -const baseCapability: SauceLabsCapability = { - browserVersion: 'latest', - 'sauce:options': { - build: new Date().toJSON(), - screenResolution: '800x600', - seleniumVersion: '3.141.59', - }, - specs: ['./dist/tests/**/*.spec.js'], - // specs: ['./dist/tests/app-datepicker/tests.js'], - // specs: ['./dist/tests/app-datepicker-dialog/tests.js'], - browserName: 'googlechrome', - platformName: 'windows 10', -}; -const sauceLabsUser = process.env.SAUCE_USERNAME || ''; -const sauceLabsAccessKey = process.env.SAUCE_ACCESS_KEY || ''; - -export const config: WdioConfig = { - ...baseConfig, - // maxInstances: 72, - services: ['sauce'], - specs: [], - region: 'us', - user: sauceLabsUser, - key: sauceLabsAccessKey, - sauceConnect: true, - sauceConnectOpts: { - user: sauceLabsUser, - accessKey: sauceLabsAccessKey, - }, - capabilities: [ - // { - // ...baseCapability, - // 'goog:chromeOptions': { - // w3c: true, - // }, - // }, - // { - // ...baseCapability, - // browserName: 'firefox', - // }, - { - ...baseCapability, - browserName: 'safari', - platformName: 'macos 10.13', - 'sauce:options': { - ...baseCapability['sauce:options'], - screenResolution: '1024x768', - }, - }, - { - ...baseCapability, - browserName: 'microsoftedge', - browserVersion: '18', - }, - - // { - // ...baseCapability, - // browserName: 'internet explorer', - // }, - ] as SauceLabsCapability[], -}; diff --git a/src/tracker.ts b/src/tracker.ts deleted file mode 100644 index 54ebad129..000000000 --- a/src/tracker.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { supportsPassiveEventListener } from '@material/mwc-base/utils.js'; - -type PointerType = MouseEvent | TouchEvent | PointerEvent | TouchInit; -interface ResolvedPointer { - x: PointerEvent['pageX']; - y: PointerEvent['pageY']; - id: PointerEvent['pageY'] | Touch['identifier']; -} -interface FirstTouch { - newPointer: ResolvedPointer; - oldPointer: ResolvedPointer | null; -} -interface PointerHandler { - handler(ev: PointerType): void; -} -export interface TrackerHandlers { - down(startPointer: ResolvedPointer, ev: PointerType): void; - move(startPointer: ResolvedPointer, oldPointer: ResolvedPointer, ev: PointerType): void; - up(startPointer: ResolvedPointer, oldPointer: ResolvedPointer, ev: PointerType): void; -} - -function toPointer(ev: PointerType): ResolvedPointer { - const { clientX, clientY, pageX, pageY } = ev as PointerEvent; - /** - * NOTE: For MS Edge < 16, `PointerEvents` triggered by unit tests always fail to set defined - * `pageX` and `pageY`. Those values are overridden by the browser but the values are incorrect as - * they are less than 10. - * - * Therefore, we are finding the max values between `pageX` and `clientX`. Perhaps `client*` - * properties can be used instead. For code safety during typical situation/ testing, this seems - * like the best of both worlds. - */ - const x = Math.max(pageX, clientX); - const y = Math.max(pageY, clientY); - const id = (ev as TouchInit).identifier || (ev as PointerEvent).pointerId; - - return { x, y, id: id == null ? 0 : id }; -} - -function getFirstTouch(startPointer: ResolvedPointer | null, ev: PointerType): FirstTouch { - const changedTouches = (ev as TouchEvent).changedTouches; - - if (changedTouches == null) return { newPointer: toPointer(ev), oldPointer: startPointer }; - - const touches = Array.from(changedTouches, n => toPointer(n)); - const newPointer = startPointer == null - ? touches[0] - : touches.find(n => n.id === startPointer.id)!; - - return { newPointer, oldPointer: startPointer }; -} - -function addPassiveEventListener( - node: HTMLElement, - event: string, - callback: unknown -): void { - node.addEventListener( - event, - callback as EventListenerOrEventListenerObject, - supportsPassiveEventListener ? { passive: true } : false - ); -} - -export class Tracker { - private _startPointer: ResolvedPointer | null = null; - private readonly _down: PointerHandler['handler']; - private readonly _move: PointerHandler['handler']; - private readonly _up: PointerHandler['handler']; - - constructor(private _element: HTMLElement, handlers: TrackerHandlers) { - const { down, move, up } = handlers; - - this._down = this._onDown(down); - this._move = this._onMove(move); - this._up = this._onUp(up); - - if (_element && _element.addEventListener) { - _element.addEventListener('mousedown', this._down); - - addPassiveEventListener(_element, 'touchstart', this._down); - addPassiveEventListener(_element, 'touchmove', this._move); - addPassiveEventListener(_element, 'touchend', this._up); - } - } - - public disconnect() { - const rootEl = this._element; - - if (rootEl && rootEl.removeEventListener) { - rootEl.removeEventListener('mousedown', this._down); - rootEl.removeEventListener('touchstart', this._down); - rootEl.removeEventListener('touchmove', this._move); - rootEl.removeEventListener('touchend', this._up); - } - } - - private _onDown(down: TrackerHandlers['down']) { - return (ev: PointerType) => { - if (ev instanceof MouseEvent) { - this._element.addEventListener('mousemove', this._move); - this._element.addEventListener('mouseup', this._up); - this._element.addEventListener('mouseleave', this._up); - } - - const { newPointer } = getFirstTouch(this._startPointer, ev); - - down(newPointer, ev); - this._startPointer = newPointer; - }; - } - - private _onMove(move: TrackerHandlers['move']) { - return (ev: PointerType) => { - this._updatePointers(move, ev); - }; - } - - private _onUp(up: TrackerHandlers['up']) { - return (ev: PointerType) => { - this._updatePointers(up, ev, true); - }; - } - - private _updatePointers(cb: (...args: any[]) => void, ev: PointerType, shouldReset?: boolean) { - if (shouldReset && ev instanceof MouseEvent) { - this._element.removeEventListener('mousemove', this._move); - this._element.removeEventListener('mouseup', this._up); - this._element.removeEventListener('mouseleave', this._up); - } - - const { newPointer, oldPointer } = getFirstTouch(this._startPointer, ev); - - cb(newPointer, oldPointer, ev); - - this._startPointer = shouldReset ? null : newPointer; - } -} diff --git a/src/typings.ts b/src/typings.ts new file mode 100644 index 000000000..922a21b42 --- /dev/null +++ b/src/typings.ts @@ -0,0 +1,82 @@ +import type { LitElement, PropertyValues } from 'lit'; +import type { DateTimeFormatter } from 'nodemod/dist/calendar/typings.js'; + +import type { startViews } from './constants.js'; +import type { DatePicker } from './date-picker/date-picker.js'; +import type { keyArrowDown, keyArrowLeft, keyArrowRight, keyArrowUp, keyEnd, keyEnter, keyHome, keyPageDown, keyPageUp, keySpace, keyTab } from './key-values.js'; +import type { DatePickerMinMaxProperties, DatePickerMixinProperties, ElementMixinProperties } from './mixins/typings.js'; +import type { Constructor } from './utility-typings.js'; + +export type ChangedProperties> = PropertyValues & Map; + +export interface CustomEventAction { + detail: CustomEventDetail; + type: T; +} + +export interface CustomEventDetail { + ['date-updated']: CustomEventAction<'date-updated', CustomEventDetailDateUpdated>; + ['first-updated']: CustomEventAction<'first-updated', CustomEventDetailFirstUpdated>; + ['year-updated']: CustomEventAction<'year-updated', CustomEventDetailYearUpdated>; +} + +interface CustomEventDetailDateUpdated extends KeyEvent, DatePickerValues {} + +interface CustomEventDetailFirstUpdated extends DatePickerValues { + focusableElements: HTMLElement[]; +} + +/** + * NOTE: No `KeyEvent` is needed as native `button` element will dispatch `click` event on keypress. + */ +interface CustomEventDetailYearUpdated { + year: number; +} + +export interface DatePickerProperties extends + DatePickerMinMaxProperties, + DatePickerMixinProperties, + ElementMixinProperties {} + +type DatePickerValues = Required>; + +export interface Formatters extends Pick { + dayFormat: DateTimeFormatter; + fullDateFormat: DateTimeFormatter; + longWeekdayFormat: DateTimeFormatter; + narrowWeekdayFormat: DateTimeFormatter; + longMonthFormat: DateTimeFormatter; + longMonthYearFormat: DateTimeFormatter; + dateFormat: DateTimeFormatter; + yearFormat: DateTimeFormatter; +} + +export type InferredFromSet = SetType extends Set ? T : never; + +interface KeyEvent { + isKeypress: boolean; + key?: SupportedKey; +} + +export type LitConstructor = Constructor; + +export type StartView = StartViewTuple[number]; + +export type StartViewTuple = typeof startViews; + +export type SupportedKey = + | typeof keyArrowDown + | typeof keyArrowLeft + | typeof keyArrowRight + | typeof keyArrowUp + | typeof keyEnd + | typeof keyEnter + | typeof keyHome + | typeof keyPageDown + | typeof keyPageUp + | typeof keySpace + | typeof keyTab; + +export interface ValueUpdatedEvent extends KeyEvent { + value: string; +} diff --git a/src/utility-typings.ts b/src/utility-typings.ts new file mode 100644 index 000000000..530d2b072 --- /dev/null +++ b/src/utility-typings.ts @@ -0,0 +1,26 @@ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +type AllowedAny = any; + +type Cloned = DeepExecWith; +}>; + +export type Constructor = new (...args: AllowedAny[]) => T; + +type DeepExecWith = T extends Record + ? Condition + : T extends (...args: AllowedAny) => unknown + ? T + : Condition; + +type DeepNonNullable = Cloned; +}>>>; + +export type DeepNonNullableAndRequired = DeepNonNullable>; + +type DeepRequired = Cloned; +}>>; + +export type OmitKey = Omit; diff --git a/src/year-grid-button/app-year-grid-button.ts b/src/year-grid-button/app-year-grid-button.ts new file mode 100644 index 000000000..3966b2869 --- /dev/null +++ b/src/year-grid-button/app-year-grid-button.ts @@ -0,0 +1,13 @@ +import { customElement } from 'lit/decorators.js'; + +import { appYearGridButtonName } from './constants.js'; +import { YearGridButton } from './year-grid-button.js'; + +@customElement(appYearGridButtonName) +export class AppYearGridButton extends YearGridButton {} + +declare global { + interface HTMLElementTagNameMap { + [appYearGridButtonName]: AppYearGridButton; + } +} diff --git a/src/year-grid-button/constants.ts b/src/year-grid-button/constants.ts new file mode 100644 index 000000000..d3c414de7 --- /dev/null +++ b/src/year-grid-button/constants.ts @@ -0,0 +1 @@ +export const appYearGridButtonName = 'app-year-grid-button' as const; diff --git a/src/year-grid-button/stylings.ts b/src/year-grid-button/stylings.ts new file mode 100644 index 000000000..d2965142b --- /dev/null +++ b/src/year-grid-button/stylings.ts @@ -0,0 +1,30 @@ +import { css } from 'lit'; + +export const yearGridButtonStyling = css` +:host { + --mdc-button-horizontal-padding: 0; + --mdc-theme-primary: var(--base-primary); + --mdc-theme-on-primary: var(--base-on-primary); + + align-items: center; + justify-content: center; + + width: 56px; + height: 32px; + pointer-events: none; +} + +.mdc-button { + max-width: 52px; + min-width: 52px; + width: 52px; + height: 28px; + padding: 0; + background-color: inherit; + color: inherit; + font: inherit; + font-size: 13px; + border-radius: 52px; + pointer-events: auto; +} +`; diff --git a/src/year-grid-button/year-grid-button.ts b/src/year-grid-button/year-grid-button.ts new file mode 100644 index 000000000..e4aec70ed --- /dev/null +++ b/src/year-grid-button/year-grid-button.ts @@ -0,0 +1,12 @@ +import { ButtonBase } from '@material/mwc-button/mwc-button-base.js'; +import { styles } from '@material/mwc-button/styles.css'; + +import { ElementMixin } from '../mixins/element-mixin.js'; +import { yearGridButtonStyling } from './stylings.js'; + +export class YearGridButton extends ElementMixin(ButtonBase) { + static override styles = [ + styles, + yearGridButtonStyling, + ]; +} diff --git a/src/year-grid/app-year-grid.ts b/src/year-grid/app-year-grid.ts new file mode 100644 index 000000000..73817b645 --- /dev/null +++ b/src/year-grid/app-year-grid.ts @@ -0,0 +1,13 @@ +import { customElement } from 'lit/decorators.js'; + +import { appYearGridName } from './constants.js'; +import { YearGrid } from './year-grid.js'; + +@customElement(appYearGridName) +export class AppYearGrid extends YearGrid {} + +declare global { + interface HTMLElementTagNameMap { + [appYearGridName]: AppYearGrid; + } +} diff --git a/src/year-grid/constants.ts b/src/year-grid/constants.ts new file mode 100644 index 000000000..9a66dbf32 --- /dev/null +++ b/src/year-grid/constants.ts @@ -0,0 +1 @@ +export const appYearGridName = 'app-year-grid' as const; diff --git a/src/year-grid/stylings.ts b/src/year-grid/stylings.ts new file mode 100644 index 000000000..e116f84bd --- /dev/null +++ b/src/year-grid/stylings.ts @@ -0,0 +1,122 @@ +import { css } from 'lit'; + +export const yearGridStyling = css` +:host { + --_border-width: 0px; + --_col: 56px; + --_inset: 2px; + --_row: 32px; + --_col-n: 4; + + display: block; + font-size: 13px; +} + +.year-grid { + display: grid; + grid-template-columns: repeat(var(--_col-n), minmax(var(--_col), auto)); + grid-template-rows: repeat(auto-fit, var(--_row)); + align-items: center; + justify-items: center; + + width: calc(var(--_col) * var(--_col-n)); +} +@supports (scrollbar-width: thin) { + .year-grid { + scrollbar-width: thin; + } +} + +.year-grid-button, +.year-grid-button::before, +.year-grid-button::after { + --_offset: calc(var(--_inset) * 2) + (var(--_border-width) * 2); + + --_col2: calc(var(--_col) - (var(--_offset))); + --_row2: calc(var(--_row) - (var(--_offset))); + + display: flex; + align-items: center; + justify-content: center; + + position: relative; + top: var(--_inset); + right: var(--_inset); + bottom: var(--_inset); + left: var(--_inset); + inset: var(--_inset); + width: var(--_col2); + height: var(--_row2); + border: var(--_border-width) solid var(--_border-color); + border-radius: 50px; + outline: none; +} + +.year-grid-button { + min-width: var(--_col); + min-height: var(--_row); + max-width: var(--_col); + max-height: var(--_row); +} +@media (any-hover: hover) { + .year-grid-button:not([aria-disabled="true"]):hover { + cursor: pointer; + } +} + +.year-grid-button::before, +.year-grid-button::after { + content: attr(aria-label); + + position: absolute; + pointer-events: none; +} + +.year-grid-button::before { + z-index: 1; +} +.year-grid-button:focus-visible::before, +.year-grid-button:hover::before { + --_border-color: var(--_focus); + --_border-width: 1px; + --_inset: 0px; + + color: var(--_on-focus); +} +.year-grid-button:hover::before, +.year-grid-button.year--today:not([aria-selected="true"]):hover::before { + --_border-color: var(--_hover); + + color: var(--_on-hover); +} +.year-grid-button[aria-selected="true"]::before { + color: var(--_on-primary); +} +.year-grid-button[aria-selected="true"]:focus-visible::before { + --_border-color: var(--_selected-focus); + + color: var(--_selected-on-focus); +} +.year-grid-button[aria-selected="true"]:hover::before { + --_border-color: var(--_selected-hover); + + color: var(--_selected-on-hover); +} +.year-grid-button.year--today:not([aria-selected="true"])::before { + --_border-color: var(--_today); + --_border-width: 1px; + + color: var(--_on-today); +} + +.year-grid-button::after { + content: ''; +} +.year-grid-button:focus-visible::after, +.year-grid-button:hover::after { + --_inset: 3px; +} +.year-grid-button[aria-selected="true"]::after { + background-color: var(--_primary); +} +`; diff --git a/src/year-grid/to-next-selected-year.ts b/src/year-grid/to-next-selected-year.ts new file mode 100644 index 000000000..8cbf53d24 --- /dev/null +++ b/src/year-grid/to-next-selected-year.ts @@ -0,0 +1,37 @@ +import { clampValue } from '../helpers/clamp-value.js'; +import { keyArrowDown, keyArrowLeft, keyArrowRight, keyArrowUp, keyEnd, keyHome } from '../key-values.js'; +import type { ToNextSelectableYearInit } from './typings.js'; + +export function toNextSelectedYear({ + key, + max, + min, + year, +}: ToNextSelectableYearInit): number { + let newYear = year; + + switch (key) { + case keyArrowUp: { + newYear = year - 4; + break; + } + case keyArrowDown: { + newYear = year + 4; + break; + } + case keyArrowLeft: { + newYear = year - 1; + break; + } + case keyArrowRight: { + newYear = year + 1; + break; + } + case keyEnd: return max.getUTCFullYear(); + case keyHome: return min.getUTCFullYear(); + default: + return year; + } + + return clampValue(min.getUTCFullYear(), max.getFullYear(), newYear); +} diff --git a/src/year-grid/typings.ts b/src/year-grid/typings.ts new file mode 100644 index 000000000..548ea4918 --- /dev/null +++ b/src/year-grid/typings.ts @@ -0,0 +1,31 @@ +import type { ChangedProperties, DatePickerProperties, Formatters, SupportedKey } from '../typings.js'; + +type PickDatePickerProperties = Pick; +type PickYearGridData = Pick; + +export interface ToNextSelectableYearInit { + key: SupportedKey; + max: Date; + min: Date; + year: number; +} + +export type YearGridChangedProperties = ChangedProperties; + +export interface YearGridData extends PickDatePickerProperties { + date: Date; + formatters?: Formatters + max: Date; + min: Date; +} + +export interface YearGridProperties { + data?: YearGridData; +} + +export interface YearGridRenderButtonInit extends Omit, PickYearGridData { + focusingYear: number; + label: string; + part: string; + year: number; +} diff --git a/src/year-grid/year-grid.ts b/src/year-grid/year-grid.ts new file mode 100644 index 000000000..6618e5921 --- /dev/null +++ b/src/year-grid/year-grid.ts @@ -0,0 +1,200 @@ +import type { TemplateResult } from 'lit'; +import { html } from 'lit'; +import { property, queryAsync, state } from 'lit/decorators.js'; +import { ifDefined } from 'lit/directives/if-defined.js'; + +import { labelSelectedYear, labelToyear, MAX_DATE, navigationKeySetGrid } from '../constants.js'; +import { toClosestTarget } from '../helpers/to-closest-target.js'; +import { toResolvedDate } from '../helpers/to-resolved-date.js'; +import { toYearList } from '../helpers/to-year-list.js'; +import { RootElement } from '../root-element/root-element.js'; +import { baseStyling, resetButton, resetShadowRoot } from '../stylings.js'; +import type { CustomEventDetail, Formatters, InferredFromSet } from '../typings.js'; +import { yearGridStyling } from './stylings.js'; +import { toNextSelectedYear } from './to-next-selected-year.js'; +import type { YearGridChangedProperties, YearGridData, YearGridProperties, YearGridRenderButtonInit } from './typings.js'; + +export class YearGrid extends RootElement implements YearGridProperties { + @property({ attribute: false }) public data: YearGridData; + + @queryAsync('button[data-year][aria-selected="true"]') public selectedYearGridButton!: Promise; + @queryAsync('.year-grid') public yearGrid!: Promise; + + @state() protected $focusingYear: number; + + #todayYear: number; + + public static override styles = [ + baseStyling, + resetButton, + resetShadowRoot, + yearGridStyling, + ]; + + constructor() { + super(); + + const todayDate = toResolvedDate(); + + this.data = { + date: todayDate, + formatters: undefined, + max: MAX_DATE, + min: todayDate, + selectedYearLabel: labelSelectedYear, + toyearLabel: labelToyear, + }; + + this.$focusingYear = this.#todayYear = todayDate.getUTCFullYear(); + } + + protected override shouldUpdate(): boolean { + return this.data != null && this.data.formatters != null; + } + + public override willUpdate(changedProperties: YearGridChangedProperties): void { + if (changedProperties.has('data') && this.data) { + const { date } = this.data; + + if (date) { + this.$focusingYear = date.getUTCFullYear(); + } + } + } + + protected override async updated(): Promise { + /** + * NOTE(motss): Unable to use `.focus()` nor `.scrollIntoView()` as it will trigger the document scrolling + * instead of just the year grid container. So what is doing here is to calculate the position of + * the selected year and updates the `.scrollTop`. + */ + this.scrollTop = Math.floor((this.$focusingYear - this.data.min.getUTCFullYear()) / 4) * 32; + } + + protected override render(): TemplateResult { + const { + date, + formatters, + max, + min, + selectedYearLabel, + toyearLabel, + } = this.data as YearGridData; + const focusingYear =this.$focusingYear; + + const { yearFormat } = formatters as Formatters; + const yearList = toYearList(min, max); + + return html` +
${ + yearList.map((year) => { + const isSelected = year === date.getUTCFullYear(); + const isToday = this.#todayYear === year; + + const title = isSelected ? + selectedYearLabel : + isToday + ? toyearLabel + : undefined; + + return this.$renderButton({ + ariaLabel: yearFormat(new Date(`${year}-01-01`)), + ariaSelected: isSelected ? 'true' : 'false', + className: isToday ? ' year--today' : '', + date, + part: `year${isToday ? ' toyear' : ''}`, + tabIndex: year === focusingYear ? 0 : -1, + title, + toyearLabel, + year, + } as YearGridRenderButtonInit); + }) + }
+ `; + } + + protected $renderButton({ + ariaLabel, + ariaSelected, + className, + part, + tabIndex, + title, + year, + }: YearGridRenderButtonInit): TemplateResult { + return html` + + `; + } + + #updateYear = (event: KeyboardEvent): void => { + if (event.type === 'keydown') { + /** + * NOTE: `@material/mwc-dialog` captures Enter keyboard event then closes the dialog. + * This is not what `year-grid` expects so here stops all event propagation immediately for + * all key events. + */ + event.stopImmediatePropagation(); + + const key = + event.key as InferredFromSet; + + if (!navigationKeySetGrid.has(key)) return; + + // Stop scrolling with arrow keys + event.preventDefault(); + + // Focus new year with Home, End, and arrow keys + const { + max, + min, + } = this.data as YearGridData; + const focusingYear = toNextSelectedYear({ + key, + max, + min, + year: this.$focusingYear, + }); + + const focusingYearGridButton = this.query( + `button[data-year="${focusingYear}"]` + ); + + this.$focusingYear = focusingYear; + focusingYearGridButton?.focus(); + } else if (event.type === 'click') { + const selectedYearStr = + toClosestTarget(event, `button[data-year]`) + ?.getAttribute('data-year'); + + /** Do nothing when not tapping on the year button */ + if (selectedYearStr == null) return; + + const year = Number(selectedYearStr); + + this.$focusingYear = year; + + this.fire({ + detail: { + year, + }, + type: 'year-updated', + }); + } + }; +} diff --git a/tsconfig.json b/tsconfig.json index b28b94f32..20b9d038c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,20 +1,12 @@ { - "extends": "@reallyland/tsconfig/browser", + "extends": "./node_modules/@reallyland/tools/browser/lit/tsconfig.json", "compilerOptions": { - "rootDir": "src", - "outDir": "dist", "declarationDir": "dist", - "target": "ES2019", - "sourceMap": false, "inlineSources": false, - "types": [ - "@wdio/mocha-framework", - "node", - "webdriverio" - ] + "outDir": "dist", + "rootDir": "src", + "sourceMap": false }, - "include": [ - "src/**/*.ts" - ], - "exclude": ["node_modules", "dist"] + "include": ["src/**/*.ts"], + "exclude": ["dist", "node_modules"] } diff --git a/tsconfig.prod.json b/tsconfig.prod.json deleted file mode 100644 index a62ccd1f7..000000000 --- a/tsconfig.prod.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "importHelpers": true - }, - "include": ["src/*.ts"] -} diff --git a/tsconfig.test.json b/tsconfig.test.json deleted file mode 100644 index a1b67cc6d..000000000 --- a/tsconfig.test.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "target": "ES2017" - } -} diff --git a/tsconfig.wdio.json b/tsconfig.wdio.json deleted file mode 100644 index 58928f257..000000000 --- a/tsconfig.wdio.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.test.json", - "compilerOptions": { - "module": "CommonJS" - }, - "include": [ - "src/tests/*.config.ts" - ] -} diff --git a/tslint.json b/tslint.json deleted file mode 100644 index f18e111e3..000000000 --- a/tslint.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": [ - "@reallyland/tslint-config" - ], - "rules": {} -} diff --git a/tslint.prod.json b/tslint.prod.json deleted file mode 100644 index afb6e4e26..000000000 --- a/tslint.prod.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "./tslint.json", - "rules": { - "no-debugger": true - } -} diff --git a/wtr.config.mjs b/wtr.config.mjs new file mode 100644 index 000000000..2f1be64fb --- /dev/null +++ b/wtr.config.mjs @@ -0,0 +1,83 @@ +import { nodeResolve } from '@rollup/plugin-node-resolve'; +import { esbuildPlugin } from '@web/dev-server-esbuild'; +import { fromRollup } from '@web/dev-server-rollup'; +import { sendKeysPlugin } from '@web/test-runner-commands/plugins'; +import { playwrightLauncher } from '@web/test-runner-playwright'; + +const nodeResolvePlugin = fromRollup(nodeResolve); + +const { + CI = 'false', + COVERAGE = 'false', + TEST_HELPERS = 'false', + WATCH = 'false', +} = process.env; + +const isCI = CI === 'true'; +const isCoverage = COVERAGE === 'true'; +const isTestHelpersOnly = TEST_HELPERS === 'true'; +const isWatch = WATCH === 'true'; + +/** @type {import('@web/test-runner').TestRunnerConfig} */ +const config = { + browsers: [ + playwrightLauncher({ product: 'chromium' }), + ...(isTestHelpersOnly ? [] : [ + playwrightLauncher({ product: 'firefox' }), + playwrightLauncher({ product: 'webkit' }), + ]) + ], + browserStartTimeout: 60e3, + concurrency: 3, + concurrentBrowsers: 9, + ...( + isCoverage && ({ + coverage: true, + coverageConfig: { + report: true, + threshold: { + branches: 80, + functions: 80, + lines: 80, + statements: 80 + }, + nativeInstrumentation: true, + exclude: [ + 'src/*tests*/**', + 'node_modules/**', + ...(isTestHelpersOnly ? [ + 'src/mixins/**', + 'src/root-element/**', + ] : [ + 'src/helpers/**' + ]) + ], + }, + }) + ), + files: [ + `src/*tests*/${isTestHelpersOnly ? 'helpers' : '!(helpers)'}/*.test.ts` + ], + plugins: [ + nodeResolvePlugin({ + exportConditions: ['default', 'dev', 'development', 'esbuild', 'import'], + extensions: ['.mjs', '.js', '.ts', '.css', '.graphql'], + }), + esbuildPlugin({ ts: true }), + sendKeysPlugin(), + ], + testFramework: { + config: { + // checkLeaks: true, + fullTrace: true, + timeout: 60e3, + ui: 'bdd', + ...(isCI && { + retries: 3, + }), + } + }, + watch: isWatch, +}; + +export default config;