diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 5c6b1e127..200116d7d 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -10,10 +10,44 @@ jobs: steps: - uses: actions/checkout@master - - name: Setup Node.js 16.x + - uses: supabase/setup-cli@v1 + with: + version: latest + + - name: Setup Node.js 18.x uses: actions/setup-node@master with: - node-version: 16.x + node-version: 18.x + + # from https://github.com/supabase/supabase-action-example/ + - run: supabase start -x studio,imgproxy,storage + working-directory: packages/server + env: + TYPECELL_GITHUB_OAUTH_SECRET: ${{ secrets.TYPECELL_GITHUB_OAUTH_SECRET }} + TYPECELL_GOOGLE_OAUTH_SECRET: ${{ secrets.TYPECELL_GOOGLE_OAUTH_SECRET }} + - run: supabase db lint + working-directory: packages/server + env: + TYPECELL_GITHUB_OAUTH_SECRET: ${{ secrets.TYPECELL_GITHUB_OAUTH_SECRET }} + TYPECELL_GOOGLE_OAUTH_SECRET: ${{ secrets.TYPECELL_GOOGLE_OAUTH_SECRET }} + - run: supabase test db + working-directory: packages/server + env: + TYPECELL_GITHUB_OAUTH_SECRET: ${{ secrets.TYPECELL_GITHUB_OAUTH_SECRET }} + TYPECELL_GOOGLE_OAUTH_SECRET: ${{ secrets.TYPECELL_GOOGLE_OAUTH_SECRET }} + + - name: Verify generated supabase types are checked in + working-directory: packages/server + run: | + supabase gen types typescript --local --schema public > src/@types/schema.ts + if ! git diff --ignore-space-at-eol --exit-code --quiet src/@types/schema.ts; then + echo "Detected uncommitted changes after build. See status below:" + git diff + exit 1 + fi + env: + TYPECELL_GITHUB_OAUTH_SECRET: ${{ secrets.TYPECELL_GITHUB_OAUTH_SECRET }} + TYPECELL_GOOGLE_OAUTH_SECRET: ${{ secrets.TYPECELL_GOOGLE_OAUTH_SECRET }} # doesn't seem to cause significant speed up, probably because it still needs to install deps - name: cache playwright @@ -45,17 +79,17 @@ jobs: ${{ runner.os }}-build- ${{ runner.os }}- - - name: Set correct access for docker containers (server/test/data) - run: chmod -R a+rw test-util/server/data + # - name: Set correct access for docker containers (server/test/data) + # run: chmod -R a+rw test-util/server/data - - name: Build the docker-compose stack - run: docker-compose -f test-util/server/docker-compose.yml up -d + # - name: Build the docker-compose stack + # run: docker-compose -f test-util/server/docker-compose.yml up -d - - name: Check running containers - run: docker ps -a + # - name: Check running containers + # run: docker ps -a - - name: Check docker logs - run: docker logs synapse + # - name: Check docker logs + # run: docker logs synapse - name: NPM CI run: npm ci @@ -63,45 +97,44 @@ jobs: # - name: Bootstrap packages # run: npm run bootstrap - - name: Wait for Matrix - run: npx wait-on http://localhost:8888/_matrix/static/ + # - name: Wait for Matrix + # run: npx wait-on http://localhost:8888/_matrix/static/ - name: Build packages run: npm run build env: CI: true + - name: Lint + run: npm run lint + env: + CI: true + - name: Install Playwright run: npx playwright install --with-deps # if: steps.playwright-cache.outputs.cache-hit != 'true' # env: # PLAYWRIGHT_BROWSERS_PATH: 0 # https://github.com/microsoft/playwright/blob/main/docs/src/ci.md#caching-browsers - - name: Lint - run: npm run lint + - name: Start HocusPocus server + run: npm run start:server & env: CI: true - # Option A: don't build in CI, but test against dev server - # (with Vite, building in CI is now fast enough so we can go for option B) - - # - name: Run dev server - # # Wait on config file needed for vite dev server: https://github.com/jeffbski/wait-on/issues/78 - # run: npm run start:local & npx wait-on http://localhost:5173 -c ./packages/editor/wait-on.conf.json - # env: - # CI: true - - # - name: Run Playwright tests (against dev server) - # run: npm run playwright:dev + - name: Run Tests + run: npm run test + env: + CI: true - # Option B: actually build and run react code and run tests against that - - name: Build and run preview server + # Actually build and run react code and run tests against that + - name: Build and run preview # Wait on config file needed for vite dev server: https://github.com/jeffbski/wait-on/issues/78 run: npm run start:preview & npx wait-on http://localhost:4173 -c ./packages/editor/wait-on.conf.json env: CI: true + MODE: development - - name: Run Playwright tests (against preview server) + - name: Run Playwright tests (against preview) run: npm run playwright:preview - uses: actions/upload-artifact@v2 @@ -111,18 +144,6 @@ jobs: path: packages/editor/playwright-report/ retention-days: 30 - - uses: actions/upload-artifact@v2 - if: always() - with: - name: playwright-report-engine - path: packages/engine/playwright-report/ - retention-days: 30 - - - name: Run Tests - run: npm run test - env: - CI: true - # - name: Upload to coveralls # uses: coverallsapp/github-action@master # with: diff --git a/.github/workflows/prettier.yaml b/.github/workflows/prettier.yaml deleted file mode 100644 index f739dae77..000000000 --- a/.github/workflows/prettier.yaml +++ /dev/null @@ -1,39 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: prettier - -# Controls when the action will run. -on: - # Triggers the workflow on push or pull request events but only for the dev branch - push: - branches: [dev] - pull_request: - branches: [dev] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - with: - # Make sure the actual branch is checked out when running on pull requests - ref: ${{ github.head_ref }} - # This is important to fetch the changes to the previous commit - fetch-depth: 0 - - uses: creyD/prettier_action@v3.3 - # with: - # # Running the script in dry mode just shows whether there are files that should be prettified or not - # dry: true - # Only prettify files changed in the last commit, can't be used with file_pattern! - # only_changed: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/production.yaml b/.github/workflows/production.yaml new file mode 100644 index 000000000..ad9e1e631 --- /dev/null +++ b/.github/workflows/production.yaml @@ -0,0 +1,30 @@ +name: Deploy production db + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + deploy: + runs-on: ubuntu-latest + + env: + SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} + SUPABASE_DB_PASSWORD: ${{ secrets.PRODUCTION_DB_PASSWORD }} + PROJECT_ID: guzxrzrjknsekuefovon + TYPECELL_GITHUB_OAUTH_SECRET: NOT-USED # not used but needs to be set, otherwise supabase cli complains + TYPECELL_GOOGLE_OAUTH_SECRET: NOT-USED # not used but needs to be set, otherwise supabase cli complains + + steps: + - uses: actions/checkout@v3 + + - uses: supabase/setup-cli@v1 + with: + version: latest + + - run: supabase link --project-ref $PROJECT_ID + working-directory: packages/server + - run: supabase db push + working-directory: packages/server diff --git a/.github/workflows/staging.yaml b/.github/workflows/staging.yaml new file mode 100644 index 000000000..4a909539f --- /dev/null +++ b/.github/workflows/staging.yaml @@ -0,0 +1,30 @@ +name: Deploy staging db + +on: + push: + branches: + - staging + workflow_dispatch: + +jobs: + deploy: + runs-on: ubuntu-latest + + env: + SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} + SUPABASE_DB_PASSWORD: ${{ secrets.STAGING_DB_PASSWORD }} + PROJECT_ID: glsqqdamehahvdqssxow + TYPECELL_GITHUB_OAUTH_SECRET: NOT-USED # not used but needs to be set, otherwise supabase cli complains + TYPECELL_GOOGLE_OAUTH_SECRET: NOT-USED # not used but needs to be set, otherwise supabase cli complains + + steps: + - uses: actions/checkout@v3 + + - uses: supabase/setup-cli@v1 + with: + version: latest + + - run: supabase link --project-ref $PROJECT_ID + working-directory: packages/server + - run: supabase db push + working-directory: packages/server diff --git a/.npmrc b/.npmrc index 45c69bbe0..f0141c589 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ @matrix-org:registry=https://gitlab.matrix.org/api/v4/packages/npm/ +install-links=true diff --git a/.nvmrc b/.nvmrc index 5edcff036..b1215e876 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v16 \ No newline at end of file +v18.16.0 \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 1064b47a9..c49047037 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,11 @@ "search.exclude": { "packages/editor/public/types": true, "**/coverage": true, - "**/dist": true + "**/dist": true, + "**/coverage/**/*": true, + "**/dist/**/*": true, + "**/node_modules/**/*": true, + "**/supabase": true }, "vitest.exclude": [ "**/node_modules/**", @@ -17,5 +21,6 @@ "**/cypress/**", "**/.{idea,git,cache,output,temp}/**", "**/end-to-end/**" - ] + ], + "typescript.preferences.autoImportFileExcludePatterns": ["**/*/dist"] } diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md new file mode 100644 index 000000000..aaeb72bef --- /dev/null +++ b/DEPLOYMENT.md @@ -0,0 +1,22 @@ +# Deployment & CI + +TypeCell currently consists of + +| | development / CI | staging | prod | +| ----------------------------------- | ---------------- | --------------------------- | ------------------------ | +| React app (packages/editor) | Local | Vercel (branch-specific) | Vercel | +| HocusPocus Server (packages/server) | Local | Render (typecell-staging) | Render (typecell-prod) | +| Supabase DB infra (packages/server) | Docker | Supabase (typecell-staging) | Supabase (typecell-prod) | + +A few principles: + +- All Github Actions run against `local` (i.e.: no external dependencies) +- All components should be easy to self-host, we don't want forced dependencies on any cloud provider (note that both supabase and the server are self-hostable). +- Only www.typecell.org is considered `prod`. All Vercel branch-preview environments are considered `staging`, except the main branch which is `prod`. +- Preview environments all share the same `staging` database. This means feature-branches must be compatible in terms of database schema. +- Preview environments all share the same `HocusPocus backend server` (`packages/server`). This means feature-branches must be compatible to run against the same `packages/server`. +- DB Migrations are deployed to `staging` / `prod` when they are pushed to the `staging` / `main` branch (see github workflows). + +## Self-host + +It should be fairly straightforward to host TypeCell yourself, at this moment we don't have a guide for this yet. diff --git a/package-lock.json b/package-lock.json index b96eb5bbc..9055b9a89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "root", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -11,76 +11,26 @@ "packages/*" ], "devDependencies": { + "@playwright/experimental-ct-react": "^1.33.0", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", "lerna": "^5.0.0", - "patch-package": "^6.4.7", - "playwright": "^1.18.1" - } - }, - "../matrix-crdt/packages/matrix-crdt": { - "version": "0.2.0", - "extraneous": true, - "license": "MPL-2.0", - "dependencies": { - "another-json": "^0.2.0", - "lodash": "^4.17.21", - "simple-peer": "^9.11.0", - "vscode-lib": "^0.1.0" - }, - "devDependencies": { - "@matrix-org/olm": "^3.2.12", - "@peculiar/webcrypto": "^1.1.7", - "@types/autocannon": "4.1.1", - "@types/lodash": "^4.14.178", - "@types/qs": "^6.9.7", - "@types/simple-peer": "^9.11.3", - "autocannon": "7.4.0", - "c8": "^7.12.0", - "cross-fetch": "^3.1.4", - "got": "^11.8.2", - "jest-environment-jsdom": "^28.1.3", - "lib0": "^0.2.42", - "matrix-js-sdk": "^19.4.0", - "qs": "^6.10.2", - "rimraf": "^3.0.2", - "typescript": "^4.4.4", - "vite": "^3.0.0", - "vitest": "^0.20.3", - "y-protocols": "^1.0.5", - "yjs": "^13.5.16" - }, - "peerDependencies": { - "lib0": "*", - "matrix-js-sdk": "*", - "y-protocols": "*", - "yjs": "*" + "patch-package": "^7.0.0", + "playwright": "^1.33.0" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, - "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@arr/every": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@arr/every/-/every-1.0.1.tgz", @@ -90,22 +40,48 @@ "node": ">=4" } }, - "node_modules/@atlaskit/analytics-namespaced-context": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@atlaskit/analytics-namespaced-context/-/analytics-namespaced-context-6.5.1.tgz", - "integrity": "sha512-TZbjsoLBoZiQepvmvfSH5DK1bpSbGM4Syb1Nvh54CTSS/g2in3WNp2/oXn2CrED1PRRdWOEyKLEjTBAfrXDfqA==", + "node_modules/@atlaskit/atlassian-navigation": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/@atlaskit/atlassian-navigation/-/atlassian-navigation-2.6.7.tgz", + "integrity": "sha512-cgCpY6Ldr5kimDL1A8gNv5Dw2xknoAQEF+1o7Dj6riPYH/GQzHilCxQT5Kh64+vNMWH7HXsdysJxv88xzr1V8g==", "dependencies": { - "@atlaskit/analytics-next": "^8.0.0", + "@atlaskit/analytics-namespaced-context": "^6.7.0", + "@atlaskit/button": "^16.7.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/icon": "^21.12.0", + "@atlaskit/logo": "*", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@atlaskit/popup": "^1.7.0", + "@atlaskit/primitives": "^0.12.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.6.0", + "@atlaskit/tooltip": "^17.8.0", + "@atlaskit/width-detector": "^4.1.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "chromatism": "^2.6.0", + "lodash": "^4.17.21" + }, + "peerDependencies": { + "react": "^16.8.0" + } + }, + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/analytics-namespaced-context": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-namespaced-context/-/analytics-namespaced-context-6.7.2.tgz", + "integrity": "sha512-CGx6bhdFK07J6p0C2x8sCTauhTm7s/44Ecx3qVWLcO5Ymud+vaZyi5k+MVg8so2TglNzaqzZuw+6rHWd3ibq/A==", + "dependencies": { + "@atlaskit/analytics-next": "^9.1.0", "@babel/runtime": "^7.0.0" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/analytics-next": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-8.3.2.tgz", - "integrity": "sha512-5IW4O1NFRLdO9y8VwlmVECVQeTcZ+WNZv7g1fci61ygNtrABCaaKDfCdvCYKdwSP1dbvlQw865q6vQIx/DV5+A==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/analytics-namespaced-context/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", "dependencies": { "@atlaskit/analytics-next-stable-react-context": "1.0.1", "@babel/runtime": "^7.0.0", @@ -116,7 +92,7 @@ "react": "^16.8.0" } }, - "node_modules/@atlaskit/analytics-next-stable-react-context": { + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/analytics-namespaced-context/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", @@ -127,313 +103,300 @@ "react": "^16.8.0" } }, - "node_modules/@atlaskit/atlassian-navigation": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@atlaskit/atlassian-navigation/-/atlassian-navigation-2.2.8.tgz", - "integrity": "sha512-LedkHlFCmdwXG8V+5VGajoStxSYUaYrsmwEIEpjHiNKFeI8GwPhPiEknwwE04xzyj9XtFhM8neVocxXxtP0nmQ==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@atlaskit/analytics-namespaced-context": "^6.5.0", - "@atlaskit/button": "^16.3.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/logo": "*", - "@atlaskit/popup": "^1.4.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@atlaskit/tooltip": "^17.5.0", - "@atlaskit/width-detector": "^4.0.0", "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "chromatism": "^2.6.0", - "lodash": "^4.17.21" + "bind-event-listener": "^2.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/avatar": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/@atlaskit/avatar/-/avatar-21.1.1.tgz", - "integrity": "sha512-mJeKN1QP0o6g76MydxSkF0VJNgS6UCECzuYWuqsWyy3EEghq6e3ToHWHVTGlFCmaF0cFTzvSUgUKE/1LT6B5rA==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", "dependencies": { - "@atlaskit/analytics-next": "^8.0.0", - "@atlaskit/icon": "^21.11.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "@emotion/serialize": "^1.1.0" + "@emotion/react": "^11.7.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/avatar/node_modules/@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/logo": { + "version": "13.14.7", + "resolved": "https://registry.npmjs.org/@atlaskit/logo/-/logo-13.14.7.tgz", + "integrity": "sha512-cp+b8XKz52MTovzDYx64EYRCuH+SZRKIq9h/lEGupOevwKibZexrkHRmr8tAolWZuaTNus00PAOg9xZsxaUoPw==", "dependencies": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "react-uid": "^2.2.0" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@atlaskit/avatar/node_modules/@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/popup": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@atlaskit/popup/-/popup-1.7.0.tgz", + "integrity": "sha512-U5MbjXOy8tSPdUE4y9hBa2r5DfSfqWZ+j1NBN1sO/ll4b7cYJuV44S72a9uezex38L3f/uHifPip2SkcjhVEzg==", + "dependencies": { + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@atlaskit/popper": "^5.5.0", + "@atlaskit/portal": "^4.3.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1", + "focus-trap": "^2.4.5" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" + } }, - "node_modules/@atlaskit/avatar/node_modules/@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/popup/node_modules/@atlaskit/popper": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@atlaskit/popper/-/popper-5.5.3.tgz", + "integrity": "sha512-ox1VlG06FQNN4CC6TMQhd82NxFHtKMO900Pey6KWPbCuyxVFssIV/T5ysbbnz2j/69VxACOd5bpXCT3rie7Z3g==", + "dependencies": { + "@atlaskit/in-product-testing": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@popperjs/core": "^2.9.1", + "react-popper": "^2.2.3" + }, + "peerDependencies": { + "react": "^16.8.0" + } }, - "node_modules/@atlaskit/avatar/node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/popup/node_modules/@atlaskit/portal": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@atlaskit/portal/-/portal-4.3.4.tgz", + "integrity": "sha512-FfOLJbl3zJ8J/CqhqBW2sWMXj5zg0t6sm3wdXXejt98IhaN0Enaobg3BKV72LTOi5ZGJfPNVLbRZuaxBEYQTDw==", + "dependencies": { + "@atlaskit/theme": "^12.5.0", + "@babel/runtime": "^7.0.0" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" + } }, - "node_modules/@atlaskit/banner": { - "version": "11.6.2", - "resolved": "https://registry.npmjs.org/@atlaskit/banner/-/banner-11.6.2.tgz", - "integrity": "sha512-ymgNPKOyycNeccwD21GVk0HPVgWooINIbatZTDtTGLoCIp0Wg5tVnDqTAIDdWAnSP5avgAYe1ya2KR3fO5Z1gg==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/blanket": { - "version": "12.2.15", - "resolved": "https://registry.npmjs.org/@atlaskit/blanket/-/blanket-12.2.15.tgz", - "integrity": "sha512-iI36fkGuSb0ufgdOjmylvT1sSZlyuEU616EQb8q/SUP428tHqMFfkR6yGQZE4LYh2dFuCBU1rLpsVeyLLBd3nw==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/breadcrumbs": { - "version": "11.7.3", - "resolved": "https://registry.npmjs.org/@atlaskit/breadcrumbs/-/breadcrumbs-11.7.3.tgz", - "integrity": "sha512-q/PaUKGGaFnReFqc4s5+kBE4goUyat+VSMgs/jQ+lOe7+n9Xpz8o12F5RMK6tnh1Zo3LATAxuFbY9D1aAMrVsg==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/tooltip": { + "version": "17.8.2", + "resolved": "https://registry.npmjs.org/@atlaskit/tooltip/-/tooltip-17.8.2.tgz", + "integrity": "sha512-sIVGvhaFiU7lJF/AP4m2SWOMk0NZEA7tEgQZ/HJ/BlmMUCRdfMsp4A6zlA/OP/DEnN7fYumnYfSrjJgw2B1ikQ==", "dependencies": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/button": "^16.3.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@atlaskit/tooltip": "^17.6.0", + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/motion": "^1.4.0", + "@atlaskit/popper": "^5.5.0", + "@atlaskit/portal": "^4.3.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.4.0", "@babel/runtime": "^7.0.0", "@emotion/react": "^11.7.1", - "@react-loosely-lazy/manifest": "^1.0.0", - "react-loosely-lazy": "^1.0.0" + "bind-event-listener": "^2.1.1", + "react-uid": "^2.2.0" }, "peerDependencies": { "react": "^16.8.0", "react-dom": "^16.8.0" } }, - "node_modules/@atlaskit/button": { - "version": "16.3.6", - "resolved": "https://registry.npmjs.org/@atlaskit/button/-/button-16.3.6.tgz", - "integrity": "sha512-sigJimyIvWjRzBdW46oPoyyxDmIWaPi7YtxmWwshld0lxQ9U/HevAA4Jxo7tOoHkaQot4V+yLkVHTuTgaH4OJQ==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", "dependencies": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/spinner": "^15.1.0", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", + "@atlaskit/analytics-next-stable-react-context": "1.0.1", "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/checkbox": { - "version": "12.3.19", - "resolved": "https://registry.npmjs.org/@atlaskit/checkbox/-/checkbox-12.3.19.tgz", - "integrity": "sha512-RJ+aLBkLFeWp/0vcKfdVflsl+pJRwHxvWOJYKDkXHOpuVles6JUlWJE/9GsKYESgEqJ47v+2Dhq5g/plVdt3mQ==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" + "tslib": "^2.0.0" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/codemod-utils": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@atlaskit/codemod-utils/-/codemod-utils-4.1.2.tgz", - "integrity": "sha512-L2he0gAJiELTrrN0MP/9qUQtwG/u8p0XJEiUYITmE/Y9U9B1CfSYes1kDWeKDZlV9sN+QB8yP9BeTdIfTYWUbg==", - "dependencies": { - "@babel/runtime": "^7.0.0" - } - }, - "node_modules/@atlaskit/comment": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/@atlaskit/comment/-/comment-10.6.0.tgz", - "integrity": "sha512-08TxoxK+SvoMyzd4UvrWvu6LDIzQokLdcYSejOTRuLtXrwOdASfkT0pdwz406vQj5QeNVOLGi8J2PJLmwx9+1Q==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/motion": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@atlaskit/motion/-/motion-1.4.3.tgz", + "integrity": "sha512-Q4zFD+MSUOSqJYkKVP1PGMTp4QgWb8NZRRJcldggCML1AB6aXj7hD22W9Dx9QALi5zci8grgnZlb31VPGJ5zrA==", "dependencies": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/button": "^16.3.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/lozenge": "^11.2.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", + "@atlaskit/ds-lib": "^2.2.0", "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/css-reset": { - "version": "6.3.14", - "resolved": "https://registry.npmjs.org/@atlaskit/css-reset/-/css-reset-6.3.14.tgz", - "integrity": "sha512-KJbBK7bf4jY7Y/x838adkAxkJBFGIAV+vktfkwyci+I+KINoag/MgIML+veD5/sTVfoQuZxoj2mkGjmG7HDtmg==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/popper": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@atlaskit/popper/-/popper-5.5.3.tgz", + "integrity": "sha512-ox1VlG06FQNN4CC6TMQhd82NxFHtKMO900Pey6KWPbCuyxVFssIV/T5ysbbnz2j/69VxACOd5bpXCT3rie7Z3g==", "dependencies": { - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", + "@atlaskit/in-product-testing": "^0.2.0", "@babel/runtime": "^7.0.0", - "fbjs": "^3.0.0" + "@popperjs/core": "^2.9.1", + "react-popper": "^2.2.3" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/dropdown-menu": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/@atlaskit/dropdown-menu/-/dropdown-menu-11.4.0.tgz", - "integrity": "sha512-gOeV9H8qhr4R51UT8lvcCdAx+iN4VTB+K5HYmZbG3I9vHt83UMD0SFgmRHVH3pr9V0AxpdmHQn63hmuDjODmZw==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/portal": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@atlaskit/portal/-/portal-4.3.4.tgz", + "integrity": "sha512-FfOLJbl3zJ8J/CqhqBW2sWMXj5zg0t6sm3wdXXejt98IhaN0Enaobg3BKV72LTOi5ZGJfPNVLbRZuaxBEYQTDw==", "dependencies": { - "@atlaskit/button": "^16.3.0", - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/menu": "^1.3.0", - "@atlaskit/popup": "^1.4.0", - "@atlaskit/spinner": "^15.0.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@atlaskit/visually-hidden": "^1.1.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "bind-event-listener": "^2.1.1" + "@atlaskit/theme": "^12.5.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { "react": "^16.8.0", "react-dom": "^16.8.0" } }, - "node_modules/@atlaskit/ds-explorations": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@atlaskit/ds-explorations/-/ds-explorations-0.1.2.tgz", - "integrity": "sha512-YE74r/k+ow6GgZm/SxpZl86YeuJx6ZlmI8di5LhSt+KJ5rxxIHCoMt6yvzXmOUy3s4etgppuffUCcXonG58GVA==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/@atlaskit/width-detector": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@atlaskit/width-detector/-/width-detector-4.1.2.tgz", + "integrity": "sha512-6RhpD39hsi7ntDmzKKOIFbUbMZK2mnBEnUMIqATOALEkKUZRSke2Ok3g7BXXAeq/fGZKBBBUOQqP2gf9voBwGQ==", "dependencies": { - "@atlaskit/tokens": "^0.10.3", "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "tiny-invariant": "^1.2.0" + "raf-schd": "^4.0.3" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/ds-lib": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.1.1.tgz", - "integrity": "sha512-QwaDma9UMUTPaApkjlzt07gmzoEZKegjixlDHEY7DOCzWqGbt1efxuoiP3GLP1Z5eFf5tHWPtlUYMlb+PO37GQ==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "peer": true, "dependencies": { - "@babel/runtime": "^7.0.0", - "bind-event-listener": "^2.1.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" }, "peerDependencies": { - "react": "^16.8.0" + "react": "^16.14.0" } }, - "node_modules/@atlaskit/flag": { - "version": "14.7.0", - "resolved": "https://registry.npmjs.org/@atlaskit/flag/-/flag-14.7.0.tgz", - "integrity": "sha512-kIzpihZimEWQxF9rbE44DvGNu9hNjFT+Tr5EYxoDrSIyDY9kRHo3xLK9DPqn0NrwrxJ2e5bV9rM8cQGTUnYyHA==", + "node_modules/@atlaskit/atlassian-navigation/node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "peer": true, "dependencies": { - "@atlaskit/analytics-next": "^8.0.0", - "@atlaskit/button": "^16.3.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/focus-ring": "^1.0.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/motion": "^1.2.0", - "@atlaskit/portal": "^4.0.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@atlaskit/visually-hidden": "^1.1.0", + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/@atlaskit/avatar": { + "version": "21.3.4", + "resolved": "https://registry.npmjs.org/@atlaskit/avatar/-/avatar-21.3.4.tgz", + "integrity": "sha512-wvEDmzn/hovzj8/0KyakDZBy89SXhT234Wu4eNC3zSA6eUzkiezpf5gRxS8WMfiZRvUGfEOz+nF+1ZmWM0s7/w==", + "dependencies": { + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/icon": "^21.12.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" + "@emotion/react": "^11.7.1", + "@emotion/serialize": "^1.1.0" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/focus-ring": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@atlaskit/focus-ring/-/focus-ring-1.0.6.tgz", - "integrity": "sha512-aqTrhYnJDWjrwJrq4vakip9vreZmQKMP/2mP9glQoXIQMCsmOK6hn8G865q+7wfq1TjlbSZwBS7kxX+op+ymWw==", + "node_modules/@atlaskit/avatar/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", "dependencies": { - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", + "@atlaskit/analytics-next-stable-react-context": "1.0.1", "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/form": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@atlaskit/form/-/form-8.5.8.tgz", - "integrity": "sha512-IdM+dI9U6YAQxV7tswE8/p7QIdTiW6xb1kJn5C6x/Ux1xAG480vsNQyOJPzQEAdOTssIGbvl7fDbnECEbpXWNg==", + "node_modules/@atlaskit/avatar/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "@atlaskit/icon": "^21.10.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "final-form": "^4.20.1", - "final-form-focus": "^1.1.2", - "lodash": "^4.17.21", - "react-uid": "^2.2.0", - "tiny-invariant": "^1.2.0" + "tslib": "^2.0.0" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/icon": { - "version": "21.11.1", - "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.11.1.tgz", - "integrity": "sha512-KAcEmf7M04AFeHpzOA+JiHZ6bAXz7h6vNlMd543VZM15fyjMMiP/p3DItnmEwK1mej0zBRT98nnhiDKxaHtJug==", + "node_modules/@atlaskit/avatar/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", "dependencies": { - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", "@babel/runtime": "^7.0.0", "@emotion/react": "^11.7.1" }, @@ -441,310 +404,316 @@ "react": "^16.8.0" } }, - "node_modules/@atlaskit/inline-dialog": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@atlaskit/inline-dialog/-/inline-dialog-13.4.0.tgz", - "integrity": "sha512-G7U8Yi3Ypx1eXKXHD5atv9bnM3s+Z6uVqFNGWuMizJnLJhspMQRhjqUb1JMs9OlrJ9VyDU2salQWPOSka1vAhQ==", + "node_modules/@atlaskit/avatar/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/popper": "^5.0.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "bind-event-listener": "^2.1.1", - "react-node-resolver": "^1.0.1" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/inline-message": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/@atlaskit/inline-message/-/inline-message-11.4.0.tgz", - "integrity": "sha512-ziGHgQRnvKWh67NqxH4zPoKWuBEYYw1/+wUeYkh3b+XesYmVhnKm6h6pGndtjmgfTofyImiUyuv8kGkbWNE29w==", + "node_modules/@atlaskit/avatar/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@atlaskit/button": "^16.3.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/inline-dialog": "^13.4.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" + "bind-event-listener": "^2.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/logo": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/@atlaskit/logo/-/logo-13.9.0.tgz", - "integrity": "sha512-l/UGg4JrCMxp9f3GC5scvqhWwh8iZIgiIWFXsfP9oWqA0tB9yNGrxag6hM6QXpWPhXiN4sUPwse8pgxOOnLs2Q==", + "node_modules/@atlaskit/avatar/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "react-uid": "^2.2.0" + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/lozenge": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@atlaskit/lozenge/-/lozenge-11.2.0.tgz", - "integrity": "sha512-0YCDa6BEnNbT12TXcsmASwUtxgotvk29xwhPkAhwukSk6Zm9lA/t1CFtTWwBoO65r3gw0neFfoE+3Xe6pGgIkQ==", + "node_modules/@atlaskit/avatar/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/ds-explorations": "^0.1.0", - "@atlaskit/theme": "^12.2.0", "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" + "bind-event-listener": "^2.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/menu": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/@atlaskit/menu/-/menu-1.3.9.tgz", - "integrity": "sha512-XWuAMUyRqgoUNLkkpyif/d4qOCQzzbusT7KRC96YvpqS5Vbogbi8m93ZyXccSkjat8ByVlY8p1sgHWSzGko1Dw==", + "node_modules/@atlaskit/banner": { + "version": "11.6.3", + "resolved": "https://registry.npmjs.org/@atlaskit/banner/-/banner-11.6.3.tgz", + "integrity": "sha512-WcYKfxesMer40i7Q0wCkq9XbIQzV3evCqgIzOn+Wz2a2lBlQpBGaxcxX7t2DxBp97vlw7qXiRaDlnCeA8zCTcA==", "dependencies": { - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/focus-ring": "^1.0.0", - "@atlaskit/theme": "^12.1.0", + "@atlaskit/theme": "^12.2.0", "@atlaskit/tokens": "^0.10.0", "@babel/runtime": "^7.0.0", "@emotion/core": "^10.0.9" }, "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" + "react": "^16.8.0" } }, - "node_modules/@atlaskit/modal-dialog": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@atlaskit/modal-dialog/-/modal-dialog-12.3.0.tgz", - "integrity": "sha512-HvmPjaNpu5/SYCfYgqyjFKzXdgoT7jMl6JrESgeYNPQdse8Pzj+Q1CbFynCMJ5+jMg80AMNwrhWYKY/dtKy5tA==", + "node_modules/@atlaskit/banner/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/blanket": "^12.2.0", - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/focus-ring": "^1.0.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/motion": "^1.2.0", - "@atlaskit/portal": "^4.1.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "bind-event-listener": "^2.1.1", - "raf-schd": "^4.0.3", - "react-focus-lock": "^2.5.2", - "react-scrolllock": "^5.0.1", - "react-uid": "^2.2.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/motion": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@atlaskit/motion/-/motion-1.2.2.tgz", - "integrity": "sha512-UIoFuB299bTehwTkoBs65YS8kn9y32v1b5LsbuSqkWV2ZgiLrWaOdq8RgPBlHuICq9oBeVy6aBPLR0gkht1iJA==", + "node_modules/@atlaskit/banner/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@atlaskit/ds-lib": "^2.1.0", "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", "bind-event-listener": "^2.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/page-header": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@atlaskit/page-header/-/page-header-10.3.0.tgz", - "integrity": "sha512-PAsBEaIamSinpG7J0c9CBDcwcRexSe37yv4samznI2Oupyu7JzeGsoh2FHvUTkscv75Imh1RVvCpoA92OjIPsg==", + "node_modules/@atlaskit/banner/node_modules/@atlaskit/theme/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@atlaskit/theme": "^12.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" + "react": "^16.8.0" } }, - "node_modules/@atlaskit/page-layout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@atlaskit/page-layout/-/page-layout-1.3.0.tgz", - "integrity": "sha512-N9VJyHGoK8nBOCXzXGF/kAp9geumcdShXeExk/0pE2b4LcMzapHCTA7POuj0gAPffswOYcx0FDcr2jc5KnjAoQ==", + "node_modules/@atlaskit/banner/node_modules/@atlaskit/tokens": { + "version": "0.10.35", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-0.10.35.tgz", + "integrity": "sha512-seglalpg7Pcg9wHgxvXNQSPR7coVz7zDNPNItkoLIlagsdDiMeRPf0LRSzEUAquiGdGxjFYvDZ0Bf6r6jwTKrw==", "dependencies": { "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/motion": "^1.2.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "bind-event-listener": "^2.1.1", - "raf-schd": "^4.0.3" + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" }, "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" + "react": "^16.8.0" } }, - "node_modules/@atlaskit/popper": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@atlaskit/popper/-/popper-5.2.8.tgz", - "integrity": "sha512-uQzw8EWWXBhL1N3Dak4ZrkE1hVcqi82bL5COLbS5oYHPcIInJiBZhygAstboVB+BfaKlWtyCdujkBprGU+V5Dw==", + "node_modules/@atlaskit/banner/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { "@babel/runtime": "^7.0.0", - "@popperjs/core": "^2.9.1", - "react-popper": "^2.2.3" + "bind-event-listener": "^2.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/popup": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@atlaskit/popup/-/popup-1.4.1.tgz", - "integrity": "sha512-+hPmkoOUIdrU9WamWECq+qlGTdfQQlkGB569FnAFO5gDNgEZo6ZCUgMqRH8jgUa3OSp2aohprZeeYDd6B9rxWA==", - "dependencies": { - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/popper": "^5.0.0", - "@atlaskit/portal": "^4.0.0", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", + "node_modules/@atlaskit/breadcrumbs": { + "version": "11.10.4", + "resolved": "https://registry.npmjs.org/@atlaskit/breadcrumbs/-/breadcrumbs-11.10.4.tgz", + "integrity": "sha512-ZyF720rLSgdeqfHUaabAmthXFJiADVD9yLjLRpxfS9ewSVHDtKaxcKrEKsk+MkU8k5IRtEhcZF9NAHjkO3Sa/g==", + "dependencies": { + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/button": "^16.7.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@atlaskit/tooltip": "^17.8.0", "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "bind-event-listener": "^2.1.1", - "focus-trap": "^2.4.5" + "@emotion/react": "^11.7.1", + "@react-loosely-lazy/manifest": "^1.0.0", + "react-loosely-lazy": "^1.0.0" }, "peerDependencies": { "react": "^16.8.0", "react-dom": "^16.8.0" } }, - "node_modules/@atlaskit/portal": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@atlaskit/portal/-/portal-4.2.10.tgz", - "integrity": "sha512-MmGS1NPiNyCinvmic1UKn2GQl8I9jLjfEz8AUVFimP4ytHFQDBE2sQG7eYN7arQDlhXmZAu2xIFt1A1OyD9OnA==", + "node_modules/@atlaskit/breadcrumbs/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", "dependencies": { - "@atlaskit/theme": "^12.1.0", - "@babel/runtime": "^7.0.0" + "@atlaskit/analytics-next-stable-react-context": "1.0.1", + "@babel/runtime": "^7.0.0", + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" }, "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" + "react": "^16.8.0" } }, - "node_modules/@atlaskit/progress-bar": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@atlaskit/progress-bar/-/progress-bar-0.5.10.tgz", - "integrity": "sha512-dvCf583efRj7830PKW+wfjUYVMKqvKkaNhC3mJnk1RxfIEETwWUmSaOK9FE3h6vgeb7PBSTo/DlfdPyWRkHrkg==", + "node_modules/@atlaskit/breadcrumbs/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0" + } + }, + "node_modules/@atlaskit/breadcrumbs/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" + "bind-event-listener": "^2.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/section-message": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@atlaskit/section-message/-/section-message-6.2.0.tgz", - "integrity": "sha512-hJFYr/LXsTDpuXEXGjwr8pP0meMfYPz+ANQ4kssVSC/ydAAbaMnpd0NrjHO7fcMtfVNqlXfdeqf7l2WsE7DZJA==", + "node_modules/@atlaskit/breadcrumbs/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@atlaskit/button": "^16.3.0", - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" + }, + "peerDependencies": { + "react": "^16.8.0" + } + }, + "node_modules/@atlaskit/breadcrumbs/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", + "dependencies": { + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/select": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@atlaskit/select/-/select-15.7.5.tgz", - "integrity": "sha512-UnFVrJvM3FKAbXf8CqNE0y40X1F4l9Ax2Lupbvj2fnj9gOSFLR+zrI4/c/IDiOyE9CusIjqpkXFl4ft86fn9kQ==", + "node_modules/@atlaskit/breadcrumbs/node_modules/@atlaskit/tooltip": { + "version": "17.8.2", + "resolved": "https://registry.npmjs.org/@atlaskit/tooltip/-/tooltip-17.8.2.tgz", + "integrity": "sha512-sIVGvhaFiU7lJF/AP4m2SWOMk0NZEA7tEgQZ/HJ/BlmMUCRdfMsp4A6zlA/OP/DEnN7fYumnYfSrjJgw2B1ikQ==", "dependencies": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/icon": "^21.11.0", - "@atlaskit/spinner": "^15.2.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@atlaskit/visually-hidden": "^1.1.0", + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/motion": "^1.4.0", + "@atlaskit/popper": "^5.5.0", + "@atlaskit/portal": "^4.3.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.4.0", "@babel/runtime": "^7.0.0", "@emotion/react": "^11.7.1", - "@popperjs/core": "^2.9.1", - "@types/react-select": "^4.0.18", "bind-event-listener": "^2.1.1", - "memoize-one": "^6.0.0", - "react-fast-compare": "^3.2.0", - "react-focus-lock": "^2.5.2", - "react-node-resolver": "^1.0.1", - "react-popper": "^2.2.3", - "react-select": "^4.3.1", - "react-uid": "^2.2.0", - "shallow-equal": "^1.0.0" + "react-uid": "^2.2.0" }, "peerDependencies": { "react": "^16.8.0", "react-dom": "^16.8.0" } }, - "node_modules/@atlaskit/spinner": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/@atlaskit/spinner/-/spinner-15.2.0.tgz", - "integrity": "sha512-0Fwi7D3TgdYoE6rwG2obESUZyQWTGoCx32CAmWGlcOad5dz9RqKBy8kRrnenqOHpATULuPfvD40r0/qe2IGTmQ==", + "node_modules/@atlaskit/breadcrumbs/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/motion": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@atlaskit/motion/-/motion-1.4.3.tgz", + "integrity": "sha512-Q4zFD+MSUOSqJYkKVP1PGMTp4QgWb8NZRRJcldggCML1AB6aXj7hD22W9Dx9QALi5zci8grgnZlb31VPGJ5zrA==", "dependencies": { - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", + "@atlaskit/ds-lib": "^2.2.0", "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/textarea": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/@atlaskit/textarea/-/textarea-4.3.9.tgz", - "integrity": "sha512-5fyeYhFoaeXCYp448LckY63OHA1NhfhVE/u4PmvonLDug0cfVkCNnqBqqReT8CzCJe4Q+z8+OnPXkG/zKHow0A==", + "node_modules/@atlaskit/breadcrumbs/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/popper": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@atlaskit/popper/-/popper-5.5.3.tgz", + "integrity": "sha512-ox1VlG06FQNN4CC6TMQhd82NxFHtKMO900Pey6KWPbCuyxVFssIV/T5ysbbnz2j/69VxACOd5bpXCT3rie7Z3g==", "dependencies": { - "@atlaskit/analytics-next": "^8.0.0", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", + "@atlaskit/in-product-testing": "^0.2.0", "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" + "@popperjs/core": "^2.9.1", + "react-popper": "^2.2.3" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/textfield": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@atlaskit/textfield/-/textfield-5.2.0.tgz", - "integrity": "sha512-Gf3ABEzsWq9Sw3ySd/67vCidhmU1K/pqudwj7zXP1VBeSxn+mw51YHrUD7TE2VqLUEyFvOmBUQtNmeQDl581KA==", + "node_modules/@atlaskit/breadcrumbs/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/portal": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@atlaskit/portal/-/portal-4.3.4.tgz", + "integrity": "sha512-FfOLJbl3zJ8J/CqhqBW2sWMXj5zg0t6sm3wdXXejt98IhaN0Enaobg3BKV72LTOi5ZGJfPNVLbRZuaxBEYQTDw==", "dependencies": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", + "@atlaskit/theme": "^12.5.0", + "@babel/runtime": "^7.0.0" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" + } + }, + "node_modules/@atlaskit/breadcrumbs/node_modules/react-loosely-lazy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-loosely-lazy/-/react-loosely-lazy-1.1.0.tgz", + "integrity": "sha512-UBNK+b7uNOBWJS34iSaz052mwi3XBWImeV32mWdcFn8F3U0XWeGq670w7BtcJ7PyRAYeUekJRMT2dGamcw6pKQ==", + "peerDependencies": { + "@react-loosely-lazy/manifest": "1.1.0", + "react": "^16.9.0 || ^17.0.0-0" + } + }, + "node_modules/@atlaskit/button": { + "version": "16.8.0", + "resolved": "https://registry.npmjs.org/@atlaskit/button/-/button-16.8.0.tgz", + "integrity": "sha512-QYN3wfhM63Ih26szIpN11VCWmu8RWXzT9Ezz9b+7yZ8MdU5vaqvgLmc23FLK04BUdJ8/UuAO3pp5D7X//0jUuA==", + "dependencies": { + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/focus-ring": "^1.3.0", + "@atlaskit/interaction-context": "^2.1.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@atlaskit/spinner": "^15.5.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.8.0", "@babel/runtime": "^7.0.0", "@emotion/react": "^11.7.1" }, @@ -752,133 +721,108 @@ "react": "^16.8.0" } }, - "node_modules/@atlaskit/theme": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.2.0.tgz", - "integrity": "sha512-fgCWBgmkx7wr/eIui3kOkLiOrhZYt8ON2E5HJMWWohu6I3vYsQUNCbWjp1Uoht0NLgb0FvwYfPeEmsZUJsX9Cg==", + "node_modules/@atlaskit/button/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", "dependencies": { - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0" + "@atlaskit/analytics-next-stable-react-context": "1.0.1", + "@babel/runtime": "^7.0.0", + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/tokens": { - "version": "0.10.18", - "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-0.10.18.tgz", - "integrity": "sha512-WoN0NKaYdx7qnRu8CRzFEHwp9tocsED0YHH0ImO+MmjvwS+lNtfcz7sHbuENOehtCBSCcwohNAWDA4MplvX1wg==", + "node_modules/@atlaskit/button/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "@atlaskit/ds-lib": "^2.1.0", - "@babel/runtime": "^7.0.0", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "tslib": "^2.0.0" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/tooltip": { - "version": "17.6.1", - "resolved": "https://registry.npmjs.org/@atlaskit/tooltip/-/tooltip-17.6.1.tgz", - "integrity": "sha512-zI660ZyG/go/M7XEYk7vh562gSX0/u0fCMnM5sln0r/gEk5pAhTDQh+X0oxhF78+S5vw9kUju8eHcpBJwfQ1Kw==", + "node_modules/@atlaskit/button/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/motion": "^1.2.0", - "@atlaskit/popper": "^5.0.0", - "@atlaskit/portal": "^4.1.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "bind-event-listener": "^2.1.1", - "react-uid": "^2.2.0" + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" + "react": "^16.8.0" } }, - "node_modules/@atlaskit/tree": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/@atlaskit/tree/-/tree-8.6.2.tgz", - "integrity": "sha512-geVyjCm108G35d+VCJaD3fm4DVMSw09l6v8u+v7oriCddYE5nQHYZ0b7ihyupxbryhpfTyUmaD8LcJgWt8WESQ==", + "node_modules/@atlaskit/button/node_modules/@atlaskit/focus-ring": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@atlaskit/focus-ring/-/focus-ring-1.3.3.tgz", + "integrity": "sha512-jFLFjjhZ3uOomkPdzHKiwCCFDyDkd6mnjYSy+vTQ/5naKf5xLMR7EEgQq2Aar/+filgdcDz6zzzslEMbTxaLzw==", "dependencies": { + "@atlaskit/tokens": "^1.4.0", "@babel/runtime": "^7.0.0", - "css-box-model": "^1.2.0", - "react-beautiful-dnd-next": "11.0.5" + "@emotion/react": "^11.7.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/ufo": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@atlaskit/ufo/-/ufo-0.1.3.tgz", - "integrity": "sha512-Triy6E3Ce8xoT85HF2PVvREDS2y2yzT1Q3bij2S0g6odEh31FsSOESpYPA3N7GhPyWXuIFOVY4tRjXvlOfJbVA==", + "node_modules/@atlaskit/button/node_modules/@atlaskit/interaction-context": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@atlaskit/interaction-context/-/interaction-context-2.1.2.tgz", + "integrity": "sha512-G50yJNocJ+wyv/XwzKge+JYOt+1T8/PGNPaKIwv1Y2CEwO1oOu4jlyOQHGjHCcsaCmuvP5PDzDXc4kO83yNcQw==", "dependencies": { - "@babel/runtime": "^7.0.0", - "uuid": "^3.1.0" + "@babel/runtime": "^7.0.0" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@atlaskit/ufo/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" + "node_modules/@atlaskit/button/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", + "dependencies": { + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@atlaskit/user-picker": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@atlaskit/user-picker/-/user-picker-9.3.4.tgz", - "integrity": "sha512-cc5uJ6Vs/m4Ae5Igp9E5v0Wqb2wn/dRvMqnXkbzSJd6AUUYhCr4/FxTK1AH6n1882tm92axs9C9ZaVAguD6uxw==", + "node_modules/@atlaskit/button/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/avatar": "^21.0.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/logo": "^13.8.0", - "@atlaskit/lozenge": "^11.0.0", - "@atlaskit/popper": "^5.0.0", - "@atlaskit/select": "^15.6.0", - "@atlaskit/spinner": "^15.1.4", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@atlaskit/tooltip": "^17.5.0", - "@atlaskit/ufo": "^0.1.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "lodash": "^4.17.21", - "memoize-one": "^6.0.0", - "uuid": "^3.1.0" + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0", - "react-intl-next": "npm:react-intl@^5.18.1" - } - }, - "node_modules/@atlaskit/user-picker/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" + "react": "^16.8.0" } }, - "node_modules/@atlaskit/visually-hidden": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@atlaskit/visually-hidden/-/visually-hidden-1.1.0.tgz", - "integrity": "sha512-z/M9ivFDdOx0HHQ9ifi+eEt7uGyqnpNztYGA2J6vklfWJ30Fjtz3yGmZXwiSVrhOI1MXvwx55mxOg7PnR93DLw==", - "dependencies": { + "node_modules/@atlaskit/checkbox": { + "version": "12.6.4", + "resolved": "https://registry.npmjs.org/@atlaskit/checkbox/-/checkbox-12.6.4.tgz", + "integrity": "sha512-00qeXGqia9Q6ahZaniRkzd/RdaZUO4is+OKg+2aHi8LsqlpbVslKv0a3dfzNGlLiICHZVsNW7uKkcP/BjJVY/A==", + "dependencies": { + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/icon": "^21.12.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.8.0", "@babel/runtime": "^7.0.0", "@emotion/react": "^11.7.1" }, @@ -886,5902 +830,5609 @@ "react": "^16.8.0" } }, - "node_modules/@atlaskit/width-detector": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@atlaskit/width-detector/-/width-detector-4.0.2.tgz", - "integrity": "sha512-aYA9t7N4x3dnrEjjP5aQbR1oDE+apJtO50IPa4mB7uPj2sgydHjVME7IOEZ2Xbub8dm/lSIaQHz6/a6M3T89Mw==", + "node_modules/@atlaskit/checkbox/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", "dependencies": { + "@atlaskit/analytics-next-stable-react-context": "1.0.1", "@babel/runtime": "^7.0.0", - "raf-schd": "^4.0.3" + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" }, "peerDependencies": { "react": "^16.8.0" } }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "node_modules/@atlaskit/checkbox/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "@babel/highlight": "^7.18.6" + "tslib": "^2.0.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.13.tgz", - "integrity": "sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==", - "engines": { - "node": ">=6.9.0" + "node_modules/@atlaskit/checkbox/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/core": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.13.tgz", - "integrity": "sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.13", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.13", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.13", - "@babel/types": "^7.18.13", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" + "node_modules/@atlaskit/checkbox/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", + "dependencies": { + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/eslint-parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz", - "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==", - "dev": true, + "node_modules/@atlaskit/checkbox/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": ">=7.11.0", - "eslint": "^7.5.0 || ^8.0.0" + "react": "^16.8.0" } }, - "node_modules/@babel/eslint-parser/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, + "node_modules/@atlaskit/checkbox/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@babel/eslint-parser/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, - "engines": { - "node": ">=10" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/eslint-parser/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "node_modules/@atlaskit/codemod-utils": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/codemod-utils/-/codemod-utils-4.2.3.tgz", + "integrity": "sha512-ar5vFYakSfbpKziSyi0cE1sFt48gWrwixjgo5VdN8DiL/Tf0fMiscMNvAPe4cFnagTV6scXHyUc0NPArGqL0PQ==", + "dependencies": { + "@babel/runtime": "^7.0.0" } }, - "node_modules/@babel/eslint-parser/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/@atlaskit/comment": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/@atlaskit/comment/-/comment-10.8.5.tgz", + "integrity": "sha512-L0RcZjaG20AK+Eilz4ldxx70oKw4ZqLRZjOr0MJ7K0FYah8nryJbf5XYkzk6mQ6PMt4973IsP1FzX4OHkLI+yg==", + "dependencies": { + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/button": "^16.7.0", + "@atlaskit/ds-explorations": "^2.2.0", + "@atlaskit/icon": "^21.12.0", + "@atlaskit/lozenge": "^11.4.0", + "@atlaskit/primitives": "~0.12.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/generator": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz", - "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==", + "node_modules/@atlaskit/comment/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", "dependencies": { - "@babel/types": "^7.18.13", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" + "@atlaskit/analytics-next-stable-react-context": "1.0.1", + "@babel/runtime": "^7.0.0", + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "node_modules/@atlaskit/comment/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "@babel/types": "^7.18.6" + "tslib": "^2.0.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, + "node_modules/@atlaskit/comment/node_modules/@atlaskit/ds-explorations": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-explorations/-/ds-explorations-2.2.3.tgz", + "integrity": "sha512-tgPZfRpAWUyPKB1qrpZy8ZKBlIfDVdD8QMdtXbSL4IewBLsHnfaTmkN5Wz5G7KE1YrBu20hkLwPJtqmULTdgsw==", "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" + "@atlaskit/tokens": "^1.8.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "tiny-invariant": "^1.2.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "node_modules/@atlaskit/comment/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.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==", - "bin": { - "semver": "bin/semver.js" + "react": "^16.8.0" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.13.tgz", - "integrity": "sha512-hDvXp+QYxSRL+23mpAlSGxHMDyIGChm0/AwTfTAAK5Ufe40nCsyNdaYCGuK91phn/fVu9kqayImRDkvNAgdrsA==", - "dev": true, + "node_modules/@atlaskit/comment/node_modules/@atlaskit/lozenge": { + "version": "11.4.2", + "resolved": "https://registry.npmjs.org/@atlaskit/lozenge/-/lozenge-11.4.2.tgz", + "integrity": "sha512-dpWH+2Hlg47SZ61fizE9jOj8EWphHDIsrThz3qbpUzTYMJHXZutAqDiwfSuGUzcam7C9IOocyY8A1vO8TidWMQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-explorations": "^2.1.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "react": "^16.8.0" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", - "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", - "dev": true, + "node_modules/@atlaskit/comment/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "react": "^16.8.0" } }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", - "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", - "dev": true, + "node_modules/@atlaskit/comment/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.4.0-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/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "engines": { - "node": ">=6.9.0" + "react": "^16.8.0" } }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, + "node_modules/@atlaskit/comment/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/types": "^7.18.6" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "node_modules/@atlaskit/comment/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "node_modules/@atlaskit/css-reset": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@atlaskit/css-reset/-/css-reset-6.5.2.tgz", + "integrity": "sha512-vEmd4YFhyfTMLiweGrsO3+sk0XiOUFA4VfW95vMpPIKfwzrHOOSOWhnA7mBluocdszWRv5kjtTMwuFbZwH3Gdg==", "dependencies": { - "@babel/types": "^7.18.6" + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0", + "fbjs": "^3.0.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, + "node_modules/@atlaskit/css-reset/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/types": "^7.18.9" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "node_modules/@atlaskit/css-reset/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "node_modules/@atlaskit/css-reset/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, + "node_modules/@atlaskit/css-reset/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", - "engines": { - "node": ">=6.9.0" + "node_modules/@atlaskit/dropdown-menu": { + "version": "11.9.5", + "resolved": "https://registry.npmjs.org/@atlaskit/dropdown-menu/-/dropdown-menu-11.9.5.tgz", + "integrity": "sha512-TXeOx5VvoTxx5erTWRoPg+jRDqrqISXuOi7XAXbc98EGEAaAuWZIKuYQKEuZNlyBH+0tKkrM6lVZ2lP5g1CSYQ==", + "dependencies": { + "@atlaskit/button": "^16.7.0", + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/icon": "^21.12.0", + "@atlaskit/menu": "^1.7.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@atlaskit/popup": "^1.7.0", + "@atlaskit/spinner": "^15.5.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@atlaskit/visually-hidden": "^1.2.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" } }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, + "node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "react": "^16.8.0" } }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", - "dev": true, + "node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/popup": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@atlaskit/popup/-/popup-1.7.0.tgz", + "integrity": "sha512-U5MbjXOy8tSPdUE4y9hBa2r5DfSfqWZ+j1NBN1sO/ll4b7cYJuV44S72a9uezex38L3f/uHifPip2SkcjhVEzg==", + "dependencies": { + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@atlaskit/popper": "^5.5.0", + "@atlaskit/portal": "^4.3.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1", + "focus-trap": "^2.4.5" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", - "dev": true, + "node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/popup/node_modules/@atlaskit/popper": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@atlaskit/popper/-/popper-5.5.3.tgz", + "integrity": "sha512-ox1VlG06FQNN4CC6TMQhd82NxFHtKMO900Pey6KWPbCuyxVFssIV/T5ysbbnz2j/69VxACOd5bpXCT3rie7Z3g==", "dependencies": { - "@babel/types": "^7.18.9" + "@atlaskit/in-product-testing": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@popperjs/core": "^2.9.1", + "react-popper": "^2.2.3" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/popup/node_modules/@atlaskit/portal": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@atlaskit/portal/-/portal-4.3.4.tgz", + "integrity": "sha512-FfOLJbl3zJ8J/CqhqBW2sWMXj5zg0t6sm3wdXXejt98IhaN0Enaobg3BKV72LTOi5ZGJfPNVLbRZuaxBEYQTDw==", "dependencies": { - "@babel/types": "^7.18.6" + "@atlaskit/theme": "^12.5.0", + "@babel/runtime": "^7.0.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" } }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz", - "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==", - "dev": true, + "node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/helper-function-name": "^7.18.9", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.11", - "@babel/types": "^7.18.10" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "node_modules/@atlaskit/dropdown-menu/node_modules/@atlaskit/visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/visually-hidden/-/visually-hidden-1.2.3.tgz", + "integrity": "sha512-73HpmFZPsCFY1WI9fRVL+Kx5xj80Yt7LNYATkxTVLGmpChDL03sjMQICLkcT26dOqfD/onlFqrGQc09JtsReBg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "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==", + "node_modules/@atlaskit/flag": { + "version": "14.7.3", + "resolved": "https://registry.npmjs.org/@atlaskit/flag/-/flag-14.7.3.tgz", + "integrity": "sha512-oHGRAUXHjEa02MlOW6T6bPzqUXsrrpywxucD2t+FuIY0JZeYNDCpvGfo7/VDcvzciuBoPb7NDKiPTNZxj5zi6A==", "dependencies": { - "color-convert": "^1.9.0" + "@atlaskit/analytics-next": "^8.0.0", + "@atlaskit/button": "^16.4.0", + "@atlaskit/ds-lib": "^2.1.0", + "@atlaskit/focus-ring": "^1.2.0", + "@atlaskit/icon": "^21.11.0", + "@atlaskit/motion": "^1.3.0", + "@atlaskit/portal": "^4.0.0", + "@atlaskit/theme": "^12.2.0", + "@atlaskit/tokens": "^0.11.0", + "@atlaskit/visually-hidden": "^1.1.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "react": "^16.8.0" } }, - "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==", + "node_modules/@atlaskit/flag/node_modules/@atlaskit/analytics-next": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-8.3.5.tgz", + "integrity": "sha512-UsQwASkjTrqJj9tnj4XU9Pr8dzqFaSlTxkyi19nhkl/rF+p50mZZzARMK9bQaqXj58BWjupOHJBhLmuQRoT/lg==", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@atlaskit/analytics-next-stable-react-context": "1.0.1", + "@babel/runtime": "^7.0.0", + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "react": "^16.8.0" } }, - "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==", + "node_modules/@atlaskit/flag/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "color-name": "1.1.3" - } - }, - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "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": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.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==", + "node_modules/@atlaskit/flag/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "has-flag": "^3.0.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/parser": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz", - "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==", - "bin": { - "parser": "bin/babel-parser.js" + "node_modules/@atlaskit/flag/node_modules/@atlaskit/focus-ring": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@atlaskit/focus-ring/-/focus-ring-1.3.3.tgz", + "integrity": "sha512-jFLFjjhZ3uOomkPdzHKiwCCFDyDkd6mnjYSy+vTQ/5naKf5xLMR7EEgQq2Aar/+filgdcDz6zzzslEMbTxaLzw==", + "dependencies": { + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, + "node_modules/@atlaskit/flag/node_modules/@atlaskit/focus-ring/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, + "node_modules/@atlaskit/flag/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.13.0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", - "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", - "dev": true, + "node_modules/@atlaskit/flag/node_modules/@atlaskit/icon/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, + "node_modules/@atlaskit/flag/node_modules/@atlaskit/motion": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@atlaskit/motion/-/motion-1.4.3.tgz", + "integrity": "sha512-Q4zFD+MSUOSqJYkKVP1PGMTp4QgWb8NZRRJcldggCML1AB6aXj7hD22W9Dx9QALi5zci8grgnZlb31VPGJ5zrA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, + "node_modules/@atlaskit/flag/node_modules/@atlaskit/portal": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@atlaskit/portal/-/portal-4.3.4.tgz", + "integrity": "sha512-FfOLJbl3zJ8J/CqhqBW2sWMXj5zg0t6sm3wdXXejt98IhaN0Enaobg3BKV72LTOi5ZGJfPNVLbRZuaxBEYQTDw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/theme": "^12.5.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.12.0" + "react": "^16.8.0", + "react-dom": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.10.tgz", - "integrity": "sha512-wdGTwWF5QtpTY/gbBtQLAiCnoxfD4qMbN87NYZle1dOZ9Os8Y6zXcKrIaOU8W+TIvFUWVGG9tUgNww3CjXRVVw==", - "dev": true, + "node_modules/@atlaskit/flag/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, + "node_modules/@atlaskit/flag/node_modules/@atlaskit/theme/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, + "node_modules/@atlaskit/flag/node_modules/@atlaskit/tokens": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-0.11.6.tgz", + "integrity": "sha512-PMZbrADw6mWvWyWXn6yqO0UsEiFPMVWp3aPiM19pq3oGVCxrwJxo8sGoLZGsyFUTFZQpcmeLftZ8qQEt6HBD5Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.1.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, + "node_modules/@atlaskit/flag/node_modules/@atlaskit/visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/visually-hidden/-/visually-hidden-1.2.3.tgz", + "integrity": "sha512-73HpmFZPsCFY1WI9fRVL+Kx5xj80Yt7LNYATkxTVLGmpChDL03sjMQICLkcT26dOqfD/onlFqrGQc09JtsReBg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, + "node_modules/@atlaskit/flag/node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.14.0" } }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, + "node_modules/@atlaskit/flag/node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, + "node_modules/@atlaskit/form": { + "version": "8.11.8", + "resolved": "https://registry.npmjs.org/@atlaskit/form/-/form-8.11.8.tgz", + "integrity": "sha512-JvmuARl1FVlEbA93DUCdycn/1npn6i7RsVhXviijgeCyxTrSzbRJoD6KRn/ddn866TPFCF8qfodIPD3CwFhqwQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/icon": "^21.12.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "final-form": "^4.20.1", + "final-form-focus": "^1.1.2", + "lodash": "^4.17.21", + "react-uid": "^2.2.0", + "tiny-invariant": "^1.2.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", - "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", - "dev": true, + "node_modules/@atlaskit/form/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, + "node_modules/@atlaskit/form/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, + "node_modules/@atlaskit/form/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, + "node_modules/@atlaskit/form/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, + "node_modules/@atlaskit/form/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, + "node_modules/@atlaskit/heading": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@atlaskit/heading/-/heading-1.3.6.tgz", + "integrity": "sha512-VZ6MpMs62uYxS9l34P3Eb1IG7TcHAYamGDXGGnEEcfbDvLvj84CpdxgCIVt8M5DuKHWaNdaqeRu/BWqCemxN8Q==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.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==", - "dev": true, + "node_modules/@atlaskit/heading/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.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, + "node_modules/@atlaskit/heading/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, + "node_modules/@atlaskit/in-product-testing": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/in-product-testing/-/in-product-testing-0.2.3.tgz", + "integrity": "sha512-tB1GfdM6GVBirm9Ag9Qgo5bNTA1x2unc6o8iMTHDp8OkyEFCDS3l7XgmR7nrBQXv8D4BUzX6laX25vCf0ef0dw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@atlaskit/inline-message": { + "version": "11.5.2", + "resolved": "https://registry.npmjs.org/@atlaskit/inline-message/-/inline-message-11.5.2.tgz", + "integrity": "sha512-ZhJLxmcaz8ijJ2QP++xHW2BhHYEWRokylhfO4nwHlbqpQanyIcKvZa+1rYNqkbvyhZmvfKSitHVLWLI6RaAYjQ==", + "dependencies": { + "@atlaskit/button": "^16.7.0", + "@atlaskit/icon": "^21.12.0", + "@atlaskit/inline-dialog": "^13.6.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz", - "integrity": "sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ==", - "dev": true, + "node_modules/@atlaskit/inline-message/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "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==", - "dev": true, + "node_modules/@atlaskit/inline-message/node_modules/@atlaskit/inline-dialog": { + "version": "13.6.4", + "resolved": "https://registry.npmjs.org/@atlaskit/inline-dialog/-/inline-dialog-13.6.4.tgz", + "integrity": "sha512-H3NaYNVlDs3SKuhvd8ZEhpdxVfkGCP9uEOJB6CiKK6pR3dOELOnkIyc4kXZ3L6xcyVV1Ni3i17SceO+/wbqg/g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/popper": "^5.5.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1", + "react-node-resolver": "^1.0.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "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==", - "dev": true, + "node_modules/@atlaskit/inline-message/node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" + "@atlaskit/analytics-next-stable-react-context": "1.0.1", + "@babel/runtime": "^7.0.0", + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "dev": true, + "node_modules/@atlaskit/inline-message/node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "tslib": "^2.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "dev": true, + "node_modules/@atlaskit/inline-message/node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "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==", - "dev": true, + "node_modules/@atlaskit/inline-message/node_modules/@atlaskit/inline-dialog/node_modules/@atlaskit/popper": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@atlaskit/popper/-/popper-5.5.3.tgz", + "integrity": "sha512-ox1VlG06FQNN4CC6TMQhd82NxFHtKMO900Pey6KWPbCuyxVFssIV/T5ysbbnz2j/69VxACOd5bpXCT3rie7Z3g==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@atlaskit/in-product-testing": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@popperjs/core": "^2.9.1", + "react-popper": "^2.2.3" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, + "node_modules/@atlaskit/inline-message/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "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==", - "dev": true, + "node_modules/@atlaskit/inline-message/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "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==", - "dev": true, + "node_modules/@atlaskit/inline-message/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "node_modules/@atlaskit/menu": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/@atlaskit/menu/-/menu-1.7.9.tgz", + "integrity": "sha512-kTr4q5mSxDWYuWm5PqTSbGiUgbuWeOg6icaUEUYlg/CZSikQw6FZPIIZiuqOocQQOu/erlA0WVxOl57cknx5EA==", + "dependencies": { + "@atlaskit/ds-explorations": "^2.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/focus-ring": "^1.3.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@atlaskit/primitives": "^0.12.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0", + "react-dom": "^16.8.0" } }, - "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==", - "dev": true, + "node_modules/@atlaskit/menu/node_modules/@atlaskit/ds-explorations": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-explorations/-/ds-explorations-2.2.3.tgz", + "integrity": "sha512-tgPZfRpAWUyPKB1qrpZy8ZKBlIfDVdD8QMdtXbSL4IewBLsHnfaTmkN5Wz5G7KE1YrBu20hkLwPJtqmULTdgsw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@atlaskit/tokens": "^1.8.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "tiny-invariant": "^1.2.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "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==", - "dev": true, + "node_modules/@atlaskit/menu/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, + "node_modules/@atlaskit/menu/node_modules/@atlaskit/focus-ring": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@atlaskit/focus-ring/-/focus-ring-1.3.3.tgz", + "integrity": "sha512-jFLFjjhZ3uOomkPdzHKiwCCFDyDkd6mnjYSy+vTQ/5naKf5xLMR7EEgQq2Aar/+filgdcDz6zzzslEMbTxaLzw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, + "node_modules/@atlaskit/menu/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dev": true, + "node_modules/@atlaskit/menu/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "node_modules/@atlaskit/modal-dialog": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@atlaskit/modal-dialog/-/modal-dialog-12.6.2.tgz", + "integrity": "sha512-crN1QUb4Dy7F9+yLVY7pLvxA6eiknF5srSl2+KvgrL+CY4IQaieUXRhEgLcaJTzA1umevU70vasWN+fsZwS+Xw==", + "dependencies": { + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/blanket": "^12.4.0", + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/focus-ring": "^1.3.0", + "@atlaskit/icon": "^21.12.0", + "@atlaskit/motion": "^1.4.0", + "@atlaskit/portal": "^4.3.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1", + "raf-schd": "^4.0.3", + "react-focus-lock": "^2.5.2", + "react-scrolllock": "^5.0.1", + "react-uid": "^2.2.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/analytics-next-stable-react-context": "1.0.1", + "@babel/runtime": "^7.0.0", + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "tslib": "^2.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", - "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/blanket": { + "version": "12.4.3", + "resolved": "https://registry.npmjs.org/@atlaskit/blanket/-/blanket-12.4.3.tgz", + "integrity": "sha512-VUkM4MiQXFnFGnwNGr0EARe/9OlyP2G5WMs3WzV3/AVfCH7mOU397cRfpn7KHyp5JubXGDTKhbRgf4vSv9cw1w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", - "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/focus-ring": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@atlaskit/focus-ring/-/focus-ring-1.3.3.tgz", + "integrity": "sha512-jFLFjjhZ3uOomkPdzHKiwCCFDyDkd6mnjYSy+vTQ/5naKf5xLMR7EEgQq2Aar/+filgdcDz6zzzslEMbTxaLzw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz", - "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/motion": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@atlaskit/motion/-/motion-1.4.3.tgz", + "integrity": "sha512-Q4zFD+MSUOSqJYkKVP1PGMTp4QgWb8NZRRJcldggCML1AB6aXj7hD22W9Dx9QALi5zci8grgnZlb31VPGJ5zrA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/portal": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@atlaskit/portal/-/portal-4.3.4.tgz", + "integrity": "sha512-FfOLJbl3zJ8J/CqhqBW2sWMXj5zg0t6sm3wdXXejt98IhaN0Enaobg3BKV72LTOi5ZGJfPNVLbRZuaxBEYQTDw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/theme": "^12.5.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0", + "react-dom": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.18.9.tgz", - "integrity": "sha512-+G6rp2zRuOAInY5wcggsx4+QVao1qPM0osC9fTUVlAV3zOrzTCnrMAFVnR6+a3T8wz1wFIH7KhYMcMB3u1n80A==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-flow": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.14.0" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/react-scrolllock": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scrolllock/-/react-scrolllock-5.0.1.tgz", + "integrity": "sha512-poeEsjnZAlpA6fJlaNo4rZtcip2j6l5mUGU/SJe1FFlicEudS943++u7ZSdA7lk10hoyYK3grOD02/qqt5Lxhw==", "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "exenv": "^1.2.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.3.0" } }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, + "node_modules/@atlaskit/modal-dialog/node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, + "node_modules/@atlaskit/page-header": { + "version": "10.4.4", + "resolved": "https://registry.npmjs.org/@atlaskit/page-header/-/page-header-10.4.4.tgz", + "integrity": "sha512-25yXYQdCDdPHVuz309HurUnNmkzy2GCvRnr19HOF14sM/2bA6SRXOTXxjXsVQ3V88pG+m0TiUnqcYBg1gwAGiw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0", + "react-dom": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, + "node_modules/@atlaskit/page-header/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, + "node_modules/@atlaskit/page-header/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", - "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", - "dev": true, + "node_modules/@atlaskit/page-header/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, + "node_modules/@atlaskit/page-header/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" + } + }, + "node_modules/@atlaskit/page-layout": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@atlaskit/page-layout/-/page-layout-1.7.0.tgz", + "integrity": "sha512-328bJgaI849m6bK0sAcWMBC+f9qu25vgITSG6eAdElcZsFSMLPsSGslsW/V7KV4yXhNepr6QZ6Vd4ypdNCPJGQ==", + "dependencies": { + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/icon": "^21.12.0", + "@atlaskit/motion": "^1.4.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@atlaskit/primitives": "^0.12.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.6.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1", + "raf-schd": "^4.0.3" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0", + "react-dom": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", - "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", - "dev": true, + "node_modules/@atlaskit/page-layout/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, + "node_modules/@atlaskit/page-layout/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, + "node_modules/@atlaskit/page-layout/node_modules/@atlaskit/motion": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@atlaskit/motion/-/motion-1.4.3.tgz", + "integrity": "sha512-Q4zFD+MSUOSqJYkKVP1PGMTp4QgWb8NZRRJcldggCML1AB6aXj7hD22W9Dx9QALi5zci8grgnZlb31VPGJ5zrA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "dev": true, + "node_modules/@atlaskit/page-layout/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, + "node_modules/@atlaskit/page-layout/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz", - "integrity": "sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw==", - "dev": true, + "node_modules/@atlaskit/platform-feature-flags": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@atlaskit/platform-feature-flags/-/platform-feature-flags-0.2.4.tgz", + "integrity": "sha512-7nmpYu4BiYL3+2sjkqaFh1aho2EtQo69CgIOwpKajrbbMAp4o+MYKIzpofqzZoZk2QBMalsyRYkudG7tWi3+gg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@atlaskit/primitives": { + "version": "0.12.6", + "resolved": "https://registry.npmjs.org/@atlaskit/primitives/-/primitives-0.12.6.tgz", + "integrity": "sha512-ZTqDLc3lP5Z8s/bXHDEEr028cC+w/VTnF+PazP9w5a8yM7+p4XKKSWiwh0EnSlLeeHX3fb+s2GKs/5YlgQf/Iw==", + "dependencies": { + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.8.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "@emotion/serialize": "^1.1.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, + "node_modules/@atlaskit/primitives/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz", - "integrity": "sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==", - "dev": true, + "node_modules/@atlaskit/primitives/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, + "node_modules/@atlaskit/progress-bar": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@atlaskit/progress-bar/-/progress-bar-0.5.16.tgz", + "integrity": "sha512-AN8mA8Tv7v3RY8CJ/9hr//xKLhD8Ctg/6qGAFhQw1i/XbAge4M0FXDiS/x0JsweLjNRmigJW9Qcxgs1vMZwARw==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.1.0", + "@atlaskit/theme": "^12.2.0", + "@atlaskit/tokens": "^1.0.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", - "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", - "dev": true, + "node_modules/@atlaskit/progress-bar/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz", - "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==", - "dev": true, + "node_modules/@atlaskit/progress-bar/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, + "node_modules/@atlaskit/progress-bar/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" + } + }, + "node_modules/@atlaskit/section-message": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@atlaskit/section-message/-/section-message-6.4.5.tgz", + "integrity": "sha512-8LpE/HuXQUa5rXVZEISCBkI10sTE+NnkcCAdrK7CjX9Qz+GqVaooM50PjA+kLgdTSDWzYLjxlBUHmMS05suymA==", + "dependencies": { + "@atlaskit/button": "^16.7.0", + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-explorations": "^2.2.0", + "@atlaskit/heading": "^1.3.0", + "@atlaskit/icon": "^21.12.0", + "@atlaskit/primitives": "^0.12.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, + "node_modules/@atlaskit/section-message/node_modules/@atlaskit/ds-explorations": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-explorations/-/ds-explorations-2.2.3.tgz", + "integrity": "sha512-tgPZfRpAWUyPKB1qrpZy8ZKBlIfDVdD8QMdtXbSL4IewBLsHnfaTmkN5Wz5G7KE1YrBu20hkLwPJtqmULTdgsw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/tokens": "^1.8.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "tiny-invariant": "^1.2.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, + "node_modules/@atlaskit/section-message/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz", - "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==", - "dev": true, + "node_modules/@atlaskit/section-message/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-runtime/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/@atlaskit/section-message/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, + "node_modules/@atlaskit/section-message/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", - "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", - "dev": true, + "node_modules/@atlaskit/section-message/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, + "node_modules/@atlaskit/select": { + "version": "15.7.7", + "resolved": "https://registry.npmjs.org/@atlaskit/select/-/select-15.7.7.tgz", + "integrity": "sha512-nz8A5bdIswSfs0WruNSAbbtONAjyUo6PMdWxX0LKPOSpmD3i2Wq69NcM1kzl03W+5Y30Rn/idqUktlxDtysPsA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/analytics-next": "^8.2.0", + "@atlaskit/icon": "^21.11.0", + "@atlaskit/spinner": "^15.2.0", + "@atlaskit/theme": "^12.2.0", + "@atlaskit/tokens": "^0.11.0", + "@atlaskit/visually-hidden": "^1.1.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "@popperjs/core": "^2.9.1", + "@types/react-select": "^4.0.18", + "bind-event-listener": "^2.1.1", + "memoize-one": "^6.0.0", + "react-fast-compare": "^3.2.0", + "react-focus-lock": "^2.5.2", + "react-node-resolver": "^1.0.1", + "react-popper": "^2.2.3", + "react-select": "^4.3.1", + "react-uid": "^2.2.0", + "shallow-equal": "^1.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0", + "react-dom": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, + "node_modules/@atlaskit/select/node_modules/@atlaskit/analytics-next": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-8.3.5.tgz", + "integrity": "sha512-UsQwASkjTrqJj9tnj4XU9Pr8dzqFaSlTxkyi19nhkl/rF+p50mZZzARMK9bQaqXj58BWjupOHJBhLmuQRoT/lg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/analytics-next-stable-react-context": "1.0.1", + "@babel/runtime": "^7.0.0", + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, + "node_modules/@atlaskit/select/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "tslib": "^2.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.12.tgz", - "integrity": "sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w==", - "dev": true, + "node_modules/@atlaskit/select/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-typescript": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, + "node_modules/@atlaskit/select/node_modules/@atlaskit/icon/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, + "node_modules/@atlaskit/select/node_modules/@atlaskit/icon/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/preset-env": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", - "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", - "dev": true, + "node_modules/@atlaskit/select/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.18.10", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.18.9", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.9", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.9", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.9", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.10", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.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==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node_modules/@atlaskit/select/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, + "node_modules/@atlaskit/select/node_modules/@atlaskit/theme/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "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" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, + "node_modules/@atlaskit/select/node_modules/@atlaskit/tokens": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-0.11.6.tgz", + "integrity": "sha512-PMZbrADw6mWvWyWXn6yqO0UsEiFPMVWp3aPiM19pq3oGVCxrwJxo8sGoLZGsyFUTFZQpcmeLftZ8qQEt6HBD5Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@atlaskit/ds-lib": "^2.1.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "dev": true, + "node_modules/@atlaskit/select/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "react": "^16.8.0" } }, - "node_modules/@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "node_modules/@atlaskit/select/node_modules/@atlaskit/visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/visually-hidden/-/visually-hidden-1.2.3.tgz", + "integrity": "sha512-73HpmFZPsCFY1WI9fRVL+Kx5xj80Yt7LNYATkxTVLGmpChDL03sjMQICLkcT26dOqfD/onlFqrGQc09JtsReBg==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/runtime-corejs2": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.18.9.tgz", - "integrity": "sha512-l057ZarpDX2QnXM89ViR2BgRFgTy2l5UFGDt0SbInhim1N/ljBgPeTJV0kRG1/Bo7CkHfYfrNNwTeQ2CPph9xQ==", + "node_modules/@atlaskit/select/node_modules/react-select": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-4.3.1.tgz", + "integrity": "sha512-HBBd0dYwkF5aZk1zP81Wx5UsLIIT2lSvAY2JiJo199LjoLHoivjn9//KsmvQMEFGNhe58xyuOITjfxKCcGc62Q==", "dependencies": { - "core-js": "^2.6.12", - "regenerator-runtime": "^0.13.4" + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.1.1", + "memoize-one": "^5.0.0", + "prop-types": "^15.6.0", + "react-input-autosize": "^3.0.0", + "react-transition-group": "^4.3.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0", + "react-dom": "^16.8.0 || ^17.0.0" } }, - "node_modules/@babel/runtime-corejs2/node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "hasInstallScript": true + "node_modules/@atlaskit/select/node_modules/react-select/node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz", - "integrity": "sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A==", - "dev": true, + "node_modules/@atlaskit/select/node_modules/react-select/node_modules/react-input-autosize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-3.0.0.tgz", + "integrity": "sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg==", "dependencies": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" + "prop-types": "^15.5.8" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0" } }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "node_modules/@atlaskit/spinner": { + "version": "15.5.2", + "resolved": "https://registry.npmjs.org/@atlaskit/spinner/-/spinner-15.5.2.tgz", + "integrity": "sha512-7NVBCut1gd5ddyQwwBuWI44zGMNA9hj4by3jVqRKez57VOh4NCvZcxI7BcBehPomRQp4YnBE0Ueib2k//BvEmA==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@atlaskit/interaction-context": "^2.1.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@babel/traverse": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz", - "integrity": "sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.13", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.13", - "@babel/types": "^7.18.13", - "debug": "^4.1.0", - "globals": "^11.1.0" + "node_modules/@atlaskit/spinner/node_modules/@atlaskit/interaction-context": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@atlaskit/interaction-context/-/interaction-context-2.1.2.tgz", + "integrity": "sha512-G50yJNocJ+wyv/XwzKge+JYOt+1T8/PGNPaKIwv1Y2CEwO1oOu4jlyOQHGjHCcsaCmuvP5PDzDXc4kO83yNcQw==", + "dependencies": { + "@babel/runtime": "^7.0.0" }, - "engines": { - "node": ">=6.9.0" - } + "peerDependencies": { + "react": "^16.8.0" + } }, - "node_modules/@babel/types": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz", - "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==", + "node_modules/@atlaskit/spinner/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@blocknote/core": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@blocknote/core/-/core-0.1.0.tgz", - "integrity": "sha512-ElqKLvGkaa9j1+3itnVk8Lvzoxit5AlC4gbTdjlfwp5uoXrLFhSb2bOetDj0CVsgmQxPXv9c4vztwHuojssVxQ==", + "node_modules/@atlaskit/spinner/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@atlaskit/button": "^16.3.5", - "@atlaskit/dropdown-menu": "^11.1.2", - "@atlaskit/menu": "^1.3.0", - "@atlaskit/theme": "^12.1.4", - "@tippyjs/react": "^4.2.6", - "@tiptap/core": "^2.0.0-beta.182", - "@tiptap/extension-bold": "^2.0.0-beta.28", - "@tiptap/extension-code": "^2.0.0-beta.28", - "@tiptap/extension-collaboration": "^2.0.0-beta.38", - "@tiptap/extension-collaboration-cursor": "^2.0.0-beta.37", - "@tiptap/extension-dropcursor": "^2.0.0-beta.29", - "@tiptap/extension-gapcursor": "^2.0.0-beta.39", - "@tiptap/extension-hard-break": "^2.0.0-beta.33", - "@tiptap/extension-history": "^2.0.0-beta.26", - "@tiptap/extension-horizontal-rule": "^2.0.0-beta.36", - "@tiptap/extension-italic": "^2.0.0-beta.28", - "@tiptap/extension-link": "^2.0.0-beta.43", - "@tiptap/extension-paragraph": "^2.0.0-beta.26", - "@tiptap/extension-strike": "^2.0.0-beta.29", - "@tiptap/extension-text": "^2.0.0-beta.17", - "@tiptap/extension-underline": "^2.0.0-beta.25", - "@tiptap/react": "^2.0.0-beta.114", - "lodash": "^4.17.21", - "prosemirror-model": "1.18.1", - "prosemirror-state": "1.4.1", - "prosemirror-view": "1.26.2", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-icons": "^4.3.1", - "styled-components": "^5.3.3", - "uuid": "^8.3.2" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@blocknote/core/node_modules/@tiptap/react": { - "version": "2.0.0-beta.114", - "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-2.0.0-beta.114.tgz", - "integrity": "sha512-9JbRE+16WM6RxbBxzY74SrJtLodvjeRBnEbWxuhxVgGKxMunRj6r8oED87ODJgqLmkpofwE0KFHTPGdEXfdcKA==", + "node_modules/@atlaskit/spinner/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@tiptap/extension-bubble-menu": "^2.0.0-beta.61", - "@tiptap/extension-floating-menu": "^2.0.0-beta.56", - "prosemirror-view": "1.26.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "react": "^16.8.0" } }, - "node_modules/@blocknote/core/node_modules/css-to-react-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", - "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", + "node_modules/@atlaskit/spinner/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@blocknote/core/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" + "node_modules/@atlaskit/textarea": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@atlaskit/textarea/-/textarea-4.7.2.tgz", + "integrity": "sha512-KNz/PEu6JCtBjWiQIvqbdgZqvg/F9qViej/B0s0ntqlTM//CI7kfvWPnHtg9IIm6DgTWtj8wROySx3C8a5Sy8A==", + "dependencies": { + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.8.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@blocknote/core/node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/@blocknote/core/node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "node_modules/@atlaskit/textarea/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "@atlaskit/analytics-next-stable-react-context": "1.0.1", + "@babel/runtime": "^7.0.0", + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@blocknote/core/node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "node_modules/@atlaskit/textarea/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" + "tslib": "^2.0.0" }, "peerDependencies": { - "react": "17.0.2" + "react": "^16.8.0" } }, - "node_modules/@blocknote/core/node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "node_modules/@atlaskit/textarea/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@blocknote/core/node_modules/styled-components": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.5.tgz", - "integrity": "sha512-ndETJ9RKaaL6q41B69WudeqLzOpY1A/ET/glXkNZ2T7dPjPqpPCXXQjDFYZWwNnE5co0wX+gTCqx9mfxTmSIPg==", - "hasInstallScript": true, + "node_modules/@atlaskit/textarea/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^1.1.0", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0", - "react-is": ">= 16.8.0" + "react": "^16.8.0" } }, - "node_modules/@blocknote/core/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/@atlaskit/textarea/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "has-flag": "^3.0.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@deck.gl/aggregation-layers": { - "version": "8.8.9", - "resolved": "https://registry.npmjs.org/@deck.gl/aggregation-layers/-/aggregation-layers-8.8.9.tgz", - "integrity": "sha512-quXUDBeyFau77mlYGmLeGpCzd5NjChdt5+SMG7X7VmxrZuUh6zNP381J1+t6WlNShZdUwjhPKvRQDSYyXo2nIA==", + "node_modules/@atlaskit/textarea/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@luma.gl/constants": "^8.5.16", - "@luma.gl/shadertools": "^8.5.16", - "@math.gl/web-mercator": "^3.6.2", - "d3-hexbin": "^0.2.1" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "@deck.gl/core": "^8.0.0", - "@deck.gl/layers": "^8.0.0", - "@luma.gl/core": "^8.0.0" - } - }, - "node_modules/@deck.gl/core": { - "version": "8.8.9", - "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-8.8.9.tgz", - "integrity": "sha512-fRbN/EpoFT2935qlSXrGltUsUFr7Qia8yegLfjRkK244bJX6ptuaRee1GZAeqpCVaWQRbXOM11C2NEe3d64oNg==", - "dependencies": { - "@loaders.gl/core": "^3.2.5", - "@loaders.gl/images": "^3.2.5", - "@luma.gl/constants": "^8.5.16", - "@luma.gl/core": "^8.5.16", - "@math.gl/core": "^3.6.2", - "@math.gl/sun": "^3.6.2", - "@math.gl/web-mercator": "^3.6.2", - "@probe.gl/env": "^3.5.0", - "@probe.gl/log": "^3.5.0", - "@probe.gl/stats": "^3.5.0", - "gl-matrix": "^3.0.0", - "math.gl": "^3.6.2", - "mjolnir.js": "^2.7.0" + "react": "^16.8.0" } }, - "node_modules/@deck.gl/layers": { - "version": "8.8.9", - "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-8.8.9.tgz", - "integrity": "sha512-IwpTfYU2yJdybP4hD2p4A/JZ3jqCzkwpjKxrig43Q4OeR9oNmotS1DOyqD70sF4Al8xOPV9/WxPCht4O7/Pbrw==", - "dependencies": { - "@loaders.gl/images": "^3.2.5", - "@loaders.gl/schema": "^3.2.5", - "@luma.gl/constants": "^8.5.16", - "@mapbox/tiny-sdf": "^1.1.0", - "@math.gl/core": "^3.6.2", - "@math.gl/polygon": "^3.6.2", - "@math.gl/web-mercator": "^3.6.2", - "earcut": "^2.0.6" + "node_modules/@atlaskit/textfield": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@atlaskit/textfield/-/textfield-5.5.2.tgz", + "integrity": "sha512-HfOQb6Sev1X+QdTSU/Z8kpgmcYGmKOzYuerpUF06VKJhk5cTOkf1WgrQiNDW7n/3sK6wGenAnrkzgEfcQkc5Pw==", + "dependencies": { + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.8.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" }, "peerDependencies": { - "@deck.gl/core": "^8.0.0", - "@loaders.gl/core": "^3.0.0", - "@luma.gl/core": "^8.0.0" + "react": "^16.8.0" } }, - "node_modules/@deck.gl/react": { - "version": "8.8.9", - "resolved": "https://registry.npmjs.org/@deck.gl/react/-/react-8.8.9.tgz", - "integrity": "sha512-muCUYVnpKuvxvPnOajpMUADeYQCSemnWjsZgUZGyItn00CbntWWQK889TnZFUNLsBY04XZV3oLTqV9SXL+PaoQ==", + "node_modules/@atlaskit/textfield/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", + "dependencies": { + "@atlaskit/analytics-next-stable-react-context": "1.0.1", + "@babel/runtime": "^7.0.0", + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" + }, "peerDependencies": { - "@deck.gl/core": "^8.0.0", - "@types/react": ">= 16.3", - "react": ">=16.3", - "react-dom": ">=16.3" + "react": "^16.8.0" } }, - "node_modules/@emotion/babel-plugin": { - "version": "11.10.2", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz", - "integrity": "sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA==", + "node_modules/@atlaskit/textfield/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.0", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.0.13" + "tslib": "^2.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "react": "^16.8.0" } }, - "node_modules/@emotion/babel-plugin/node_modules/@emotion/serialize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz", - "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==", + "node_modules/@atlaskit/textfield/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", "dependencies": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" - } - }, - "node_modules/@emotion/babel-plugin/node_modules/@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "node_modules/@emotion/babel-plugin/node_modules/@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "node_modules/@emotion/babel-plugin/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - }, - "node_modules/@emotion/babel-plugin/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==", - "engines": { - "node": ">=10" + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@emotion/babel-plugin/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@emotion/cache": { - "version": "10.0.29", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", - "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", + "node_modules/@atlaskit/textfield/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@emotion/sheet": "0.9.4", - "@emotion/stylis": "0.8.5", - "@emotion/utils": "0.11.3", - "@emotion/weak-memoize": "0.2.5" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@emotion/core": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.3.1.tgz", - "integrity": "sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==", + "node_modules/@atlaskit/textfield/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "@babel/runtime": "^7.5.5", - "@emotion/cache": "^10.0.27", - "@emotion/css": "^10.0.27", - "@emotion/serialize": "^0.11.15", - "@emotion/sheet": "0.9.4", - "@emotion/utils": "0.11.3" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "react": ">=16.3.0" + "react": "^16.8.0" } }, - "node_modules/@emotion/css": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", - "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", + "node_modules/@atlaskit/textfield/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@emotion/serialize": "^0.11.15", - "@emotion/utils": "0.11.3", - "babel-plugin-emotion": "^10.0.27" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "node_modules/@atlaskit/tree": { + "version": "8.8.5", + "resolved": "https://registry.npmjs.org/@atlaskit/tree/-/tree-8.8.5.tgz", + "integrity": "sha512-3I3Fen5Hu/w2RrIbc7CGCPEQUAR3+8kgZ/hf121PBuCnvI3JhYMqB69w4w8zf0EoTOzfo/ojCW4KymD8Eh2VQw==", "dependencies": { - "@emotion/memoize": "^0.8.0" + "@babel/runtime": "^7.0.0", + "css-box-model": "^1.2.0", + "react-beautiful-dnd-next": "11.0.5" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + "node_modules/@atlaskit/tree/node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" }, - "node_modules/@emotion/react": { - "version": "11.10.4", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.4.tgz", - "integrity": "sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA==", + "node_modules/@atlaskit/tree/node_modules/react-beautiful-dnd-next": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/react-beautiful-dnd-next/-/react-beautiful-dnd-next-11.0.5.tgz", + "integrity": "sha512-kM5Mob41HkA3ShS9uXqeMkW51L5bVsfttxfrwwHucu7I6SdnRKCyN78t6QiLH/UJQQ8T4ukI6NeQAQQpGwolkg==", "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.0", - "@emotion/cache": "^11.10.0", - "@emotion/serialize": "^1.1.0", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "hoist-non-react-statics": "^3.3.1" + "@babel/runtime-corejs2": "^7.4.5", + "css-box-model": "^1.1.2", + "memoize-one": "^5.0.4", + "raf-schd": "^4.0.0", + "react-redux": "^7.0.3", + "redux": "^4.0.1", + "tiny-invariant": "^1.0.4", + "use-memo-one": "^1.1.0" }, "peerDependencies": { - "@babel/core": "^7.0.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@types/react": { - "optional": true - } + "react": "^16.8.5" } }, - "node_modules/@emotion/react/node_modules/@emotion/cache": { - "version": "11.10.3", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz", - "integrity": "sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==", + "node_modules/@atlaskit/user-picker": { + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/@atlaskit/user-picker/-/user-picker-9.7.4.tgz", + "integrity": "sha512-e16dChaPf7NOTb+7QW2clIoA8Y/Cq6RDqTDQYZRacKV9GoS5Mwx+U6I84aMHsL4JWywPUgQU9/ECrLVx2/m0iA==", "dependencies": { - "@emotion/memoize": "^0.8.0", - "@emotion/sheet": "^1.2.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.0.13" + "@atlaskit/analytics-next": "^8.2.0", + "@atlaskit/avatar": "^21.1.0", + "@atlaskit/icon": "^21.11.0", + "@atlaskit/logo": "^13.10.0", + "@atlaskit/lozenge": "^11.3.0", + "@atlaskit/popper": "^5.4.0", + "@atlaskit/select": "^16.1.0", + "@atlaskit/spinner": "^15.3.0", + "@atlaskit/theme": "^12.2.0", + "@atlaskit/tokens": "^0.13.0", + "@atlaskit/tooltip": "^17.6.0", + "@atlaskit/ufo": "^0.1.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "lodash": "^4.17.21", + "memoize-one": "^6.0.0", + "uuid": "^3.1.0" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0", + "react-intl-next": "npm:react-intl@^5.18.1" } }, - "node_modules/@emotion/react/node_modules/@emotion/serialize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz", - "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==", + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/analytics-next": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-8.3.5.tgz", + "integrity": "sha512-UsQwASkjTrqJj9tnj4XU9Pr8dzqFaSlTxkyi19nhkl/rF+p50mZZzARMK9bQaqXj58BWjupOHJBhLmuQRoT/lg==", "dependencies": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" + "@atlaskit/analytics-next-stable-react-context": "1.0.1", + "@babel/runtime": "^7.0.0", + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@emotion/react/node_modules/@emotion/sheet": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz", - "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==" - }, - "node_modules/@emotion/react/node_modules/@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "node_modules/@emotion/react/node_modules/@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "node_modules/@emotion/react/node_modules/@emotion/weak-memoize": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" - }, - "node_modules/@emotion/react/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - }, - "node_modules/@emotion/serialize": { - "version": "0.11.16", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", - "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/unitless": "0.7.5", - "@emotion/utils": "0.11.3", - "csstype": "^2.5.7" - } - }, - "node_modules/@emotion/serialize/node_modules/@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" - }, - "node_modules/@emotion/serialize/node_modules/@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - }, - "node_modules/@emotion/sheet": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", - "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==" - }, - "node_modules/@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - }, - "node_modules/@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "tslib": "^2.0.0" + }, "peerDependencies": { - "react": ">=16.8.0" + "react": "^16.8.0" } }, - "node_modules/@emotion/utils": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", - "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", - "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" - }, - "node_modules/@esbuild-plugins/node-globals-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", - "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", - "dev": true, + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/icon": { + "version": "21.12.4", + "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.12.4.tgz", + "integrity": "sha512-KnyyW8+q8npatIt3BPLeYCy76KlRs0Kr2of8DqAIrCduJHeLX/ff/8Jo0kn4hNF+mv5sdNx4X/44KsP6ODU7+w==", + "dependencies": { + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" + }, "peerDependencies": { - "esbuild": "*" + "react": "^16.8.0" } }, - "node_modules/@esbuild-plugins/node-modules-polyfill": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz", - "integrity": "sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==", - "dev": true, + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/icon/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "escape-string-regexp": "^4.0.0", - "rollup-plugin-node-polyfills": "^0.2.1" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, "peerDependencies": { - "esbuild": "*" + "react": "^16.8.0" } }, - "node_modules/@esbuild-plugins/node-modules-polyfill/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" + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/icon/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.6.tgz", - "integrity": "sha512-hqmVU2mUjH6J2ZivHphJ/Pdse2ZD+uGCHK0uvsiLDk/JnSedEVj77CiVUnbMKuU4tih1TZZL8tG9DExQg/GZsw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/logo": { + "version": "13.14.7", + "resolved": "https://registry.npmjs.org/@atlaskit/logo/-/logo-13.14.7.tgz", + "integrity": "sha512-cp+b8XKz52MTovzDYx64EYRCuH+SZRKIq9h/lEGupOevwKibZexrkHRmr8tAolWZuaTNus00PAOg9xZsxaUoPw==", + "dependencies": { + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.5.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "react-uid": "^2.2.0" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", - "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", - "dev": true, + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/logo/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/logo/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@eslint/eslintrc/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, - "engines": { - "node": ">=10" + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/lozenge": { + "version": "11.4.2", + "resolved": "https://registry.npmjs.org/@atlaskit/lozenge/-/lozenge-11.4.2.tgz", + "integrity": "sha512-dpWH+2Hlg47SZ61fizE9jOj8EWphHDIsrThz3qbpUzTYMJHXZutAqDiwfSuGUzcam7C9IOocyY8A1vO8TidWMQ==", + "dependencies": { + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-explorations": "^2.1.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@formatjs/ecma402-abstract": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", - "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/lozenge/node_modules/@atlaskit/ds-explorations": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-explorations/-/ds-explorations-2.2.3.tgz", + "integrity": "sha512-tgPZfRpAWUyPKB1qrpZy8ZKBlIfDVdD8QMdtXbSL4IewBLsHnfaTmkN5Wz5G7KE1YrBu20hkLwPJtqmULTdgsw==", "dependencies": { - "@formatjs/intl-localematcher": "0.2.25", - "tslib": "^2.1.0" + "@atlaskit/tokens": "^1.8.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "tiny-invariant": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@formatjs/fast-memoize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz", - "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==", + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/lozenge/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "tslib": "^2.1.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz", - "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==", + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/lozenge/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/icu-skeleton-parser": "1.3.6", - "tslib": "^2.1.0" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz", - "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==", + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/popper": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@atlaskit/popper/-/popper-5.5.3.tgz", + "integrity": "sha512-ox1VlG06FQNN4CC6TMQhd82NxFHtKMO900Pey6KWPbCuyxVFssIV/T5ysbbnz2j/69VxACOd5bpXCT3rie7Z3g==", "dependencies": { - "@formatjs/ecma402-abstract": "1.11.4", - "tslib": "^2.1.0" + "@atlaskit/in-product-testing": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@popperjs/core": "^2.9.1", + "react-popper": "^2.2.3" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@formatjs/intl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.2.1.tgz", - "integrity": "sha512-vgvyUOOrzqVaOFYzTf2d3+ToSkH2JpR7x/4U1RyoHQLmvEaTQvXJ7A2qm1Iy3brGNXC/+/7bUlc3lpH+h/LOJA==", + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/select": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/select/-/select-16.5.4.tgz", + "integrity": "sha512-jwWiSg32ljtbQ+IKz72nb3Aac7ok9S2U0NUSrZT/yPE0dKVcDyaR6T7fnYzQKZtWdfumQPBzXUEfgxcMGeT99w==", "dependencies": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/fast-memoize": "1.2.1", - "@formatjs/icu-messageformat-parser": "2.1.0", - "@formatjs/intl-displaynames": "5.4.3", - "@formatjs/intl-listformat": "6.5.3", - "intl-messageformat": "9.13.0", - "tslib": "^2.1.0" + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/icon": "^21.12.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@atlaskit/spinner": "^15.5.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.8.0", + "@atlaskit/visually-hidden": "^1.2.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "@popperjs/core": "^2.9.1", + "bind-event-listener": "^2.1.1", + "memoize-one": "^6.0.0", + "react-fast-compare": "^3.2.0", + "react-focus-lock": "^2.5.2", + "react-node-resolver": "^1.0.1", + "react-popper": "^2.2.3", + "react-select": "^5.4.0", + "react-uid": "^2.2.0", + "shallow-equal": "^1.0.0" }, "peerDependencies": { - "typescript": "^4.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "react": "^16.8.0", + "react-dom": "^16.8.0" } }, - "node_modules/@formatjs/intl-displaynames": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-5.4.3.tgz", - "integrity": "sha512-4r12A3mS5dp5hnSaQCWBuBNfi9Amgx2dzhU4lTFfhSxgb5DOAiAbMpg6+7gpWZgl4ahsj3l2r/iHIjdmdXOE2Q==", + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/select/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", "dependencies": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/intl-localematcher": "0.2.25", - "tslib": "^2.1.0" + "@atlaskit/analytics-next-stable-react-context": "1.0.1", + "@babel/runtime": "^7.0.0", + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@formatjs/intl-listformat": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.5.3.tgz", - "integrity": "sha512-ozpz515F/+3CU+HnLi5DYPsLa6JoCfBggBSSg/8nOB5LYSFW9+ZgNQJxJ8tdhKYeODT+4qVHX27EeJLoxLGLNg==", + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/select/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/intl-localematcher": "0.2.25", - "tslib": "^2.1.0" + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@formatjs/intl-localematcher": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", - "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/select/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "tslib": "^2.1.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", - "dev": true, + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/select/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": ">=10.10.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/select/node_modules/@atlaskit/visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/visually-hidden/-/visually-hidden-1.2.3.tgz", + "integrity": "sha512-73HpmFZPsCFY1WI9fRVL+Kx5xj80Yt7LNYATkxTVLGmpChDL03sjMQICLkcT26dOqfD/onlFqrGQc09JtsReBg==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/theme": { + "version": "12.5.4", + "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.5.4.tgz", + "integrity": "sha512-ukn8YOZJFXYx2DHvQ/AXSBqeidSa83R4H5NMerSqMqB24wGCRJ1HrK9zuKtT/ZMtRed0c7+Adk4Hn+ab3YL61w==", + "dependencies": { + "@atlaskit/codemod-utils": "^4.2.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "react": "^16.8.0" } }, - "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/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/theme/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/theme/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", + "dependencies": { + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/tokens": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-0.13.5.tgz", + "integrity": "sha512-xtQY1I7oDatlEDOzBqtFEWQW1G18b9rT7eCERSFu/4J9c+XVRS+p0tH6L704LWlwcl3mRMevmPUhCMFWaGymHg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@atlaskit/ds-lib": "^2.1.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.15.0", + "@babel/types": "^7.15.0" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/tokens/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/tooltip": { + "version": "17.8.2", + "resolved": "https://registry.npmjs.org/@atlaskit/tooltip/-/tooltip-17.8.2.tgz", + "integrity": "sha512-sIVGvhaFiU7lJF/AP4m2SWOMk0NZEA7tEgQZ/HJ/BlmMUCRdfMsp4A6zlA/OP/DEnN7fYumnYfSrjJgw2B1ikQ==", + "dependencies": { + "@atlaskit/analytics-next": "^9.1.0", + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/motion": "^1.4.0", + "@atlaskit/popper": "^5.5.0", + "@atlaskit/portal": "^4.3.0", + "@atlaskit/theme": "^12.5.0", + "@atlaskit/tokens": "^1.4.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1", + "react-uid": "^2.2.0" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/analytics-next": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-9.1.3.tgz", + "integrity": "sha512-+PkNWStlbo7utGdplIgMV+Hi+/uPLiBIpzEzwfUeXyfHc31D9seyzrWktedEHokVPoBDwb9T3cBxjOyiAdj5rg==", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@atlaskit/analytics-next-stable-react-context": "1.0.1", + "@babel/runtime": "^7.0.0", + "prop-types": "^15.5.10", + "use-memo-one": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@lerna/add": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.3.0.tgz", - "integrity": "sha512-MxwTO2UBxZwwuquKbBqdYa56YTqg6Lfz1MZsRQxO7F2cb2NN8NEYTcGOli/71Ee/2AoX4R4xIFTh3TnaflQ25A==", - "dev": true, + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/analytics-next/node_modules/@atlaskit/analytics-next-stable-react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", + "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", "dependencies": { - "@lerna/bootstrap": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "npm-package-arg": "8.1.1", - "p-map": "^4.0.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" + "tslib": "^2.0.0" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@lerna/bootstrap": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.3.0.tgz", - "integrity": "sha512-iHVjt6YOQKLY0j+ex13a6ZxjIQ1TSSXqbl6z1hVjBFaDyCh7pra/tgj0LohZDVCaouLwRKucceQfTGrb+cfo7A==", - "dev": true, - "dependencies": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/has-npm-version": "5.3.0", - "@lerna/npm-install": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/rimraf-dir": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/symlink-binary": "5.3.0", - "@lerna/symlink-dependencies": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@npmcli/arborist": "5.3.0", - "dedent": "^0.7.0", - "get-port": "^5.1.1", - "multimatch": "^5.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4" + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/ds-lib": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.2.3.tgz", + "integrity": "sha512-e+qn7miSyHDgMHP2zpHwDufalPKzRiaof9hd5WIskVs0BQpTR1bO2w7YkjMy5cMbYrQ+QYM64eiEv1SaDLCuIQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@lerna/changed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.3.0.tgz", - "integrity": "sha512-i6ZfBDBZCpnPaSWTuNGTrnExkHNMC+/cSUuS9njaqe+tXgqE95Ja3cMxWZth9Q1uasjcEBHPU2jG0VKrU37rpA==", - "dev": true, + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/motion": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@atlaskit/motion/-/motion-1.4.3.tgz", + "integrity": "sha512-Q4zFD+MSUOSqJYkKVP1PGMTp4QgWb8NZRRJcldggCML1AB6aXj7hD22W9Dx9QALi5zci8grgnZlb31VPGJ5zrA==", "dependencies": { - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/listable": "5.3.0", - "@lerna/output": "5.3.0" + "@atlaskit/ds-lib": "^2.2.0", + "@babel/runtime": "^7.0.0", + "@emotion/react": "^11.7.1", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@lerna/check-working-tree": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.3.0.tgz", - "integrity": "sha512-qo6jUGWXKLVL1nU8aEECqwrGRjs9o1l1hXdD2juA4Fvzsam1cFVHJwsmw3hAXGhEPD0oalg/XR62H9rZSCLOvQ==", - "dev": true, + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/portal": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@atlaskit/portal/-/portal-4.3.4.tgz", + "integrity": "sha512-FfOLJbl3zJ8J/CqhqBW2sWMXj5zg0t6sm3wdXXejt98IhaN0Enaobg3BKV72LTOi5ZGJfPNVLbRZuaxBEYQTDw==", "dependencies": { - "@lerna/collect-uncommitted": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "@lerna/validation-error": "5.3.0" + "@atlaskit/theme": "^12.5.0", + "@babel/runtime": "^7.0.0" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" } }, - "node_modules/@lerna/child-process": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.3.0.tgz", - "integrity": "sha512-4uXPNIptrgQQQVHVVAXBD8F7IqSvZL3Og0G0DHiWKH+dsSyMIUtaIGJt7sifVoL7nzex4AqEiPq/AubpmG5g4Q==", - "dev": true, + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/tooltip/node_modules/@atlaskit/tokens": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-1.9.1.tgz", + "integrity": "sha512-o8ibz6HLIiI2wjA2T2YV8sV9GX1jAfF62+v2oMHOBZLpN6RARuTloHJ+C0yzbPeVXo8T/T79htz2fe1xLpj7AA==", "dependencies": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" + "@atlaskit/ds-lib": "^2.2.0", + "@atlaskit/platform-feature-flags": "^0.2.0", + "@babel/runtime": "^7.0.0", + "@babel/traverse": "^7.20.0", + "@babel/types": "^7.20.0", + "bind-event-listener": "^2.1.1" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@lerna/clean": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.3.0.tgz", - "integrity": "sha512-Jn+Dr7A69dch8m1dLe7l/SDVQVQT2j7zdy2gaZVEmJIgEEaXmEbfJ2t2n06vRXtckI9B85M5mubT1U3Y7KuNuA==", - "dev": true, + "node_modules/@atlaskit/user-picker/node_modules/@atlaskit/ufo": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@atlaskit/ufo/-/ufo-0.1.4.tgz", + "integrity": "sha512-dxzTWiHXcU3l8+PuH+tg6qPJx45mOWpLAUIOGd4dGpVZQaoLkj3sCDAy0aOou3cxJ1oM94SodjsAixhtNXfnYA==", "dependencies": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/rimraf-dir": "5.3.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1" + "@babel/runtime": "^7.0.0", + "uuid": "^3.1.0" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "peerDependencies": { + "react": "^16.8.0" } }, - "node_modules/@lerna/cli": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.3.0.tgz", - "integrity": "sha512-P7F3Xs98pXMEGZX+mnFfsd6gU03x8UrwQ3mElvQBICl4Ew9z6rS8NGUd3JOPFzm4/vSTjYTnPyPdWBjj6/f6sw==", - "dev": true, - "dependencies": { - "@lerna/global-options": "5.3.0", - "dedent": "^0.7.0", - "npmlog": "^6.0.2", - "yargs": "^16.2.0" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "node_modules/@atlaskit/user-picker/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" } }, - "node_modules/@lerna/collect-uncommitted": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.3.0.tgz", - "integrity": "sha512-Ll/mU9Nes0NQoa0pSv2TR2PTCkIomBGuDWH48OF2sKKu69NuLjrD2L0udS5nJYig9HxFewtm4QTiUdYPxfJXkQ==", - "dev": true, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", "dependencies": { - "@lerna/child-process": "5.3.0", - "chalk": "^4.1.0", - "npmlog": "^6.0.2" + "@babel/highlight": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/collect-updates": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.3.0.tgz", - "integrity": "sha512-fzJo/rmdXKWKYt+9IXjtenIZtSr3blMH8GEqoVKpSZ7TJGpxcFNmMe6foa60BgaTnDmmg1y7Qu6JbQJ3Ra5c5w==", - "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "slash": "^3.0.0" - }, + "node_modules/@babel/compat-data": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/command": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.3.0.tgz", - "integrity": "sha512-UNQQ4EGTumqLhOuDPcRA4LpdS9pcTYKSdh/8MdKPeyIRN70vCTwdeTrxqaaKsn3Jo7ycvyUQT5yfrUFmCClfoA==", - "dev": true, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/project": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@lerna/write-log-file": "5.3.0", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^5.0.0", - "is-ci": "^2.0.0", - "npmlog": "^6.0.2" + "node_modules/@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "node_modules/@lerna/conventional-commits": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.3.0.tgz", - "integrity": "sha512-9uoQ2E1J7pL0fml5PNO7FydnBNeqrNOQa53Ca1Klf5t/x4vIn51ocOZNm/YbRAc/affnrxxp+gR2/SWlN0yKqQ==", - "dev": true, - "dependencies": { - "@lerna/validation-error": "5.3.0", - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.4", - "conventional-recommended-bump": "^6.1.0", - "fs-extra": "^9.1.0", - "get-stream": "^6.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "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==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@lerna/create": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.3.0.tgz", - "integrity": "sha512-DotTReCc3+Q9rpMA8RKAGemUK7JXT7skbxHvpqpPj7ryNkIv/dNAFC2EHglcpt9Rmyo6YbSP2zk0gfDbdiIcVA==", + "node_modules/@babel/eslint-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.5.tgz", + "integrity": "sha512-C69RWYNYtrgIRE5CmTd77ZiLDXqgBipahJc/jHP3sLcAGj6AJzxNIuKNpVnICqbyK7X3pFUfEvL++rvtbQpZkQ==", "dev": true, "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "init-package-json": "^3.0.2", - "npm-package-arg": "8.1.1", - "p-reduce": "^2.1.0", - "pacote": "^13.6.1", - "pify": "^5.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0", - "whatwg-url": "^8.4.0", - "yargs-parser": "20.2.4" + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" } }, - "node_modules/@lerna/create-symlink": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.3.0.tgz", - "integrity": "sha512-xIoC9m4J/u4NV/8ms4P2fiimaYgialqJvNamvMDRmgE1c3BLDSGk2nE4nVI2W5LxjgJdMTiIH9v1QpTUC9Fv+Q==", + "node_modules/@babel/eslint-parser/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": { - "cmd-shim": "^5.0.0", - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2" - }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=10" } }, - "node_modules/@lerna/describe-ref": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.3.0.tgz", - "integrity": "sha512-R+CtJcOuAF3kJ6GNQnGC3STEi+5OtpNVz2n17sAs/xqJnq79tPdzEhT+pMxB2eSEkQYlSr+cCKMpF0m/mtIPQA==", + "node_modules/@babel/eslint-parser/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": { - "@lerna/child-process": "5.3.0", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@lerna/diff": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.3.0.tgz", - "integrity": "sha512-i6f99dtO90u1QIJEfVtKE831m4gnMHBwY+4D84GY2SJMno8uI7ZyxMRZQh1nAFtvlNozO2MgzLr1OHtNMZOIgQ==", - "dev": true, + "node_modules/@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/validation-error": "5.3.0", - "npmlog": "^6.0.2" + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/exec": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.3.0.tgz", - "integrity": "sha512-kI/IuF1hbT+pEMZc3v4+w8BLckUIi45ipzOP0bWvXNgSKKuADAU3HLv+ifRXEjob5906C+Zc7K2IVoVS6r1TDg==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", "dev": true, "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/profiler": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/validation-error": "5.3.0", - "p-map": "^4.0.0" + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/filter-options": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.3.0.tgz", - "integrity": "sha512-ddgy0oDisTKIhCJ4WY5CeEhTsyrbW+zeBvZ7rVaG0oQXjSSYBried4TXRvgy67fampfHoPX+eQq5l1SYTRFPlw==", + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", "dev": true, "dependencies": { - "@lerna/collect-updates": "5.3.0", - "@lerna/filter-packages": "5.3.0", - "dedent": "^0.7.0", - "npmlog": "^6.0.2" + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/filter-packages": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.3.0.tgz", - "integrity": "sha512-5/2V50sQB2+JNwuCHP/UPm3y8PN2JWVY9CbNLtF3K5bymNsCkQh2KHEL9wlWZ4yfr/2ufpy4XFPaFUHNoUOGnQ==", - "dev": true, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", "dependencies": { - "@lerna/validation-error": "5.3.0", - "multimatch": "^5.0.0", - "npmlog": "^6.0.2" + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@lerna/get-npm-exec-opts": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.3.0.tgz", - "integrity": "sha512-cYBypDo8C7f4MvVvap2nYgtk8MXAADrYU1VdECSJ3Stbe4p2vBGt8bM9xkS2uPfQFMK3YSy3YPkSZcSjVXyoGw==", - "dev": true, - "dependencies": { - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.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==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@lerna/get-packed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.3.0.tgz", - "integrity": "sha512-kD12w7Ko5TThuOuPF2HBLyuPsHK3oyyWyzleGBqR4DqxMtbMRgimyTQnr5o58XBOwUPCFsv1EZiqeGk+3HTGEA==", - "dev": true, - "dependencies": { - "fs-extra": "^9.1.0", - "ssri": "^9.0.1", - "tar": "^6.1.0" + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@lerna/github-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.3.0.tgz", - "integrity": "sha512-UqAclsWDMthmbv3Z8QE1K7D/4e93ytg31mc+nEj+UdU+xJQ0L1ypl8zWAmGNs1sFkQntIiTIB4W5zgHet5mmZw==", + "node_modules/@babel/helper-create-class-features-plugin/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": { - "@lerna/child-process": "5.3.0", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^19.0.3", - "git-url-parse": "^12.0.0", - "npmlog": "^6.0.2" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@lerna/gitlab-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.3.0.tgz", - "integrity": "sha512-otwbiaGDgvn5MGF1ypsCO48inMpdcxuiDlbxrKD6glPUwNHiGV+PU8LLCCDKimwjjQhl88ySLpL1oTm4jnZ1Aw==", + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", "dev": true, "dependencies": { - "node-fetch": "^2.6.1", - "npmlog": "^6.0.2", - "whatwg-url": "^8.4.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@lerna/global-options": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.3.0.tgz", - "integrity": "sha512-iEoFrDSU+KtfcB+lHW5grjg3VkEqzZNTUnWnE1FCBBwj9tSLOHjgKGtWWjIQtBUJ+qcLBbusap9Stqzr7UPYpQ==", + "node_modules/@babel/helper-create-regexp-features-plugin/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, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@lerna/has-npm-version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.3.0.tgz", - "integrity": "sha512-A/bK8e+QP/VMqZkq1wZbyOzMz/AY92tAVsBOQ5Yw2zqshdMVj99st3YHLOqJf/HTEzQo27GGI/ajmcltHS2l6A==", + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz", + "integrity": "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==", "dev": true, "dependencies": { - "@lerna/child-process": "5.3.0", - "semver": "^7.3.4" - }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" } }, - "node_modules/@lerna/import": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.3.0.tgz", - "integrity": "sha512-KjVT9oFNSp1JLdrS1LSXjDcLiu2TMSfy6tpmhF9Zxo7oKB21SgWmXVV9rcWDueW2RIxNXDeVUG0NVNj2BRGeEQ==", + "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, - "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "p-map-series": "^2.1.0" - }, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/info": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.3.0.tgz", - "integrity": "sha512-pyeZSM/PIpBHCXdHPrbh6sPZlngXUxhTVFb0VaIjQ5Ms585xi15s1UQDO3FvzqdyMyalx0QGzCJbNx5XeoCejg==", - "dev": true, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", "dependencies": { - "@lerna/command": "5.3.0", - "@lerna/output": "5.3.0", - "envinfo": "^7.7.4" + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/init": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.3.0.tgz", - "integrity": "sha512-y46lzEtgMdEseTJGQQqYZOjqqd7iN+e14vFh/9q5h62V4Y8nlUJRzovVo8JSeaGwKLB0B3dq3BuUn0PNywMhpA==", - "dev": true, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/project": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/link": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.3.0.tgz", - "integrity": "sha512-+QBwnGg3S8Zk8M8G5CA4kmGq92rkEMbmWJXaxie3jQayp+GXgSlLs6R4jwSOZlztY6xR3WawMI9sHJ0Vdu+g7w==", + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", "dev": true, "dependencies": { - "@lerna/command": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/symlink-dependencies": "5.3.0", - "p-map": "^4.0.0", - "slash": "^3.0.0" + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/list": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.3.0.tgz", - "integrity": "sha512-5RJvle3m4l2H0UmKNlwS8h2OIlNGsNTKPC4DYrJYt0+fhgzf5SEV1QKw+fuUqe3F8MziIkSGQB52HsjwPE6AWQ==", - "dev": true, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dependencies": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/listable": "5.3.0", - "@lerna/output": "5.3.0" + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/listable": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.3.0.tgz", - "integrity": "sha512-RdmeV9mDeuBOgVOlF/KNH/qttyiYwHbeqHiMAw9s9AfMo/Fz3iDZaTGZuruMm84TZSkKxI7m5mjTlC0djsyKog==", - "dev": true, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", "dependencies": { - "@lerna/query-graph": "5.3.0", - "chalk": "^4.1.0", - "columnify": "^1.6.0" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/log-packed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.3.0.tgz", - "integrity": "sha512-tDuOot3vSOUSP7fNNej8UM0fah5oy8mKXe026grt4J0OP4L3rhSWxhfrDBQ3Ylh2dAjgHzscUf/vpnNC9HnhOQ==", + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", "dev": true, "dependencies": { - "byte-size": "^7.0.0", - "columnify": "^1.6.0", - "has-unicode": "^2.0.1", - "npmlog": "^6.0.2" + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/npm-conf": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.3.0.tgz", - "integrity": "sha512-ejlypb90tvIsKUCb0fcOKt7wcPEjLdVK2zfbNs0M+UlRDLyRVOHUVdelJ15cRDNjQHzhBo2HBUKn5Fmm/2pcmg==", - "dev": true, - "dependencies": { - "config-chain": "^1.1.12", - "pify": "^5.0.0" - }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/npm-dist-tag": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.3.0.tgz", - "integrity": "sha512-OPahPk9QLXQXFgtrWm22NNxajVYKavCyTh8ijMwXTGXXbMJAw+PVjokfrUuEtg7FQi+kfJSrYAcJAxxfQq2eiA==", + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", + "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", "dev": true, "dependencies": { - "@lerna/otplease": "5.3.0", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@lerna/npm-install": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.3.0.tgz", - "integrity": "sha512-scbWo8nW+P9KfitWG3y7Ep97dOs64ECfz9xfqtjagEXKYBPxG3skvwwljkfNnuxrCNs71JVD+imvcewHzih28g==", + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", "dev": true, "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/get-npm-exec-opts": "5.3.0", - "fs-extra": "^9.1.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "signal-exit": "^3.0.3", - "write-pkg": "^4.0.0" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/npm-publish": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.3.0.tgz", - "integrity": "sha512-n+ocN1Dxrs6AmrSNqZl57cwhP4/VjQXdEI+QYauNnErNjMQW8Wt+tNaTlVAhZ1DnorwAo86o2uzFF/BgdUqh9A==", - "dev": true, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dependencies": { - "@lerna/otplease": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "fs-extra": "^9.1.0", - "libnpmpublish": "^6.0.4", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "read-package-json": "^5.0.1" + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/npm-run-script": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.3.0.tgz", - "integrity": "sha512-2cLR1YdzeMjaMKgDuwHE+iZgVPt+Ttzb3/wFtp7Mw9TlKmNIdbHdrnfl12ABz5knPC+62CCNjB/gznfLndPp2w==", + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", "dev": true, "dependencies": { - "@lerna/child-process": "5.3.0", - "@lerna/get-npm-exec-opts": "5.3.0", - "npmlog": "^6.0.2" + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/otplease": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.3.0.tgz", - "integrity": "sha512-Xpju2VC5TiycmBP/mdp9hRstkH2MLm8/7o2NotVTCJwASWdKphRMqezhh5BX0E9i6VyrjzmTqSYEh9FNZZ9MwQ==", - "dev": true, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", "dependencies": { - "@lerna/prompt": "5.3.0" + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/output": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.3.0.tgz", - "integrity": "sha512-fISmHDu/9PKInFmT5NXsbh8cR6aE6SUXWrteXJ6PBYK30s0f/pVcfswb9VccX0Yea8HmqMQgCHWUWifkZeXiRA==", - "dev": true, - "dependencies": { - "npmlog": "^6.0.2" - }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/pack-directory": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.3.0.tgz", - "integrity": "sha512-dTGMUB6/GjExhmLZ8yeFaRKJuSm6M/IsfxSJdL4gFPLigUIAS4XhzXS3KnL0+Ef1ue1yaTlAE9c/czfkE0pc/w==", - "dev": true, - "dependencies": { - "@lerna/get-packed": "5.3.0", - "@lerna/package": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/temp-write": "5.3.0", - "npm-packlist": "^5.1.1", - "npmlog": "^6.0.2", - "tar": "^6.1.0" - }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/package": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.3.0.tgz", - "integrity": "sha512-hsB03miiaNdvZ/UGzl0sVqxVat5x33EG9JiYgIoFqzroQPrG+WShmX3ctuO06TY1pxb4iNuHLPIbQomHEzzj8w==", - "dev": true, - "dependencies": { - "load-json-file": "^6.2.0", - "npm-package-arg": "8.1.1", - "write-pkg": "^4.0.0" - }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/package-graph": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.3.0.tgz", - "integrity": "sha512-UEHY7l/yknwFvQgo0RifyY+B5QdzuFutLZYSN1BMmyWttOZD9rkM263qnLNGTZ2BUE4dXDwwwOHuhLvi+xDRsA==", + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", + "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", "dev": true, "dependencies": { - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/validation-error": "5.3.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "semver": "^7.3.4" + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/prerelease-id-from-version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.3.0.tgz", - "integrity": "sha512-o1wsLns6hFTsmk4iqTRJNWLnFzlBBwgu17hp8T2iU4U7LUlDT2ZSKV3smGAU6GfrwX3MAp4LZ5syxgjFjrUOnw==", - "dev": true, + "node_modules/@babel/helpers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", "dependencies": { - "semver": "^7.3.4" + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/profiler": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.3.0.tgz", - "integrity": "sha512-LEZYca29EPgZR0q5E+7CJkn25Cw3OxNMQJU/CVn/HGeoWYWOpoDxujrZBl8is2bw06LHXvRbVXEUATLc+ACbqQ==", - "dev": true, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", "dependencies": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "upath": "^2.0.1" + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/project": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.3.0.tgz", - "integrity": "sha512-InhIo9uwT1yod72ai5SKseJSUk8KkqG6COmwp1/45vibbawb7ZLbokpns7n46A0NdGNlmwJolamybYOuyumejw==", - "dev": true, - "dependencies": { - "@lerna/package": "5.3.0", - "@lerna/validation-error": "5.3.0", - "cosmiconfig": "^7.0.0", - "dedent": "^0.7.0", - "dot-prop": "^6.0.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.2", - "load-json-file": "^6.2.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "resolve-from": "^5.0.0", - "write-json-file": "^4.3.0" + "node_modules/@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.0.0" } }, - "node_modules/@lerna/prompt": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.3.0.tgz", - "integrity": "sha512-4bIusBdjpw665CJtFsVsaB55hLHnmKnrcOaRjna6N/MdJDl8Th6X4EM4rrfXTX/uUNR3XcV91lYqcLuLmrpm5w==", + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", "dev": true, "dependencies": { - "inquirer": "^8.2.4", - "npmlog": "^6.0.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" - } - }, - "node_modules/@lerna/publish": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.3.0.tgz", - "integrity": "sha512-T8T1BQdI+NnlVARKwIXzILknEuiQlZToBsDpuX06M7+45t/pp9Z+u6pVt3rrqwiUPZ/dpoZzYKI31YdNJtGMcQ==", - "dev": true, - "dependencies": { - "@lerna/check-working-tree": "5.3.0", - "@lerna/child-process": "5.3.0", - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "@lerna/log-packed": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/npm-dist-tag": "5.3.0", - "@lerna/npm-publish": "5.3.0", - "@lerna/otplease": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/pack-directory": "5.3.0", - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@lerna/version": "5.3.0", - "fs-extra": "^9.1.0", - "libnpmaccess": "^6.0.3", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" + "node": ">=6.9.0" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@lerna/pulse-till-done": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.3.0.tgz", - "integrity": "sha512-yNvSuPLT1ZTtD2LMVOmiDhw4+9qkyf6xCpfxiUp4cGEN+qIuazWB5JicKLE49o27DBdaG8Ao4lAlb16x/gNrwQ==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", "dev": true, "dependencies": { - "npmlog": "^6.0.2" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "node_modules/@lerna/query-graph": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.3.0.tgz", - "integrity": "sha512-t99lNj97/Vilp5Js1Be7MoyaZ5U0fbOFh0E7lnTfSLvZhTkPMK6xLvAx2M3NQqhwYCQjTFDuf9ozQ3HQtYZAmA==", + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, "dependencies": { - "@lerna/package-graph": "5.3.0" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@lerna/resolve-symlink": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.3.0.tgz", - "integrity": "sha512-zKI7rV5FzzlMBfi6kjDS0ulzcdDTORvdOJ/+CHU5C2h+v+P64Nk2VhZZNCCBDoO/l4GRhgehZOB70GIamO1TSw==", + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.5.tgz", + "integrity": "sha512-h8hlezQ4dl6ixodgXkH8lUfcD7x+WAuIqPUjwGoItynrXOAv4a4Tci1zA/qjzQjjcl0v3QpLdc2LM6ZACQuY7A==", "dev": true, "dependencies": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "read-cmd-shim": "^3.0.0" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/plugin-syntax-decorators": "^7.22.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@lerna/rimraf-dir": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.3.0.tgz", - "integrity": "sha512-/QJebh0tSY3LjgEyOo+6NH/b7ZNw9IpjqiDtvnLixjtdfkgli1OKOoZTa4KrO0mJoqMRq4yAa98cjpIzyKqCqw==", - "dev": true, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "dependencies": { - "@lerna/child-process": "5.3.0", - "npmlog": "^6.0.2", - "path-exists": "^4.0.0", - "rimraf": "^3.0.2" + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { - "node": "^14.15.0 || >=16.0.0" - } - }, - "node_modules/@lerna/run": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.3.0.tgz", - "integrity": "sha512-KwoKTj1w71OmUHONNYhZME+tr5lk9Q4f+3LUr2WtWZRuOAGO5ZCRrcZc+N4Ib7zno89Ub6Ovz51fcjwltLh72w==", - "dev": true, - "dependencies": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/npm-run-script": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/profiler": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/timer": "5.3.0", - "@lerna/validation-error": "5.3.0", - "p-map": "^4.0.0" + "node": ">=6.9.0" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@lerna/run-lifecycle": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.3.0.tgz", - "integrity": "sha512-EuBCGwm2PLgkebfyqo3yNkwfSb1EzHeo3lA8t4yld6LXWkgUPBFhc7RwRc6TsQOpjpfFvDSGoI282R01o0jPVQ==", + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, "dependencies": { - "@lerna/npm-conf": "5.3.0", - "@npmcli/run-script": "^4.1.7", - "npmlog": "^6.0.2", - "p-queue": "^6.6.2" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@lerna/run-topologically": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.3.0.tgz", - "integrity": "sha512-WiFF2EiwLjAguKs0lEmcukTL7WhuWFwxNprrGWFxEkBhlGdMFk18n8BaZN8FO26xqzztzuPzSx1re/f/dEEAPg==", + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, "dependencies": { - "@lerna/query-graph": "5.3.0", - "p-queue": "^6.6.2" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@lerna/symlink-binary": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.3.0.tgz", - "integrity": "sha512-dIATASuGS6y512AGjacOoTpkFDPsKlhggjzL3KLdSNmxV3288nUqaFBuA7rTnnMNnBQ7jVuE1JKJupZnzPN0cA==", + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dev": true, "dependencies": { - "@lerna/create-symlink": "5.3.0", - "@lerna/package": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@lerna/symlink-dependencies": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.3.0.tgz", - "integrity": "sha512-qkq4YT/Bdrb3W22ve+d2Gy3hRTrtT/zBhjKTCukEpYsFJLwSjZ4z5vbv6J15/j6PN1Km9oTRp6vBYmdjAuARQQ==", + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, "dependencies": { - "@lerna/create-symlink": "5.3.0", - "@lerna/resolve-symlink": "5.3.0", - "@lerna/symlink-binary": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@lerna/temp-write": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.3.0.tgz", - "integrity": "sha512-AhC5Q+tV0yebEc1P2jsB4apQzztW8dgdLLc1G1Pkt46l5vezRGhZmsj+iUyCsVjpdUSO/UcAq1DbI2Xzhf5arg==", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "is-stream": "^2.0.0", - "make-dir": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^8.3.2" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@lerna/timer": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.3.0.tgz", - "integrity": "sha512-IeDjj1gJtbUPKl2ebpiml9u4k2kRqYF1Dbs6JuWpeC7lGxAx3JcUmkNH2RQ1BYTxk5xc9FKlgNMrZQwhq2K1Ow==", + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@lerna/validation-error": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.3.0.tgz", - "integrity": "sha512-GVvnTxx+CNFjXCiJahAu2c/pP2R3DhGuQp4CJUyKegnzGaWK0h5PhlwRL7/LbDMPLh2zLobPOVr9kTOjwv76Nw==", + "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==", "dev": true, "dependencies": { - "npmlog": "^6.0.2" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": "^14.15.0 || >=16.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@lerna/version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.3.0.tgz", - "integrity": "sha512-QOQSAdpeP66oQQ20nNZ4NhJS5NtZZDGyz36kP/4BeqjGK6QgtrEmto4+vmWj49w3VJUIXnrqAKHiPkhFUmJm5Q==", - "dev": true, - "dependencies": { - "@lerna/check-working-tree": "5.3.0", - "@lerna/child-process": "5.3.0", - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/conventional-commits": "5.3.0", - "@lerna/github-client": "5.3.0", - "@lerna/gitlab-client": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/temp-write": "5.3.0", - "@lerna/validation-error": "5.3.0", - "chalk": "^4.1.0", - "dedent": "^0.7.0", - "load-json-file": "^6.2.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "p-reduce": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4", - "slash": "^3.0.0", - "write-json-file": "^4.3.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": "^14.15.0 || >=16.0.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@lerna/write-log-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.3.0.tgz", - "integrity": "sha512-cmrNAI5+9auUJSuTVrUzt2nb/KX6htgjdw7gGPMI1Tm6cdBIbs67R6LedZ8yvYOLGsXB2Se93vxv5fTgEHWfCw==", + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "dependencies": { - "npmlog": "^6.0.2", - "write-file-atomic": "^4.0.1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@loaders.gl/core": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.2.8.tgz", - "integrity": "sha512-C8BNToWgk1tqTzPHuOgP9OYH8P6Inb5fmwz1Fa03vddxIXd4ORoYMleQZSu9x72Dos2dZ476Vs7NYbJbs8KrZw==", + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.5.tgz", + "integrity": "sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.3.1", - "@loaders.gl/loader-utils": "3.2.8", - "@loaders.gl/worker-utils": "3.2.8", - "@probe.gl/log": "^3.5.0", - "probe.gl": "^3.4.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@loaders.gl/images": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-3.2.8.tgz", - "integrity": "sha512-QD5mGiUmEbZFEuuQpCPB/vGgvlxgRc/OcOlVUz2vxpbvLPjvuTdLQKCLHrCb4DePBIbepwvrcvJRYz91azN6mA==", + "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==", "dependencies": { - "@loaders.gl/loader-utils": "3.2.8" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@loaders.gl/loader-utils": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-3.2.8.tgz", - "integrity": "sha512-Yp1ixw23tnFNexhP6xPorUj2QeISlzJiyC5oDz+IyFmcpDmQ3qtlD6ChGztkWilnWSohnC2SP+XBZGbpOclgoA==", + "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==", "dependencies": { - "@babel/runtime": "^7.3.1", - "@loaders.gl/worker-utils": "3.2.8", - "@probe.gl/stats": "^3.5.0" + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@loaders.gl/schema": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-3.2.8.tgz", - "integrity": "sha512-7Brn+cqGNnaodun0LwnyXtyIX8+73Fr8jQr6TVYZPOHoHXdxVefbJ70bSYlw+tj+dQhWdmqLglUHT0Rxr1gHBQ==", + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", + "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", + "dev": true, "dependencies": { - "@types/geojson": "^7946.0.7", - "apache-arrow": "^4.0.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@loaders.gl/worker-utils": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-3.2.8.tgz", - "integrity": "sha512-CY2TvitiNhs6r+wTQ5McDZmAehklWb5Mb7eCt7aWMthRvhgdWpsMch7QOqOcKFCvuy4JkH37NO86LWFMpXeH8w==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.3.1" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@luma.gl/constants": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-8.5.16.tgz", - "integrity": "sha512-b9JrfhlU4tgQWa7vAzQzzw3yS0NdJBrTEZ6LA9XRKSwVV5VunHXApnrnN4v1oA0AGgnknnUf40PRBZolsVK+7Q==" - }, - "node_modules/@luma.gl/core": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-8.5.16.tgz", - "integrity": "sha512-w3goHMFEhQFlpoXXygFD6zaZvu4rYvMLfDXThpBMUYm8Y4k46UREFYhsV1aOe1aJlaolsRT/9J2fgSDXr0yA3w==", + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.16", - "@luma.gl/engine": "8.5.16", - "@luma.gl/gltools": "8.5.16", - "@luma.gl/shadertools": "8.5.16", - "@luma.gl/webgl": "8.5.16" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@luma.gl/engine": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-8.5.16.tgz", - "integrity": "sha512-F9wMLg+ystsXa3oOzLezaD1K7ot+kL69IKIJqVjxNecPLf8E/BxJlKL+AZW7SCluka6pFMlGomog0GnjjCxH8Q==", + "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==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.16", - "@luma.gl/gltools": "8.5.16", - "@luma.gl/shadertools": "8.5.16", - "@luma.gl/webgl": "8.5.16", - "@math.gl/core": "^3.5.0", - "@probe.gl/env": "^3.5.0", - "@probe.gl/stats": "^3.5.0", - "@types/offscreencanvas": "^2019.7.0" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@luma.gl/gltools": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/@luma.gl/gltools/-/gltools-8.5.16.tgz", - "integrity": "sha512-CNCLbKtMRep7tTuB5x3RA7tD70U8XXA8xhABDZs7oAQ0Q/K2EjnwskSUlWzgD3ZPluh6JZzvQBEi4DSmeW3NZA==", + "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==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.16", - "@probe.gl/env": "^3.5.0", - "@probe.gl/log": "^3.5.0", - "@types/offscreencanvas": "^2019.7.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@luma.gl/shadertools": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-8.5.16.tgz", - "integrity": "sha512-L3M3v6bQhIT8McCeqLvHnLJBmBXYDog1QblF4PVszuIB/WH+cHxZ0I26X2a1eEsVCvdeCrxRBxr42743oyfUNA==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "@math.gl/core": "^3.5.0" + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@luma.gl/webgl": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-8.5.16.tgz", - "integrity": "sha512-vyzr4Mu3+6rKnyu4c5gmTcuDG6xKF49qy316v8oMp45VT0xCQBP17Poq0b0j0VqbGOOtXGI/pxOtr68Ii9fDuA==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.16", - "@luma.gl/gltools": "8.5.16", - "@probe.gl/env": "^3.5.0", - "@probe.gl/stats": "^3.5.0" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@mapbox/tiny-sdf": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", - "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==" - }, - "node_modules/@math.gl/core": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.3.tgz", - "integrity": "sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==", + "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==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.12.0", - "@math.gl/types": "3.6.3", - "gl-matrix": "^3.4.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@math.gl/polygon": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-3.6.3.tgz", - "integrity": "sha512-FivQ1ZnYcAss1wVifOkHP/ZnlfQy1IL/769uzNtiHxwUbW0kZG3yyOZ9I7fwyzR5Hvqt3ErJKHjSYZr0uVlz5g==", + "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==", + "dev": true, "dependencies": { - "@math.gl/core": "3.6.3" + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@math.gl/sun": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@math.gl/sun/-/sun-3.6.3.tgz", - "integrity": "sha512-mrx6CGYYeTNSQttvcw0KVUy+35YDmnjMqpO/o0t06Vcghrt0HNruB/ScRgUSbJrgkbOg1Vcqm23HBd++clzQzw==", + "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==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.12.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@math.gl/types": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-3.6.3.tgz", - "integrity": "sha512-3uWLVXHY3jQxsXCr/UCNPSc2BG0hNUljhmOBt9l+lNFDp7zHgm0cK2Tw4kj2XfkJy4TgwZTBGwRDQgWEbLbdTA==" - }, - "node_modules/@math.gl/web-mercator": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-3.6.3.tgz", - "integrity": "sha512-UVrkSOs02YLehKaehrxhAejYMurehIHPfFQvPFZmdJHglHOU4V2cCUApTVEwOksvCp161ypEqVp+9H6mGhTTcw==", + "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==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.12.0", - "gl-matrix": "^3.4.0" + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@matrix-org/olm": { - "version": "3.2.12", - "resolved": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.12.tgz", - "integrity": "sha1-C848hvnTakmE08PgffHD+0xnm9k=" + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">= 8" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/arborist": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz", - "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "bin": { - "arborist": "bin/index.js" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", "dev": true, "dependencies": { - "lru-cache": "^7.5.1" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz", + "integrity": "sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg==", "dev": true, "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz", - "integrity": "sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", "dev": true, "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/git": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", - "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", "dev": true, "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", + "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", "dev": true, "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">= 10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/map-workspaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", - "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", "dev": true, "dependencies": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz", + "integrity": "sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "globals": "^11.1.0" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/metavuln-calculator": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", - "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", "dev": true, "dependencies": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", + "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", "dev": true, "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/name-from-folder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", - "dev": true - }, - "node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", - "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", "dev": true, "dependencies": { - "json-parse-even-better-errors": "^2.3.1" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", "dev": true, "dependencies": { - "infer-owner": "^1.0.4" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@npmcli/run-script": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.0.tgz", - "integrity": "sha512-e/QgLg7j2wSJp1/7JRl0GC8c7PMX+uYlA/1Tb+IDOLdSM4T7K1VQ9mm9IGU3WRtY5vEIObpqCLb3aCNCug18DA==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", "dev": true, "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@nrwl/cli": { - "version": "14.5.4", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.4.tgz", - "integrity": "sha512-UYr14hxeYV8p/zt6D6z33hljZJQROJAVxSC+mm72fyVvy88Gt0sQNLfMmOARXur0p/73PSLM0jJ2Sr7Ftsuu+A==", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", "dev": true, "dependencies": { - "nx": "14.5.4" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@nrwl/tao": { - "version": "14.5.4", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.4.tgz", - "integrity": "sha512-a2GCuSE8WghjehuU3GVO63KZEnZXXQiqEg137yN/Na+PxwSu68XeaX53SLyzRskTV120YwBBy1YCTNzAZxxsjg==", + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", + "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", "dev": true, "dependencies": { - "nx": "14.5.4" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.22.5" }, - "bin": { - "tao": "index.js" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@octokit/auth-token": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", - "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", "dev": true, "dependencies": { - "@octokit/types": "^6.0.3" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">= 14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@octokit/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", - "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", "dev": true, "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">= 14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@octokit/endpoint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", - "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", "dev": true, "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { - "node": ">= 14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@octokit/graphql": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", - "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", "dev": true, "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">= 14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", - "dev": true - }, - "node_modules/@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz", - "integrity": "sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==", + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", "dev": true, "dependencies": { - "@octokit/types": "^6.41.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { - "node": ">= 14" + "node": ">=6.9.0" }, "peerDependencies": { - "@octokit/core": ">=4" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { - "@octokit/core": ">=3" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.2.0.tgz", - "integrity": "sha512-PZ+yfkbZAuRUtqu6Y191/V3eM0KBPx+Yq7nh+ONPdpm3EX4pd5UnK2y2XgO/0AtNum5a4aJCDjqsDuUZ2hWRXw==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", "dev": true, "dependencies": { - "@octokit/types": "^6.41.0", - "deprecation": "^2.3.1" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">= 14" + "node": ">=6.9.0" }, "peerDependencies": { - "@octokit/core": ">=3" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@octokit/request": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.0.tgz", - "integrity": "sha512-7IAmHnaezZrgUqtRShMlByJK33MT9ZDnMRgZjnRrRV9a/jzzFwKGz0vxhFU6i7VMLraYcQ1qmcAOin37Kryq+Q==", - "dev": true, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" }, "engines": { - "node": ">= 14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@octokit/request-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", - "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", "dev": true, "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" }, "engines": { - "node": ">= 14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@octokit/rest": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", - "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", "dev": true, "dependencies": { - "@octokit/core": "^4.0.0", - "@octokit/plugin-paginate-rest": "^3.0.0", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0" + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">= 14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^12.11.0" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", "dev": true, - "hasInstallScript": true, "dependencies": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">= 10.0.0" + "node": ">=6.9.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@playwright/test": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.1.tgz", - "integrity": "sha512-IJ4X0yOakXtwkhbnNzKkaIgXe6df7u3H3FnuhI9Jqh+CdO0e/lYQlDLYiyI9cnXK8E7UAppAWP+VqAv6VX7HQg==", + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", "dev": true, "dependencies": { - "@types/node": "*", - "playwright-core": "1.25.1" - }, - "bin": { - "playwright": "cli.js" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { - "node": ">=14" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@playwright/test/node_modules/playwright-core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.1.tgz", - "integrity": "sha512-lSvPCmA2n7LawD2Hw7gSCLScZ+vYRkhU8xH0AapMyzwN+ojoDqhkH/KIEUxwNu2PjPoE/fcE0wLAksdOhJ2O5g==", + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", "dev": true, - "bin": { - "playwright": "cli.js" + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { - "node": ">=14" - } - }, - "node_modules/@polka/url": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz", - "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==", - "dev": true - }, - "node_modules/@popperjs/core": { - "version": "2.11.6", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", - "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@probe.gl/env": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.5.2.tgz", - "integrity": "sha512-JlNvJ2p6+ObWX7es6n3TycGPTv5CfVrCS8vblI1eHhrFCcZ6RxIo727ffRVwldpp0YTzdgjx3/4fB/1dnVYElw==", + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.0.0" + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@probe.gl/log": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.5.2.tgz", - "integrity": "sha512-5yo8Dg8LrSltuPBdGlLh/WOvt4LdU7DDHu75GMeiS0fKM+J4IACRpGV8SOrktCj1MWZ6JVHcNQkJnoyZ6G7p/w==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.0.0", - "@probe.gl/env": "3.5.2" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@probe.gl/stats": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.5.2.tgz", - "integrity": "sha512-YKaYXiHF//fgy1OkX38JD70Lc8qxg2Viw8Q2CTNMwGPDJe12wda7kEmMKPJNw2oYLyFUfTzv00KJMA5h18z02w==", + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.0.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@react-dnd/asap": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-4.0.1.tgz", - "integrity": "sha512-kLy0PJDDwvwwTXxqTFNAAllPHD73AycE9ypWeln/IguoGBEbvFcPDbCV03G52bEcC5E+YgupBE0VzHGdC8SIXg==" - }, - "node_modules/@react-dnd/invariant": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-2.0.0.tgz", - "integrity": "sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw==" - }, - "node_modules/@react-dnd/shallowequal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz", - "integrity": "sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==" - }, - "node_modules/@react-loosely-lazy/manifest": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-loosely-lazy/manifest/-/manifest-1.0.0.tgz", - "integrity": "sha512-FM5xuGt/moK+jWD11fGfdeqTBv1VH6dkQHbZS3VXPLaRAmIl096t1RD9KLTGAhvwOMzQlD+/pQ12B+pPAbXgdQ==" - }, - "node_modules/@rollup/plugin-inject": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz", - "integrity": "sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz", + "integrity": "sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "estree-walker": "^2.0.1", - "magic-string": "^0.25.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@rollup/plugin-inject/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/@rollup/plugin-inject/node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", "dev": true, "dependencies": { - "sourcemap-codec": "^1.4.8" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "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/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", "dev": true, "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">= 8.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@rollup/pluginutils/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/@rollup/pluginutils/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/@rushstack/eslint-patch": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz", - "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==", - "dev": true - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz", + "integrity": "sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", + "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", + "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", + "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", + "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", + "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", "dev": true, "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", + "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", "dev": true, "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.1" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/core/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", "dev": true, "dependencies": { - "@babel/types": "^7.12.6" + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "node_modules/@babel/plugin-transform-runtime/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-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", "dev": true, "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">=10" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@syncedstore/yjs-reactive-bindings": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@syncedstore/yjs-reactive-bindings/-/yjs-reactive-bindings-0.4.0.tgz", - "integrity": "sha512-J1dk8F3ek1MSW0+/dDHr/EuUuavMiCtRnmFaLyxMBO5rhk3QDLphitquTmUkW27WMucZxmiJBH2DgTlPPauShg==", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, "dependencies": { - "@types/eslint": "6.8.0" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "yjs": "^13.5.13" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@tippyjs/react": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz", - "integrity": "sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, "dependencies": { - "tippy.js": "^6.3.1" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@tiptap/core": { - "version": "2.0.0-beta.182", - "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.182.tgz", - "integrity": "sha512-MZGkMGnVnWhBzjvpBNwQ9zBz38ndi3Irbf90uCTSArR0kaCVkW4vmyuPuOXd+0SO8Yv/l5oyDdOCpaG3rnQYfw==", + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz", + "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==", + "dev": true, "dependencies": { - "prosemirror-commands": "1.3.0", - "prosemirror-keymap": "1.2.0", - "prosemirror-model": "1.18.1", - "prosemirror-schema-list": "1.2.0", - "prosemirror-state": "1.4.1", - "prosemirror-transform": "1.6.0", - "prosemirror-view": "1.26.2" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@tiptap/extension-bold": { - "version": "2.0.0-beta.28", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.28.tgz", - "integrity": "sha512-DY8GOzw9xjmTFrnvTbgHUNxTnDfKrkDgrhe0SUvdkT2udntWp8umPdhPiD3vczLgHOJw6tX68qMRjbsR1ZPcHQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", + "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@tiptap/extension-bubble-menu": { - "version": "2.0.0-beta.61", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.0.0-beta.61.tgz", - "integrity": "sha512-T3Yx+y1sUnXAJjK1CUfsQewSxOpDca9KzKqN2H9c9RZ9UlorR9XmZg6YYW7m9a7adeihj+o3cCO9jRd8dV+nnA==", + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, "dependencies": { - "prosemirror-state": "1.4.1", - "prosemirror-view": "1.26.2", - "tippy.js": "^6.3.7" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@tiptap/extension-code": { - "version": "2.0.0-beta.28", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.0.0-beta.28.tgz", - "integrity": "sha512-QPJ2Gwb1+3NgcC1ZIhvVcb+FsnWWDu5VZXTKXM4mz892i9V2x48uHg5anPiUV6pcolXsW1F5VNbXIHGTUUO6CQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@tiptap/extension-collaboration": { - "version": "2.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration/-/extension-collaboration-2.0.0-beta.38.tgz", - "integrity": "sha512-oDrQC5z+pLXEQUofkwuJPtysHlP81eTmnKLjjTAAO8zWey3w+nusb6YuQM1W0JbqVD7lcK6YlS+Za+pSA46IdA==", + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, "dependencies": { - "prosemirror-state": "1.4.1", - "y-prosemirror": "1.0.20" + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "@babel/core": "^7.0.0" } }, - "node_modules/@tiptap/extension-collaboration-cursor": { - "version": "2.0.0-beta.37", - "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration-cursor/-/extension-collaboration-cursor-2.0.0-beta.37.tgz", - "integrity": "sha512-3M1aFPTwCGKJ7YNxYZGidJbdZcqAYjOoDCuKfIKVCQgAuKLc5TQf2bA+7ftwG0wI72xdTRoadKA/YCwc67KBvg==", - "dependencies": { - "y-prosemirror": "1.0.20" + "node_modules/@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@tiptap/extension-dropcursor": { - "version": "2.0.0-beta.29", - "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.29.tgz", - "integrity": "sha512-I+joyoFB8pfdXUPLMqdNO08nlB5m2lbu0VQ5dpqdi/HzgVThMZPZA1cW0X8vAUvrALs5/JFRiFoR9hrLN5R5ng==", + "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==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, "dependencies": { - "prosemirror-dropcursor": "1.5.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" }, "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@tiptap/extension-floating-menu": { - "version": "2.0.0-beta.56", - "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.0.0-beta.56.tgz", - "integrity": "sha512-j/evHE/6UPGkIgXny9IGcAh0IrcnQmg0b2NBYebs2mqx9xYKYoe+0jVgNdLp/0M3MRgQCzyWTyatBDBFOUR2mw==", + "node_modules/@babel/preset-react": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", + "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", + "dev": true, "dependencies": { - "prosemirror-state": "1.4.1", - "prosemirror-view": "1.26.2", - "tippy.js": "^6.3.7" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@tiptap/extension-gapcursor": { - "version": "2.0.0-beta.39", - "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.39.tgz", - "integrity": "sha512-oCyz5WEeQXrEIoa1WXaD52yf1EwMFCXaK1cVzFgUj8lkXJ+nJj+O/Zp0Mg+9/MVR0LYu/kifqVorKNXM4AFA/g==", + "node_modules/@babel/preset-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", + "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", + "dev": true, "dependencies": { - "prosemirror-gapcursor": "1.3.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-typescript": "^7.22.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@tiptap/extension-hard-break": { - "version": "2.0.0-beta.33", - "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.33.tgz", - "integrity": "sha512-41xf0vSV9hcyTFd01ItLq/CjhjgmOFLCrO3UWN/P2E/cIxuDTyXcvjTE/KXeqRCOV3OYd9fVr0wO91hc8Ij1Yg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dependencies": { + "regenerator-runtime": "^0.13.11" }, - "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@tiptap/extension-history": { - "version": "2.0.0-beta.26", - "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.0.0-beta.26.tgz", - "integrity": "sha512-ly19uwvdmXG8Fw1KcavXIHi3Qx6JBASOR7394zghOEpW3atpY8nd/8I373rZ8eDUcGOClfaF7bCx2xvIotAAnw==", + "node_modules/@babel/runtime-corejs2": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.22.5.tgz", + "integrity": "sha512-GdiGeK5z8VKeJhqSQBgZr3xCMjAdborh5Ppn/0jQ0gtzw11UiZZAwDFZi0ZKvZ76ULooLqJn/OlrfcGZv7Pmzg==", "dependencies": { - "prosemirror-history": "1.3.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "core-js": "^2.6.12", + "regenerator-runtime": "^0.13.11" }, - "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@tiptap/extension-horizontal-rule": { - "version": "2.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.36.tgz", - "integrity": "sha512-o+Zp7dcn3zAQhtlhZiFB69mTHuH3ZRbGEF7Cbf1D3uX1izotni5zIZbPaFFUT4r6OmVe/vDDt/nopfcGc10ktQ==", + "node_modules/@babel/runtime-corejs2/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", "dependencies": { - "prosemirror-state": "1.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" }, - "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@tiptap/extension-italic": { - "version": "2.0.0-beta.28", - "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.28.tgz", - "integrity": "sha512-/pKRiCfewh7nqiXRD3N4hQHfGrGNOiWPFYZfY35bSpvTms7PDb/MF7xT1CWW23hSpY31BBS+R/a66vlR/gqu7Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "node_modules/@babel/traverse": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" }, - "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@tiptap/extension-link": { - "version": "2.0.0-beta.43", - "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.0.0-beta.43.tgz", - "integrity": "sha512-AYueqfTW713KGVfWSWhVbj4ObeWudgawikm3m0uYcKSdsAz/CfEvOD2/NA0uyQzlxmYLA6Pf8HMxoKGN+O4Cmg==", + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", "dependencies": { - "linkifyjs": "^3.0.5", - "prosemirror-model": "1.18.1", - "prosemirror-state": "1.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" }, - "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@tiptap/extension-paragraph": { - "version": "2.0.0-beta.26", - "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.26.tgz", - "integrity": "sha512-WcYsuUa7LLfk0vi7I1dVjdMRu53B52FMMqd+UL1qPdDKVkU3DBsZVwPj+yyfQyqN8Mc/xyg9VacGaiKFLmWNDg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@blocknote/core": { + "version": "0.8.1", + "resolved": "file:../BlockNote/packages/core", + "license": "MPL-2.0", + "dependencies": { + "@emotion/cache": "^11.10.5", + "@emotion/serialize": "^1.1.1", + "@emotion/utils": "^1.2.0", + "@tiptap/core": "^2.0.3", + "@tiptap/extension-bold": "^2.0.3", + "@tiptap/extension-code": "^2.0.3", + "@tiptap/extension-collaboration": "^2.0.3", + "@tiptap/extension-collaboration-cursor": "^2.0.3", + "@tiptap/extension-dropcursor": "^2.0.3", + "@tiptap/extension-gapcursor": "^2.0.3", + "@tiptap/extension-hard-break": "^2.0.3", + "@tiptap/extension-history": "^2.0.3", + "@tiptap/extension-horizontal-rule": "^2.0.3", + "@tiptap/extension-italic": "^2.0.3", + "@tiptap/extension-link": "^2.0.3", + "@tiptap/extension-paragraph": "^2.0.3", + "@tiptap/extension-strike": "^2.0.3", + "@tiptap/extension-text": "^2.0.3", + "@tiptap/extension-underline": "^2.0.3", + "@tiptap/pm": "^2.0.3", + "hast-util-from-dom": "^4.2.0", + "lodash": "^4.17.21", + "monaco-editor": "^0.38.0", + "rehype-parse": "^8.0.4", + "rehype-remark": "^9.1.2", + "rehype-stringify": "^9.0.3", + "remark-gfm": "^3.0.1", + "remark-parse": "^10.0.1", + "remark-rehype": "^10.1.0", + "remark-stringify": "^10.0.2", + "unified": "^10.1.2", + "uuid": "^8.3.2", + "y-monaco": "^0.1.4", + "y-prosemirror": "1.0.20", + "y-protocols": "^1.0.5", + "y-webrtc": "^10.2.5", + "yjs": "^13.6.1" } }, - "node_modules/@tiptap/extension-strike": { - "version": "2.0.0-beta.29", - "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.29.tgz", - "integrity": "sha512-zqFuY7GfNmZ/KClt6kxQ+msGo3syqucP/Xnlihxi+/h/G+oTvEwyOIXCtDOltvxcsWH/TUsdr5vzLp0j+Mdc6Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "node_modules/@blocknote/core/node_modules/monaco-editor": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.38.0.tgz", + "integrity": "sha512-11Fkh6yzEmwx7O0YoLxeae0qEGFwmyPRlVxpg7oF9czOOCB/iCjdJrG5I67da5WiXK3YJCxoz9TJFE8Tfq/v9A==" + }, + "node_modules/@blocknote/react": { + "version": "0.8.1", + "resolved": "file:../BlockNote/packages/react", + "license": "MPL-2.0", + "dependencies": { + "@blocknote/core": "^0.8.1", + "@emotion/react": "^11.10.5", + "@mantine/core": "^5.6.1", + "@mantine/hooks": "^5.6.1", + "@mantine/utils": "^6.0.5", + "@tippyjs/react": "^4.2.6", + "@tiptap/react": "^2.0.3", + "react-icons": "^4.3.1" }, "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "react": "^18", + "react-dom": "^18" } }, - "node_modules/@tiptap/extension-text": { - "version": "2.0.0-beta.17", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.0.0-beta.17.tgz", - "integrity": "sha512-OyKL+pqWJEtjyd9/mrsuY1kZh2b3LWpOQDWKtd4aWR4EA0efmQG+7FPwcIeAVEh7ZoqM+/ABCnPjN6IjzIrSfg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" }, - "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "engines": { + "node": ">=12" } }, - "node_modules/@tiptap/extension-underline": { - "version": "2.0.0-beta.25", - "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.0.0-beta.25.tgz", - "integrity": "sha512-kRDdb/mF6QWzFGV3cQuLh6xyXULXaKPL/TghefoOZhwkdIWV/M3zFar5tsZO54+tbIrzxoVP6t7mO2Y5G/SLDQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@deck.gl/aggregation-layers": { + "version": "8.9.19", + "resolved": "https://registry.npmjs.org/@deck.gl/aggregation-layers/-/aggregation-layers-8.9.19.tgz", + "integrity": "sha512-CYZy6dkOSXN+BWuR68YihomrLvEXdcAvUVM3gL5P4Dxi9ajdMKFBNo/34imHG/Bx5ukU2pxghDGrOmBXQ8XybQ==", + "dependencies": { + "@luma.gl/constants": "^8.5.20", + "@luma.gl/shadertools": "^8.5.20", + "@math.gl/web-mercator": "^3.6.2", + "d3-hexbin": "^0.2.1" }, "peerDependencies": { - "@tiptap/core": "^2.0.0-beta.1" + "@deck.gl/core": "^8.0.0", + "@deck.gl/layers": "^8.0.0", + "@luma.gl/core": "^8.0.0" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" + "node_modules/@deck.gl/core": { + "version": "8.9.19", + "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-8.9.19.tgz", + "integrity": "sha512-RyI06YfdPu+F/6VPsYSEPkqdJiaixV+wRyww6ISd8dxrm8ERG+LyTUe6FuJbju9/j0OjfWHs50suK2NaNeP/iw==", + "dependencies": { + "@loaders.gl/core": "^3.4.2", + "@loaders.gl/images": "^3.4.2", + "@luma.gl/constants": "^8.5.20", + "@luma.gl/core": "^8.5.20", + "@luma.gl/webgl": "^8.5.20", + "@math.gl/core": "^3.6.2", + "@math.gl/sun": "^3.6.2", + "@math.gl/web-mercator": "^3.6.2", + "@probe.gl/env": "^3.5.0", + "@probe.gl/log": "^3.5.0", + "@probe.gl/stats": "^3.5.0", + "gl-matrix": "^3.0.0", + "math.gl": "^3.6.2", + "mjolnir.js": "^2.7.0" } }, - "node_modules/@typecell-org/common": { - "resolved": "packages/common", - "link": true - }, - "node_modules/@typecell-org/editor": { - "resolved": "packages/editor", - "link": true - }, - "node_modules/@typecell-org/engine": { - "resolved": "packages/engine", - "link": true - }, - "node_modules/@typecell-org/packager": { - "resolved": "packages/packager", - "link": true + "node_modules/@deck.gl/layers": { + "version": "8.9.19", + "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-8.9.19.tgz", + "integrity": "sha512-yvyCVQdzCPet8e0nSvmLbwgJEIcRK2nWRwF/NwB/y63P3qBEvj0F6Syrh2PC2+YkoYKLmY+C3kzdgh2gc8ktDw==", + "dependencies": { + "@loaders.gl/images": "^3.4.2", + "@loaders.gl/schema": "^3.4.2", + "@luma.gl/constants": "^8.5.20", + "@mapbox/tiny-sdf": "^2.0.5", + "@math.gl/core": "^3.6.2", + "@math.gl/polygon": "^3.6.2", + "@math.gl/web-mercator": "^3.6.2", + "earcut": "^2.2.4" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0", + "@loaders.gl/core": "^3.4.2", + "@luma.gl/core": "^8.0.0" + } }, - "node_modules/@typecell-org/parsers": { - "resolved": "packages/parsers", - "link": true + "node_modules/@deck.gl/react": { + "version": "8.9.19", + "resolved": "https://registry.npmjs.org/@deck.gl/react/-/react-8.9.19.tgz", + "integrity": "sha512-ddoCiVRrbC+c7tosKX3tsmRXJUL32NUmIwgOl0NPsVfJqtfsDRLrBZNDQOATboCa3vdT6gvySsoF+9zQpIxi2Q==", + "peerDependencies": { + "@deck.gl/core": "^8.0.0", + "@types/react": ">= 16.3", + "react": ">=16.3", + "react-dom": ">=16.3" + } }, - "node_modules/@types/chai": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", - "dev": true + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } }, - "node_modules/@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", - "dev": true, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", "dependencies": { - "@types/chai": "*" + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" } }, - "node_modules/@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "node_modules/@emotion/core": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.3.1.tgz", + "integrity": "sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==", "dependencies": { - "@types/ms": "*" + "@babel/runtime": "^7.5.5", + "@emotion/cache": "^10.0.27", + "@emotion/css": "^10.0.27", + "@emotion/serialize": "^0.11.15", + "@emotion/sheet": "0.9.4", + "@emotion/utils": "0.11.3" + }, + "peerDependencies": { + "react": ">=16.3.0" } }, - "node_modules/@types/eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-hqzmggoxkOubpgTdcOltkfc5N8IftRJqU70d1jbOISjjZVPvjcr+CLi2CI70hx1SUIRkLgpglTy9w28nGe2Hsw==", + "node_modules/@emotion/core/node_modules/@emotion/cache": { + "version": "10.0.29", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", + "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@emotion/sheet": "0.9.4", + "@emotion/stylis": "0.8.5", + "@emotion/utils": "0.11.3", + "@emotion/weak-memoize": "0.2.5" } }, - "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" + "node_modules/@emotion/core/node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" }, - "node_modules/@types/flatbuffers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@types/flatbuffers/-/flatbuffers-1.10.0.tgz", - "integrity": "sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA==" + "node_modules/@emotion/core/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" }, - "node_modules/@types/fs-extra": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", - "dev": true, + "node_modules/@emotion/core/node_modules/@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", "dependencies": { - "@types/node": "*" + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" } }, - "node_modules/@types/geojson": { - "version": "7946.0.10", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", - "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" - }, - "node_modules/@types/hammerjs": { - "version": "2.0.41", - "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", - "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==" + "node_modules/@emotion/core/node_modules/@emotion/sheet": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", + "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==" }, - "node_modules/@types/highlight.js": { - "version": "9.12.4", - "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", - "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==", - "dev": true + "node_modules/@emotion/core/node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "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/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==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", - "dev": true + "node_modules/@emotion/core/node_modules/@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==" }, - "node_modules/@types/lodash": { - "version": "4.14.184", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", - "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==", - "dev": true + "node_modules/@emotion/core/node_modules/@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" }, - "node_modules/@types/lowlight": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@types/lowlight/-/lowlight-0.0.2.tgz", - "integrity": "sha512-37DldsUs2l4rXI2YQgVn+NKVEaaUbBIzJg3eYzAXimGrtre8vxqE65wAGqYs9W6IsoOfgj74se/rBc9yoRXOHQ==", - "dev": true + "node_modules/@emotion/core/node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, - "node_modules/@types/markdown-it": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-10.0.3.tgz", - "integrity": "sha512-daHJk22isOUvNssVGF2zDnnSyxHhFYhtjeX4oQaKD6QzL3ZR1QSgiD1g+Q6/WSWYVogNXYDXODtbgW/WiFCtyw==", - "dev": true, + "node_modules/@emotion/css": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", + "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", "dependencies": { - "@types/highlight.js": "^9.7.0", - "@types/linkify-it": "*", - "@types/mdurl": "*", - "highlight.js": "^9.7.0" + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3", + "babel-plugin-emotion": "^10.0.27" } }, - "node_modules/@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "node_modules/@emotion/css/node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "node_modules/@emotion/css/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + }, + "node_modules/@emotion/css/node_modules/@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", "dependencies": { - "@types/unist": "*" + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" } }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", - "dev": true + "node_modules/@emotion/css/node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true + "node_modules/@emotion/css/node_modules/@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==" }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true + "node_modules/@emotion/css/node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, - "node_modules/@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, - "node_modules/@types/node": { - "version": "16.18.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", - "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "devOptional": true + "node_modules/@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "node_modules/@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } }, - "node_modules/@types/offscreencanvas": { - "version": "2019.7.0", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", - "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==" + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, - "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==" + "node_modules/@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" }, - "node_modules/@types/prettier": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz", - "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==", - "dev": true + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" }, - "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/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, - "node_modules/@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "node_modules/@esbuild-plugins/node-globals-polyfill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", + "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", + "dev": true, + "peerDependencies": { + "esbuild": "*" } }, - "node_modules/@types/react-dom": { - "version": "18.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", - "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "node_modules/@esbuild-plugins/node-modules-polyfill": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz", + "integrity": "sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==", + "dev": true, "dependencies": { - "@types/react": "*" + "escape-string-regexp": "^4.0.0", + "rollup-plugin-node-polyfills": "^0.2.1" + }, + "peerDependencies": { + "esbuild": "*" } }, - "node_modules/@types/react-redux": { - "version": "7.1.24", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.24.tgz", - "integrity": "sha512-7FkurKcS1k0FHZEtdbbgN8Oc6b+stGSfZYjQGicofJ0j4U0qIn/jaSvnP2pLwZKiai3/17xqqxkkrxTgN8UNbQ==", - "dependencies": { - "@types/hoist-non-react-statics": "^3.3.0", - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0", - "redux": "^4.0.0" + "node_modules/@esbuild/android-arm": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.8.tgz", + "integrity": "sha512-xDncukyW2b/JU04AZJ6cSAp4FaoAMyxFFTgmmNEKbjn2MwThw/ekHwt3d84Nm0fJG2KqKBS3D6uGDo2jzDN/uQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/@types/react-select": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@types/react-select/-/react-select-4.0.18.tgz", - "integrity": "sha512-uCPRMPshd96BwHuT7oCrFduiv5d6km3VwmtW7rVl9g4XetS3VoJ9nZo540LiwtQgaFcW96POwaxQDZDAyYaepg==", - "dependencies": { - "@emotion/serialize": "^1.0.0", - "@types/react": "*", - "@types/react-dom": "*", - "@types/react-transition-group": "*" + "node_modules/@esbuild/android-arm64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.8.tgz", + "integrity": "sha512-8N8gkGu8vBq/cRPs8DDQmdwmS097A+XRHC/ay6wJjSEdLV3onTnfIkzew+g86k5bcakbxsE7zynCIhG0IgCT5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/@types/react-select/node_modules/@emotion/serialize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz", - "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==", - "dependencies": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" + "node_modules/@esbuild/android-x64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.8.tgz", + "integrity": "sha512-vLTz/naWZMVY01T0B6gneUmm9RTYBlhRzjSCDuQCZURC1Lp3Fw2gP32ZFTtIaMBK+hfSJilnmgTPuUkCTH6CwA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/@types/react-select/node_modules/@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "node_modules/@types/react-select/node_modules/@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "node_modules/@types/react-select/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - }, - "node_modules/@types/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/semver": { - "version": "7.3.12", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.12.tgz", - "integrity": "sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==", - "dev": true - }, - "node_modules/@types/speakingurl": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@types/speakingurl/-/speakingurl-13.0.3.tgz", - "integrity": "sha512-nBHZAaNTEw1YG3ROL7HtTp7HjW8HD7DuFYbWoonUKTZHj7eyOt4vPzyMcc3+xgWNv7xi2rziaiBXHIq6wBeyrw==", - "dev": true - }, - "node_modules/@types/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-AQ6zewa0ucLJvtUi5HsErbOFKAcQfRLt9zFLlUOvcXBy2G36a+ZDpCHSGdzJVUD8aNURtIjh9aSjCStNMRCcRQ==" - }, - "node_modules/@types/ua-parser-js": { - "version": "0.7.36", - "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.36.tgz", - "integrity": "sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ==", - "dev": true - }, - "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "node_modules/@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "dev": true - }, - "node_modules/@types/zxcvbn": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.1.tgz", - "integrity": "sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.1.tgz", - "integrity": "sha512-iC40UK8q1tMepSDwiLbTbMXKDxzNy+4TfPWgIL661Ym0sD42vRcQU93IsZIrmi+x292DBr60UI/gSwfdVYexCA==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.8.tgz", + "integrity": "sha512-14oQ5IgillH6K7j750ug0IUfy86ql1CrHx4uxRMlq0lH5NthxEH+QIgqIzUUyDJdw0lOodtr4L905Q9VYIG2+g==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.36.1", - "@typescript-eslint/type-utils": "5.36.1", - "@typescript-eslint/utils": "5.36.1", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=12" } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.36.1.tgz", - "integrity": "sha512-zLbD16KK1P0tjYXHRKWUcEjJIGDMhbrvjTJyWTfKRLB9NXW45S1zWw4+GZfxEdGzIPyaw22DUgUtyGgr3d7jAg==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.8.tgz", + "integrity": "sha512-OyEf+21R32glxR+IJpPhBgcbxSbc7adPe4hYggu2mbjqAAjJJAaYoYjNeojyp+ZKY2ZRX3FimBbeExVoPdEDfg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.36.1" - }, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node": ">=12" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.1.tgz", - "integrity": "sha512-/IsgNGOkBi7CuDfUbwt1eOqUXF9WGVBW9dwEe1pi+L32XrTsZIgmDFIi2RxjzsvB/8i+MIf5JIoTEH8LOZ368A==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.8.tgz", + "integrity": "sha512-ur5cFSmlE5YPqD+5X9E32wJ2nBnz/Lk30QuAiotam0kx2e2f9+dgTarqaDhUKt+xJo+6OLhCpHAlogQ1TAvJrw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.36.1", - "@typescript-eslint/types": "5.36.1", - "@typescript-eslint/typescript-estree": "5.36.1", - "debug": "^4.3.4" - }, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=12" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.1.tgz", - "integrity": "sha512-pGC2SH3/tXdu9IH3ItoqciD3f3RRGCh7hb9zPdN2Drsr341zgd6VbhP5OHQO/reUqihNltfPpMpTNihFMarP2w==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.8.tgz", + "integrity": "sha512-j0dgVXUyInggnvEgFGS7FXTQncRwAmHkgAy8YE52kOsozkimpapE3Kuuwb6MXbhnqLvJevaFgGSAlseDlkXAlg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.36.1", - "@typescript-eslint/visitor-keys": "5.36.1" - }, + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=12" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.36.1.tgz", - "integrity": "sha512-xfZhfmoQT6m3lmlqDvDzv9TiCYdw22cdj06xY0obSznBsT///GK5IEZQdGliXpAOaRL34o8phEvXzEo/VJx13Q==", + "node_modules/@esbuild/linux-arm": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.8.tgz", + "integrity": "sha512-moCWasFnLWfVmZjux2wE1YRoJlQ36hlthVD/B+UTic3UgCZ5LvpHTeqnF037JL9zS1W6d+cB0hUwithdIyZ/1w==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.36.1", - "@typescript-eslint/utils": "5.36.1", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=12" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.1.tgz", - "integrity": "sha512-jd93ShpsIk1KgBTx9E+hCSEuLCUFwi9V/urhjOWnOaksGZFbTOxAT47OH2d4NLJnLhkVD+wDbB48BuaycZPLBg==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.8.tgz", + "integrity": "sha512-Xp8brdqVVSTiN3/GGEAkMN1V2VCUrt11lxqHopYsbAvIf2YAfaW02/NFlekMq7SaAVcReYqbO7LReaOLzHaxgw==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=12" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.1.tgz", - "integrity": "sha512-ih7V52zvHdiX6WcPjsOdmADhYMDN15SylWRZrT2OMy80wzKbc79n8wFW0xpWpU0x3VpBz/oDgTm2xwDAnFTl+g==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.8.tgz", + "integrity": "sha512-mUDNdkY8mr4kZrekGLwZBFpvVX1VJLpwYUsbKTM/w0h4xVgsupc440nlsUfyz8OKeE92ZdMUUG8wrdOeZaONiQ==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.36.1", - "@typescript-eslint/visitor-keys": "5.36.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, + "optional": true, + "os": [ + "linux" + ], + "peer": true, "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": ">=12" } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.36.1.tgz", - "integrity": "sha512-lNj4FtTiXm5c+u0pUehozaUWhh7UYKnwryku0nxJlYUEWetyG92uw2pr+2Iy4M/u0ONMKzfrx7AsGBTCzORmIg==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.8.tgz", + "integrity": "sha512-wuzn8pABeFielmccZjn44eyVFo9G5rThVT91QdxZ02H7Yxek623ODpZoauAWwdBDFfK1R25RtKkxCvzfeJ1akg==", + "cpu": [ + "loong64" + ], "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.36.1", - "@typescript-eslint/types": "5.36.1", - "@typescript-eslint/typescript-estree": "5.36.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node": ">=12" } }, - "node_modules/@typescript-eslint/utils/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==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.8.tgz", + "integrity": "sha512-9vIq+bR1PYqTV0Ea38a9h/r2xAecC56eQemOBXyzM3jQ9Bo8f3Q9On7mpiDrXich1eQuo9nna0ZBcaIJxaO58g==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=8.0.0" + "node": ">=12" } }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.8.tgz", + "integrity": "sha512-9AFk6CgYytoQ0/RMnmr1zlpTA88g9ksxk0gmo9apY+O8Yzmcjd+Dl9LUX9k89dLnyyLgkHl6uLg1tpEzpQS+yA==", + "cpu": [ + "ppc64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=4.0" + "node": ">=12" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.1.tgz", - "integrity": "sha512-ojB9aRyRFzVMN3b5joSYni6FAS10BBSCAfKJhjJAV08t/a95aM6tAhz+O1jF+EtgxktuSO3wJysp2R+Def/IWQ==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.8.tgz", + "integrity": "sha512-AyuhgbWMSbYrgr3Qz8OT6C92PSbSh7X9ckSgz4xnZYUWrBkR6YaRTp5L7zgcouA/cSm1AiOQauHgQb+EOCNBVQ==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.36.1", - "eslint-visitor-keys": "^3.3.0" - }, + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=12" } }, - "node_modules/@typescript/vfs": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.3.5.tgz", - "integrity": "sha512-pI8Saqjupf9MfLw7w2+og+fmb0fZS0J6vsKXXrp4/PDXEFvntgzXmChCXC/KefZZS0YGS6AT8e0hGAJcTsdJlg==", - "dependencies": { - "debug": "^4.1.1" + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.8.tgz", + "integrity": "sha512-XU3UTgyFx80B+kCD82kun9usGT1+3YILtGeGx+StNWGT8wjHYCc5ZTsh4g+58kDoGPezquGO+Kso5VSlX2GU2g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "node_modules/@vitejs/plugin-react": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.0.1.tgz", - "integrity": "sha512-uINzNHmjrbunlFtyVkST6lY1ewSfz/XwLufG0PIqvLGnpk2nOIOa/1CACTDNcKi1/RwaCzJLmsXwm1NsUVV/NA==", + "node_modules/@esbuild/linux-x64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.8.tgz", + "integrity": "sha512-/zBMV9cAFYFVTiyf7zg4ubMSfH0BGn5IPD+XZT0m2cYhtlMQLRQlNDpkaz5UlAIZBnBTCpjsbnI8X73xP2Zgtw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/core": "^7.18.10", - "@babel/plugin-transform-react-jsx": "^7.18.10", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-jsx-self": "^7.18.6", - "@babel/plugin-transform-react-jsx-source": "^7.18.6", - "magic-string": "^0.26.2", - "react-refresh": "^0.14.0" - }, + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^3.0.0" + "node": ">=12" } }, - "node_modules/@vitest/coverage-c8": { - "version": "0.24.4", - "resolved": "https://registry.npmjs.org/@vitest/coverage-c8/-/coverage-c8-0.24.4.tgz", - "integrity": "sha512-1mhYQip6IJw1p9hzM+sH8O/RbILMe7FwScWI7COoMGAThdDRytDjmOal38F/EVrIPZY3nZ5hf7S7JFGjbb4bTg==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.8.tgz", + "integrity": "sha512-/Aqh6SoP6UpLrgdfgFzi1Von4D5OhnJEYZNdkZA0AREuwSBcZh6X5eUsSCiEszJaeOt/oOZOvSwNR7i2VjmDnA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "c8": "^7.12.0", - "vitest": "0.24.4" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "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==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.8.tgz", + "integrity": "sha512-twRW7IQ4ar1BilPDFf/IpsQY77dU50IUKZxs7veZVo4rnQbOXw6FPl2rWVJcVx+I6dkGzmt/yM6YW6FBdqA3DA==", + "cpu": [ + "x64" + ], "dev": true, - "bin": { - "acorn": "bin/acorn" - }, + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, "engines": { - "node": ">=0.4.0" + "node": ">=12" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.8.tgz", + "integrity": "sha512-DSgYAFzvRisJQPxtTsUTFJ/Kr1KYZxxrKGfHPMnW2f/0KxOdLwRKbzWeG8g15gSBcDuDCZXnuUSFyu3ZyqbCzA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.8.tgz", + "integrity": "sha512-eWoYo48Hp1yWbe2SSnmMNqnVprNgKtp0mP+aUeX/Lkw3gcsgRju5Qj7psfpA8cR0ULeWkrhmaSS4mgj4wfo97A==", + "cpu": [ + "arm64" + ], "dev": true, - "bin": { - "acorn": "bin/acorn" - }, + "optional": true, + "os": [ + "win32" + ], + "peer": true, "engines": { - "node": ">=0.4.0" + "node": ">=12" } }, - "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==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.8.tgz", + "integrity": "sha512-A5mph1zmf7eEbAKZYqRHUBkO5PRdSO0bjH4XMAnYCXfndk72uHzvMmTNS5ZZ1dVUb55P45MFBBlZyW7SsnXxXw==", + "cpu": [ + "ia32" + ], "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" } }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "node_modules/@esbuild/win32-x64": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.8.tgz", + "integrity": "sha512-/NKlWmdR5oxLswW/pdMKF8qwwtC7zpeTWvWffXpqNZ4Nib6lmnU2L5ijfSvWy8vxWhwmfR/CXA7GzuRL5nRxow==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, "engines": { - "node": ">=0.4.0" + "node": ">=12" } }, - "node_modules/add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "dependencies": { - "debug": "4" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">= 6.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, "engines": { - "node": ">= 8.0.0" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", "dev": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "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==", - "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" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/another-json": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/another-json/-/another-json-0.2.0.tgz", - "integrity": "sha512-/Ndrl68UQLhnCdsAzEXLMFuOR546o2qbYRqCglaNHbjXrwG1ayTcdwr3zkSGOGtGXDyR5X9nCFfnyG2AFJIsqg==" - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" + "url": "https://opencollective.com/eslint" } }, - "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==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -6790,5250 +6441,5130 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/@eslint/eslintrc/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, "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/@eslint/js": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.43.0.tgz", + "integrity": "sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg==", "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.3.1.tgz", + "integrity": "sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==" + }, + "node_modules/@floating-ui/dom": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.2.tgz", + "integrity": "sha512-VKmvHVatWnewmGGy+7Mdy4cTJX71Pli6v/Wjb5RQBuq5wjUYx+Ef+kRThi8qggZqDgD8CogCpqhRoVp3+yQk+g==", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@floating-ui/core": "^1.3.1" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.19.2.tgz", + "integrity": "sha512-JyNk4A0Ezirq8FlXECvRtQOX/iBe5Ize0W/pLkrZjfHW9GUV7Xnq6zm6fyZuQzaHHqEnVizmvlA96e1/CkZv+w==", + "dependencies": { + "@floating-ui/react-dom": "^1.3.0", + "aria-hidden": "^1.1.3", + "tabbable": "^6.0.1" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/apache-arrow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-4.0.1.tgz", - "integrity": "sha512-DyF7GXCbSjsw4P5C8b+qW7OnJKa6w9mJI0mhV0+EfZbVZCmhfiF6ffqcnrI/kzBrRqn9hH/Ft9n5+m4DTbBJpg==", - "dependencies": { - "@types/flatbuffers": "^1.10.0", - "@types/node": "^14.14.37", - "@types/text-encoding-utf-8": "^1.0.1", - "command-line-args": "5.1.1", - "command-line-usage": "6.1.1", - "flatbuffers": "1.12.0", - "json-bignum": "^0.0.3", - "pad-left": "^2.1.0", - "text-encoding-utf-8": "^1.0.2", - "tslib": "^2.2.0" + "node_modules/@floating-ui/react-dom": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-1.3.0.tgz", + "integrity": "sha512-htwHm67Ji5E/pROEAr7f8IKFShuiCKHwUC/UY4vC3I5jiSvGFAYnSYiZO5MlGmads+QqvUkR9ANHEguGrDv72g==", + "dependencies": { + "@floating-ui/dom": "^1.2.1" }, - "bin": { - "arrow2csv": "bin/arrow2csv.js" + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/apache-arrow/node_modules/@types/node": { - "version": "14.18.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.26.tgz", - "integrity": "sha512-0b+utRBSYj8L7XAp0d+DX7lI4cSmowNaaTkk6/1SKzbKkG+doLuPusB9EOvzLJ8ahJSk03bTLIL6cWaEd4dBKA==" + "node_modules/@formatjs/ecma402-abstract": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", + "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", + "dependencies": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true + "node_modules/@formatjs/fast-memoize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz", + "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==", + "dependencies": { + "tslib": "^2.1.0" + } }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz", + "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/icu-skeleton-parser": "1.3.6", + "tslib": "^2.1.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==" + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz", + "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "tslib": "^2.1.0" + } }, - "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, + "node_modules/@formatjs/intl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.2.1.tgz", + "integrity": "sha512-vgvyUOOrzqVaOFYzTf2d3+ToSkH2JpR7x/4U1RyoHQLmvEaTQvXJ7A2qm1Iy3brGNXC/+/7bUlc3lpH+h/LOJA==", "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/fast-memoize": "1.2.1", + "@formatjs/icu-messageformat-parser": "2.1.0", + "@formatjs/intl-displaynames": "5.4.3", + "@formatjs/intl-listformat": "6.5.3", + "intl-messageformat": "9.13.0", + "tslib": "^2.1.0" }, - "engines": { - "node": ">=6.0" + "peerDependencies": { + "typescript": "^4.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "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==", - "engines": { - "node": ">=6" + "node_modules/@formatjs/intl-displaynames": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-5.4.3.tgz", + "integrity": "sha512-4r12A3mS5dp5hnSaQCWBuBNfi9Amgx2dzhU4lTFfhSxgb5DOAiAbMpg6+7gpWZgl4ahsj3l2r/iHIjdmdXOE2Q==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" } }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@formatjs/intl-listformat": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.5.3.tgz", + "integrity": "sha512-ozpz515F/+3CU+HnLi5DYPsLa6JoCfBggBSSg/8nOB5LYSFW9+ZgNQJxJ8tdhKYeODT+4qVHX27EeJLoxLGLNg==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" } }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", + "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, - "node_modules/array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dev": true, + "node_modules/@hocuspocus/common": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@hocuspocus/common/-/common-2.2.0.tgz", + "integrity": "sha512-PkpbFfMC2Tryv5XH/waRMq79zYdrSUc86U6mSHY4+cirvl+U15/ZMV/pdI+sx+HYzZXN/351JT9FiGbKOI/JrQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" + "lib0": "^0.2.47" + } + }, + "node_modules/@hocuspocus/extension-database": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@hocuspocus/extension-database/-/extension-database-2.2.0.tgz", + "integrity": "sha512-wJ5SVDkO5eVSIKHKDhrQ9Pdiq8Pzsg26+To4HnCpUA+8owhlHvXFBwVAA09KCr26gFq+FX8lLKdWf0imo7tcAw==", + "dependencies": { + "@hocuspocus/server": "^2.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "yjs": "^13.5.29" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@hocuspocus/extension-logger": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@hocuspocus/extension-logger/-/extension-logger-2.2.0.tgz", + "integrity": "sha512-Dg6kaEGmwylUEhfKWevBhs35ReDAngRUVzoM2aGnuO6DoP6/cuY1KGeIdJ8h3MXgODyRbKJEZclSmueNzC5rsA==", + "dependencies": { + "@hocuspocus/server": "^2.2.0" } }, - "node_modules/array.prototype.every": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.every/-/array.prototype.every-1.1.3.tgz", - "integrity": "sha512-vWnriJI//SOMOWtXbU/VXhJ/InfnNHPF6BLKn5WfY8xXy+NWql0fUy20GO3sdqBhCAO+qw8S/E5nJiZX+QFdCA==", - "dev": true, + "node_modules/@hocuspocus/provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@hocuspocus/provider/-/provider-2.2.0.tgz", + "integrity": "sha512-K7OXfUYdmOzoSVQTB2suVmlsM4CVayMg9Scz7qTcWADxHIC811UQzhAjqDoLBjXRjCiYtZf3kLEJnIvf8dCc8A==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" + "@hocuspocus/common": "^2.2.0", + "@lifeomic/attempt": "^3.0.2", + "lib0": "^0.2.47", + "ws": "^7.5.9" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "y-protocols": "^1.0.5", + "yjs": "^13.5.29" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "dev": true, + "node_modules/@hocuspocus/server": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@hocuspocus/server/-/server-2.2.0.tgz", + "integrity": "sha512-OfGTtqG/lvm73Sl4qujzvhD5GgTYYoLA6JxjDrANurzHQ7QgZ5W7N89ShSgX+HdSpuqk8BrFirYuR75fqik7NQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" + "@hocuspocus/common": "^2.2.0", + "async-lock": "^1.3.1", + "kleur": "^4.1.4", + "lib0": "^0.2.47", + "uuid": "^9.0.0", + "ws": "^8.5.0" }, + "peerDependencies": { + "y-protocols": "^1.0.5", + "yjs": "^13.5.29" + } + }, + "node_modules/@hocuspocus/server/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@hocuspocus/server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "engines": { - "node": ">= 0.4" + "node": ">=10.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", - "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10.10.0" } }, - "node_modules/array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, "engines": { - "node": ">= 0.4" + "node": ">=12.22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "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/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6.9.0" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "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": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, "engines": { - "node": ">=0.8" + "node": ">=12" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { - "node": "*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, "engines": { - "node": "*" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "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/axe-core": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz", - "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "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==", + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", "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/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "dependencies": { - "object.assign": "^4.1.0" + "engines": { + "node": ">=8" } }, - "node_modules/babel-plugin-emotion": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz", - "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/serialize": "^0.11.16", - "babel-plugin-macros": "^2.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^1.0.5", - "find-root": "^1.1.0", - "source-map": "^0.5.7" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/babel-plugin-emotion/node_modules/@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/babel-plugin-emotion/node_modules/@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } }, - "node_modules/babel-plugin-emotion/node_modules/babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dependencies": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, - "node_modules/babel-plugin-emotion/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@lerna/add": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.6.2.tgz", + "integrity": "sha512-NHrm7kYiqP+EviguY7/NltJ3G9vGmJW6v2BASUOhP9FZDhYbq3O+rCDlFdoVRNtcyrSg90rZFMOWHph4KOoCQQ==", + "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "@lerna/bootstrap": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/filter-options": "5.6.2", + "@lerna/npm-conf": "5.6.2", + "@lerna/validation-error": "5.6.2", + "dedent": "^0.7.0", + "npm-package-arg": "8.1.1", + "p-map": "^4.0.0", + "pacote": "^13.6.1", + "semver": "^7.3.4" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/babel-plugin-emotion/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "node_modules/@lerna/bootstrap": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.6.2.tgz", + "integrity": "sha512-S2fMOEXbef7nrybQhzBywIGSLhuiQ5huPp1sU+v9Y6XEBsy/2IA+lb0gsZosvPqlRfMtiaFstL+QunaBhlWECA==", + "dev": true, + "dependencies": { + "@lerna/command": "5.6.2", + "@lerna/filter-options": "5.6.2", + "@lerna/has-npm-version": "5.6.2", + "@lerna/npm-install": "5.6.2", + "@lerna/package-graph": "5.6.2", + "@lerna/pulse-till-done": "5.6.2", + "@lerna/rimraf-dir": "5.6.2", + "@lerna/run-lifecycle": "5.6.2", + "@lerna/run-topologically": "5.6.2", + "@lerna/symlink-binary": "5.6.2", + "@lerna/symlink-dependencies": "5.6.2", + "@lerna/validation-error": "5.6.2", + "@npmcli/arborist": "5.3.0", + "dedent": "^0.7.0", + "get-port": "^5.1.1", + "multimatch": "^5.0.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "node_modules/@lerna/changed": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.6.2.tgz", + "integrity": "sha512-uUgrkdj1eYJHQGsXXlpH5oEAfu3x0qzeTjgvpdNrxHEdQWi7zWiW59hRadmiImc14uJJYIwVK5q/QLugrsdGFQ==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" + "@lerna/collect-updates": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/listable": "5.6.2", + "@lerna/output": "5.6.2" }, "engines": { - "node": ">=10", - "npm": ">=6" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", - "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", + "node_modules/@lerna/check-working-tree": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.6.2.tgz", + "integrity": "sha512-6Vf3IB6p+iNIubwVgr8A/KOmGh5xb4SyRmhFtAVqe33yWl2p3yc+mU5nGoz4ET3JLF1T9MhsePj0hNt6qyOTLQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.2", - "semver": "^6.1.1" + "@lerna/collect-uncommitted": "5.6.2", + "@lerna/describe-ref": "5.6.2", + "@lerna/validation-error": "5.6.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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" + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "node_modules/@lerna/child-process": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.6.2.tgz", + "integrity": "sha512-QIOQ3jIbWdduHd5892fbo3u7/dQgbhzEBB7cvf+Ys/iCPP8UQrBECi1lfRgA4kcTKC2MyMz0SoyXZz/lFcXc3A==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", - "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", + "node_modules/@lerna/child-process/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": { - "@babel/helper-define-polyfill-provider": "^0.3.2" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/babel-plugin-styled-components": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", - "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", + "node_modules/@lerna/child-process/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": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", - "picomatch": "^2.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "styled-components": ">= 2" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" - }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", - "dev": true - }, - "node_modules/babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "node_modules/@lerna/child-process/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": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "node_modules/babylon": { - "version": "7.0.0-beta.47", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.47.tgz", - "integrity": "sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ==", - "bin": { - "babylon": "bin/babylon.js" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node": ">=7.0.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/@lerna/child-process/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/base-x": { + "node_modules/@lerna/child-process/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" - }, - "node_modules/base64-arraybuffer-es6": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.7.0.tgz", - "integrity": "sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "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==", - "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": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "node_modules/@lerna/child-process/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": { - "tweetnacl": "^0.14.3" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true + "node_modules/@lerna/clean": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.6.2.tgz", + "integrity": "sha512-A7j8r0Hk2pGyLUyaCmx4keNHen1L/KdcOjb4nR6X8GtTJR5AeA47a8rRKOCz9wwdyMPlo2Dau7d3RV9viv7a5g==", + "dev": true, + "dependencies": { + "@lerna/command": "5.6.2", + "@lerna/filter-options": "5.6.2", + "@lerna/prompt": "5.6.2", + "@lerna/pulse-till-done": "5.6.2", + "@lerna/rimraf-dir": "5.6.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/@lerna/cli": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.6.2.tgz", + "integrity": "sha512-w0NRIEqDOmYKlA5t0iyqx0hbY7zcozvApmfvwF0lhkuhf3k6LRAFSamtimGQWicC779a7J2NXw4ASuBV47Fs1Q==", + "dev": true, + "dependencies": { + "@lerna/global-options": "5.6.2", + "dedent": "^0.7.0", + "npmlog": "^6.0.2", + "yargs": "^16.2.0" + }, "engines": { - "node": "*" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/bin-links": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", - "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", + "node_modules/@lerna/collect-uncommitted": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.6.2.tgz", + "integrity": "sha512-i0jhxpypyOsW2PpPwIw4xg6EPh7/N3YuiI6P2yL7PynZ8nOv8DkIdoyMkhUP4gALjBfckH8Bj94eIaKMviqW4w==", "dev": true, "dependencies": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" + "@lerna/child-process": "5.6.2", + "chalk": "^4.1.0", + "npmlog": "^6.0.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.15.0 || >=16.0.0" } }, - "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/@lerna/collect-uncommitted/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/bind-event-listener": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bind-event-listener/-/bind-event-listener-2.1.1.tgz", - "integrity": "sha512-O+a5c0D2se/u2VlBJmPRn45IB6R4mYMh1ok3dWxrIZ2pmLqzggBhb875mbq73508ylzofc0+hT9W41x4Y2s8lg==" + "node_modules/@lerna/collect-uncommitted/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/@lerna/collect-uncommitted/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": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "node_modules/@lerna/collect-uncommitted/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/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/@lerna/collect-uncommitted/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, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=8" } }, - "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/@lerna/collect-uncommitted/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": { - "fill-range": "^7.0.1" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browser-request": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", - "integrity": "sha512-YyNI4qJJ+piQG6MMEuo7J3Bzaqssufx04zpEKYfSrl/1Op59HWali9zMtBpXnkmqMcOuWJPZvudrm9wISmnCbg==", - "engines": [ - "node" - ] + "node_modules/@lerna/collect-updates": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.6.2.tgz", + "integrity": "sha512-DdTK13X6PIsh9HINiMniFeiivAizR/1FBB+hDVe6tOhsXFBfjHMw1xZhXlE+mYIoFmDm1UFK7zvQSexoaxRqFA==", + "dev": true, + "dependencies": { + "@lerna/child-process": "5.6.2", + "@lerna/describe-ref": "5.6.2", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "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.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], + "node_modules/@lerna/command": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.6.2.tgz", + "integrity": "sha512-eLVGI9TmxcaGt1M7TXGhhBZoeWOtOedMiH7NuCGHtL6TMJ9k+SCExyx+KpNmE6ImyNOzws6EvYLPLjftiqmoaA==", + "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - }, - "bin": { - "browserslist": "cli.js" + "@lerna/child-process": "5.6.2", + "@lerna/package-graph": "5.6.2", + "@lerna/project": "5.6.2", + "@lerna/validation-error": "5.6.2", + "@lerna/write-log-file": "5.6.2", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^5.0.0", + "is-ci": "^2.0.0", + "npmlog": "^6.0.2" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "node_modules/@lerna/conventional-commits": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.6.2.tgz", + "integrity": "sha512-fPrJpYJhxCgY2uyOCTcAAC6+T6lUAtpEGxLbjWHWTb13oKKEygp9THoFpe6SbAD0fYMb3jeZCZCqNofM62rmuA==", + "dev": true, "dependencies": { - "base-x": "^4.0.0" + "@lerna/validation-error": "5.6.2", + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-core": "^4.2.4", + "conventional-recommended-bump": "^6.1.0", + "fs-extra": "^9.1.0", + "get-stream": "^6.0.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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/@lerna/create": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.6.2.tgz", + "integrity": "sha512-+Y5cMUxMNXjTTU9IHpgRYIwKo39w+blui1P+s+qYlZUSCUAew0xNpOBG8iN0Nc5X9op4U094oIdHxv7Dyz6tWQ==", + "dev": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "@lerna/child-process": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/npm-conf": "5.6.2", + "@lerna/validation-error": "5.6.2", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "init-package-json": "^3.0.2", + "npm-package-arg": "8.1.1", + "p-reduce": "^2.1.0", + "pacote": "^13.6.1", + "pify": "^5.0.0", + "semver": "^7.3.4", + "slash": "^3.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^4.0.0", + "yargs-parser": "20.2.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "node_modules/@lerna/create-symlink": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.6.2.tgz", + "integrity": "sha512-0WIs3P6ohPVh2+t5axrLZDE5Dt7fe3Kv0Auj0sBiBd6MmKZ2oS76apIl0Bspdbv8jX8+TRKGv6ib0280D0dtEw==", "dev": true, "dependencies": { - "semver": "^7.0.0" + "cmd-shim": "^5.0.0", + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/byte-size": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", - "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", + "node_modules/@lerna/create/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/c8": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", - "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", + "node_modules/@lerna/describe-ref": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.6.2.tgz", + "integrity": "sha512-UqU0N77aT1W8duYGir7R+Sk3jsY/c4lhcCEcnayMpFScMbAp0ETGsW04cYsHK29sgg+ZCc5zEwebBqabWhMhnA==", "dev": true, "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" - }, - "bin": { - "c8": "bin/c8.js" + "@lerna/child-process": "5.6.2", + "npmlog": "^6.0.2" }, "engines": { - "node": ">=10.12.0" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/c8/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==", + "node_modules/@lerna/diff": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.6.2.tgz", + "integrity": "sha512-aHKzKvUvUI8vOcshC2Za/bdz+plM3r/ycqUrPqaERzp+kc1pYHyPeXezydVdEmgmmwmyKI5hx4+2QNnzOnun2A==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "@lerna/child-process": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/validation-error": "5.6.2", + "npmlog": "^6.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/c8/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==", + "node_modules/@lerna/exec": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.6.2.tgz", + "integrity": "sha512-meZozok5stK7S0oAVn+kdbTmU+kHj9GTXjW7V8kgwG9ld+JJMTH3nKK1L3mEKyk9TFu9vFWyEOF7HNK6yEOoVg==", "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "@lerna/child-process": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/filter-options": "5.6.2", + "@lerna/profiler": "5.6.2", + "@lerna/run-topologically": "5.6.2", + "@lerna/validation-error": "5.6.2", + "p-map": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/c8/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==", + "node_modules/@lerna/filter-options": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.6.2.tgz", + "integrity": "sha512-4Z0HIhPak2TabTsUqEBQaQeOqgqEt0qyskvsY0oviYvqP/nrJfJBZh4H93jIiNQF59LJCn5Ce3KJJrLExxjlzw==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "@lerna/collect-updates": "5.6.2", + "@lerna/filter-packages": "5.6.2", + "dedent": "^0.7.0", + "npmlog": "^6.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/c8/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==", + "node_modules/@lerna/filter-packages": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.6.2.tgz", + "integrity": "sha512-el9V2lTEG0Bbz+Omo45hATkRVnChCTJhcTpth19cMJ6mQ4M5H4IgbWCJdFMBi/RpTnOhz9BhJxDbj95kuIvvzw==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "@lerna/validation-error": "5.6.2", + "multimatch": "^5.0.0", + "npmlog": "^6.0.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/c8/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==", + "node_modules/@lerna/get-npm-exec-opts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.6.2.tgz", + "integrity": "sha512-0RbSDJ+QC9D5UWZJh3DN7mBIU1NhBmdHOE289oHSkjDY+uEjdzMPkEUy+wZ8fCzMLFnnNQkAEqNaOAzZ7dmFLA==", "dev": true, + "dependencies": { + "npmlog": "^6.0.2" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "node_modules/@lerna/get-packed": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.6.2.tgz", + "integrity": "sha512-pp5nNDmtrtd21aKHjwwOY5CS7XNIHxINzGa+Jholn1jMDYUtdskpN++ZqYbATGpW831++NJuiuBVyqAWi9xbXg==", "dev": true, "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" + "fs-extra": "^9.1.0", + "ssri": "^9.0.1", + "tar": "^6.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/@lerna/github-client": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.6.2.tgz", + "integrity": "sha512-pjALazZoRZtKqfwLBwmW3HPptVhQm54PvA8s3qhCQ+3JkqrZiIFwkkxNZxs3jwzr+aaSOzfhSzCndg0urb0GXA==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "@lerna/child-process": "5.6.2", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^19.0.3", + "git-url-parse": "^13.1.0", + "npmlog": "^6.0.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/@lerna/gitlab-client": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.6.2.tgz", + "integrity": "sha512-TInJmbrsmYIwUyrRxytjO82KjJbRwm67F7LoZs1shAq6rMvNqi4NxSY9j+hT/939alFmEq1zssoy/caeLXHRfQ==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.1", + "npmlog": "^6.0.2" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/@lerna/global-options": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.6.2.tgz", + "integrity": "sha512-kaKELURXTlczthNJskdOvh6GGMyt24qat0xMoJZ8plYMdofJfhz24h1OFcvB/EwCUwP/XV1+ohE5P+vdktbrEg==", "dev": true, "engines": { - "node": ">=6" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "node_modules/@lerna/has-npm-version": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.6.2.tgz", + "integrity": "sha512-kXCnSzffmTWsaK0ol30coyCfO8WH26HFbmJjRBzKv7VGkuAIcB6gX2gqRRgNLLlvI+Yrp+JSlpVNVnu15SEH2g==", "dev": true, "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "@lerna/child-process": "5.6.2", + "semver": "^7.3.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==" - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001388", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001388.tgz", - "integrity": "sha512-znVbq4OUjqgLxMxoNX2ZeeLR0d7lcDiE5uJ4eUiWdml1J1EkxbnQq6opT9jb9SMfJxB0XA16/ziHwni4u1I3GQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "node_modules/@lerna/import": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.6.2.tgz", + "integrity": "sha512-xQUE49mtcP0z3KUdXBsyvp8rGDz6phuYUoQbhcFRJ7WPcQKzMvtm0XYrER6c2YWEX7QOuDac6tU82P8zTrTBaA==", "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "@lerna/child-process": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/prompt": "5.6.2", + "@lerna/pulse-till-done": "5.6.2", + "@lerna/validation-error": "5.6.2", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "p-map-series": "^2.1.0" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@lerna/info": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.6.2.tgz", + "integrity": "sha512-MPjY5Olj+fiZHgfEdwXUFRKamdEuLr9Ob/qut8JsB/oQSQ4ALdQfnrOcMT8lJIcC2R67EA5yav2lHPBIkezm8A==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "@lerna/command": "5.6.2", + "@lerna/output": "5.6.2", + "envinfo": "^7.7.4" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "engines": { - "node": "*" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "node_modules/@lerna/init": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.6.2.tgz", + "integrity": "sha512-ahU3/lgF+J8kdJAQysihFJROHthkIDXfHmvhw7AYnzf94HjxGNXj7nz6i3At1/dM/1nQhR+4/uNR1/OU4tTYYQ==", "dev": true, + "dependencies": { + "@lerna/child-process": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/project": "5.6.2", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" + }, "engines": { - "node": "*" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/@lerna/link": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.6.2.tgz", + "integrity": "sha512-hXxQ4R3z6rUF1v2x62oIzLyeHL96u7ZBhxqYMJrm763D1VMSDcHKF9CjJfc6J9vH5Z2ZbL6CQg50Hw5mUpJbjg==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@lerna/command": "5.6.2", + "@lerna/package-graph": "5.6.2", + "@lerna/symlink-dependencies": "5.6.2", + "@lerna/validation-error": "5.6.2", + "p-map": "^4.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/@lerna/list": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.6.2.tgz", + "integrity": "sha512-WjE5O2tQ3TcS+8LqXUaxi0YdldhxUhNihT5+Gg4vzGdIlrPDioO50Zjo9d8jOU7i3LMIk6EzCma0sZr2CVfEGg==", "dev": true, + "dependencies": { + "@lerna/command": "5.6.2", + "@lerna/filter-options": "5.6.2", + "@lerna/listable": "5.6.2", + "@lerna/output": "5.6.2" + }, "engines": { - "node": ">=10" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/chromatism": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/chromatism/-/chromatism-2.6.0.tgz", - "integrity": "sha512-ZgkGBXc0b0X7KW26aHIuwQvg6MFt47ehRg+YqcmLtGtHPmn6+5sx9uAFTLHcmsg9kYjOcFJYc/U2n06wrZ7KTA==" - }, - "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==", - "dev": true - }, - "node_modules/classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/@lerna/listable": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.6.2.tgz", + "integrity": "sha512-8Yp49BwkY/5XqVru38Zko+6Wj/sgbwzJfIGEPy3Qu575r1NA/b9eI1gX22aMsEeXUeGOybR7nWT5ewnPQHjqvA==", "dev": true, + "dependencies": { + "@lerna/query-graph": "5.6.2", + "chalk": "^4.1.0", + "columnify": "^1.6.0" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || >=16.0.0" } }, - "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/@lerna/listable/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": { - "restore-cursor": "^3.1.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "node_modules/@lerna/listable/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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/@lerna/listable/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": ">= 10" + "node": ">=7.0.0" } }, - "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/@lerna/listable/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/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "node_modules/@lerna/listable/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.8" + "node": ">=8" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/@lerna/listable/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": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/@lerna/log-packed": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.6.2.tgz", + "integrity": "sha512-O9GODG7tMtWk+2fufn2MOkIDBYMRoKBhYMHshO5Aw/VIsH76DIxpX1koMzWfUngM/C70R4uNAKcVWineX4qzIw==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "byte-size": "^7.0.0", + "columnify": "^1.6.0", + "has-unicode": "^2.0.1", + "npmlog": "^6.0.2" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/cmd-shim": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", + "node_modules/@lerna/npm-conf": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.6.2.tgz", + "integrity": "sha512-gWDPhw1wjXYXphk/PAghTLexO5T6abVFhXb+KOMCeem366mY0F5bM88PiorL73aErTNUoR8n+V4X29NTZzDZpQ==", "dev": true, "dependencies": { - "mkdirp-infer-owner": "^2.0.0" + "config-chain": "^1.1.12", + "pify": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "node_modules/@lerna/npm-dist-tag": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.6.2.tgz", + "integrity": "sha512-t2RmxV6Eog4acXkUI+EzWuYVbeVVY139pANIWS9qtdajfgp4GVXZi1S8mAIb70yeHdNpCp1mhK0xpCrFH9LvGQ==", "dev": true, "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" + "@lerna/otplease": "5.6.2", + "npm-package-arg": "8.1.1", + "npm-registry-fetch": "^13.3.0", + "npmlog": "^6.0.2" }, "engines": { - "node": ">= 4.0" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/coa/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/@lerna/npm-install": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.6.2.tgz", + "integrity": "sha512-AT226zdEo+uGENd37jwYgdALKJAIJK4pNOfmXWZWzVb9oMOr8I2YSjPYvSYUNG7gOo2YJQU8x5Zd7OShv2924Q==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "@lerna/child-process": "5.6.2", + "@lerna/get-npm-exec-opts": "5.6.2", + "fs-extra": "^9.1.0", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "signal-exit": "^3.0.3", + "write-pkg": "^4.0.0" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/coa/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/@lerna/npm-publish": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.6.2.tgz", + "integrity": "sha512-ldSyewCfv9fAeC5xNjL0HKGSUxcC048EJoe/B+KRUmd+IPidvZxMEzRu08lSC/q3V9YeUv9ZvRnxATXOM8CffA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@lerna/otplease": "5.6.2", + "@lerna/run-lifecycle": "5.6.2", + "fs-extra": "^9.1.0", + "libnpmpublish": "^6.0.4", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "pify": "^5.0.0", + "read-package-json": "^5.0.1" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/coa/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/@lerna/npm-run-script": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.6.2.tgz", + "integrity": "sha512-MOQoWNcAyJivM8SYp0zELM7vg/Dj07j4YMdxZkey+S1UO0T4/vKBxb575o16hH4WeNzC3Pd7WBlb7C8dLOfNwQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "@lerna/child-process": "5.6.2", + "@lerna/get-npm-exec-opts": "5.6.2", + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@lerna/otplease": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.6.2.tgz", + "integrity": "sha512-dGS4lzkEQVTMAgji82jp8RK6UK32wlzrBAO4P4iiVHCUTuwNLsY9oeBXvVXSMrosJnl6Hbe0NOvi43mqSucGoA==", "dev": true, + "dependencies": { + "@lerna/prompt": "5.6.2" + }, "engines": { - "node": ">=4" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/coa/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/@lerna/output": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.6.2.tgz", + "integrity": "sha512-++d+bfOQwY66yo7q1XuAvRcqtRHCG45e/awP5xQomTZ6R1rhWiZ3whWdc9Z6lF7+UtBB9toSYYffKU/xc3L0yQ==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "npmlog": "^6.0.2" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@lerna/pack-directory": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.6.2.tgz", + "integrity": "sha512-w5Jk5fo+HkN4Le7WMOudTcmAymcf0xPd302TqAQncjXpk0cb8tZbj+5bbNHsGb58GRjOIm5icQbHXooQUxbHhA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "@lerna/get-packed": "5.6.2", + "@lerna/package": "5.6.2", + "@lerna/run-lifecycle": "5.6.2", + "@lerna/temp-write": "5.6.2", + "npm-packlist": "^5.1.1", + "npmlog": "^6.0.2", + "tar": "^6.1.0" }, "engines": { - "node": ">=7.0.0" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "node_modules/@lerna/package": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.6.2.tgz", + "integrity": "sha512-LaOC8moyM5J9WnRiWZkedjOninSclBOJyPqhif6mHb2kCFX6jAroNYzE8KM4cphu8CunHuhI6Ixzswtv+Dultw==", "dev": true, - "bin": { - "color-support": "bin.js" + "dependencies": { + "load-json-file": "^6.2.0", + "npm-package-arg": "8.1.1", + "write-pkg": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "node_modules/@lerna/package-graph": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.6.2.tgz", + "integrity": "sha512-TmL61qBBvA3Tc4qICDirZzdFFwWOA6qicIXUruLiE2PblRowRmCO1bKrrP6XbDOspzwrkPef6N2F2/5gHQAnkQ==", "dev": true, "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" + "@lerna/prerelease-id-from-version": "5.6.2", + "@lerna/validation-error": "5.6.2", + "npm-package-arg": "8.1.1", + "npmlog": "^6.0.2", + "semver": "^7.3.4" }, "engines": { - "node": ">=8.0.0" + "node": "^14.15.0 || >=16.0.0" } }, - "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==", + "node_modules/@lerna/prerelease-id-from-version": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.6.2.tgz", + "integrity": "sha512-7gIm9fecWFVNy2kpj/KbH11bRcpyANAwpsft3X5m6J7y7A6FTUscCbEvl3ZNdpQKHNuvnHgCtkm3A5PMSCEgkA==", + "dev": true, "dependencies": { - "delayed-stream": "~1.0.0" + "semver": "^7.3.4" }, "engines": { - "node": ">= 0.8" + "node": "^14.15.0 || >=16.0.0" } }, - "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==", + "node_modules/@lerna/profiler": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.6.2.tgz", + "integrity": "sha512-okwkagP5zyRIOYTceu/9/esW7UZFt7lyL6q6ZgpSG3TYC5Ay+FXLtS6Xiha/FQdVdumFqKULDWTGovzUlxcwaw==", + "dev": true, "dependencies": { - "array-back": "^3.0.1", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "upath": "^2.0.1" }, "engines": { - "node": ">=4.0.0" + "node": "^14.15.0 || >=16.0.0" } }, - "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/@lerna/project": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.6.2.tgz", + "integrity": "sha512-kPIMcIy/0DVWM91FPMMFmXyAnCuuLm3NdhnA8NusE//VuY9wC6QC/3OwuCY39b2dbko/fPZheqKeAZkkMH6sGg==", + "dev": true, "dependencies": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" + "@lerna/package": "5.6.2", + "@lerna/validation-error": "5.6.2", + "cosmiconfig": "^7.0.0", + "dedent": "^0.7.0", + "dot-prop": "^6.0.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.2", + "js-yaml": "^4.1.0", + "load-json-file": "^6.2.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "resolve-from": "^5.0.0", + "write-json-file": "^4.3.0" }, "engines": { - "node": ">=8.0.0" + "node": "^14.15.0 || >=16.0.0" } }, - "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/@lerna/project/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": { - "color-convert": "^1.9.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "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==", + "node_modules/@lerna/project/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/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/@lerna/prompt": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.6.2.tgz", + "integrity": "sha512-4hTNmVYADEr0GJTMegWV+GW6n+dzKx1vN9v2ISqyle283Myv930WxuyO0PeYGqTrkneJsyPreCMovuEGCvZ0iQ==", + "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "inquirer": "^8.2.4", + "npmlog": "^6.0.2" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || >=16.0.0" } }, - "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/@lerna/publish": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.6.2.tgz", + "integrity": "sha512-QaW0GjMJMuWlRNjeDCjmY/vjriGSWgkLS23yu8VKNtV5U3dt5yIKA3DNGV3HgZACuu45kQxzMDsfLzgzbGNtYA==", + "dev": true, + "dependencies": { + "@lerna/check-working-tree": "5.6.2", + "@lerna/child-process": "5.6.2", + "@lerna/collect-updates": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/describe-ref": "5.6.2", + "@lerna/log-packed": "5.6.2", + "@lerna/npm-conf": "5.6.2", + "@lerna/npm-dist-tag": "5.6.2", + "@lerna/npm-publish": "5.6.2", + "@lerna/otplease": "5.6.2", + "@lerna/output": "5.6.2", + "@lerna/pack-directory": "5.6.2", + "@lerna/prerelease-id-from-version": "5.6.2", + "@lerna/prompt": "5.6.2", + "@lerna/pulse-till-done": "5.6.2", + "@lerna/run-lifecycle": "5.6.2", + "@lerna/run-topologically": "5.6.2", + "@lerna/validation-error": "5.6.2", + "@lerna/version": "5.6.2", + "fs-extra": "^9.1.0", + "libnpmaccess": "^6.0.3", + "npm-package-arg": "8.1.1", + "npm-registry-fetch": "^13.3.0", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "pacote": "^13.6.1", + "semver": "^7.3.4" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } + }, + "node_modules/@lerna/pulse-till-done": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.6.2.tgz", + "integrity": "sha512-eA/X1RCxU5YGMNZmbgPi+Kyfx1Q3bn4P9jo/LZy+/NRRr1po3ASXP2GJZ1auBh/9A2ELDvvKTOXCVHqczKC6rA==", + "dev": true, "dependencies": { - "color-name": "1.1.3" + "npmlog": "^6.0.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "node_modules/@lerna/query-graph": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.6.2.tgz", + "integrity": "sha512-KRngr96yBP8XYDi9/U62fnGO+ZXqm04Qk6a2HtoTr/ha8QvO1s7Tgm0xs/G7qWXDQHZgunWIbmK/LhxM7eFQrw==", + "dev": true, + "dependencies": { + "@lerna/package-graph": "5.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "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": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/@lerna/resolve-symlink": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.6.2.tgz", + "integrity": "sha512-PDQy+7M8JEFtwIVHJgWvSxHkxJf9zXCENkvIWDB+SsoDPhw9+caewt46bTeP5iGm9pOMu3oZukaWo/TvF7sNjg==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0", + "npmlog": "^6.0.2", + "read-cmd-shim": "^3.0.0" + }, "engines": { - "node": ">=4" + "node": "^14.15.0 || >=16.0.0" } }, - "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/@lerna/rimraf-dir": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.6.2.tgz", + "integrity": "sha512-jgEfzz7uBUiQKteq3G8MtJiA2D2VoKmZSSY3VSiW/tPOSXYxxSHxEsClQdCeNa6+sYrDNDT8fP6MJ3lPLjDeLA==", + "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "@lerna/child-process": "5.6.2", + "npmlog": "^6.0.2", + "path-exists": "^4.0.0", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || >=16.0.0" } }, - "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==", + "node_modules/@lerna/run": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.6.2.tgz", + "integrity": "sha512-c2kJxdFrNg5KOkrhmgwKKUOsfSrGNlFCe26EttufOJ3xfY0VnXlEw9rHOkTgwtu7969rfCdyaVP1qckMrF1Dgw==", + "dev": true, + "dependencies": { + "@lerna/command": "5.6.2", + "@lerna/filter-options": "5.6.2", + "@lerna/npm-run-script": "5.6.2", + "@lerna/output": "5.6.2", + "@lerna/profiler": "5.6.2", + "@lerna/run-topologically": "5.6.2", + "@lerna/timer": "5.6.2", + "@lerna/validation-error": "5.6.2", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true + "node_modules/@lerna/run-lifecycle": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.6.2.tgz", + "integrity": "sha512-u9gGgq/50Fm8dvfcc/TSHOCAQvzLD7poVanDMhHYWOAqRDnellJEEmA1K/Yka4vZmySrzluahkry9G6jcREt+g==", + "dev": true, + "dependencies": { + "@lerna/npm-conf": "5.6.2", + "@npmcli/run-script": "^4.1.7", + "npmlog": "^6.0.2", + "p-queue": "^6.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" + } }, - "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==", + "node_modules/@lerna/run-topologically": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.6.2.tgz", + "integrity": "sha512-QQ/jGOIsVvUg3izShWsd67RlWYh9UOH2yw97Ol1zySX9+JspCMVQrn9eKq1Pk8twQOFhT87LpT/aaxbTBgREPw==", "dev": true, "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" + "@lerna/query-graph": "5.6.2", + "p-queue": "^6.6.2" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/compare-func/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==", + "node_modules/@lerna/symlink-binary": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.6.2.tgz", + "integrity": "sha512-Cth+miwYyO81WAmrQbPBrLHuF+F0UUc0el5kRXLH6j5zzaRS3kMM68r40M7MmfH8m3GPi7691UARoWFEotW5jw==", "dev": true, "dependencies": { - "is-obj": "^2.0.0" + "@lerna/create-symlink": "5.6.2", + "@lerna/package": "5.6.2", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "node_modules/@lerna/symlink-dependencies": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.6.2.tgz", + "integrity": "sha512-dUVNQLEcjVOIQiT9OlSAKt0ykjyJPy8l9i4NJDe2/0XYaUjo8PWsxJ0vrutz27jzi2aZUy07ASmowQZEmnLHAw==", "dev": true, - "engines": [ - "node >= 6.0" - ], "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" + "@lerna/create-symlink": "5.6.2", + "@lerna/resolve-symlink": "5.6.2", + "@lerna/symlink-binary": "5.6.2", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "node_modules/@lerna/temp-write": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.6.2.tgz", + "integrity": "sha512-S5ZNVTurSwWBmc9kh5alfSjmO3+BnRT6shYtOlmVIUYqWeYVYA5C1Htj322bbU4CSNCMFK6NQl4qGKL17HMuig==", "dev": true, "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^8.3.2" } }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "node_modules/@lerna/timer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.6.2.tgz", + "integrity": "sha512-AjMOiLc2B+5Nzdd9hNORetAdZ/WK8YNGX/+2ypzM68TMAPfIT5C40hMlSva9Yg4RsBz22REopXgM5s2zQd5ZQA==", "dev": true, "engines": { - "node": ">=0.8" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "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/@lerna/validation-error": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.6.2.tgz", + "integrity": "sha512-4WlDUHaa+RSJNyJRtX3gVIAPVzjZD2tle8AJ0ZYBfdZnZmG0VlB2pD1FIbOQPK8sY2h5m0cHLRvfLoLncqHvdQ==", + "dev": true, + "dependencies": { + "npmlog": "^6.0.2" + }, "engines": { - "node": ">= 0.6" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "node_modules/@lerna/version": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.6.2.tgz", + "integrity": "sha512-odNSR2rTbHW++xMZSQKu/F6Syrd/sUvwDLPaMKktoOSPKmycHt/eWcuQQyACdtc43Iqeu4uQd7PCLsniqOVFrw==", + "dev": true, + "dependencies": { + "@lerna/check-working-tree": "5.6.2", + "@lerna/child-process": "5.6.2", + "@lerna/collect-updates": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/conventional-commits": "5.6.2", + "@lerna/github-client": "5.6.2", + "@lerna/gitlab-client": "5.6.2", + "@lerna/output": "5.6.2", + "@lerna/prerelease-id-from-version": "5.6.2", + "@lerna/prompt": "5.6.2", + "@lerna/run-lifecycle": "5.6.2", + "@lerna/run-topologically": "5.6.2", + "@lerna/temp-write": "5.6.2", + "@lerna/validation-error": "5.6.2", + "@nrwl/devkit": ">=14.8.1 < 16", + "chalk": "^4.1.0", + "dedent": "^0.7.0", + "load-json-file": "^6.2.0", + "minimatch": "^3.0.4", + "npmlog": "^6.0.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "p-reduce": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4", + "slash": "^3.0.0", + "write-json-file": "^4.3.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "node_modules/@lerna/version/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": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "node_modules/@lerna/version/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "node_modules/@lerna/version/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": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/conventional-changelog-writer/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/@lerna/version/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/@lerna/version/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, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=8" } }, - "node_modules/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "node_modules/@lerna/version/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": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "node_modules/@lerna/write-log-file": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.6.2.tgz", + "integrity": "sha512-J09l18QnWQ3sXIRwuJkjXY3+KwPR2uO5NgbZGE3GXJK1V/LzOBRMvjGAIbuQHXw25uqe7vpLUpB8drtnFrubCQ==", "dev": true, "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" + "npmlog": "^6.0.2", + "write-file-atomic": "^4.0.1" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, + "node_modules/@lifeomic/attempt": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@lifeomic/attempt/-/attempt-3.0.3.tgz", + "integrity": "sha512-GlM2AbzrErd/TmLL3E8hAHmb5Q7VhDJp35vIbyPVA5Rz55LZuRr8pwL3qrwwkVNo05gMX1J44gURKb4MHQZo7w==" + }, + "node_modules/@linaria/core": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/@linaria/core/-/core-4.2.9.tgz", + "integrity": "sha512-ELcu37VNVOT/PU0L6WDIN+aLzNFyJrqoBYT0CucGOCAmODbojUMCv8oJYRbWzA3N34w1t199dN4UFdfRWFG2rg==", "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - }, - "bin": { - "conventional-recommended-bump": "cli.js" + "@linaria/logger": "^4.0.0", + "@linaria/tags": "^4.3.4", + "@linaria/utils": "^4.3.3" }, "engines": { - "node": ">=10" + "node": "^12.16.0 || >=13.7.0" } }, - "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==", + "node_modules/@linaria/logger": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@linaria/logger/-/logger-4.0.0.tgz", + "integrity": "sha512-YnBq0JlDWMEkTOK+tMo5yEVR0f5V//6qMLToGcLhTyM9g9i+IDFn51Z+5q2hLk7RdG4NBPgbcCXYi2w4RKsPeg==", "dependencies": { - "safe-buffer": "~5.1.1" + "debug": "^4.1.1", + "picocolors": "^1.0.0" + }, + "engines": { + "node": "^12.16.0 || >=13.7.0" } }, - "node_modules/convert-source-map/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==" - }, - "node_modules/core-js": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.0.tgz", - "integrity": "sha512-CVU1xvJEfJGhyCpBrzzzU1kjCfgsGUxhEvwUV2e/cOedYWHdmluamx+knDnmhqALddMG16fZvIqvs9aijsHHaA==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "node_modules/@linaria/tags": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@linaria/tags/-/tags-4.3.5.tgz", + "integrity": "sha512-PgaIi8Vv89YOjc6rpKL/uPg2w4k0rAwAYxcqeXqzKqsEAste5rgB8xp1/KUOG0oAOkPd3MRL6Duj+m0ZwJ3g+g==", + "dependencies": { + "@babel/generator": "^7.20.4", + "@linaria/logger": "^4.0.0", + "@linaria/utils": "^4.3.4" + }, + "engines": { + "node": "^12.16.0 || >=13.7.0" } }, - "node_modules/core-js-compat": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.0.tgz", - "integrity": "sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow==", - "dev": true, + "node_modules/@linaria/utils": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@linaria/utils/-/utils-4.3.4.tgz", + "integrity": "sha512-vt6WJG54n+KANaqxOfzIIU7aSfFHEWFbnGLsgxL7nASHqO0zezrNA2y2Rrp80zSeTW+wSpbmDM4uJyC9UW1qoA==", "dependencies": { - "browserslist": "^4.21.3", - "semver": "7.0.0" + "@babel/core": "^7.20.2", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", + "@linaria/logger": "^4.0.0", + "babel-merge": "^3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "engines": { + "node": "^12.16.0 || >=13.7.0" } }, - "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/@loaders.gl/core": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.4.4.tgz", + "integrity": "sha512-uutqjvf91WJZx7WbSmJy75AHFNCPDnnweFnVmdAEflF6ohc+uAdjltqz6tGD3PxbT8LjNLTOk60kxyC/QwDBqQ==", + "dependencies": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/loader-utils": "3.4.4", + "@loaders.gl/worker-utils": "3.4.4", + "@probe.gl/log": "^4.0.1" } }, - "node_modules/core-js-pure": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.0.tgz", - "integrity": "sha512-IeHpLwk3uoci37yoI2Laty59+YqH9x5uR65/yiA0ARAJrTrN4YU0rmauLWfvqOuk77SlNJXj2rM6oT/dBD87+A==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "node_modules/@loaders.gl/core/node_modules/@probe.gl/env": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-4.0.4.tgz", + "integrity": "sha512-sYNGqesDfWD6dFP5oNZtTeFA4Z6ak5T4a8BNPdNhoqy7PK9w70JHrb6mv+RKWqKXq33KiwCDWL7fYxx2HuEH2w==", + "dependencies": { + "@babel/runtime": "^7.0.0" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "node_modules/@loaders.gl/core/node_modules/@probe.gl/log": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-4.0.4.tgz", + "integrity": "sha512-WpmXl6njlBMwrm8HBh/b4kSp/xnY1VVmeT4PWUKF+RkVbFuKQbsU11dA1IxoMd7gSY+5DGIwxGfAv1H5OMzA4A==", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "4.0.4" } }, - "node_modules/cp-file": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-9.1.0.tgz", - "integrity": "sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==", - "dev": true, + "node_modules/@loaders.gl/images": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-3.4.4.tgz", + "integrity": "sha512-ViMh58oZ2GLsKCoYBH4nYMvi5fHeVZXiLAABVP+AVU54Jrf+PZYm8y8KaC22zBmGEZ15hGhJF/dNeOpgqZ+V4w==", "dependencies": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@loaders.gl/loader-utils": "3.4.4" } }, - "node_modules/cpy": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-9.0.1.tgz", - "integrity": "sha512-D9U0DR5FjTCN3oMTcFGktanHnAG5l020yvOCR1zKILmAyPP7I/9pl6NFgRbDcmSENtbK1sQLBz1p9HIOlroiNg==", - "dev": true, + "node_modules/@loaders.gl/loader-utils": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-3.4.4.tgz", + "integrity": "sha512-EFY/YBniNyfZk0ojnBitl+xRL3Du8tinOwdFnWD0rVIf61+bFifFI0fJys8/tgrlF6sfiKdYbupow8G/a3xF2g==", "dependencies": { - "arrify": "^3.0.0", - "cp-file": "^9.1.0", - "globby": "^13.1.1", - "junk": "^4.0.0", - "micromatch": "^4.0.4", - "nested-error-stacks": "^2.1.0", - "p-filter": "^3.0.0", - "p-map": "^5.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@babel/runtime": "^7.3.1", + "@loaders.gl/worker-utils": "3.4.4", + "@probe.gl/stats": "^4.0.1" } }, - "node_modules/cpy/node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, + "node_modules/@loaders.gl/loader-utils/node_modules/@probe.gl/stats": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-4.0.4.tgz", + "integrity": "sha512-SDuSY/D4yDL6LQDa69l/GCcnZLRiGYdyvYkxWb0CgnzTPdPrcdrzGkzkvpC3zsA4fEFw2smlDje370QGHwlisg==", "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@babel/runtime": "^7.0.0" } }, - "node_modules/cpy/node_modules/arrify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@loaders.gl/schema": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-3.4.4.tgz", + "integrity": "sha512-+lESS+cUSgXst9kxaW2LTxWMVMrT96cv0TWfsSryA11EVsxr50aSPWC+K0BHe7k60+80pQWEt4iyMRgVHM+6tg==", + "dependencies": { + "@types/geojson": "^7946.0.7" } }, - "node_modules/cpy/node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, + "node_modules/@loaders.gl/worker-utils": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-3.4.4.tgz", + "integrity": "sha512-ltqMd+BsAk3QGPLycZODukL1wNyBEb04X6wpI3rC5NWByzwSippwWTW4g4QnS3Q9zgMFV4jR/YV6CRp/GiVzvQ==", "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@babel/runtime": "^7.3.1" } }, - "node_modules/cpy/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/@luma.gl/constants": { + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-8.5.20.tgz", + "integrity": "sha512-5yG+ybkUZ4j6kLPWMZjN4Hun2yLB0MyEpNCRKAUN9/yS9UIWA7unyVxjSf2vnE7k/7dywtxlbXegASNFgNVGxw==" }, - "node_modules/cpy/node_modules/globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "dev": true, + "node_modules/@luma.gl/core": { + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-8.5.20.tgz", + "integrity": "sha512-xJr96G6vhYcznYHC84fbeOG3fgNM4lFwj9bd0VPcg/Kfe8otUeN1Hl0AKHCCtNn48PiMSg3LKbaiRfNUMhaffQ==", "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "8.5.20", + "@luma.gl/engine": "8.5.20", + "@luma.gl/gltools": "8.5.20", + "@luma.gl/shadertools": "8.5.20", + "@luma.gl/webgl": "8.5.20" } }, - "node_modules/cpy/node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, + "node_modules/@luma.gl/engine": { + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-8.5.20.tgz", + "integrity": "sha512-+0ryJ/4gL1pWaEgZimY21jUPt1LYiO6Cqte8TNUprCfAHoAStsuzD7jwgEqnM6jJOUEdIxQ3w0z3Dzw/0KIE+w==", "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "8.5.20", + "@luma.gl/gltools": "8.5.20", + "@luma.gl/shadertools": "8.5.20", + "@luma.gl/webgl": "8.5.20", + "@math.gl/core": "^3.5.0", + "@probe.gl/env": "^3.5.0", + "@probe.gl/stats": "^3.5.0", + "@types/offscreencanvas": "^2019.7.0" } }, - "node_modules/cpy/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@luma.gl/gltools": { + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/gltools/-/gltools-8.5.20.tgz", + "integrity": "sha512-5pP6ph9FSX5gHiVWQM1DmYRUnriklzKUG9yaqlQsKEqCFsOcKB0EfK3MfBVXIfsOdP/1bJZ9Dlz/zV19soWVhg==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "8.5.20", + "@probe.gl/env": "^3.5.0", + "@probe.gl/log": "^3.5.0", + "@types/offscreencanvas": "^2019.7.0" } }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, + "node_modules/@luma.gl/shadertools": { + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-8.5.20.tgz", + "integrity": "sha512-q1lrCZy1ncIFb4mMjsYgISLzNP6eMnhLUY+Oltj/qjAMcPEssCeHN2+XGfP/CVtU+O7sC+5JY2bQGaTs6HQ/Qw==", "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" + "@babel/runtime": "^7.0.0", + "@math.gl/core": "^3.5.0" } }, - "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==", + "node_modules/@luma.gl/webgl": { + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-8.5.20.tgz", + "integrity": "sha512-p/kt9KztywH4l+09XHoZ4cPFOoE7xlZXIBMT8rxRVgfe1w0lvi7QYh4tOG7gk+iixQ34EyDQacoHCsabdpmqQg==", "dependencies": { - "node-fetch": "2.6.7" + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "8.5.20", + "@luma.gl/gltools": "8.5.20", + "@probe.gl/env": "^3.5.0", + "@probe.gl/stats": "^3.5.0" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, + "node_modules/@mantine/core": { + "version": "5.10.5", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.10.5.tgz", + "integrity": "sha512-F4tqHSEVM9D6/iSqHfPda+Xl5XgSEPHAAkT01Zwzj4Jnbd10qGrlqr/SFUop2CIcuKYnmra9XltUahUPXBC2BQ==", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@floating-ui/react": "^0.19.1", + "@mantine/styles": "5.10.5", + "@mantine/utils": "5.10.5", + "@radix-ui/react-scroll-area": "1.0.2", + "react-textarea-autosize": "8.3.4" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@mantine/hooks": "5.10.5", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "engines": { - "node": "*" + "node_modules/@mantine/core/node_modules/@mantine/utils": { + "version": "5.10.5", + "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.10.5.tgz", + "integrity": "sha512-FGMq4dGs5HhDAtI0z46uzxzKKPmZ3h5uKUyKg1ZHoFR1mBtcUMbB6FylFmHqKFRWlJ5IXqX9dwmiVrLYUOfTmA==", + "peerDependencies": { + "react": ">=16.8.0" } }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "dev": true, + "node_modules/@mantine/hooks": { + "version": "5.10.5", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.10.5.tgz", + "integrity": "sha512-hFQp71QZDfivPzfIUOQZfMKLiOL/Cn2EnzacRlbUr55myteTfzYN8YMt+nzniE/6c4IRopFHEAdbKEtfyQc6kg==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@mantine/styles": { + "version": "5.10.5", + "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.10.5.tgz", + "integrity": "sha512-0NXk8c/XGzuTUkZc6KceF2NaTCMEu5mHR4ru0x+ttb9DGnLpHuGWduTHjSfr4hl6eAJgedD0zauO+VAhDzO9zA==", "dependencies": { - "type-fest": "^1.0.1" + "clsx": "1.1.1", + "csstype": "3.0.9" }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@emotion/react": ">=11.9.0", + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@mantine/styles/node_modules/csstype": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", + "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" + }, + "node_modules/@mantine/utils": { + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-6.0.14.tgz", + "integrity": "sha512-se+3IXJsNj4wnLMlqc7LiBe74m+JLQJ5o3wEcDtFzaJEtEt1rtw/1q3xKuROkH3xEiauhxQgzsc4gj/AslHy2A==", + "peerDependencies": { + "react": ">=16.8.0" } }, - "node_modules/css-box-model": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", - "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "node_modules/@mapbox/tiny-sdf": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" + }, + "node_modules/@math.gl/core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.3.tgz", + "integrity": "sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==", "dependencies": { - "tiny-invariant": "^1.0.6" + "@babel/runtime": "^7.12.0", + "@math.gl/types": "3.6.3", + "gl-matrix": "^3.4.0" } }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", - "engines": { - "node": ">=4" + "node_modules/@math.gl/polygon": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-3.6.3.tgz", + "integrity": "sha512-FivQ1ZnYcAss1wVifOkHP/ZnlfQy1IL/769uzNtiHxwUbW0kZG3yyOZ9I7fwyzR5Hvqt3ErJKHjSYZr0uVlz5g==", + "dependencies": { + "@math.gl/core": "3.6.3" } }, - "node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, + "node_modules/@math.gl/sun": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/sun/-/sun-3.6.3.tgz", + "integrity": "sha512-mrx6CGYYeTNSQttvcw0KVUy+35YDmnjMqpO/o0t06Vcghrt0HNruB/ScRgUSbJrgkbOg1Vcqm23HBd++clzQzw==", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "@babel/runtime": "^7.12.0" } }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true + "node_modules/@math.gl/types": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-3.6.3.tgz", + "integrity": "sha512-3uWLVXHY3jQxsXCr/UCNPSc2BG0hNUljhmOBt9l+lNFDp7zHgm0cK2Tw4kj2XfkJy4TgwZTBGwRDQgWEbLbdTA==" }, - "node_modules/css-to-react-native": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", - "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", + "node_modules/@math.gl/web-mercator": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-3.6.3.tgz", + "integrity": "sha512-UVrkSOs02YLehKaehrxhAejYMurehIHPfFQvPFZmdJHglHOU4V2cCUApTVEwOksvCp161ypEqVp+9H6mGhTTcw==", "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^3.3.0" + "@babel/runtime": "^7.12.0", + "gl-matrix": "^3.4.0" } }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } + "node_modules/@matrix-org/olm": { + "version": "3.2.12", + "resolved": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.12.tgz", + "integrity": "sha1-C848hvnTakmE08PgffHD+0xnm9k=" }, - "node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "dependencies": { + "eslint-scope": "5.1.1" } }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/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": { - "css-tree": "^1.1.2" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=8.0.0" + "node": ">=4.0" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "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==", "dependencies": { - "cssom": "~0.3.6" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" - }, - "node_modules/d3-hexbin": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/d3-hexbin/-/d3-hexbin-0.2.2.tgz", - "integrity": "sha512-KS3fUT2ReD4RlGCjvCEm1RgMtp2NFZumdMu4DBzQK8AZv3fXRM6Xm8I4fSU07UXvH4xxg03NwWKWdvxfS/yc4w==" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true, + "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==", "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "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==", "dependencies": { - "assert-plus": "^1.0.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=0.10" + "node": ">= 8" } }, - "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "node_modules/@npmcli/arborist": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz", + "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", "dev": true, "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^4.1.3", + "bin-links": "^3.0.0", + "cacache": "^16.0.6", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", + "walk-up-path": "^1.0.0" + }, + "bin": { + "arborist": "bin/index.js" }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/data-urls/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "node_modules/@npmcli/arborist/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "dependencies": { - "punycode": "^2.1.1" + "lru-cache": "^7.5.1" }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/data-urls/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==", + "node_modules/@npmcli/arborist/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { "node": ">=12" } }, - "node_modules/data-urls/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==", + "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "ms": "2.1.2" + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "node_modules/@npmcli/git": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", + "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, "engines": { - "node": "*" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", "dev": true, "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "node_modules/@npmcli/map-workspaces": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", + "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", "dev": true, + "dependencies": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/decimal.js": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", - "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==", - "dev": true + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, "dependencies": { - "character-entities": "^2.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "type-detect": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.12" + "node": ">=10" } }, - "node_modules/deep-equal": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", - "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", + "node_modules/@npmcli/metavuln-calculator": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", + "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "es-get-iterator": "^1.1.1", - "get-intrinsic": "^1.0.1", - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.2", - "is-regex": "^1.1.1", - "isarray": "^2.0.5", - "object-is": "^1.1.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.3", - "which-boxed-primitive": "^1.0.1", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.2" + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/deep-equal/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/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==", + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=4.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "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==", + "node_modules/@npmcli/name-from-folder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", "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==", + "node_modules/@npmcli/node-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "node_modules/@npmcli/package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", + "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", "dev": true, "dependencies": { - "clone": "^1.0.2" + "json-parse-even-better-errors": "^2.3.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "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==", + "node_modules/@npmcli/promise-spawn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", "dev": true, + "dependencies": { + "infer-owner": "^1.0.4" + }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "node_modules/@npmcli/run-script": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", + "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", + "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", - "dev": true - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" + "node_modules/@nrwl/cli": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.9.4.tgz", + "integrity": "sha512-FoiGFCLpb/r4HXCM3KYqT0xteP+MRV6bIHjz3bdPHIDLmBNQQnRRaV2K47jtJ6zjh1eOU5UHKyDtDDYf80Idpw==", + "dev": true, + "dependencies": { + "nx": "15.9.4" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "node_modules/@nrwl/devkit": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-15.9.4.tgz", + "integrity": "sha512-mUX1kXTuPMdTzFxIzH+MsSNvdppOmstPDOEtiGFZJTuJ625ki0HhNJILO3N2mJ7MeMrLqIlAiNdvelQaObxYsQ==", "dev": true, - "engines": { - "node": ">= 0.6" + "dependencies": { + "ejs": "^3.1.7", + "ignore": "^5.0.4", + "semver": "7.3.4", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 14.1 <= 16" } }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/@nrwl/devkit/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": ">=6" + "node": ">=10" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "node_modules/@nrwl/devkit/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + "node_modules/@nrwl/devkit/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/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "node_modules/@nrwl/nx-darwin-arm64": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.4.tgz", + "integrity": "sha512-XnvrnT9BJsgThY/4xUcYtE077ERq/img8CkRj7MOOBNOh0/nVcR4LGbBKDHtwE3HPk0ikyS/SxRyNa9msvi3QQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "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==", + "node_modules/@nrwl/nx-darwin-x64": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.4.tgz", + "integrity": "sha512-WKSfSlpVMLchpXkax0geeUNyhvNxwO7qUz/s0/HJWBekt8fizwKDwDj1gP7fOu+YWb/tHiSscbR1km8PtdjhQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.3.1" + "node": ">= 10" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/@nrwl/nx-linux-arm-gnueabihf": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.4.tgz", + "integrity": "sha512-a/b4PP7lP/Cgrh0LjC4O2YTt5pyf4DQTGtuE8qlo8o486UiofCtk4QGJX72q80s23L0ejCaKY2ULKx/3zMLjuA==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/dnd-core": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-7.7.0.tgz", - "integrity": "sha512-+YqwflWEY1MEAEl2QiEiRaglYkCwIZryyQwximQGuTOm/ns7fS6Lg/i7OCkrtjM10D5FhArf/VUHIL4ZaRBK0g==", - "peer": true, - "dependencies": { - "asap": "^2.0.6", - "invariant": "^2.2.4", - "redux": "^4.0.1" + "node_modules/@nrwl/nx-linux-arm64-gnu": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.4.tgz", + "integrity": "sha512-ibBV8fMhSfLVd/2WzcDuUm32BoZsattuKkvMmOoyU6Pzoznc3AqyDjJR4xCIoAn5Rf+Nu1oeQONr5FAtb1Ugow==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/@nrwl/nx-linux-arm64-musl": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.4.tgz", + "integrity": "sha512-iIjvVYd7+uM4jVD461+PvU5XTALgSvJOODUaMRGOoDl0KlMuTe6pQZlw0eXjl5rcTd6paKaVFWT5j6awr8kj7w==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">= 10" } }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" + "node_modules/@nrwl/nx-linux-x64-gnu": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.4.tgz", + "integrity": "sha512-q4OyH72mdrE4KellBWtwpr5EwfxHKNoFP9//7FAILO68ROh0rpMd7YQMlTB7T04UEUHjKEEsFGTlVXIee3Viwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/dom-helpers/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "node_modules/@nrwl/nx-linux-x64-musl": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.4.tgz", + "integrity": "sha512-67+/XNMR1CgLPyeGX8jqSG6l8yYD0iiwUgcu1Vaxq6N05WwnqVisIW8XzLSRUtKt4WyVQgOWk3aspImpMVOG3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "node_modules/@nrwl/nx-win32-arm64-msvc": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.4.tgz", + "integrity": "sha512-2rEsq3eOGVCYpYJn2tTJkOGNJm/U8rP/FmqtZXYa6VJv/00XP3Gl00IXFEDaYV6rZo7SWqLxtEPUbjK5LwPzZA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "node_modules/@nrwl/nx-win32-x64-msvc": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.4.tgz", + "integrity": "sha512-bogVju4Z/hy1jbppqaTNbmV1R4Kg0R5fKxXAXC2LaL7FL0dup31wPumdV+mXttXBNOBDjV8V/Oz1ZqdmxpOJUw==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true + "node_modules/@nrwl/tao": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.9.4.tgz", + "integrity": "sha512-m90iz8UsXx1rgPm1dxsBQjSrCViWYZIrp8bpwjSCW24j3kifyilYSXGuKaRwZwUn7eNmH/kZcI9/8qeGIPF4Sg==", + "dev": true, + "dependencies": { + "nx": "15.9.4" + }, + "bin": { + "tao": "index.js" + } }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "node_modules/@octokit/auth-token": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", + "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", + "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", "dev": true, "dependencies": { - "webidl-conversions": "^7.0.0" + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">=12" + "node": ">= 14" } }, - "node_modules/domexception/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==", + "node_modules/@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", "dev": true, + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 14" } }, - "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/@octokit/graphql": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/dot-prop": { + "node_modules/@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==", + "dev": true + }, + "node_modules/@octokit/plugin-enterprise-rest": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", + "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", "dev": true, "dependencies": { - "is-obj": "^2.0.0" + "@octokit/tsconfig": "^1.0.2", + "@octokit/types": "^9.2.3" }, "engines": { - "node": ">=10" + "node": ">= 14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@octokit/core": ">=4" } }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, - "engines": { - "node": ">=10" + "peerDependencies": { + "@octokit/core": ">=3" } }, - "node_modules/dotignore": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", - "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", + "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", "dev": true, "dependencies": { - "minimatch": "^3.0.4" + "@octokit/types": "^10.0.0" }, - "bin": { - "ignored": "bin/ignored" + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=3" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/earcut": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", + "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", + "dev": true, "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "@octokit/openapi-types": "^18.0.0" } }, - "node_modules/electron-to-chromium": { - "version": "1.4.240", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.240.tgz", - "integrity": "sha512-r20dUOtZ4vUPTqAajDGonIM1uas5tf85Up+wPdtNBNvBSqGCfkpvMVvQ1T8YJzPV9/Y9g3FbUDcXb94Rafycow==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "node_modules/@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "dev": true, + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, "engines": { - "node": ">= 4" + "node": ">= 14" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "dev": true, "dependencies": { - "iconv-lite": "^0.6.2" + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/@octokit/rest": { + "version": "19.0.13", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.13.tgz", + "integrity": "sha512-/EzVox5V9gYGdbAI+ovYj3nXQT1TtTHRT+0eZPcuC05UFSWO3mdO9UY1C0i2eLF9Un1ONJkAk+IEtYGAC+TahA==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@octokit/core": "^4.2.1", + "@octokit/plugin-paginate-rest": "^6.1.2", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^7.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "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/@octokit/tsconfig": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", + "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", + "dev": true + }, + "node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", "dev": true, "dependencies": { - "once": "^1.4.0" + "@octokit/openapi-types": "^18.0.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", "dev": true, + "hasInstallScript": true, "dependencies": { - "ansi-colors": "^4.1.1" + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" }, "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "node": ">= 10.0.0" + }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "optional": true, "engines": { - "node": ">=6" + "node": ">=14" } }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "node_modules/@playwright/experimental-ct-core": { + "version": "1.35.1", + "resolved": "https://registry.npmjs.org/@playwright/experimental-ct-core/-/experimental-ct-core-1.35.1.tgz", + "integrity": "sha512-NSoUf6JDLeZFy0HiENwA1GkIwZHvg5KrygnZknwWs7O8yksYLsmiuMb09sf2zsZmfYgVen401SNgf3KfekbweA==", "dev": true, + "dependencies": { + "@playwright/test": "1.35.1", + "vite": "^4.3.9" + }, "bin": { - "envinfo": "dist/cli.js" + "playwright": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=16" } }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "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/@playwright/experimental-ct-react": { + "version": "1.35.1", + "resolved": "https://registry.npmjs.org/@playwright/experimental-ct-react/-/experimental-ct-react-1.35.1.tgz", + "integrity": "sha512-QXbjAJRr0eJkEsPyC5Q+nQyeVpVE/vrKUbo8yy5uZwHSy7KRsvyGkGPnOV5JMoeyEfK66Sx43I363tgzNByySw==", + "dev": true, "dependencies": { - "is-arrayish": "^0.2.1" + "@playwright/experimental-ct-core": "1.35.1", + "@vitejs/plugin-react": "^4.0.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" } }, - "node_modules/es-abstract": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz", - "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==", + "node_modules/@playwright/test": { + "version": "1.35.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.35.1.tgz", + "integrity": "sha512-b5YoFe6J9exsMYg0pQAobNDR85T1nLumUYgUTtKm4d21iX2L7WqKq9dW8NGJ+2vX0etZd+Y7UeuqsxDXm9+5ZA==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.2", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "@types/node": "*", + "playwright-core": "1.35.1" + }, + "bin": { + "playwright": "cli.js" }, "engines": { - "node": ">= 0.4" + "node": ">=16" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "node_modules/@polka/url": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz", + "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==", "dev": true }, - "node_modules/es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/popperjs" } }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "node_modules/@probe.gl/env": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.6.0.tgz", + "integrity": "sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } }, - "node_modules/es-module-shims": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-1.4.3.tgz", - "integrity": "sha512-qMUb+8lrpqZ6jW/kelQU7XD1hR71hmxKhIDmmVwsQNQaAYh0fzErnKSj9Xi80L0ubEjnzCDD5ha7oZehkwFApg==" + "node_modules/@probe.gl/log": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.6.0.tgz", + "integrity": "sha512-hjpyenpEvOdowgZ1qMeCJxfRD4JkKdlXz0RC14m42Un62NtOT+GpWyKA4LssT0+xyLULCByRAtG2fzZorpIAcA==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.6.0" + } }, - "node_modules/es-shim-unscopables": { + "node_modules/@probe.gl/stats": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.6.0.tgz", + "integrity": "sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@radix-ui/number": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz", + "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==", "dependencies": { - "has": "^1.0.3" + "@babel/runtime": "^7.13.10" } }, - "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/@radix-ui/primitive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", + "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@babel/runtime": "^7.13.10" } }, - "node_modules/esbuild": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.6.tgz", - "integrity": "sha512-sgLOv3l4xklvXzzczhRwKRotyrfyZ2i1fCS6PTOLPd9wevDPArGU8HFtHrHCOcsMwTjLjzGm15gvC8uxVzQf+w==", - "dev": true, - "hasInstallScript": true, - "peer": true, - "bin": { - "esbuild": "bin/esbuild" + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", + "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", + "dependencies": { + "@babel/runtime": "^7.13.10" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", + "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", + "dependencies": { + "@babel/runtime": "^7.13.10" }, - "optionalDependencies": { - "@esbuild/linux-loong64": "0.15.6", - "esbuild-android-64": "0.15.6", - "esbuild-android-arm64": "0.15.6", - "esbuild-darwin-64": "0.15.6", - "esbuild-darwin-arm64": "0.15.6", - "esbuild-freebsd-64": "0.15.6", - "esbuild-freebsd-arm64": "0.15.6", - "esbuild-linux-32": "0.15.6", - "esbuild-linux-64": "0.15.6", - "esbuild-linux-arm": "0.15.6", - "esbuild-linux-arm64": "0.15.6", - "esbuild-linux-mips64le": "0.15.6", - "esbuild-linux-ppc64le": "0.15.6", - "esbuild-linux-riscv64": "0.15.6", - "esbuild-linux-s390x": "0.15.6", - "esbuild-netbsd-64": "0.15.6", - "esbuild-openbsd-64": "0.15.6", - "esbuild-sunos-64": "0.15.6", - "esbuild-windows-32": "0.15.6", - "esbuild-windows-64": "0.15.6", - "esbuild-windows-arm64": "0.15.6" + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/esbuild-android-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.6.tgz", - "integrity": "sha512-Z1CHSgB1crVQi2LKSBwSkpaGtaloVz0ZIYcRMsvHc3uSXcR/x5/bv9wcZspvH/25lIGTaViosciS/NS09ERmVA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" + "node_modules/@radix-ui/react-direction": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz", + "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.6.tgz", - "integrity": "sha512-mvM+gqNxqKm2pCa3dnjdRzl7gIowuc4ga7P7c3yHzs58Im8v/Lfk1ixSgQ2USgIywT48QWaACRa3F4MG7djpSw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" + "node_modules/@radix-ui/react-presence": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", + "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.6.tgz", - "integrity": "sha512-BsfVt3usScAfGlXJiGtGamwVEOTM8AiYiw1zqDWhGv6BncLXCnTg1As+90mxWewdTZKq3iIy8s9g8CKkrrAXVw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.1.tgz", + "integrity": "sha512-fHbmislWVkZaIdeF6GZxF0A/NH/3BjrGIYj+Ae6eTmTCr7EB0RQAAVEiqsXK6p3/JcRqVSBQoceZroj30Jj3XA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.1" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.6.tgz", - "integrity": "sha512-CnrAeJaEpPakUobhqO4wVSA4Zm6TPaI5UY4EsI62j9mTrjIyQPXA1n4Ju6Iu5TVZRnEqV6q8blodgYJ6CJuwCA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.2.tgz", + "integrity": "sha512-k8VseTxI26kcKJaX0HPwkvlNBPTs56JRdYzcZ/vzrNUkDlvXBy8sMc7WvCpYzZkHgb+hd72VW9MqkqecGtuNgg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.0", + "@radix-ui/primitive": "1.0.0", + "@radix-ui/react-compose-refs": "1.0.0", + "@radix-ui/react-context": "1.0.0", + "@radix-ui/react-direction": "1.0.0", + "@radix-ui/react-presence": "1.0.0", + "@radix-ui/react-primitive": "1.0.1", + "@radix-ui/react-use-callback-ref": "1.0.0", + "@radix-ui/react-use-layout-effect": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.6.tgz", - "integrity": "sha512-+qFdmqi+jkAsxsNJkaWVrnxEUUI50nu6c3MBVarv3RCDCbz7ZS1a4ZrdkwEYFnKcVWu6UUE0Kkb1SQ1yGEG6sg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" + "node_modules/@radix-ui/react-slot": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.1.tgz", + "integrity": "sha512-avutXAFL1ehGvAXtPquu0YK5oz6ctS474iM3vNGQIkswrVhdrS52e3uoMQBzZhNRAIE0jBnUyXWNmSjGHhCFcw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.6.tgz", - "integrity": "sha512-KtQkQOhnNciXm2yrTYZMD3MOm2zBiiwFSU+dkwNbcfDumzzUprr1x70ClTdGuZwieBS1BM/k0KajRQX7r504Xw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", + "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/esbuild-linux-32": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.6.tgz", - "integrity": "sha512-IAkDNz3TpxwISTGVdQijwyHBZrbFgLlRi5YXcvaEHtgbmayLSDcJmH5nV1MFgo/x2QdKcHBkOYHdjhKxUAcPwg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", + "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0 || ^18.0" } }, - "node_modules/esbuild-linux-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.6.tgz", - "integrity": "sha512-gQPksyrEYfA4LJwyfTQWAZaVZCx4wpaLrSzo2+Xc9QLC+i/sMWmX31jBjrn4nLJCd79KvwCinto36QC7BEIU/A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" + "node_modules/@react-dnd/asap": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-4.0.1.tgz", + "integrity": "sha512-kLy0PJDDwvwwTXxqTFNAAllPHD73AycE9ypWeln/IguoGBEbvFcPDbCV03G52bEcC5E+YgupBE0VzHGdC8SIXg==" + }, + "node_modules/@react-dnd/invariant": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-2.0.0.tgz", + "integrity": "sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw==" + }, + "node_modules/@react-dnd/shallowequal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz", + "integrity": "sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==" + }, + "node_modules/@react-loosely-lazy/manifest": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@react-loosely-lazy/manifest/-/manifest-1.1.0.tgz", + "integrity": "sha512-zUten4NRR+DCTkh7EgCSRT+slnCvI4QfcShiahp0htO8uacyfZ28ocqwffKSiRiIj5SynQSO6noAO3FPPWpNEw==" + }, + "node_modules/@remirror/core-constants": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-2.0.1.tgz", + "integrity": "sha512-ZR4aihtnnT9lMbhh5DEbsriJRlukRXmLZe7HmM+6ufJNNUDoazc75UX26xbgQlNUqgAqMcUdGFAnPc1JwgAdLQ==", + "dependencies": { + "@babel/runtime": "^7.21.0" } }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.6.tgz", - "integrity": "sha512-xZ0Bq2aivsthDjA/ytQZzxrxIZbG0ATJYMJxNeOIBc1zUjpbVpzBKgllOZMsTSXMHFHGrow6TnCcgwqY0+oEoQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" + "node_modules/@remirror/core-helpers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@remirror/core-helpers/-/core-helpers-2.0.3.tgz", + "integrity": "sha512-LqIPF4stGG69l9qu/FFicv9d9B+YaItzgDMC5A0CEvDQfKkGD3BfabLmfpnuWbsc06oKGdTduilgWcALLZoYLg==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@linaria/core": "4.2.9", + "@remirror/core-constants": "^2.0.1", + "@remirror/types": "^1.0.1", + "@types/object.omit": "^3.0.0", + "@types/object.pick": "^1.3.2", + "@types/throttle-debounce": "^2.1.0", + "case-anything": "^2.1.10", + "dash-get": "^1.0.2", + "deepmerge": "^4.3.1", + "fast-deep-equal": "^3.1.3", + "make-error": "^1.3.6", + "object.omit": "^3.0.0", + "object.pick": "^1.3.0", + "throttle-debounce": "^3.0.1" } }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.6.tgz", - "integrity": "sha512-aovDkclFa6C9EdZVBuOXxqZx83fuoq8097xZKhEPSygwuy4Lxs8J4anHG7kojAsR+31lfUuxzOo2tHxv7EiNHA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" + "node_modules/@remirror/types": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@remirror/types/-/types-1.0.1.tgz", + "integrity": "sha512-VlZQxwGnt1jtQ18D6JqdIF+uFZo525WEqrfp9BOc3COPpK4+AWCgdnAWL+ho6imWcoINlGjR/+3b6y5C1vBVEA==", + "dependencies": { + "type-fest": "^2.19.0" } }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.6.tgz", - "integrity": "sha512-wVpW8wkWOGizsCqCwOR/G3SHwhaecpGy3fic9BF1r7vq4djLjUcA8KunDaBCjJ6TgLQFhJ98RjDuyEf8AGjAvw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "node_modules/@remirror/types/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "engines": { - "node": ">=12" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.6.tgz", - "integrity": "sha512-z6w6gsPH/Y77uchocluDC8tkCg9rfkcPTePzZKNr879bF4tu7j9t255wuNOCE396IYEGxY7y8u2HJ9i7kjCLVw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "node_modules/@remix-run/router": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.0.tgz", + "integrity": "sha512-Eu1V3kz3mV0wUpVTiFHuaT8UD1gj/0VnoFHQYX35xlslQUpe8CuYoKFn9d4WZFHm3yDywz6ALZuGdnUPKrNeAw==", "engines": { - "node": ">=12" + "node": ">=14" } }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.6.tgz", - "integrity": "sha512-pfK/3MJcmbfU399TnXW5RTPS1S+ID6ra+CVj9TFZ2s0q9Ja1F5A1VirUUvViPkjiw+Kq3zveyn6U09Wg1zJXrw==", - "cpu": [ - "riscv64" - ], + "node_modules/@rollup/plugin-inject": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.3.tgz", + "integrity": "sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.27.0" + }, "engines": { - "node": ">=12" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.6.tgz", - "integrity": "sha512-OZeeDu32liefcwAE63FhVqM4heWTC8E3MglOC7SK0KYocDdY/6jyApw0UDkDHlcEK9mW6alX/SH9r3PDjcCo/Q==", - "cpu": [ - "s390x" - ], + "node_modules/@rollup/plugin-inject/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@rollup/plugin-inject/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, "engines": { "node": ">=12" } }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.6.tgz", - "integrity": "sha512-kaxw61wcHMyiEsSsi5ut1YYs/hvTC2QkxJwyRvC2Cnsz3lfMLEu8zAjpBKWh9aU/N0O/gsRap4wTur5GRuSvBA==", - "cpu": [ - "x64" - ], + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "peer": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, "engines": { - "node": ">=12" + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.6.tgz", - "integrity": "sha512-CuoY60alzYfIZapUHqFXqXbj88bbRJu8Fp9okCSHRX2zWIcGz4BXAHXiG7dlCye5nFVrY72psesLuWdusyf2qw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "peer": true, - "engines": { - "node": ">=12" + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz", + "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==", + "dev": true + }, + "node_modules/@stitches/core": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@stitches/core/-/core-1.2.8.tgz", + "integrity": "sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==" + }, + "node_modules/@supabase/auth-ui-react": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@supabase/auth-ui-react/-/auth-ui-react-0.4.2.tgz", + "integrity": "sha512-NLP1udNtbteWDZYUoJKD/sDzi1BeZpS+CvUk1D0FwHevlVDT1fUf27sVLtrAgchSIQxHwZHTiUPJC9auCF3Zyw==", + "dependencies": { + "@stitches/core": "^1.2.8", + "@supabase/auth-ui-shared": "0.1.6", + "prop-types": "^15.7.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "peerDependencies": { + "@supabase/supabase-js": "^2.21.0" } }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.6.tgz", - "integrity": "sha512-1ceefLdPWcd1nW/ZLruPEYxeUEAVX0YHbG7w+BB4aYgfknaLGotI/ZvPWUZpzhC8l1EybrVlz++lm3E6ODIJOg==", - "cpu": [ - "x64" - ], + "node_modules/@supabase/auth-ui-shared": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@supabase/auth-ui-shared/-/auth-ui-shared-0.1.6.tgz", + "integrity": "sha512-dBlP2XR5KSSCBMgkWJMkc2UVA21V5AobKmekwIiHVvyVtzAiFqE5XWJiPV+kMlnRLzFXDeA0Z/CqdKTL/Kbs4A==", + "peerDependencies": { + "@supabase/supabase-js": "^2.21.0" + } + }, + "node_modules/@supabase/functions-js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.2.tgz", + "integrity": "sha512-QCR6pwJs9exCl37bmpMisUd6mf+0SUBJ6mUpiAjEkSJ/+xW8TCuO14bvkWHADd5hElJK9MxNlMQXxSA4DRz9nQ==", + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@supabase/gotrue-js": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.31.0.tgz", + "integrity": "sha512-YcwlbbNfedlue/HVIXtYBb4fuOrs29gNOTl6AmyxPp4zryRxzFvslVN9kmLDBRUAVU9fnPJh2bgOR3chRjJX5w==", + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@supabase/postgrest-js": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.7.1.tgz", + "integrity": "sha512-xPRYLaZrkLbXNlzmHW6Wtf9hmcBLjjI5xUz2zj8oE2hgXGaYoZBBkpN9bmW9i17Z1f6Ujxa942AqK439XOA36A==", + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.7.3.tgz", + "integrity": "sha512-c7TzL81sx2kqyxsxcDduJcHL9KJdCOoKimGP6lQSqiZKX42ATlBZpWbyy9KFGFBjAP4nyopMf5JhPi2ZH9jyNw==", + "dependencies": { + "@types/phoenix": "^1.5.4", + "@types/websocket": "^1.0.3", + "websocket": "^1.0.34" + } + }, + "node_modules/@supabase/storage-js": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.1.tgz", + "integrity": "sha512-nkR0fQA9ScAtIKA3vNoPEqbZv1k5B5HVRYEvRWdlP6mUpFphM9TwPL2jZ/ztNGMTG5xT6SrHr+H7Ykz8qzbhjw==", + "dependencies": { + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.26.0.tgz", + "integrity": "sha512-RXmTPTobaYAwkSobadHZmEVLmzX3SGrtRZIGfLWnLv92VzBRrjuXn0a+bJqKl50GUzsyqPA+j5pod7EwMkcH5A==", + "dependencies": { + "@supabase/functions-js": "^2.1.0", + "@supabase/gotrue-js": "^2.31.0", + "@supabase/postgrest-js": "^1.7.0", + "@supabase/realtime-js": "^2.7.3", + "@supabase/storage-js": "^2.5.1", + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/esbuild-windows-32": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.6.tgz", - "integrity": "sha512-pBqdOsKqCD5LRYiwF29PJRDJZi7/Wgkz46u3d17MRFmrLFcAZDke3nbdDa1c8YgY78RiemudfCeAemN8EBlIpA==", - "cpu": [ - "ia32" - ], + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/esbuild-windows-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.6.tgz", - "integrity": "sha512-KpPOh4aTOo//g9Pk2oVAzXMpc9Sz9n5A9sZTmWqDSXCiiachfFhbuFlsKBGATYCVitXfmBIJ4nNYYWSOdz4hQg==", - "cpu": [ - "x64" - ], + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.6.tgz", - "integrity": "sha512-DB3G2x9OvFEa00jV+OkDBYpufq5x/K7a6VW6E2iM896DG4ZnAvJKQksOsCPiM1DUaa+DrijXAQ/ZOcKAqf/3Hg==", - "cpu": [ - "arm64" - ], + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, "engines": { - "node": ">=6.0" + "node": ">=10" }, - "optionalDependencies": { - "source-map": "~0.6.1" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", "dev": true, "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", "dev": true, + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", "dev": true, "dependencies": { - "prelude-ls": "~1.1.2" + "@babel/types": "^7.12.6" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/eslint": { - "version": "8.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", - "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.1", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "@humanwhocodes/module-importer": "^1.0.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "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.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint" + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", "dev": true, "dependencies": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=10" }, - "peerDependencies": { - "eslint": "^8.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", "dev": true, "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, + "node_modules/@syncedstore/yjs-reactive-bindings": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@syncedstore/yjs-reactive-bindings/-/yjs-reactive-bindings-0.5.1.tgz", + "integrity": "sha512-M1/YrK0gAiQAhTCekXtp+qAq4DVUdPCsEdsJ2Tcqo176WHcsjr0yOqjAYrva1Phh4DPTVx1GPWTCUWpxUBR1ug==", "dependencies": { - "ms": "^2.1.1" + "@types/eslint": "6.8.0" + }, + "peerDependencies": { + "yjs": "^13.5.13" } }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dev": true, + "node_modules/@tippyjs/react": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz", + "integrity": "sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==", "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" + "tippy.js": "^6.3.1" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/eslint-module-utils/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/@tiptap/core": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.3.tgz", + "integrity": "sha512-jLyVIWAdjjlNzrsRhSE2lVL/7N8228/1R1QtaVU85UlMIwHFAcdzhD8FeiKkqxpTnGpaDVaTy7VNEtEgaYdCyA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/pm": "^2.0.0" } }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": ">=12.0.0" + "node_modules/@tiptap/extension-bold": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.0.3.tgz", + "integrity": "sha512-OGT62fMRovSSayjehumygFWTg2Qn0IDbqyMpigg/RUAsnoOI2yBZFVrdM2gk1StyoSay7gTn2MLw97IUfr7FXg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" + "@tiptap/core": "^2.0.0" } }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, + "node_modules/@tiptap/extension-bubble-menu": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.0.3.tgz", + "integrity": "sha512-lPt1ELrYCuoQrQEUukqjp9xt38EwgPUwaKHI3wwt2Rbv+C6q1gmRsK1yeO/KqCNmFxNqF2p9ZF9srOnug/RZDQ==", "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "tippy.js": "^6.3.7" }, - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" } }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "node_modules/@tiptap/extension-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.0.3.tgz", + "integrity": "sha512-LsVCKVxgBtkstAr1FjxN8T3OjlC76a2X8ouoZpELMp+aXbjqyanCKzt+sjjUhE4H0yLFd4v+5v6UFoCv4EILiw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" + "node_modules/@tiptap/extension-collaboration": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration/-/extension-collaboration-2.0.3.tgz", + "integrity": "sha512-oA+5Dx+L1GfFrP2tUol8lfKNrLitYgHBaBJbAiqh/QPKVuUiEWgFS2W1oYaSGmwYjzdPCVJqXyQLzSJvEdnBWQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0", + "y-prosemirror": "1.0.20" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node_modules/@tiptap/extension-collaboration-cursor": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration-cursor/-/extension-collaboration-cursor-2.0.3.tgz", + "integrity": "sha512-pBcsk3ZkK8IQK6UP/a7Y4rjZRW/anhxFaTCcTxrUvn/azqRI+mcCsRwbc5lNLzcYq5JVOHGROjriNmGGkIr5jA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } + "@tiptap/core": "^2.0.0", + "y-prosemirror": "1.0.20" } }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" + "node_modules/@tiptap/extension-dropcursor": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.3.tgz", + "integrity": "sha512-McthMrfusn6PjcaynJLheZJcXto8TaIW5iVitYh8qQrDXr31MALC/5GvWuiswmQ8bAXiWPwlLDYE/OJfwtggaw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" } }, - "node_modules/eslint-plugin-jsx-a11y/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/eslint-plugin-jsx-a11y/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/eslint-plugin-react": { - "version": "7.31.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.1.tgz", - "integrity": "sha512-j4/2xWqt/R7AZzG8CakGHA6Xa/u7iR8Q3xCxY+AUghdT92bnIDOBEefV456OeH0QvBcroVc0eyvrrLSyQGYIfg==", - "dev": true, + "node_modules/@tiptap/extension-floating-menu": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.0.3.tgz", + "integrity": "sha512-zN1vRGRvyK3pO2aHRmQSOTpl4UJraXYwKYM009n6WviYKUNm0LPGo+VD4OAtdzUhPXyccnlsTv2p6LIqFty6Bg==", "dependencies": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" + "tippy.js": "^6.3.7" }, - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/@tiptap/extension-gapcursor": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.3.tgz", + "integrity": "sha512-6I9EzzsYOyyqDvDvxIK6Rv3EXB+fHKFj8ntHO8IXmeNJ6pkhOinuXVsW6Yo7TcDYoTj4D5I2MNFAW2rIkgassw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" + "node_modules/@tiptap/extension-hard-break": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.3.tgz", + "integrity": "sha512-RCln6ARn16jvKTjhkcAD5KzYXYS0xRMc0/LrHeV8TKdCd4Yd0YYHe0PU4F9gAgAfPQn7Dgt4uTVJLN11ICl8sQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "@tiptap/core": "^2.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, + "node_modules/@tiptap/extension-history": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.0.3.tgz", + "integrity": "sha512-00KHIcJ8kivn2ARI6NQYphv2LfllVCXViHGm0EhzDW6NQxCrriJKE3tKDcTFCu7LlC5doMpq9Z6KXdljc4oVeQ==", "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/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" + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" } }, - "node_modules/eslint-plugin-testing-library": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.6.0.tgz", - "integrity": "sha512-y63TRzPhGCMNsnUwMGJU1MFWc/3GvYw+nzobp9QiyNTTKsgAt5RKAOT1I34+XqVBpX1lC8bScoOjCkP7iRv0Mw==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "^5.13.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.3.tgz", + "integrity": "sha512-SZRUSh07b/M0kJHNKnfBwBMWrZBEm/E2LrK1NbluwT3DBhE+gvwiEdBxgB32zKHNxaDEXUJwUIPNC3JSbKvPUA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" } }, - "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": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "node_modules/@tiptap/extension-italic": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.0.3.tgz", + "integrity": "sha512-cfS5sW0gu7qf4ihwnLtW/QMTBrBEXaT0sJl3RwkhjIBg/65ywJKE5Nz9ewnQHmDeT18hvMJJ1VIb4j4ze9jj9A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "peerDependencies": { + "@tiptap/core": "^2.0.0" } }, - "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, + "node_modules/@tiptap/extension-link": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.0.3.tgz", + "integrity": "sha512-H72tXQ5rkVCkAhFaf08fbEU7EBUCK0uocsqOF+4th9sOlrhfgyJtc8Jv5EXPDpxNgG5jixSqWBo0zKXQm9s9eg==", "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "linkifyjs": "^4.1.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, "peerDependencies": { - "eslint": ">=5" - } - }, - "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, - "engines": { - "node": ">=10" - } - }, - "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, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0" } }, - "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" - }, + "node_modules/@tiptap/extension-paragraph": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.0.3.tgz", + "integrity": "sha512-a+tKtmj4bU3GVCH1NE8VHWnhVexxX5boTVxsHIr4yGG3UoKo1c5AO7YMaeX2W5xB5iIA+BQqOPCDPEAx34dd2A==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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" + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@tiptap/core": "^2.0.0" } }, - "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, - "dependencies": { - "is-glob": "^4.0.3" + "node_modules/@tiptap/extension-strike": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.0.3.tgz", + "integrity": "sha512-RO4/EYe2iPD6ifDHORT8fF6O9tfdtnzxLGwZIKZXnEgtweH+MgoqevEzXYdS+54Wraq4TUQGNcsYhe49pv7Rlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" }, - "engines": { - "node": ">=10.13.0" + "peerDependencies": { + "@tiptap/core": "^2.0.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, + "node_modules/@tiptap/extension-text": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.0.3.tgz", + "integrity": "sha512-LvzChcTCcPSMNLUjZe/A9SHXWGDHtvk73fR7CBqAeNU0MxhBPEBI03GFQ6RzW3xX0CmDmjpZoDxFMB+hDEtW1A==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" } }, - "node_modules/eslint/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" - }, + "node_modules/@tiptap/extension-underline": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.0.3.tgz", + "integrity": "sha512-oMYa7qib/5wJjpUp79GZEe+E/iyf1oZBsgiG26IspEtVTHZmpn3+Ktud7l43y/hpTeEzFTKOF1/uVbayHtSERg==", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" } }, - "node_modules/eslint/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" + "node_modules/@tiptap/pm": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.0.3.tgz", + "integrity": "sha512-I9dsInD89Agdm1QjFRO9dmJtU1ldVSILNPW0pEhv9wYqYVvl4HUj/JMtYNqu2jWrCHNXQcaX/WkdSdvGJtmg5g==", + "dependencies": { + "prosemirror-changeset": "^2.2.0", + "prosemirror-collab": "^1.3.0", + "prosemirror-commands": "^1.3.1", + "prosemirror-dropcursor": "^1.5.0", + "prosemirror-gapcursor": "^1.3.1", + "prosemirror-history": "^1.3.0", + "prosemirror-inputrules": "^1.2.0", + "prosemirror-keymap": "^1.2.0", + "prosemirror-markdown": "^1.10.1", + "prosemirror-menu": "^1.2.1", + "prosemirror-model": "^1.18.1", + "prosemirror-schema-basic": "^1.2.0", + "prosemirror-schema-list": "^1.2.2", + "prosemirror-state": "^1.4.1", + "prosemirror-tables": "^1.3.0", + "prosemirror-trailing-node": "^2.0.2", + "prosemirror-transform": "^1.7.0", + "prosemirror-view": "^1.28.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0" } }, - "node_modules/eslint/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, + "node_modules/@tiptap/react": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-2.0.3.tgz", + "integrity": "sha512-fiAh8Lk+/NBPAR/PE4Kc/aLiBUbUYI/CpAopz8DI9eInNyV8h8LAGa9uFILJQF/TNu0tclJ4rV0sWc7Se0FZMw==", "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" + "@tiptap/extension-bubble-menu": "^2.0.3", + "@tiptap/extension-floating-menu": "^2.0.3" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^2.0.0", + "@tiptap/pm": "^2.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" } }, - "node_modules/eslint/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==", + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10" } }, - "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" }, - "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/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } + "node_modules/@typecell-org/common": { + "resolved": "packages/common", + "link": true }, - "node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "node_modules/@typecell-org/editor": { + "resolved": "packages/editor", + "link": true + }, + "node_modules/@typecell-org/engine": { + "resolved": "packages/engine", + "link": true + }, + "node_modules/@typecell-org/packager": { + "resolved": "packages/packager", + "link": true + }, + "node_modules/@typecell-org/parsers": { + "resolved": "packages/parsers", + "link": true + }, + "node_modules/@typecell-org/server": { + "resolved": "packages/server", + "link": true + }, + "node_modules/@types/chai": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", "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/@types/chai-subset": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", + "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/chai": "*" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" + "node_modules/@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "dependencies": { + "@types/ms": "*" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, + "node_modules/@types/eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-hqzmggoxkOubpgTdcOltkfc5N8IftRJqU70d1jbOISjjZVPvjcr+CLi2CI70hx1SUIRkLgpglTy9w28nGe2Hsw==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/exenv": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", - "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==" }, - "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/@types/extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/extend/-/extend-3.0.1.tgz", + "integrity": "sha512-R1g/VyKFFI2HLC1QGAeTtCBWCo6n75l41OnsVYNbmKG+kempOESaodf6BeJyUM3Q0rKa/NQcTHbB2+66lNnxLw==" }, - "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/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" + "@types/node": "*" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ] + "node_modules/@types/geojson": { + "version": "7946.0.10", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", + "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" }, - "node_modules/fake-indexeddb": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-3.1.8.tgz", - "integrity": "sha512-7umIgcdnDfNcjw0ZaoD6yR2BflngKmPsyzZC+sV2fdttwz5bH6B6CCaNzzD+MURfRg8pvr/aL0trfNx65FLiDg==", - "dev": true, + "node_modules/@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==" + }, + "node_modules/@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", "dependencies": { - "realistic-structured-clone": "^2.0.1" + "@types/unist": "*" } }, - "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==" + "node_modules/@types/highlight.js": { + "version": "9.12.4", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", + "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==", + "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, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" } }, - "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==" + "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/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "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==", + "node_modules/@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.195", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", + "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==", + "dev": true + }, + "node_modules/@types/lowlight": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@types/lowlight/-/lowlight-0.0.2.tgz", + "integrity": "sha512-37DldsUs2l4rXI2YQgVn+NKVEaaUbBIzJg3eYzAXimGrtre8vxqE65wAGqYs9W6IsoOfgj74se/rBc9yoRXOHQ==", + "dev": true + }, + "node_modules/@types/markdown-it": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-10.0.3.tgz", + "integrity": "sha512-daHJk22isOUvNssVGF2zDnnSyxHhFYhtjeX4oQaKD6QzL3ZR1QSgiD1g+Q6/WSWYVogNXYDXODtbgW/WiFCtyw==", + "dev": true, "dependencies": { - "reusify": "^1.0.4" + "@types/highlight.js": "^9.7.0", + "@types/linkify-it": "*", + "@types/mdurl": "*", + "highlight.js": "^9.7.0" } }, - "node_modules/fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", + "node_modules/@types/mdast": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz", + "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==", "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" + "@types/unist": "*" } }, - "node_modules/fbjs-css-vars": { + "node_modules/@types/mdurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "dev": true }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true }, - "node_modules/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": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true }, - "node_modules/filebridge-client": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/filebridge-client/-/filebridge-client-0.1.5.tgz", - "integrity": "sha512-M+RUw+7mufI8IQ+cgiWAmXYmm4kGdABLKHdVgdv0gkNwCc3SNzqbY7d91NMemN9jeCZa0+xLzH/tEfuzEQo65A==", - "dependencies": { - "vscode-lib": "^0.1.2" - } + "node_modules/@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true }, - "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==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" }, - "node_modules/final-form": { - "version": "4.20.7", - "resolved": "https://registry.npmjs.org/final-form/-/final-form-4.20.7.tgz", - "integrity": "sha512-ii3X9wNfyBYFnDPunYN5jh1/HAvtOZ9aJI/TVk0MB86hZuOeYkb+W5L3icgwW9WWNztZR6MDU3En6eoZTUoFPg==", - "dependencies": { - "@babel/runtime": "^7.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/final-form" - } + "node_modules/@types/node": { + "version": "20.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", + "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==" }, - "node_modules/final-form-focus": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/final-form-focus/-/final-form-focus-1.1.2.tgz", - "integrity": "sha512-Gd+Bd2Ll7ijo3/sd6kJ/bwLkhc2bUJPxTON6fIqee/008EJpACWhT+zoWCm9q6NcfMcWRS+Sp5ikRX8iqdXeGQ==", - "peerDependencies": { - "final-form": ">=1.3.0" - } + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true }, - "node_modules/find-replace": { + "node_modules/@types/object.omit": { "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==", - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } + "resolved": "https://registry.npmjs.org/@types/object.omit/-/object.omit-3.0.0.tgz", + "integrity": "sha512-I27IoPpH250TUzc9FzXd0P1BV/BMJuzqD3jOz98ehf9dQqGkxlq+hO1bIqZGWqCg5bVOy0g4AUVJtnxe0klDmw==" }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + "node_modules/@types/object.pick": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/object.pick/-/object.pick-1.3.2.tgz", + "integrity": "sha512-sn7L+qQ6RLPdXRoiaE7bZ/Ek+o4uICma/lBFPyJEKDTPTBP1W8u0c4baj3EiS4DiqLs+Hk+KUGvMVJtAw3ePJg==" }, - "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/@types/offscreencanvas": { + "version": "2019.7.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", + "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==" }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "dependencies": { - "micromatch": "^4.0.2" - } + "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==" }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } + "node_modules/@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==" }, - "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": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } + "node_modules/@types/phoenix": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.0.tgz", + "integrity": "sha512-qwfpsHmFuhAS/dVd4uBIraMxRd56vwBUYQGZ6GpXnFuM2XMRFJbIyruFKKlW2daQliuYZwe0qfn/UjFCDKic5g==" }, - "node_modules/flatbuffers": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", - "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==" + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", "dev": true }, - "node_modules/focus-lock": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.11.2.tgz", - "integrity": "sha512-pZ2bO++NWLHhiKkgP1bEXHhR1/OjVcSvlCJ98aNJDFeb7H5OOQaO+SKOZle6041O9rv2tmbrO4JzClAvDUHf0g==", + "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/react": { + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", + "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", "dependencies": { - "tslib": "^2.0.3" - }, - "engines": { - "node": ">=10" + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" } }, - "node_modules/focus-trap": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-2.4.6.tgz", - "integrity": "sha512-vWZTPtBU6pBoyWZDRZJHkXsyP2ZCZBHE3DRVXnSVdQKH/mcDtu9S5Kz8CUDyIqpfZfLEyI9rjKJLnc4Y40BRBg==", + "node_modules/@types/react-dom": { + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", + "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", "dependencies": { - "tabbable": "^1.0.3" + "@types/react": "*" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, + "node_modules/@types/react-redux": { + "version": "7.1.25", + "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.25.tgz", + "integrity": "sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg==", "dependencies": { - "is-callable": "^1.1.3" + "@types/hoist-non-react-statics": "^3.3.0", + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0", + "redux": "^4.0.0" } }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, + "node_modules/@types/react-select": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@types/react-select/-/react-select-4.0.18.tgz", + "integrity": "sha512-uCPRMPshd96BwHuT7oCrFduiv5d6km3VwmtW7rVl9g4XetS3VoJ9nZo540LiwtQgaFcW96POwaxQDZDAyYaepg==", "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" + "@emotion/serialize": "^1.0.0", + "@types/react": "*", + "@types/react-dom": "*", + "@types/react-transition-group": "*" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "engines": { - "node": "*" + "node_modules/@types/react-transition-group": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.6.tgz", + "integrity": "sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew==", + "dependencies": { + "@types/react": "*" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" }, - "node_modules/fractional-indexing": { + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "node_modules/@types/speakingurl": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/@types/speakingurl/-/speakingurl-13.0.3.tgz", + "integrity": "sha512-nBHZAaNTEw1YG3ROL7HtTp7HjW8HD7DuFYbWoonUKTZHj7eyOt4vPzyMcc3+xgWNv7xi2rziaiBXHIq6wBeyrw==", + "dev": true + }, + "node_modules/@types/throttle-debounce": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fractional-indexing/-/fractional-indexing-2.1.0.tgz", - "integrity": "sha512-4tIVui+5dxsXe/BG7D9EzgNIDK9fEoBzjvAf9gFfxFDPo2LsPSjfFKB2QmtcvmioD2IlshtcJFXGEcDPTG6R/A==", - "engines": { - "node": ">=12" - } + "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz", + "integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==" }, - "node_modules/frontend-collective-react-dnd-scrollzone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/frontend-collective-react-dnd-scrollzone/-/frontend-collective-react-dnd-scrollzone-1.0.2.tgz", - "integrity": "sha512-me/D9PZJq9j/sjEjs/OPmm6V6nbaHbhgeQiwrWu0t35lhwAOKWc+QBzzKKcZQeboYTkgE8UvCD9el+5ANp+g5Q==", + "node_modules/@types/ua-parser-js": { + "version": "0.7.36", + "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.36.tgz", + "integrity": "sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, + "node_modules/@types/websocket": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.5.tgz", + "integrity": "sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==", "dependencies": { - "hoist-non-react-statics": "^3.1.0", - "lodash.throttle": "^4.0.1", - "prop-types": "^15.5.9", - "raf": "^3.2.0", - "react": "^16.3.0", - "react-display-name": "^0.2.0", - "react-dom": "^16.3.0" - }, - "peerDependencies": { - "react-dnd": "^7.3.0" + "@types/node": "*" } }, - "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==", + "node_modules/@types/zxcvbn": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.1.tgz", + "integrity": "sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w==", "dev": true }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz", + "integrity": "sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/type-utils": "5.60.0", + "@typescript-eslint/utils": "5.60.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.60.0.tgz", + "integrity": "sha512-ovid3u7CNBrr0Ct35LUPkNYH4e+z4Kc6dPfSG99oMmH9SfoEoefq09uSnJI4mUb/UM7a/peVM03G+MzLxrD16g==", "dev": true, "dependencies": { - "minipass": "^3.0.0" + "@typescript-eslint/utils": "5.60.0" }, "engines": { - "node": ">= 8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/@typescript-eslint/parser": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.0.tgz", + "integrity": "sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/typescript-estree": "5.60.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz", + "integrity": "sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ==", "dev": true, "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/visitor-keys": "5.60.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.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==", - "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/get-browser-rtc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz", - "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==" - }, - "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/@typescript-eslint/type-utils": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz", + "integrity": "sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g==", "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.60.0", + "@typescript-eslint/utils": "5.60.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "node_modules/@typescript-eslint/types": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.0.tgz", + "integrity": "sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA==", "dev": true, "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz", + "integrity": "sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ==", "dev": true, "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "get-pkg-repo": "src/cli.js" + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/visitor-keys": "5.60.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-pkg-repo/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/get-pkg-repo/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/get-pkg-repo/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": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/get-pkg-repo/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/@typescript-eslint/utils": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.0.tgz", + "integrity": "sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ==", "dev": true, "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.60.0", + "@typescript-eslint/types": "5.60.0", + "@typescript-eslint/typescript-estree": "5.60.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/get-port": { + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.0.0" } }, - "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==", + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.60.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz", + "integrity": "sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "@typescript-eslint/types": "5.60.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "node_modules/@typescript/vfs": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.4.0.tgz", + "integrity": "sha512-Pood7yv5YWMIX+yCHo176OnF8WUlKGImFG7XlsuH14Zb1YN5+dYD3uUtS7lqZtsH7tAveNUi2NzdpQCN0yRbaw==", "dependencies": { - "assert-plus": "^1.0.0" + "debug": "^4.1.1" } }, - "node_modules/git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.1.tgz", + "integrity": "sha512-g25lL98essfeSj43HJ0o4DMp0325XK0ITkxpgChzJU/CyemgyChtlxfnRbjfwxDGCTRxTiXtQAsdebQXKMRSOA==", "dev": true, "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" + "@babel/core": "^7.22.5", + "@babel/plugin-transform-react-jsx-self": "^7.22.5", + "@babel/plugin-transform-react-jsx-source": "^7.22.5", + "react-refresh": "^0.14.0" }, "engines": { - "node": ">=10" + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0" } }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", + "node_modules/@vitest/coverage-c8": { + "version": "0.24.5", + "resolved": "https://registry.npmjs.org/@vitest/coverage-c8/-/coverage-c8-0.24.5.tgz", + "integrity": "sha512-955yK/SdSBZPYrSXgXB0F+0JnOX5EY9kSL7ywJ4rNajmkFUhwLjuKm13Xb6YKSyIY/g5WvbBnyowqfNRxBJ3ww==", "dev": true, "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" + "c8": "^7.12.0", + "vitest": "0.24.5" }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vitest/coverage-c8/node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/@vitest/coverage-c8/node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "node_modules/@vitest/coverage-c8/node_modules/esbuild": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", + "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", "dev": true, - "dependencies": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, + "hasInstallScript": true, "bin": { - "git-semver-tags": "cli.js" + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10" - } - }, - "node_modules/git-semver-tags/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": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, + "node_modules/@vitest/coverage-c8/node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, "bin": { - "semver": "bin/semver.js" + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/git-up": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-6.0.0.tgz", - "integrity": "sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA==", + "node_modules/@vitest/coverage-c8/node_modules/strip-literal": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-0.4.2.tgz", + "integrity": "sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==", "dev": true, "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^7.0.2" + "acorn": "^8.8.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/git-url-parse": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-12.0.0.tgz", - "integrity": "sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q==", + "node_modules/@vitest/coverage-c8/node_modules/tinypool": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.1.tgz", + "integrity": "sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==", "dev": true, - "dependencies": { - "git-up": "^6.0.0" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "node_modules/@vitest/coverage-c8/node_modules/tinyspy": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.1.1.tgz", + "integrity": "sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==", "dev": true, - "dependencies": { - "ini": "^1.3.2" + "engines": { + "node": ">=14.0.0" } }, - "node_modules/github-buttons": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/github-buttons/-/github-buttons-2.22.0.tgz", - "integrity": "sha512-N5bk01s1WgK1FVtoeSUVkRkJpkaSu8yHMPcjye+PTa0jsRjMRNrYqVLgpUf2RA5Kvec05DfHYAT6/68fwkdqPw==" - }, - "node_modules/gl-matrix": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" - }, - "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "node_modules/@vitest/coverage-c8/node_modules/vite": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz", + "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" }, - "engines": { - "node": ">=12" + "bin": { + "vite": "bin/vite.js" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/@vitest/coverage-c8/node_modules/vitest": { + "version": "0.24.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.24.5.tgz", + "integrity": "sha512-zw6JhPUHtLILQDe5Q39b/SzoITkG+R7hcFjuthp4xsi6zpmfQPOZcHodZ+3bqoWl4EdGK/p1fuMiEwdxgbGLOA==", + "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "@types/chai": "^4.3.3", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "strip-literal": "^0.4.2", + "tinybench": "^2.3.1", + "tinypool": "^0.3.0", + "tinyspy": "^1.0.2", + "vite": "^3.0.0" + }, + "bin": { + "vitest": "vitest.mjs" }, "engines": { - "node": ">= 6" + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@vitest/expect": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.31.4.tgz", + "integrity": "sha512-tibyx8o7GUyGHZGyPgzwiaPaLDQ9MMuCOrc03BYT0nryUuhLbL7NV2r/q98iv5STlwMgaKuFJkgBW/8iPKwlSg==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "@vitest/spy": "0.31.4", + "@vitest/utils": "0.31.4", + "chai": "^4.3.7" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "node_modules/@vitest/runner": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.31.4.tgz", + "integrity": "sha512-Wgm6UER+gwq6zkyrm5/wbpXGF+g+UBB78asJlFkIOwyse0pz8lZoiC6SW5i4gPnls/zUcPLWS7Zog0LVepXnpg==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "@vitest/utils": "0.31.4", + "concordance": "^5.0.4", + "p-limit": "^4.0.0", + "pathe": "^1.1.0" }, - "engines": { - "node": ">=10" - } - }, - "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==", - "engines": { - "node": ">=4" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/@vitest/runner/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, "dependencies": { - "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" + "yocto-queue": "^1.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "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/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "node_modules/@vitest/runner/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true, "engines": { - "node": ">=4.x" - } - }, - "node_modules/hammerjs": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", - "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", - "engines": { - "node": ">=0.8.0" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "node_modules/@vitest/snapshot": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.31.4.tgz", + "integrity": "sha512-LemvNumL3NdWSmfVAMpXILGyaXPkZbG5tyl6+RQSdcHnTj6hvA49UAI8jzez9oQyE/FWLKRSNqTGzsHuk89LRA==", "dev": true, "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "pretty-format": "^27.5.1" }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "engines": { - "node": ">=4" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "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/@vitest/snapshot/node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "@jridgewell/sourcemap-codec": "^1.4.13" }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "node_modules/@vitest/spy": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.31.4.tgz", + "integrity": "sha512-3ei5ZH1s3aqbEyftPAzSuunGICRuhE+IXOmpURFdkm5ybUADk+viyQfejNk6q8M5QGX8/EVKw+QWMEP3DTJDag==", "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dependencies": { - "function-bind": "^1.1.1" + "tinyspy": "^2.1.0" }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/vitest" } }, - "node_modules/has-dynamic-import": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz", - "integrity": "sha512-X3fbtsZmwb6W7fJGR9o7x65fZoodygCrZ3TVycvghP62yYQfS0t4RS0Qcz+j5tQYUKeSWS09tHkWW6WhFV3XhQ==", + "node_modules/@vitest/utils": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.31.4.tgz", + "integrity": "sha512-DobZbHacWznoGUfYU8XDPY78UubJxXfMNY1+SUdOp1NsI34eopSA6aZMeaGu10waSOeYwE8lxrd/pLfT0RMxjQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "concordance": "^5.0.4", + "loupe": "^2.3.6", + "pretty-format": "^27.5.1" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/vitest" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", "dev": true, + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, "engines": { - "node": ">=8" + "node": ">=14.15.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "sprintf-js": "~1.0.2" } }, - "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==", - "engines": { - "node": ">= 0.4" + "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "argparse": "^2.0.1" }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, - "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, + "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==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", "bin": { - "he": "bin/he" + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/highlight.js": { - "version": "9.18.5", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", - "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==", - "deprecated": "Support has ended for 9.x series. Upgrade to @latest", + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, - "hasInstallScript": true, - "engines": { - "node": "*" + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" } }, - "node_modules/history": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", - "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", - "dependencies": { - "@babel/runtime": "^7.7.6" + "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, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" } }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "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": { - "lru-cache": "^6.0.0" + "debug": "4" }, "engines": { - "node": ">=10" + "node": ">= 6.0.0" } }, - "node_modules/hosted-git-info/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/agentkeepalive": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", + "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "debug": "^4.1.0", + "depd": "^2.0.0", + "humanize-ms": "^1.2.1" }, "engines": { - "node": ">=10" + "node": ">= 8.0.0" } }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "dependencies": { - "whatwg-encoding": "^2.0.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "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-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-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "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" }, - "engines": { - "node": ">= 6" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, + "node_modules/another-json": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/another-json/-/another-json-0.2.0.tgz", + "integrity": "sha512-/Ndrl68UQLhnCdsAzEXLMFuOR546o2qbYRqCglaNHbjXrwG1ayTcdwr3zkSGOGtGXDyR5X9nCFfnyG2AFJIsqg==" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">=6" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "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": { - "agent-base": "6", - "debug": "4" + "type-fest": "^0.21.3" }, "engines": { - "node": ">= 6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, + "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==", "engines": { - "node": ">=10.17.0" + "node": ">=8" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "ms": "^2.0.0" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "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/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true }, - "node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "dev": true, "dependencies": { - "minimatch": "^5.0.1" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, + "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==" + }, + "node_modules/aria-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", + "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", "dependencies": { - "brace-expansion": "^2.0.1" + "tslib": "^2.0.0" }, "engines": { "node": ">=10" } }, - "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/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dequal": "^2.0.3" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true }, - "node_modules/init-package-json": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", - "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "dependencies": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/init-package-json/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" + "node": ">= 0.4" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/init-package-json/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "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": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "node_modules/array.prototype.every": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.every/-/array.prototype.every-1.1.4.tgz", + "integrity": "sha512-Aui35iRZk1HHLRAyF7QP0KAnOnduaQ6fo6k1NVWfRc0xTs2AZ70ytlXvOmkC6Di4JmUs2Wv3DYzGtCQFSk5uGg==", "dev": true, "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "is-string": "^1.0.7" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/intl-messageformat": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz", - "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==", - "dependencies": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/fast-memoize": "1.2.1", - "@formatjs/icu-messageformat-parser": "2.1.0", - "tslib": "^2.1.0" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "peer": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -12042,41 +11573,35 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, "dependencies": { - "has-bigints": "^1.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dependencies": { "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" }, "engines": { "node": ">= 0.4" @@ -12085,152 +11610,93 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", "dev": true, "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" } }, - "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==", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "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/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" + "safer-buffer": "~2.1.0" } }, - "node_modules/is-interactive": { + "node_modules/assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/async-lock": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.0.tgz", + "integrity": "sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ==" }, - "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==", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, "engines": { - "node": ">=0.12.0" + "node": ">= 4.0.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "engines": { "node": ">= 0.4" }, @@ -12238,2128 +11704,1846 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "engines": { - "node": ">=8" + "node": "*" } }, - "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": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/axe-core": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, - "node_modules/is-retina": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-retina/-/is-retina-1.0.3.tgz", - "integrity": "sha512-/tCmbIETZwCd8uHWO+GvbRa7jxwHFHdfetHfiwoP0aN9UDf3prUJMtKn7iBFYipYhqY1bSTjur8hC/Dakt8eyw==" - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dequal": "^2.0.3" } }, - "node_modules/is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, + "node_modules/babel-merge": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/babel-merge/-/babel-merge-3.0.0.tgz", + "integrity": "sha512-eBOBtHnzt9xvnjpYNI5HmaPp/b2vMveE5XggzqHnQeHJ8mFIBrBv6WZEVIj5jJ2uwTItkqKo9gWzEEcBxEq0yw==", "dependencies": { - "protocols": "^2.0.1" + "deepmerge": "^2.2.1", + "object.omit": "^3.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "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, + "node_modules/babel-merge/node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/babel-plugin-emotion": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz", + "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==", "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@babel/helper-module-imports": "^7.0.0", + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/serialize": "^0.11.16", + "babel-plugin-macros": "^2.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^1.0.5", + "find-root": "^1.1.0", + "source-map": "^0.5.7" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/babel-plugin-emotion/node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "node_modules/babel-plugin-emotion/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" + }, + "node_modules/babel-plugin-emotion/node_modules/@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" } }, - "node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, + "node_modules/babel-plugin-emotion/node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "node_modules/babel-plugin-emotion/node_modules/@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==" + }, + "node_modules/babel-plugin-emotion/node_modules/babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "dev": true, + "node_modules/babel-plugin-emotion/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "node_modules/babel-plugin-emotion/node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, + "node_modules/babel-plugin-emotion/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz", + "integrity": "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.4.0", + "semver": "^6.1.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "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.8.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz", + "integrity": "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "@babel/helper-define-polyfill-provider": "^0.4.0", + "core-js-compat": "^3.30.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@babel/core": "^7.0.0-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==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz", + "integrity": "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==", "dev": true, "dependencies": { - "is-docker": "^2.0.0" + "@babel/helper-define-polyfill-provider": "^0.4.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "node_modules/babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", "dev": true }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", + "node_modules/babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "dev": true, "dependencies": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" } }, - "node_modules/isomorphic-fetch/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "node_modules/babylon": { + "version": "7.0.0-beta.47", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.47.tgz", + "integrity": "sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ==", + "bin": { + "babylon": "bin/babylon.js" + }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic-fetch/node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "node": ">=6.0.0" } }, - "node_modules/isomorphic.js": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", - "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==", + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "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": ">=8" - } + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/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": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "node_modules/base64-arraybuffer-es6": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.7.0.tgz", + "integrity": "sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw==", "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "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==", + "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/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, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "tweetnacl": "^0.14.3" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", + "dev": true }, - "node_modules/jsdom": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz", - "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==", - "dev": true, - "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.7.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.3.1", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "^7.0.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^3.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.8.0", - "xml-name-validator": "^4.0.0" - }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "engines": { - "node": ">=14" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": "*" } }, - "node_modules/jsdom/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "node_modules/bin-links": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz", + "integrity": "sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==", "dev": true, "dependencies": { - "punycode": "^2.1.1" + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jsdom/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==", + "node_modules/bin-links/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", "dev": true, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jsdom/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==", + "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, - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } + "node_modules/bind-event-listener": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bind-event-listener/-/bind-event-listener-2.1.1.tgz", + "integrity": "sha512-O+a5c0D2se/u2VlBJmPRn45IB6R4mYMh1ok3dWxrIZ2pmLqzggBhb875mbq73508ylzofc0+hT9W41x4Y2s8lg==" }, - "node_modules/json-bignum": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", - "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", - "engines": { - "node": ">=0.8" + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "node_modules/blueimp-md5": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", "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==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "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==" - }, - "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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, - "node_modules/json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { - "minimist": "^1.2.0" + "fill-range": "^7.0.1" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=8" } }, - "node_modules/jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, + "node_modules/browser-request": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", + "integrity": "sha512-YyNI4qJJ+piQG6MMEuo7J3Bzaqssufx04zpEKYfSrl/1Op59HWali9zMtBpXnkmqMcOuWJPZvudrm9wISmnCbg==", "engines": [ - "node >= 0.2.0" + "node" ] }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, + "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.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" }, "bin": { - "JSONStream": "bin.js" + "browserslist": "cli.js" }, "engines": { - "node": "*" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" + "base-x": "^4.0.0" } }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dev": true, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/junk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.0.tgz", - "integrity": "sha512-ojtSU++zLJ3jQG9bAYjg94w+/DOJtRyD7nPaerMFrBhmdVmiV5/exYH5t4uHga4G/95nT6hr1OJoKIFbYbrW5w==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/just-diff": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.0.3.tgz", - "integrity": "sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg==", - "dev": true - }, - "node_modules/just-diff-apply": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.3.1.tgz", - "integrity": "sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, + "node_modules/bufferutil": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", + "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.14.2" } }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11" + "semver": "^7.0.0" } }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "node_modules/byte-size": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", + "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", + "dev": true, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "node_modules/c8": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.14.0.tgz", + "integrity": "sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==", "dev": true, "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/lerna": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.3.0.tgz", - "integrity": "sha512-0Y9xJqleVu0ExGmsw2WM/GkVmxOwtA7OLQFS5ERPKJfnsxH9roTX3a7NPaGQRI2E+tSJLJJGgNSf3WYEqinOqA==", - "dev": true, - "dependencies": { - "@lerna/add": "5.3.0", - "@lerna/bootstrap": "5.3.0", - "@lerna/changed": "5.3.0", - "@lerna/clean": "5.3.0", - "@lerna/cli": "5.3.0", - "@lerna/create": "5.3.0", - "@lerna/diff": "5.3.0", - "@lerna/exec": "5.3.0", - "@lerna/import": "5.3.0", - "@lerna/info": "5.3.0", - "@lerna/init": "5.3.0", - "@lerna/link": "5.3.0", - "@lerna/list": "5.3.0", - "@lerna/publish": "5.3.0", - "@lerna/run": "5.3.0", - "@lerna/version": "5.3.0", - "import-local": "^3.0.2", - "npmlog": "^6.0.2", - "nx": ">=14.4.3 < 16" + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" }, "bin": { - "lerna": "cli.js" + "c8": "bin/c8.js" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=10.12.0" } }, - "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==", + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/lib0": { - "version": "0.2.52", - "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.52.tgz", - "integrity": "sha512-CjxlM7UgICfN6b2OPALBXchIBiNk6jE+1g7JP8ha+dh1xKRDSYpH0WQl1+rMqCju49xUnwPG34v4CR5/rPOZhg==", + "node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, "dependencies": { - "isomorphic.js": "^0.2.4" + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/libnpmaccess": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.3.tgz", - "integrity": "sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg==", + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/libnpmaccess/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "lru-cache": "^7.5.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/libnpmaccess/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/libnpmpublish": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.4.tgz", - "integrity": "sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg==", - "dev": true, - "dependencies": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/libnpmpublish/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { - "lru-cache": "^7.5.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": ">=10" } }, - "node_modules/libnpmpublish/node_modules/normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/libnpmpublish/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6" } }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/linkifyjs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-3.0.5.tgz", - "integrity": "sha512-1Y9XQH65eQKA9p2xtk+zxvnTeQBG7rdAXSkUG97DmuI/Xhji9uaUzaWxRj6rf9YC0v8KKHkxav7tnLX82Sz5Fg==" - }, - "node_modules/load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/camelcase-keys/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": ">=8" + "node": ">=6" } }, - "node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/loader-utils/node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } + "node_modules/caniuse-lite": { + "version": "1.0.30001507", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz", + "integrity": "sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] }, - "node_modules/local-pkg": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", - "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", - "dev": true, + "node_modules/case-anything": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/case-anything/-/case-anything-2.1.13.tgz", + "integrity": "sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==", "engines": { - "node": ">=14" + "node": ">=12.13" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/mesqueeb" } }, - "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==", + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chai": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "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.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, + "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==", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/loglevel": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", - "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" + "node": ">=0.8.0" } }, - "node_modules/long": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", - "integrity": "sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==", - "engines": { - "node": ">=0.6" + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/longest-streak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", - "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==", + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "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/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.0" + "engines": { + "node": "*" } }, - "node_modules/lowlight": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", - "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "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": { - "fault": "^1.0.0", - "highlight.js": "~10.7.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" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/lowlight/node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": "*" + "node": ">= 6" } }, - "node_modules/lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", - "bin": { - "lz-string": "bin/bin.js" - } + "node_modules/chromatism": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/chromatism/-/chromatism-2.6.0.tgz", + "integrity": "sha512-ZgkGBXc0b0X7KW26aHIuwQvg6MFt47ehRg+YqcmLtGtHPmn6+5sx9uAFTLHcmsg9kYjOcFJYc/U2n06wrZ7KTA==" }, - "node_modules/magic-string": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.3.tgz", - "integrity": "sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==", + "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==", + "dev": true + }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/make-dir": { + "node_modules/cli-cursor": { "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==", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "restore-cursor": "^3.1.0" }, "engines": { "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "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==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">= 10" } }, - "node_modules/make-fetch-happen": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz", - "integrity": "sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg==", + "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": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8" } }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, - "bin": { - "markdown-it": "bin/markdown-it.js" + "engines": { + "node": ">=6" } }, - "node_modules/matchit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/matchit/-/matchit-1.1.0.tgz", - "integrity": "sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==", + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "@arr/every": "^1.0.0" + "isobject": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", "engines": { "node": ">=6" } }, - "node_modules/math.gl": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/math.gl/-/math.gl-3.6.3.tgz", - "integrity": "sha512-Yq9CyECvSDox9+5ETi2+x1bGTY5WvGUGL3rJfC4KPoCZAM51MGfrCm6rIn4yOJUVfMPs2a5RwMD+yGS/n1g3gg==", + "node_modules/cmd-shim": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", + "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", + "dev": true, "dependencies": { - "@math.gl/core": "3.6.3" + "mkdirp-infer-owner": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/matrix-crdt": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/matrix-crdt/-/matrix-crdt-0.2.0.tgz", - "integrity": "sha512-CmwC7/Wtujq6Jp1+MbIY0noEgGnT7YKl3lSOAtzIpDRyNPghHRxtgrDh+IR1kxsf/kFKWqxjgezzlG2vkUhGyA==", + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, "dependencies": { - "another-json": "^0.2.0", - "lodash": "^4.17.21", - "simple-peer": "^9.11.0", - "vscode-lib": "^0.1.0" + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" }, - "peerDependencies": { - "lib0": "*", - "matrix-js-sdk": "*", - "y-protocols": "*", - "yjs": "*" + "engines": { + "node": ">= 4.0" } }, - "node_modules/matrix-events-sdk": { - "version": "0.0.1-beta.7", - "resolved": "https://registry.npmjs.org/matrix-events-sdk/-/matrix-events-sdk-0.0.1-beta.7.tgz", - "integrity": "sha512-9jl4wtWanUFSy2sr2lCjErN/oC8KTAtaeaozJtrgot1JiQcEI4Rda9OLgQ7nLKaqb4Z/QUx/fR3XpDzm5Jy1JA==" - }, - "node_modules/matrix-js-sdk": { - "version": "19.4.0", - "resolved": "https://registry.npmjs.org/matrix-js-sdk/-/matrix-js-sdk-19.4.0.tgz", - "integrity": "sha512-B8Mm4jCsCHaMaChcdM3VhZDVKrn0nMSDtYvHmS15Iu8Pe0G4qmIpk2AoADBAL9U9yN3pCqvs3TDXaQhM8UxRRA==", + "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==", "dependencies": { - "@babel/runtime": "^7.12.5", - "another-json": "^0.2.0", - "browser-request": "^0.3.3", - "bs58": "^5.0.0", - "content-type": "^1.0.4", - "loglevel": "^1.7.1", - "matrix-events-sdk": "^0.0.1-beta.7", - "p-retry": "4", - "qs": "^6.9.6", - "request": "^2.88.2", - "unhomoglyph": "^1.0.6" - }, - "engines": { - "node": ">=12.9.0" + "color-name": "1.1.3" } }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" } }, - "node_modules/mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "node_modules/columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/mdast-util-to-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", - "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", + "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==", "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" + "delayed-stream": "~1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.8" } }, - "node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "node_modules/mdurl": { + "node_modules/common-ancestor-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "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/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" } }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/compare-func/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/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "is-obj": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, + "engines": [ + "node >= 6.0" + ], "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" } }, - "node_modules/meow/node_modules/read-pkg-up/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==", + "node_modules/concordance": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", + "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", "dev": true, + "dependencies": { + "date-time": "^3.1.0", + "esutils": "^2.0.3", + "fast-diff": "^1.2.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.15", + "md5-hex": "^3.0.1", + "semver": "^7.3.2", + "well-known-symbols": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" } }, - "node_modules/meow/node_modules/read-pkg/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==", + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "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" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.8" } }, - "node_modules/meow/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/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, "dependencies": { - "is-plain-obj": "^2.1.0" + "compare-func": "^2.0.0", + "q": "^1.5.1" }, "engines": { "node": ">=10" } }, - "node_modules/merge-options/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/conventional-changelog-core": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "dev": true, + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/micromark": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz", - "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/conventional-changelog-writer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "dev": true, "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/micromark-core-commonmark": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", - "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "node_modules/conventional-changelog-writer/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/micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/micromark-factory-label": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", - "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/micromark-factory-title": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", - "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/core-js": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.0.tgz", + "integrity": "sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/core-js-compat": { + "version": "3.31.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.0.tgz", + "integrity": "sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==", + "dev": true, "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "browserslist": "^4.21.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "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": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/cp-file": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-9.1.0.tgz", + "integrity": "sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==", + "dev": true, "dependencies": { - "micromark-util-symbol": "^1.0.0" + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/cpy": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-9.0.1.tgz", + "integrity": "sha512-D9U0DR5FjTCN3oMTcFGktanHnAG5l020yvOCR1zKILmAyPP7I/9pl6NFgRbDcmSENtbK1sQLBz1p9HIOlroiNg==", + "dev": true, "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "arrify": "^3.0.0", + "cp-file": "^9.1.0", + "globby": "^13.1.1", + "junk": "^4.0.0", + "micromatch": "^4.0.4", + "nested-error-stacks": "^2.1.0", + "p-filter": "^3.0.0", + "p-map": "^5.3.0" + }, + "engines": { + "node": "^12.20.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/cpy/node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dev": true, "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" + "node_modules/cpy/node_modules/arrify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", + "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-util-decode-string": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", - "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/cpy/node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-util-encode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", - "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", - "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^1.0.0" + "node_modules/cpy/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/cpy/node_modules/globby": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz", + "integrity": "sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==", + "dev": true, "dependencies": { - "micromark-util-types": "^1.0.0" + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", - "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", - "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", - "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", - "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "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==", + "node_modules/cpy/node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/cpy/node_modules/p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dev": true, "dependencies": { - "mime-db": "1.52.0" + "aggregate-error": "^4.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/cpy/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/crelt": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", + "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" }, "engines": { - "node": "*" + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, + "node_modules/cross-fetch": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" + "node-fetch": "^2.6.11" } }, - "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "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": { - "yallist": "^4.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "engines": { - "node": ">= 8" + "node": "*" } }, - "node_modules/minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "dev": true, "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "type-fest": "^1.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" }, - "optionalDependencies": { - "encoding": "^0.1.13" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, + "node_modules/css-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" + "tiny-invariant": "^1.0.6" } }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dev": true, "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "node_modules/css-to-react-native": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", + "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^3.3.0" + } + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dev": true, "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "mdn-data": "2.0.4", + "source-map": "^0.6.1" }, "engines": { - "node": ">= 8" + "node": ">=8.0.0" } }, - "node_modules/mjolnir.js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-2.7.1.tgz", - "integrity": "sha512-72BeUWgTv2cj5aZQKpwL8caNUFhXZ9bDm1hxpNj70XJQ62IBnTZmtv/WPxJvtaVNhzNo+D2U8O6ryNI0zImYcw==", + "node_modules/css-tree/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/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, "dependencies": { - "@types/hammerjs": "^2.0.41", - "hammerjs": "^2.0.8" + "css-tree": "^1.1.2" }, "engines": { - "node": ">= 4", - "npm": ">= 3" + "node": ">=8.0.0" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/csso/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/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" + "cssom": "~0.3.6" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/mobx": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.6.1.tgz", - "integrity": "sha512-7su3UZv5JF+ohLr2opabjbUAERfXstMY+wiBtey8yNAPoB8H187RaQXuhFjNkH8aE4iHbDWnhDFZw0+5ic4nGQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mobx" + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "node_modules/mobx-react-lite": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.4.0.tgz", - "integrity": "sha512-bRuZp3C0itgLKHu/VNxi66DN/XVkQG7xtoBVWxpvC5FhAqbOCP21+nPhULjnzEqd7xBMybp6KwytdUpZKEgpIQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mobx" - }, - "peerDependencies": { - "mobx": "^6.1.0", - "react": "^16.8.0 || ^17 || ^18" + "node_modules/d3-hexbin": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/d3-hexbin/-/d3-hexbin-0.2.2.tgz", + "integrity": "sha512-KS3fUT2ReD4RlGCjvCEm1RgMtp2NFZumdMu4DBzQK8AZv3fXRM6Xm8I4fSU07UXvH4xxg03NwWKWdvxfS/yc4w==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dash-get": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dash-get/-/dash-get-1.0.2.tgz", + "integrity": "sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } + "engines": { + "node": ">=0.10" } }, - "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + "node": ">=12" } }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "node_modules/date-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", + "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", "dev": true, + "dependencies": { + "time-zone": "^1.0.0" + }, "engines": { "node": ">=6" } }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -14372,413 +13556,344 @@ } } }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "dev": true, + "engines": { + "node": "*" + } }, - "node_modules/mocha/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==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/mocha/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==", + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "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.10.0" } }, - "node_modules/mocha/node_modules/glob/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, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "dependencies": { - "brace-expansion": "^1.1.7" + "character-entities": "^2.0.0" }, - "engines": { - "node": "*" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/mocha/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==", + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "type-detect": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "node_modules/deep-equal": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz", + "integrity": "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.0", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "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/mocha/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" - }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/mocha/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==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" + "clone": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "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/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { - "has-flag": "^4.0.0" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/modify-values": { + "node_modules/defined": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/monaco-editor": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.35.0.tgz", - "integrity": "sha512-BJfkAZ0EJ7JgrgWzqjfBNP9hPSS8NlfECEDMEIIiozV2UaPq22yeuOjgbd3TwMh3anH0krWZirXZfn8KUSxiOA==" - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "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==", "dev": true, "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "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==" + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true }, - "node_modules/multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/multimatch/node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, "engines": { "node": ">=8" } }, - "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/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" }, - "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "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, + "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==", "engines": { - "node": ">= 0.6" + "node": ">=0.3.1" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nested-error-stacks": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", - "dev": true - }, - "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/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, - "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==", + "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": { - "whatwg-url": "^5.0.0" + "path-type": "^4.0.0" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">=8" } }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "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": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "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": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "node_modules/dnd-core": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-7.7.0.tgz", + "integrity": "sha512-+YqwflWEY1MEAEl2QiEiRaglYkCwIZryyQwximQGuTOm/ns7fS6Lg/i7OCkrtjM10D5FhArf/VUHIL4ZaRBK0g==", + "peer": true, "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "asap": "^2.0.6", + "invariant": "^2.2.4", + "redux": "^4.0.1" } }, - "node_modules/node-gyp": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz", - "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==", + "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": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "esutils": "^2.0.2" }, "engines": { - "node": "^12.22 || ^14.13 || >=16" + "node": ">=6.0.0" } }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" } }, - "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" } }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", "dev": true, "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "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==", + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, "engines": { "node": ">=10" }, @@ -14786,1054 +13901,1228 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "engines": { + "node": ">=10" } }, - "node_modules/npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "node_modules/dotignore": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", + "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", "dev": true, "dependencies": { - "semver": "^7.1.1" + "minimatch": "^3.0.4" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "bin": { + "ignored": "bin/ignored" } }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "node_modules/npm-package-arg": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", - "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^3.0.6", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" }, - "node_modules/npm-package-arg/node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "node_modules/npm-package-arg/node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/npm-package-arg/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/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { + "node_modules/electron-to-chromium": { + "version": "1.4.440", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.440.tgz", + "integrity": "sha512-r6dCgNpRhPwiWlxbHzZQ/d9swfPaEJGi8ekqRBwQYaR3WmA5VkqQfBWSDDjuJU1ntO+W9tHx8OHV/96Q8e0dVw==" + }, + "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/emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dependencies": { - "builtins": "^1.0.3" + "iconv-lite": "^0.6.2" } }, - "node_modules/npm-packlist": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", - "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", - "dev": true, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=0.10.0" } }, - "node_modules/npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", + "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": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "once": "^1.4.0" } }, - "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "dependencies": { - "lru-cache": "^7.5.1" + "ansi-colors": "^4.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": ">=8.6" } }, - "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6" } }, - "node_modules/npm-registry-fetch": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz", - "integrity": "sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg==", + "node_modules/envinfo": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.9.0.tgz", + "integrity": "sha512-RODB4txU+xImYDemN5DqaKC0CHk05XSVkOX4pq0hK26Qx+1LChkuOyUDlGEjYb3ACr0n9qBhFjg37hQuJvpkRQ==", "dev": true, - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" + "bin": { + "envinfo": "dist/cli.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=4" } }, - "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "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==", "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "is-arrayish": "^0.2.1" } }, - "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, + "node_modules/es-abstract": { + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, "dependencies": { - "path-key": "^3.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, + "node_modules/es-module-shims": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-1.4.3.tgz", + "integrity": "sha512-qMUb+8lrpqZ6jW/kelQU7XD1hR71hmxKhIDmmVwsQNQaAYh0fzErnKSj9Xi80L0ubEjnzCDD5ha7oZehkwFApg==" + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.4" } }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "dev": true, "dependencies": { - "boolbase": "~1.0.0" + "has": "^1.0.3" } }, - "node_modules/nwsapi": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", - "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", - "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==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/nx": { - "version": "14.5.4", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.4.tgz", - "integrity": "sha512-xv1nTaQP6kqVDE4PXcB1tLlgzNAPUHE/2vlqSLgxjNb6colKf0vrEZhVTjhnbqBeJiTb33gUx50bBXkurCkN5w==", - "dev": true, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "hasInstallScript": true, "dependencies": { - "@nrwl/cli": "14.5.4", - "@nrwl/tao": "14.5.4", - "@parcel/watcher": "2.0.4", - "chalk": "4.1.0", - "chokidar": "^3.5.1", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^10.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.0.0", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^3.9.0", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.4.0", - "yargs-parser": "21.0.1" - }, - "bin": { - "nx": "bin/nx.js" - }, - "peerDependencies": { - "@swc-node/register": "^1.4.2", - "@swc/core": "^1.2.173" + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } + "engines": { + "node": ">=0.10" } }, - "node_modules/nx/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/esbuild": { + "version": "0.18.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.8.tgz", + "integrity": "sha512-3hJ4I81Wp1IT5z29FAlTAlbX+ElIqy4AuIf1GNcFjsRIfyO3linxmEVqoP865KTYT9BWosrCl081RM/35Z+scw==", + "dev": true, + "hasInstallScript": true, + "peer": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10" + "node": ">=12" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "optionalDependencies": { + "@esbuild/android-arm": "0.18.8", + "@esbuild/android-arm64": "0.18.8", + "@esbuild/android-x64": "0.18.8", + "@esbuild/darwin-arm64": "0.18.8", + "@esbuild/darwin-x64": "0.18.8", + "@esbuild/freebsd-arm64": "0.18.8", + "@esbuild/freebsd-x64": "0.18.8", + "@esbuild/linux-arm": "0.18.8", + "@esbuild/linux-arm64": "0.18.8", + "@esbuild/linux-ia32": "0.18.8", + "@esbuild/linux-loong64": "0.18.8", + "@esbuild/linux-mips64el": "0.18.8", + "@esbuild/linux-ppc64": "0.18.8", + "@esbuild/linux-riscv64": "0.18.8", + "@esbuild/linux-s390x": "0.18.8", + "@esbuild/linux-x64": "0.18.8", + "@esbuild/netbsd-x64": "0.18.8", + "@esbuild/openbsd-x64": "0.18.8", + "@esbuild/sunos-x64": "0.18.8", + "@esbuild/win32-arm64": "0.18.8", + "@esbuild/win32-ia32": "0.18.8", + "@esbuild/win32-x64": "0.18.8" } }, - "node_modules/nx/node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "node_modules/esbuild-android-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", + "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/nx/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/esbuild-android-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", + "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { "node": ">=12" } }, - "node_modules/nx/node_modules/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "node_modules/esbuild-darwin-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", + "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", + "cpu": [ + "x64" + ], "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" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/nx/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/esbuild-darwin-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", + "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/nx/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "node_modules/esbuild-freebsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", + "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/nx/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", + "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/nx/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "node_modules/esbuild-linux-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", + "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8.17.0" + "node": ">=12" } }, - "node_modules/nx/node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "node_modules/esbuild-linux-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", + "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", + "cpu": [ + "x64" + ], "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.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" } }, - "node_modules/nx/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "node_modules/esbuild-linux-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", + "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", + "cpu": [ + "arm" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" } }, - "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==", + "node_modules/esbuild-linux-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", + "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", + "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", + "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", + "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", + "cpu": [ + "riscv64" + ], "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "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==", + "node_modules/esbuild-linux-s390x": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", + "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", + "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "node_modules/esbuild-openbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", + "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "node_modules/esbuild-sunos-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", + "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", + "node_modules/esbuild-windows-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", + "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "array.prototype.reduce": "^1.0.4", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "node_modules/esbuild-windows-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", + "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "node_modules/esbuild-windows-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", + "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" } }, - "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" - }, + "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==", "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=12" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/orderedmap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.0.0.tgz", - "integrity": "sha512-buf4PoAMlh45b8a8gsGy/X6w279TSqkyAS0C0wdTSJwFSU+ljQFJON5I8NfjLHoCXwpSROIo2wr0g33T+kQshQ==" - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "p-timeout": "^3.1.0" - }, + "optional": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/p-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", - "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "dependencies": { - "p-map": "^5.1.0" + "prelude-ls": "~1.1.2" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8.0" } }, - "node_modules/p-filter/node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "node_modules/eslint": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.43.0.tgz", + "integrity": "sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==", "dev": true, "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.43.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "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.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/p-filter/node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "node_modules/eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", "dev": true, "dependencies": { - "escape-string-regexp": "5.0.0" + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" }, "engines": { - "node": ">=12" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "eslint": "^8.0.0" } }, - "node_modules/p-filter/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, - "node_modules/p-filter/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "node_modules/eslint-import-resolver-node/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": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/p-filter/node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "dependencies": { - "aggregate-error": "^4.0.0" + "debug": "^3.2.7" }, "engines": { - "node": ">=12" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "node_modules/eslint-module-utils/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": ">=4" + "dependencies": { + "ms": "^2.1.1" } }, - "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==", + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" }, "engines": { - "node": ">=6" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" } }, - "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==", + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" }, "engines": { - "node": ">=8" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/eslint-plugin-import/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": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "ms": "^2.1.1" } }, - "node_modules/p-map-series": { + "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "node_modules/eslint-plugin-import/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, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", "dev": true, "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" + "@typescript-eslint/experimental-utils": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } } }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dev": true, "dependencies": { - "p-finally": "^1.0.0" + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" }, "engines": { - "node": ">=8" + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/eslint-plugin-jsx-a11y/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, - "engines": { - "node": ">=6" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/p-wait-for": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-4.1.0.tgz", - "integrity": "sha512-i8nE5q++9h8oaQHWltS1Tnnv4IoMDOlqN7C0KFG2OdbK0iFJIt6CROZ8wfBM+K4Pxqfnq4C4lkkpXqTEpB5DZw==", + "node_modules/eslint-plugin-react": { + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", "dev": true, "dependencies": { - "p-timeout": "^5.0.0" + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" }, "engines": { - "node": ">=12" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/p-wait-for/node_modules/p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "dev": true, "engines": { - "node": ">=12" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "p-reduce": "^2.0.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/pacote": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", - "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dev": true, "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { - "pacote": "lib/bin.js" + "resolve": "bin/resolve" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pacote/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "node_modules/eslint-plugin-react/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/eslint-plugin-testing-library": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.0.tgz", + "integrity": "sha512-ELY7Gefo+61OfXKlQeXNIDVVLPcvKTeiQOoMZG9TeuWa7Ln4dUNRv8JdRWBQI9Mbb427XGlVB1aa1QPZxBJM8Q==", "dev": true, "dependencies": { - "lru-cache": "^7.5.1" + "@typescript-eslint/utils": "^5.58.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" } }, - "node_modules/pacote/node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/pad-left": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz", - "integrity": "sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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": { - "repeat-string": "^1.5.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "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": { - "callsites": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/parse-conflict-json": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", - "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", + "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": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "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/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "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" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" @@ -15842,382 +15131,473 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-5.0.0.tgz", - "integrity": "sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A==", + "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, - "dependencies": { - "protocols": "^2.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/parse-url": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-7.0.2.tgz", - "integrity": "sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg==", + "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": { - "is-ssh": "^1.4.0", - "normalize-url": "^6.1.0", - "parse-path": "^5.0.0", - "protocols": "^2.0.1" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", - "dev": true, - "dependencies": { - "entities": "^4.3.0" + "node_modules/eslint/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, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5/node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { - "node": ">=0.12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/patch-package": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", - "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, "bin": { - "patch-package": "index.js" + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "npm": ">5" + "node": ">=4" } }, - "node_modules/patch-package/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/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=4" + "node": ">=0.10" } }, - "node_modules/patch-package/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/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": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4" + "node": ">=4.0" } }, - "node_modules/patch-package/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/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">=4.0" } }, - "node_modules/patch-package/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", "dev": true }, - "node_modules/patch-package/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/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": { - "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.10.0" } }, - "node_modules/patch-package/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { - "node": ">=6 <7 || >=8" + "node": ">=0.8.x" } }, - "node_modules/patch-package/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/patch-package/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" }, - "node_modules/patch-package/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true }, - "node_modules/patch-package/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, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "^2.7.2" } }, - "node_modules/patch-package/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, + "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/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, "engines": { "node": ">=4" } }, - "node_modules/patch-package/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/external-editor/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": { - "glob": "^7.1.3" + "os-tmpdir": "~1.0.2" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">=0.6.0" } }, - "node_modules/patch-package/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fake-indexeddb": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-3.1.8.tgz", + "integrity": "sha512-7umIgcdnDfNcjw0ZaoD6yR2BflngKmPsyzZC+sV2fdttwz5bH6B6CCaNzzD+MURfRg8pvr/aL0trfNx65FLiDg==", "dev": true, - "bin": { - "semver": "bin/semver" + "dependencies": { + "realistic-structured-clone": "^2.0.1" } }, - "node_modules/patch-package/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, + "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==" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dependencies": { - "shebang-regex": "^1.0.0" + "@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": ">=0.10.0" + "node": ">=8.6.0" } }, - "node_modules/patch-package/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, + "node_modules/fast-glob/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==", + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 6" } }, - "node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/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==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" } }, - "node_modules/patch-package/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/fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", "dependencies": { - "has-flag": "^3.0.0" + "format": "^0.2.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/patch-package/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, + "node_modules/fbjs": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", + "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^1.0.35" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "node_modules/fbjs/node_modules/ua-parser-js": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz", + "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], "engines": { - "node": ">= 4.0.0" + "node": "*" } }, - "node_modules/patch-package/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], "dependencies": { - "isexe": "^2.0.0" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, - "bin": { - "which": "bin/which" + "engines": { + "node": "^12.20 || >= 14.13" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "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": { + "flat-cache": "^3.0.4" + }, "engines": { - "node": ">=8" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" + "node_modules/filebridge-client": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/filebridge-client/-/filebridge-client-0.1.5.tgz", + "integrity": "sha512-M+RUw+7mufI8IQ+cgiWAmXYmm4kGdABLKHdVgdv0gkNwCc3SNzqbY7d91NMemN9jeCZa0+xLzH/tEfuzEQo65A==", + "dependencies": { + "vscode-lib": "^0.1.2" } }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, - "engines": { - "node": "*" + "dependencies": { + "minimatch": "^5.0.1" } }, - "node_modules/penpal": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/penpal/-/penpal-6.2.2.tgz", - "integrity": "sha512-RQD7hTx14/LY7QoS3tQYO3/fzVtwvZI+JeS5udgsu7FPaEDjlvfK9HBcme9/ipzSPKnrxSgacI9PI7154W62YQ==" - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "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==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">=8.6" + "node": ">=8" + } + }, + "node_modules/final-form": { + "version": "4.20.9", + "resolved": "https://registry.npmjs.org/final-form/-/final-form-4.20.9.tgz", + "integrity": "sha512-shA1X/7v8RmukWMNRHx0l7+Bm41hOivY78IvOiBrPVHjyWFIyqqIEMCz7yTVRc9Ea+EU4WkZ5r4MH6whSo5taw==", + "dependencies": { + "@babel/runtime": "^7.10.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "opencollective", + "url": "https://opencollective.com/final-form" } }, - "node_modules/pify": { + "node_modules/final-form-focus": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/final-form-focus/-/final-form-focus-1.1.2.tgz", + "integrity": "sha512-Gd+Bd2Ll7ijo3/sd6kJ/bwLkhc2bUJPxTON6fIqee/008EJpACWhT+zoWCm9q6NcfMcWRS+Sp5ikRX8iqdXeGQ==", + "peerDependencies": { + "final-form": ">=1.3.0" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "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" }, @@ -16225,1854 +15605,1826 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "dev": true, "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" + "micromatch": "^4.0.2" } }, - "node_modules/playwright": { - "version": "1.24.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.24.2.tgz", - "integrity": "sha512-iMWDLgaFRT+7dXsNeYwgl8nhLHsUrzFyaRVC+ftr++P1dVs70mPrFKBZrGp1fOKigHV9d1syC03IpPbqLKlPsg==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "hasInstallScript": true, - "dependencies": { - "playwright-core": "1.24.2" - }, "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=14" + "flat": "cli.js" } }, - "node_modules/playwright-core": { - "version": "1.24.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.24.2.tgz", - "integrity": "sha512-zfAoDoPY/0sDLsgSgLZwWmSCevIg1ym7CppBwllguVBNiHeixZkc1AdMuYUPZC6AdEYc4CxWEyLMBTw2YcmRrA==", + "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, - "bin": { - "playwright": "cli.js" + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=14" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/playwright-test": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/playwright-test/-/playwright-test-8.1.1.tgz", - "integrity": "sha512-FFfuPH6Q/AFoJQDJ6/ateZBBQoiJx8LS8eM0pWExgB0OS9nygnM+KMR/25/dfYdlgw1bESlwtBa5UrBwulvKIw==", - "dev": true, - "dependencies": { - "buffer": "^6.0.3", - "camelcase": "^6.3.0", - "chokidar": "^3.5.3", - "cpy": "^9.0.1", - "esbuild": "0.14.39", - "events": "^3.3.0", - "globby": "^13.1.1", - "kleur": "^4.1.4", - "lilconfig": "^2.0.5", - "lodash": "^4.17.21", - "merge-options": "^3.0.4", - "nanoid": "^3.3.4", - "ora": "^6.1.0", - "p-wait-for": "4.1.0", - "path-browserify": "^1.0.1", - "playwright-core": "1.22.1", - "polka": "^0.5.2", - "premove": "^4.0.0", - "process": "^0.11.10", - "sade": "^1.8.1", - "sirv": "^2.0.2", - "source-map": "0.6.1", - "stream-browserify": "^3.0.0", - "strip-ansi": "^7.0.0", - "tape": "^5.5.3", - "tempy": "^3.0.0", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0" - }, - "bin": { - "playwright-test": "cli.js", - "pw-test": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true }, - "node_modules/playwright-test/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" + "node_modules/focus-lock": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.11.6.tgz", + "integrity": "sha512-KSuV3ur4gf2KqMNoZx3nXNVhqCkn42GuTYCX4tXPEwf0MjpFQmNMiN6m7dXaUXgIoivL6/65agoUMg4RLS0Vbg==", + "dependencies": { + "tslib": "^2.0.3" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">=10" } }, - "node_modules/playwright-test/node_modules/bl": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz", - "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==", - "dev": true, + "node_modules/focus-trap": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-2.4.6.tgz", + "integrity": "sha512-vWZTPtBU6pBoyWZDRZJHkXsyP2ZCZBHE3DRVXnSVdQKH/mcDtu9S5Kz8CUDyIqpfZfLEyI9rjKJLnc4Y40BRBg==", "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "tabbable": "^1.0.3" } }, - "node_modules/playwright-test/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "node_modules/focus-trap/node_modules/tabbable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-1.1.3.tgz", + "integrity": "sha512-nOWwx35/JuDI4ONuF0ZTo6lYvI0fY0tZCH1ErzY2EXfu4az50ZyiUX8X073FLiZtmWUVlkRnuXsehjJgCw9tYg==" + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "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" + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" } ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "is-callable": "^1.1.3" } }, - "node_modules/playwright-test/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/playwright-test/node_modules/chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", - "dev": true, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "*" } }, - "node_modules/playwright-test/node_modules/cli-cursor": { + "node_modules/form-data": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { - "restore-cursor": "^4.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, - "node_modules/playwright-test/node_modules/esbuild": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "fetch-blob": "^3.1.2" }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/fractional-indexing": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fractional-indexing/-/fractional-indexing-2.1.0.tgz", + "integrity": "sha512-4tIVui+5dxsXe/BG7D9EzgNIDK9fEoBzjvAf9gFfxFDPo2LsPSjfFKB2QmtcvmioD2IlshtcJFXGEcDPTG6R/A==", "engines": { "node": ">=12" + } + }, + "node_modules/frontend-collective-react-dnd-scrollzone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/frontend-collective-react-dnd-scrollzone/-/frontend-collective-react-dnd-scrollzone-1.0.2.tgz", + "integrity": "sha512-me/D9PZJq9j/sjEjs/OPmm6V6nbaHbhgeQiwrWu0t35lhwAOKWc+QBzzKKcZQeboYTkgE8UvCD9el+5ANp+g5Q==", + "dependencies": { + "hoist-non-react-statics": "^3.1.0", + "lodash.throttle": "^4.0.1", + "prop-types": "^15.5.9", + "raf": "^3.2.0", + "react": "^16.3.0", + "react-display-name": "^0.2.0", + "react-dom": "^16.3.0" }, - "optionalDependencies": { - "esbuild-android-64": "0.14.39", - "esbuild-android-arm64": "0.14.39", - "esbuild-darwin-64": "0.14.39", - "esbuild-darwin-arm64": "0.14.39", - "esbuild-freebsd-64": "0.14.39", - "esbuild-freebsd-arm64": "0.14.39", - "esbuild-linux-32": "0.14.39", - "esbuild-linux-64": "0.14.39", - "esbuild-linux-arm": "0.14.39", - "esbuild-linux-arm64": "0.14.39", - "esbuild-linux-mips64le": "0.14.39", - "esbuild-linux-ppc64le": "0.14.39", - "esbuild-linux-riscv64": "0.14.39", - "esbuild-linux-s390x": "0.14.39", - "esbuild-netbsd-64": "0.14.39", - "esbuild-openbsd-64": "0.14.39", - "esbuild-sunos-64": "0.14.39", - "esbuild-windows-32": "0.14.39", - "esbuild-windows-64": "0.14.39", - "esbuild-windows-arm64": "0.14.39" - } - }, - "node_modules/playwright-test/node_modules/esbuild-android-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", - "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==", - "cpu": [ - "x64" - ], + "peerDependencies": { + "react-dnd": "^7.3.0" + } + }, + "node_modules/frontend-collective-react-dnd-scrollzone/node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/frontend-collective-react-dnd-scrollzone/node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" + } + }, + "node_modules/frontend-collective-react-dnd-scrollzone/node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "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": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/playwright-test/node_modules/esbuild-android-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", - "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==", - "cpu": [ - "arm64" - ], + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/playwright-test/node_modules/esbuild-darwin-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", - "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", - "cpu": [ - "x64" - ], + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "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": ">=12" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/playwright-test/node_modules/esbuild-darwin-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", - "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/playwright-test/node_modules/esbuild-freebsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", - "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/playwright-test/node_modules/esbuild-freebsd-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", - "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==", - "cpu": [ - "arm64" - ], + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/playwright-test/node_modules/esbuild-linux-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", - "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "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==", "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/playwright-test/node_modules/esbuild-linux-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", - "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/get-browser-rtc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz", + "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==" + }, + "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==", "engines": { - "node": ">=12" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/playwright-test/node_modules/esbuild-linux-arm": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", - "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==", - "cpu": [ - "arm" - ], + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/playwright-test/node_modules/esbuild-linux-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", - "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==", - "cpu": [ - "arm64" - ], + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=8.0.0" } }, - "node_modules/playwright-test/node_modules/esbuild-linux-mips64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", - "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==", - "cpu": [ - "mips64el" - ], + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/playwright-test/node_modules/esbuild-linux-ppc64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", - "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==", - "cpu": [ - "ppc64" - ], + "node_modules/get-pkg-repo/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "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/playwright-test/node_modules/esbuild-linux-riscv64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", - "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==", - "cpu": [ - "riscv64" - ], + "node_modules/get-pkg-repo/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/get-pkg-repo/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, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/playwright-test/node_modules/esbuild-linux-s390x": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", - "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==", - "cpu": [ - "s390x" - ], + "node_modules/get-pkg-repo/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "node_modules/playwright-test/node_modules/esbuild-netbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", - "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==", - "cpu": [ - "x64" - ], + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/playwright-test/node_modules/esbuild-openbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", - "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==", - "cpu": [ - "x64" - ], + "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, - "optional": true, - "os": [ - "openbsd" - ], "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/playwright-test/node_modules/esbuild-sunos-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", - "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/playwright-test/node_modules/esbuild-windows-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", - "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==", - "cpu": [ - "ia32" - ], + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/playwright-test/node_modules/esbuild-windows-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", - "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==", - "cpu": [ - "x64" - ], + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/playwright-test/node_modules/esbuild-windows-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", - "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==", - "cpu": [ - "arm64" - ], + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/playwright-test/node_modules/globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", + "node_modules/git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" + "meow": "^8.0.0", + "semver": "^6.0.0" }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "bin": { + "git-semver-tags": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/playwright-test/node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "node_modules/git-semver-tags/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, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/playwright-test/node_modules/is-unicode-supported": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz", - "integrity": "sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==", + "node_modules/git-up": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", + "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" } }, - "node_modules/playwright-test/node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "node_modules/git-url-parse": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz", + "integrity": "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==", "dev": true, "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "git-up": "^7.0.0" } }, - "node_modules/playwright-test/node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "dependencies": { + "ini": "^1.3.2" } }, - "node_modules/playwright-test/node_modules/ora": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", - "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", - "dev": true, + "node_modules/github-buttons": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/github-buttons/-/github-buttons-2.27.0.tgz", + "integrity": "sha512-PmfRMI2Rttg/2jDfKBeSl621sEznrsKF019SuoLdoNlO7qRUZaOyEI5Li4uW+79pVqnDtKfIEVuHTIJ5lgy64w==" + }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { - "bl": "^5.0.0", - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "strip-ansi": "^7.0.1", - "wcwidth": "^1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/playwright-test/node_modules/playwright-core": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.22.1.tgz", - "integrity": "sha512-H+ZUVYnceWNXrRf3oxTEKAr81QzFsCKu5Fp//fEjQvqgKkfA1iX3E9DBrPJpPNOrgVzcE+IqeI0fDmYJe6Ynnw==", + "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, - "bin": { - "playwright": "cli.js" + "dependencies": { + "is-glob": "^4.0.3" }, "engines": { - "node": ">=14" + "node": ">=10.13.0" } }, - "node_modules/playwright-test/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dev": true, + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "define-properties": "^1.1.3" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/playwright-test/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "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": { + "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": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/playwright-test/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" + "get-intrinsic": "^1.1.3" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/polka": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/polka/-/polka-0.5.2.tgz", - "integrity": "sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==", - "dev": true, - "dependencies": { - "@polka/url": "^0.5.0", - "trouter": "^2.0.1" - } + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, + "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/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "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": "^10 || ^12 || >=14" + "node": ">=4.x" } }, - "node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", + "engines": { + "node": ">=0.8.0" + } }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, "bin": { - "nanoid": "bin/nanoid.cjs" + "handlebars": "bin/handlebars" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "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==", + "node_modules/handlebars/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.8.0" + "node": ">=0.10.0" } }, - "node_modules/premove": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/premove/-/premove-4.0.0.tgz", - "integrity": "sha512-zim/Hr4+FVdCIM7zL9b9Z0Wfd5Ya3mnKtiuDv7L5lzYzanSq6cOcVJ7EFcgK4I0pt28l8H0jX/x3nyog380XgQ==", - "dev": true, - "bin": { - "premove": "bin.js" + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "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", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" }, "engines": { "node": ">=6" } }, - "node_modules/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", - "bin": { - "prettier": "bin-prettier.js" - }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, "engines": { - "node": ">=10.13.0" + "node": ">=6" } }, - "node_modules/probe.gl": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.5.2.tgz", - "integrity": "sha512-8lFQVmi7pMQZkqfj8+VjX4GU9HTkyxgRm5/h/xxA/4/IvZPv3qtP996L+awPwZsrPRKEw99t12SvqEHqSls/sA==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dependencies": { - "@babel/runtime": "^7.0.0", - "@probe.gl/env": "3.5.2", - "@probe.gl/log": "3.5.2", - "@probe.gl/stats": "3.5.2" + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/proc-log": { + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-dynamic-import": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "resolved": "https://registry.npmjs.org/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz", + "integrity": "sha512-X3fbtsZmwb6W7fJGR9o7x65fZoodygCrZ3TVycvghP62yYQfS0t4RS0Qcz+j5tQYUKeSWS09tHkWW6WhFV3XhQ==", "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { - "node": ">= 0.6.0" + "node": ">=4" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dependencies": { - "asap": "~2.0.3" + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/promise-all-reject-late": { + "node_modules/has-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true, + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/promise-call-limit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", - "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", - "dev": true, + "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==", + "engines": { + "node": ">= 0.4" + }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, - "node_modules/promise-retry": { + "node_modules/hast-util-embedded": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, + "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-2.0.1.tgz", + "integrity": "sha512-QUdSOP1/o+/TxXtpPFXR2mUg2P+ySrmlX7QjwHZCXqMFyYk7YmcGSvqRW+4XgXAoHifdE1t2PwFaQK33TqVjSw==", "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "hast-util-is-element": "^2.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", - "dev": true, + "node_modules/hast-util-from-dom": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-4.2.0.tgz", + "integrity": "sha512-t1RJW/OpJbCAJQeKi3Qrj1cAOLA0+av/iPFori112+0X7R3wng+jxLA+kXec8K4szqPRGI8vPxbbpEYvvpwaeQ==", "dependencies": { - "read": "1" + "hastscript": "^7.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/hast-util-from-parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", + "integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==", "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "hastscript": "^7.0.0", + "property-information": "^6.0.0", + "vfile": "^5.0.0", + "vfile-location": "^4.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/prosemirror-commands": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.3.0.tgz", - "integrity": "sha512-BwBbZ5OAScPcm0x7H8SPbqjuEJnCU2RJT9LDyOiiIl/3NbL1nJZI4SFNHwU2e/tRr2Xe7JsptpzseqvZvToLBQ==", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" + "node_modules/hast-util-has-property": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-2.0.1.tgz", + "integrity": "sha512-X2+RwZIMTMKpXUzlotatPzWj8bspCymtXH3cfG3iQKV+wPF53Vgaqxi/eLqGck0wKq1kS9nvoB1wchbCPEL8sg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prosemirror-dropcursor": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.5.0.tgz", - "integrity": "sha512-vy7i77ddKyXlu8kKBB3nlxLBnsWyKUmQIPB5x8RkYNh01QNp/qqGmdd5yZefJs0s3rtv5r7Izfu2qbtr+tYAMQ==", + "node_modules/hast-util-is-body-ok-link": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-2.0.0.tgz", + "integrity": "sha512-S58hCexyKdD31vMsErvgLfflW6vYWo/ixRLPJTtkOvLld24vyI8vmYmkgLA5LG3la2ME7nm7dLGdm48gfLRBfw==", "dependencies": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0", - "prosemirror-view": "^1.1.0" + "@types/hast": "^2.0.0", + "hast-util-has-property": "^2.0.0", + "hast-util-is-element": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prosemirror-gapcursor": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.0.tgz", - "integrity": "sha512-9Tdx83xB2W4Oqchm12FtCkSizbqvi64cjs1I9TRPblqdA5TUWoVZ4ZI+t71Jh6HSEh4cDMPzx3UwfryJtKlb/w==", + "node_modules/hast-util-is-element": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.3.tgz", + "integrity": "sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==", "dependencies": { - "prosemirror-keymap": "^1.0.0", - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-view": "^1.0.0" + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prosemirror-history": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.3.0.tgz", - "integrity": "sha512-qo/9Wn4B/Bq89/YD+eNWFbAytu6dmIM85EhID+fz9Jcl9+DfGEo8TTSrRhP15+fFEoaPqpHSxlvSzSEbmlxlUA==", + "node_modules/hast-util-parse-selector": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", + "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", "dependencies": { - "prosemirror-state": "^1.2.2", - "prosemirror-transform": "^1.0.0", - "rope-sequence": "^1.3.0" + "@types/hast": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prosemirror-keymap": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.0.tgz", - "integrity": "sha512-TdSfu+YyLDd54ufN/ZeD1VtBRYpgZnTPnnbY+4R08DDgs84KrIPEPbJL8t1Lm2dkljFx6xeBE26YWH3aIzkPKg==", + "node_modules/hast-util-phrasing": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-2.0.2.tgz", + "integrity": "sha512-yGkCfPkkfCyiLfK6KEl/orMDr/zgCnq/NaO9HfULx6/Zga5fso5eqQA5Ov/JZVqACygvw9shRYWgXNcG2ilo7w==", "dependencies": { - "prosemirror-state": "^1.0.0", - "w3c-keyname": "^2.2.0" + "@types/hast": "^2.0.0", + "hast-util-embedded": "^2.0.0", + "hast-util-has-property": "^2.0.0", + "hast-util-is-body-ok-link": "^2.0.0", + "hast-util-is-element": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prosemirror-model": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.18.1.tgz", - "integrity": "sha512-IxSVBKAEMjD7s3n8cgtwMlxAXZrC7Mlag7zYsAKDndAqnDScvSmp/UdnRTV/B33lTCVU3CCm7dyAn/rVVD0mcw==", - "dependencies": { - "orderedmap": "^2.0.0" + "node_modules/hast-util-raw": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.3.tgz", + "integrity": "sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/parse5": "^6.0.0", + "hast-util-from-parse5": "^7.0.0", + "hast-util-to-parse5": "^7.0.0", + "html-void-elements": "^2.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0", + "vfile": "^5.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prosemirror-schema-list": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.2.0.tgz", - "integrity": "sha512-8PT/9xOx1HHdC7fDNNfhQ50Z8Mzu7nKyA1KCDltSpcZVZIbB0k7KtsHrnXyuIhbLlScoymBiLZ00c5MH6wdFsA==", + "node_modules/hast-util-raw/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/hast-util-to-html": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz", + "integrity": "sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==", "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-raw": "^7.0.0", + "hast-util-whitespace": "^2.0.0", + "html-void-elements": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prosemirror-state": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.1.tgz", - "integrity": "sha512-U/LBDW2gNmVa07sz/D229XigSdDQ5CLFwVB1Vb32MJbAHHhWe/6pOc721faI17tqw4pZ49i1xfY/jEZ9tbIhPg==", + "node_modules/hast-util-to-mdast": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/hast-util-to-mdast/-/hast-util-to-mdast-8.4.1.tgz", + "integrity": "sha512-tfmBLASuCgyhCzpkTXM5kU8xeuS5jkMZ17BYm2YftGT5wvgc7uHXTZ/X8WfNd6F5NV/IGmrLsuahZ+jXQir4zQ==", "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-transform": "^1.0.0" + "@types/extend": "^3.0.0", + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "extend": "^3.0.0", + "hast-util-has-property": "^2.0.0", + "hast-util-is-element": "^2.0.0", + "hast-util-phrasing": "^2.0.0", + "hast-util-to-text": "^3.0.0", + "mdast-util-phrasing": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "rehype-minify-whitespace": "^5.0.0", + "trim-trailing-lines": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prosemirror-transform": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.6.0.tgz", - "integrity": "sha512-MAp7AjsjEGEqQY0sSMufNIUuEyB1ZR9Fqlm8dTwwWwpEJRv/plsKjWXBbx52q3Ml8MtaMcd7ic14zAHVB3WaMw==", + "node_modules/hast-util-to-parse5": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz", + "integrity": "sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==", "dependencies": { - "prosemirror-model": "^1.0.0" + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/prosemirror-view": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.26.2.tgz", - "integrity": "sha512-CGKw+GadkfSBEwRAJTHCEKJ4DlV6/3IhAdjpwGyZHUHtbP7jX4Ol4zmi7xa2c6GOabDlIJLYXJydoNYLX7lNeQ==", + "node_modules/hast-util-to-text": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-3.1.2.tgz", + "integrity": "sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==", "dependencies": { - "prosemirror-model": "^1.16.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0" + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0", + "hast-util-is-element": "^2.0.0", + "unist-util-find-after": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true - }, - "node_modules/protocols": { + "node_modules/hast-util-whitespace": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "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==", - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", + "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "node_modules/hastscript": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", + "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^3.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "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==", - "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/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/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "node_modules/highlight.js": { + "version": "9.18.5", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", + "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==", + "deprecated": "Support has ended for 9.x series. Upgrade to @latest", "dev": true, + "hasInstallScript": true, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "node_modules/history": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", + "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", "dependencies": { - "performance-now": "^2.1.0" + "@babel/runtime": "^7.7.6" } }, - "node_modules/raf-schd": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", - "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dependencies": { - "safe-buffer": "^5.1.0" + "react-is": "^16.7.0" } }, - "node_modules/react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/react-avatar": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/react-avatar/-/react-avatar-3.10.0.tgz", - "integrity": "sha512-FB20OZIAJif0WNzGy4PwT5Nca4rekrYWiswBofuGAa5FKpRrFbJKY69267dRXbFqIYQrA/OxNB/TjhnmP2gsEQ==", + "node_modules/hosted-git-info/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": { - "core-js": "^3.6.1", - "is-retina": "^1.0.3", - "md5": "^2.0.0" + "yallist": "^4.0.0" }, - "peerDependencies": { - "prop-types": "^15.0.0 || ^16.0.0", - "react": "^15.0.0 || ^16.0.0 || ^17.0.0" + "engines": { + "node": ">=10" } }, - "node_modules/react-beautiful-dnd-next": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/react-beautiful-dnd-next/-/react-beautiful-dnd-next-11.0.5.tgz", - "integrity": "sha512-kM5Mob41HkA3ShS9uXqeMkW51L5bVsfttxfrwwHucu7I6SdnRKCyN78t6QiLH/UJQQ8T4ukI6NeQAQQpGwolkg==", - "dependencies": { - "@babel/runtime-corejs2": "^7.4.5", - "css-box-model": "^1.1.2", - "memoize-one": "^5.0.4", - "raf-schd": "^4.0.0", - "react-redux": "^7.0.3", - "redux": "^4.0.1", - "tiny-invariant": "^1.0.4", - "use-memo-one": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.8.5" - } + "node_modules/hosted-git-info/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/react-beautiful-dnd-next/node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" - }, - "node_modules/react-clientside-effect": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz", - "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==", + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.12.13" + "whatwg-encoding": "^2.0.0" }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + "engines": { + "node": ">=12" } }, - "node_modules/react-display-name": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/react-display-name/-/react-display-name-0.2.5.tgz", - "integrity": "sha512-I+vcaK9t4+kypiSgaiVWAipqHRXYmZIuAiS8vzFvXHHXVigg/sMKwlRgLy6LH2i3rmP+0Vzfl5lFsFRwF1r3pg==" + "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/react-dnd": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-7.7.0.tgz", - "integrity": "sha512-anpJDKMgdXE6kXvtBFmIAe1fuaexpVy7meUyNjiTfCnjQ1mRvnttGTVvcW9fMKijsUQYadiyvzd3BRxteFuVXg==", - "peer": true, - "dependencies": { - "@types/hoist-non-react-statics": "^3.3.1", - "dnd-core": "^7.7.0", - "hoist-non-react-statics": "^3.3.0", - "invariant": "^2.1.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": ">= 16.8", - "react-dom": ">= 16.8" + "node_modules/html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/react-dnd-html5-backend": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-14.1.0.tgz", - "integrity": "sha512-6ONeqEC3XKVf4eVmMTe0oPds+c5B9Foyj8p/ZKLb7kL2qh9COYxiBHv3szd6gztqi/efkmriywLUVlPotqoJyw==", - "dependencies": { - "dnd-core": "14.0.1" - } + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true }, - "node_modules/react-dnd-html5-backend/node_modules/dnd-core": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-14.0.1.tgz", - "integrity": "sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A==", + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, "dependencies": { - "@react-dnd/asap": "^4.0.0", - "@react-dnd/invariant": "^2.0.0", - "redux": "^4.1.1" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" }, - "peerDependencies": { - "react": "^16.14.0" + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "node_modules/react-focus-lock": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.9.1.tgz", - "integrity": "sha512-pSWOQrUmiKLkffPO6BpMXN7SNKXMsuOakl652IBuALAu1esk+IcpJyM+ALcYzPTTFz1rD0R54aB9A4HuP5t1Wg==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, "dependencies": { - "@babel/runtime": "^7.0.0", - "focus-lock": "^0.11.2", - "prop-types": "^15.6.2", - "react-clientside-effect": "^1.2.6", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "agent-base": "6", + "debug": "4" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">= 6" } }, - "node_modules/react-github-btn": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-github-btn/-/react-github-btn-1.3.0.tgz", - "integrity": "sha512-IpyNbbYENfmYOLoRkeKauAZF5PTkplawRquSiI7uDVJBUCVrR5jQ9zYBx4TlpzhWeYU+BIfKNnXtz2wvQJPsZg==", - "dependencies": { - "github-buttons": "^2.21.1" + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" } }, - "node_modules/react-icons": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.6.0.tgz", - "integrity": "sha512-rR/L9m9340yO8yv1QT1QurxWQvWpbNHqVX0fzMln2HEb9TEIrQRGsqiNFQfiv9/JEUbyHmHPlNTB2LWm2Ttz0g==", - "peerDependencies": { - "react": "*" + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" } }, - "node_modules/react-input-autosize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-3.0.0.tgz", - "integrity": "sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg==", + "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": { - "prop-types": "^15.5.8" + "safer-buffer": ">= 2.1.2 < 3" }, - "peerDependencies": { - "react": "^16.3.0 || ^17.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/react-inspector": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.1.tgz", - "integrity": "sha512-cxKSeFTf7jpSSVddm66sKdolG90qURAX3g1roTeaN6x0YEbtWc8JpmFN9+yIqLNH2uEkYerWLtJZIXRIFuBKrg==", - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0 || ^18.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==", + "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/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" } }, - "node_modules/react-intl-next": { - "name": "react-intl", - "version": "5.25.1", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.25.1.tgz", - "integrity": "sha512-pkjdQDvpJROoXLMltkP/5mZb0/XqrqLoPGKUCfbdkP8m6U9xbK40K51Wu+a4aQqTEvEK5lHBk0fWzUV72SJ3Hg==", + "node_modules/ignore-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "dev": true, "dependencies": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/icu-messageformat-parser": "2.1.0", - "@formatjs/intl": "2.2.1", - "@formatjs/intl-displaynames": "5.4.3", - "@formatjs/intl-listformat": "6.5.3", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/react": "16 || 17 || 18", - "hoist-non-react-statics": "^3.3.2", - "intl-messageformat": "9.13.0", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "react": "^16.3.0 || 17 || 18", - "typescript": "^4.5" + "minimatch": "^5.0.1" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "peer": true - }, - "node_modules/react-loosely-lazy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/react-loosely-lazy/-/react-loosely-lazy-1.0.0.tgz", - "integrity": "sha512-Ai/ox310hio8D0FxiZPEORTnHgyTeQ3seNhxVb+jh1hBrEgBlvB4Pvvb5zAKiktwcYGNIHQaZqtATkS68WLw5Q==", - "peerDependencies": { - "@react-loosely-lazy/manifest": "1.0.0", - "react": "^16.9.0 || ^17.0.0-0" + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/react-node-resolver": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-node-resolver/-/react-node-resolver-1.0.1.tgz", - "integrity": "sha512-IiSe0h2+IJo4enSlbdYjdwJnY86A7TwNxnfQVG2yApxVkHj9es1jum9Lb2aiBXKkLnwAj7ufBBlAa0ROU0o9nA==" - }, - "node_modules/react-popper": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", - "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "dependencies": { - "react-fast-compare": "^3.0.1", - "warning": "^4.0.2" + "brace-expansion": "^2.0.1" }, - "peerDependencies": { - "@popperjs/core": "^2.0.0", - "react": "^16.8.0 || ^17 || ^18", - "react-dom": "^16.8.0 || ^17 || ^18" + "engines": { + "node": ">=10" } }, - "node_modules/react-redux": { - "version": "7.2.8", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.8.tgz", - "integrity": "sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw==", - "dependencies": { - "@babel/runtime": "^7.15.4", - "@types/react-redux": "^7.1.20", - "hoist-non-react-statics": "^3.3.2", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" + "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==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, - "peerDependencies": { - "react": "^16.8.3 || ^17 || ^18" + "engines": { + "node": ">=6" }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-redux/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-router": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.2.2.tgz", - "integrity": "sha512-/MbxyLzd7Q7amp4gDOGaYvXwhEojkJD5BtExkuKmj39VEE0m3l/zipf6h2WIB2jyAO0lI6NGETh4RDcktRm4AQ==", "dependencies": { - "history": "^5.2.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/react-router-dom": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.2.2.tgz", - "integrity": "sha512-AtYEsAST7bDD4dLSQHDnk/qxWLJdad5t1HFa1qJyUrCeGgEuCSw0VB/27ARbF9Fi/W5598ujvJOm3ujUCVzuYQ==", - "dependencies": { - "history": "^5.2.0", - "react-router": "6.2.2" + "bin": { + "import-local-fixture": "fixtures/cli.js" }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/react-scrolllock": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scrolllock/-/react-scrolllock-5.0.1.tgz", - "integrity": "sha512-poeEsjnZAlpA6fJlaNo4rZtcip2j6l5mUGU/SJe1FFlicEudS943++u7ZSdA7lk10hoyYK3grOD02/qqt5Lxhw==", - "dependencies": { - "exenv": "^1.2.2" + "engines": { + "node": ">=8" }, - "peerDependencies": { - "react": "^16.3.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/react-select": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-4.3.1.tgz", - "integrity": "sha512-HBBd0dYwkF5aZk1zP81Wx5UsLIIT2lSvAY2JiJo199LjoLHoivjn9//KsmvQMEFGNhe58xyuOITjfxKCcGc62Q==", - "dependencies": { - "@babel/runtime": "^7.12.0", - "@emotion/cache": "^11.4.0", - "@emotion/react": "^11.1.1", - "memoize-one": "^5.0.0", - "prop-types": "^15.6.0", - "react-input-autosize": "^3.0.0", - "react-transition-group": "^4.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" } }, - "node_modules/react-select/node_modules/@emotion/cache": { - "version": "11.10.3", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz", - "integrity": "sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==", - "dependencies": { - "@emotion/memoize": "^0.8.0", - "@emotion/sheet": "^1.2.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.0.13" + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/react-select/node_modules/@emotion/sheet": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz", - "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==" - }, - "node_modules/react-select/node_modules/@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "node_modules/react-select/node_modules/@emotion/weak-memoize": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" - }, - "node_modules/react-select/node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/react-uid": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/react-uid/-/react-uid-2.3.2.tgz", - "integrity": "sha512-oeaoT4YOjsqHdrEJoO8SONNNBsoGh7AJPbsNqRK6Dv8UMdctWxA4ncj9gAA/Odki5g0GZaDSR7HydBJ8HxwgNg==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/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/init-package-json": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", + "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", + "dev": true, "dependencies": { - "tslib": "^2.0.0" + "npm-package-arg": "^9.0.1", + "promzard": "^0.3.0", + "read": "^1.0.7", + "read-package-json": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "node_modules/init-package-json/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "dependencies": { - "mute-stream": "~0.0.4" + "lru-cache": "^7.5.1" }, "engines": { - "node": ">=0.8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", - "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", + "node_modules/init-package-json/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/read-package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", - "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", + "node_modules/init-package-json/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", "dev": true, "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, - "node_modules/read-package-json/node_modules/hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", + "node_modules/inquirer/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": { - "lru-cache": "^7.5.1" + "color-convert": "^2.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/read-package-json/node_modules/normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", + "node_modules/inquirer/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": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "node_modules/inquirer/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": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" + "node": ">=7.0.0" } }, - "node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/inquirer/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/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "node_modules/inquirer/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, - "dependencies": { - "locate-path": "^2.0.0" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "node_modules/inquirer/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": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dependencies": { - "p-try": "^1.0.0" + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" }, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, + "node_modules/intl-messageformat": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz", + "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==", "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/fast-memoize": "1.2.1", + "@formatjs/icu-messageformat-parser": "2.1.0", + "tslib": "^2.1.0" } }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "peer": true, + "dependencies": { + "loose-envify": "^1.0.0" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "dev": true }, - "node_modules/read-pkg/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/read-pkg/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, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "has-bigints": "^1.0.1" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "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": { - "pify": "^3.0.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/read-pkg/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/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "node_modules/read-pkg/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "ci-info": "^2.0.0" }, - "engines": { - "node": ">= 6" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dependencies": { - "picomatch": "^2.2.1" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/realistic-structured-clone": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/realistic-structured-clone/-/realistic-structured-clone-2.0.4.tgz", - "integrity": "sha512-lItAdBIFHUSe6fgztHPtmmWqKUgs+qhcYLi3wTRUl4OTB3Vb8aBVSjGfQZUvkmJCKoX3K9Wf7kyLp/F/208+7A==", + "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, - "dependencies": { - "core-js": "^3.4", - "domexception": "^1.0.1", - "typeson": "^6.1.0", - "typeson-registry": "^1.0.0-alpha.20" + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/realistic-structured-clone/node_modules/domexception": { + "node_modules/is-extendable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dependencies": { - "webidl-conversions": "^4.0.2" + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/realistic-structured-clone/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/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, + "node_modules/is-extendable/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "isobject": "^3.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "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==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/redux": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", - "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", - "dependencies": { - "@babel/runtime": "^7.9.2" + "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==", + "engines": { + "node": ">=8" } }, - "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": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "dev": true, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "regenerate": "^1.4.2" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "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==" + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -18081,1167 +17433,1132 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "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": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "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": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/remark-stringify": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", - "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", + "node_modules/is-retina": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-retina/-/is-retina-1.0.3.tgz", + "integrity": "sha512-/tCmbIETZwCd8uHWO+GvbRa7jxwHFHdfetHfiwoP0aN9UDf3prUJMtKn7iBFYipYhqY1bSTjur8hC/Dakt8eyw==" + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" + "call-bind": "^1.0.2" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/remixicon-react": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remixicon-react/-/remixicon-react-1.0.0.tgz", - "integrity": "sha512-KOXlc8EdKdujr2f/2idyFSQRjUB8p0HNiWZYBBzRsTRlTXFuSAFfnGq9culNjhCGmc92Jbtfr9OP0MXWvTMdsQ==", - "peerDependencies": { - "react": ">=0.14.0" + "node_modules/is-ssh": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", + "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "dev": true, + "dependencies": { + "protocols": "^2.0.1" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "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" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "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" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">= 0.12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "dependencies": { + "text-extensions": "^1.0.0" + }, "engines": { - "node": ">=0.6" + "node": ">=0.10.0" } }, - "node_modules/request/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==", + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", "dev": true, "dependencies": { - "resolve-from": "^5.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "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": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "is-docker": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w==", - "dev": true, - "dependencies": { - "through": "~2.3.4" - } + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "engines": { - "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, + "node_modules/isomorphic-fetch/node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, + "node_modules/isomorphic.js": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", + "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==", "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" } }, - "node_modules/rollup": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.0.tgz", - "integrity": "sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA==", - "dev": true, - "peer": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, - "node_modules/rollup-plugin-inject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", - "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", + "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, - "dependencies": { - "estree-walker": "^0.6.1", - "magic-string": "^0.25.3", - "rollup-pluginutils": "^2.8.1" + "engines": { + "node": ">=8" } }, - "node_modules/rollup-plugin-inject/node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "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": { - "sourcemap-codec": "^1.4.8" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/rollup-plugin-node-polyfills": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", - "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", + "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, - "dependencies": { - "rollup-plugin-inject": "^3.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/rollup-plugin-polyfill-node": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.10.2.tgz", - "integrity": "sha512-5GMywXiLiuQP6ZzED/LO/Q0HyDi2W6b8VN+Zd3oB0opIjyRs494Me2ZMaqKWDNbGiW4jvvzl6L2n4zRgxS9cSQ==", + "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": { - "@rollup/plugin-inject": "^4.0.0" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dev": true, "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rope-sequence": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.3.tgz", - "integrity": "sha512-85aZYCxweiD5J8yTEbw+E6A27zSnLPNDL0WfPdw3YYodq7WjnTKo0q4dtyQ2gz23iPT8Q9CUyJtAaUNcTxRf5Q==" - }, - "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, + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, "engines": { - "node": ">=0.12.0" - } - }, - "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==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" + "node": ">=8" } }, - "node_modules/rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "node_modules/jackspeak": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.1.tgz", + "integrity": "sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==", "dev": true, "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dependencies": { - "mri": "^1.1.0" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=6" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "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==", - "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/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", "dev": true, "dependencies": { - "xmlchars": "^2.2.0" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "node": ">=10" } }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "node_modules/jake/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": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/semver/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/jake/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": { - "yallist": "^4.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "node_modules/jake/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": { - "randombytes": "^2.1.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "node_modules/jake/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/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/jake/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, - "dependencies": { - "kind-of": "^6.0.2" - }, "engines": { "node": ">=8" } }, - "node_modules/shallow-equal": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", - "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "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==", + "node_modules/jake/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": { - "shebang-regex": "^3.0.0" + "has-flag": "^4.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==", + "node_modules/js-string-escape": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", + "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "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==", + "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==" + }, + "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": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "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/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, - "node_modules/simple-peer": { - "version": "9.11.1", - "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.11.1.tgz", - "integrity": "sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==", - "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/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, "dependencies": { - "buffer": "^6.0.3", - "debug": "^4.3.2", - "err-code": "^3.0.1", - "get-browser-rtc": "^1.1.0", - "queue-microtask": "^1.2.3", - "randombytes": "^2.1.0", - "readable-stream": "^3.6.0" + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/simple-peer/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "node_modules/jsdom/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - { - "type": "consulting", - "url": "https://feross.org/support" + "utf-8-validate": { + "optional": true } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" } }, - "node_modules/simple-peer/node_modules/err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - }, - "node_modules/sirv": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", - "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", - "dev": true, - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": ">= 10" + "node": ">=4" } }, - "node_modules/sirv/node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "node_modules/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/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==" }, - "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==", + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "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==" + }, + "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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/socks": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", - "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", - "dev": true, - "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" + "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" + "node": ">=6" } }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "universalify": "^2.0.0" }, - "engines": { - "node": ">= 10" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "dependencies": { - "is-plain-obj": "^2.0.0" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" }, - "engines": { - "node": ">=8" + "bin": { + "JSONStream": "bin.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "*" } }, - "node_modules/sort-keys/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, "engines": { - "node": ">=8" + "node": ">=0.6.0" } }, - "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/jsx-ast-utils": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", + "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", "dev": true, + "dependencies": { + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4.0" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "node_modules/junk": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", + "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/just-diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.2.0.tgz", + "integrity": "sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==", "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==", + "node_modules/just-diff-apply": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "engines": { + "node": ">=0.10.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==", + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "graceful-fs": "^4.1.11" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "node_modules/speakingurl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", - "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", "dev": true, "dependencies": { - "through": "2" + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/lerna": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.6.2.tgz", + "integrity": "sha512-Y0yMPslvnBnTZi7Nrs/gDyYZYauNf61xWNCehISHIORxZmmpoluNkcWTfcyb47is5uJQCv5QJX5xKKubbs+a6w==", + "dev": true, + "dependencies": { + "@lerna/add": "5.6.2", + "@lerna/bootstrap": "5.6.2", + "@lerna/changed": "5.6.2", + "@lerna/clean": "5.6.2", + "@lerna/cli": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/create": "5.6.2", + "@lerna/diff": "5.6.2", + "@lerna/exec": "5.6.2", + "@lerna/import": "5.6.2", + "@lerna/info": "5.6.2", + "@lerna/init": "5.6.2", + "@lerna/link": "5.6.2", + "@lerna/list": "5.6.2", + "@lerna/publish": "5.6.2", + "@lerna/run": "5.6.2", + "@lerna/version": "5.6.2", + "@nrwl/devkit": ">=14.8.1 < 16", + "import-local": "^3.0.2", + "inquirer": "^8.2.4", + "npmlog": "^6.0.2", + "nx": ">=14.8.1 < 16", + "typescript": "^3 || ^4" + }, + "bin": { + "lerna": "cli.js" }, "engines": { - "node": "*" + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "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": { - "readable-stream": "^3.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "node_modules/lib0": { + "version": "0.2.78", + "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.78.tgz", + "integrity": "sha512-SV2nU43/6eaYnGH3l0lg2wg1ziB/TH3sAd2E8quXPGwrqo+aX98SNT2ZKucpUr5B8A52jD7ZMjAl+r87Fa/bLQ==", "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" + "isomorphic.js": "^0.2.4" }, "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "0gentesthtml": "bin/gentesthtml.js", + "0serve": "bin/0serve.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=16" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" } }, - "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "node_modules/libnpmaccess": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.4.tgz", + "integrity": "sha512-qZ3wcfIyUoW0+qSFkMBovcTrSGJ3ZeyvpR7d5N9pEYv/kXs8sHP2wiqEIXBKLFrZlmM0kR0RJD7mtfLngtlLag==", "dev": true, "dependencies": { - "minipass": "^3.1.1" + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "node_modules/libnpmaccess/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" + "node_modules/libnpmaccess/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" } }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/libnpmaccess/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "node_modules/libnpmpublish": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.5.tgz", + "integrity": "sha512-LUR08JKSviZiqrYTDfywvtnsnxr+tOvBU0BF8H+9frt7HMvc6Qn6F8Ubm72g5hDTHbq8qupKfDvDAln2TVPvFg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/string.prototype.replaceall": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.replaceall/-/string.prototype.replaceall-1.0.6.tgz", - "integrity": "sha512-OA8VDhE7ssNFlyoDXUHxw6V5cjgPrtosyJKqJX5i1P5tV9eUynsbhx1yz0g+Ye4fjFwAxhKLxt8GSRx2Aqc+Sw==", + "node_modules/libnpmpublish/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", - "is-regex": "^1.1.4" + "lru-cache": "^7.5.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "node_modules/string.prototype.trim": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.6.tgz", - "integrity": "sha512-8lMR2m+U0VJTPp6JjvJTtGyc4FIGq9CdRt7O9p6T0e6K4vjU+OP+SQJpbe/SBmRcCUIvNUnjsbmY6lnMp8MhsQ==", + "node_modules/libnpmpublish/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/libnpmpublish/node_modules/normalize-package-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "node_modules/libnpmpublish/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "uc.micro": "^1.0.1" } }, - "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==", + "node_modules/linkifyjs": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.1.1.tgz", + "integrity": "sha512-zFN/CTVmbcVef+WaDXT63dNzzkfRBKT1j464NJQkV7iSgJU0sLBus9W0HBwnXK13/hf168pbrx/V/bjEHOXNHA==" + }, + "node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" }, "engines": { "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, "engines": { - "node": ">=6" + "node": ">=8.9.0" } }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "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==", + "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": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-literal": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-0.4.2.tgz", - "integrity": "sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "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.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { - "acorn": "^8.8.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "node_modules/log-symbols/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": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/styled-components": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.2.6.tgz", - "integrity": "sha512-CpFUIyKXl5JP0PYQ7aNncpn6Oxts+5JfMvvdhjIN2S8afPZbw/VdgVucNkMrPrMY7aIFoYrm4qwti1V+vyhi2g==", - "hasInstallScript": true, + "node_modules/log-symbols/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": { - "buffer": "^5.0.3", - "css-to-react-native": "^2.0.3", - "fbjs": "^0.8.16", - "hoist-non-react-statics": "^2.5.0", - "is-plain-object": "^2.0.1", - "prop-types": "^15.5.4", - "react-is": "^16.3.1", - "stylis": "^3.5.0", - "stylis-rule-sheet": "^0.0.10", - "supports-color": "^3.2.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "react": ">= 0.14.0 < 17.0.0-0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/styled-components/node_modules/core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js." - }, - "node_modules/styled-components/node_modules/fbjs": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", - "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", + "node_modules/log-symbols/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": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "node_modules/styled-components/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "color-name": "~1.1.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">=7.0.0" } }, - "node_modules/styled-components/node_modules/hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" + "node_modules/log-symbols/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/styled-components/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/styled-components/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/styled-components/node_modules/stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, - "node_modules/styled-components/node_modules/stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", - "peerDependencies": { - "stylis": "^3.5.0" - } - }, - "node_modules/styled-components/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dependencies": { - "has-flag": "^1.0.0" - }, + "node_modules/log-symbols/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.8.0" + "node": ">=8" } }, - "node_modules/stylis": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", - "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" - }, - "node_modules/supports-color": { + "node_modules/log-symbols/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==", @@ -19253,660 +18570,700 @@ "node": ">=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", "engines": { - "node": ">= 0.4" + "node": ">= 0.6.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" } }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "dev": true + "node_modules/long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==", + "engines": { + "node": ">=0.6" + } }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dev": true, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" + "loose-envify": "cli.js" } }, - "node_modules/svgo/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/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "get-func-name": "^2.0.0" + } + }, + "node_modules/lowlight": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", + "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", + "dependencies": { + "fault": "^1.0.0", + "highlight.js": "~10.7.0" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lowlight/node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/svgo/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/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==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "sourcemap-codec": "^1.4.8" } }, - "node_modules/svgo/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/svgo/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/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/svgo/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "semver": "^7.3.5" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/svgo/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==", + "node_modules/make-fetch-happen/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "balanced-match": "^1.0.0" } }, - "node_modules/svgo/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/make-fetch-happen/node_modules/cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "engines": { - "node": ">=4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/tabbable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-1.1.3.tgz", - "integrity": "sha512-nOWwx35/JuDI4ONuF0ZTo6lYvI0fY0tZCH1ErzY2EXfu4az50ZyiUX8X073FLiZtmWUVlkRnuXsehjJgCw9tYg==" - }, - "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==", + "node_modules/make-fetch-happen/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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==", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tape": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/tape/-/tape-5.6.0.tgz", - "integrity": "sha512-LyM4uqbiTAqDgsHTY0r1LH66yE24P3SZaz5TL3mPUds0XCTFl/0AMUBrjgBjUclvbPTFB4IalXg0wFfbTuuu/Q==", + "node_modules/make-fetch-happen/node_modules/fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", "dev": true, "dependencies": { - "array.prototype.every": "^1.1.3", - "call-bind": "^1.0.2", - "deep-equal": "^2.0.5", - "defined": "^1.0.0", - "dotignore": "^0.1.2", - "for-each": "^0.3.3", - "get-package-type": "^0.1.0", - "glob": "^7.2.3", - "has": "^1.0.3", - "has-dynamic-import": "^2.0.1", - "inherits": "^2.0.4", - "is-regex": "^1.1.4", - "minimist": "^1.2.6", - "object-inspect": "^1.12.2", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.3", - "resolve": "^2.0.0-next.3", - "resumer": "^0.0.0", - "string.prototype.trim": "^1.2.6", - "through": "^2.3.8" + "minipass": "^5.0.0" }, - "bin": { - "tape": "bin/tape" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/tape/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.0.tgz", + "integrity": "sha512-AQ1/SB9HH0yCx1jXAT4vmCbTOPe5RQ+kCurjbel5xSCGhebumUv+GJZfa1rEqor3XIViqwSEmlkZCQD43RWrBg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2", + "path-scurry": "^1.7.0" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/tape/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=12" } }, - "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.2.tgz", + "integrity": "sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg==", "dev": true, "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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/make-fetch-happen/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "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": ">=8" } }, - "node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "node_modules/make-fetch-happen/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", "dev": true, "engines": { - "node": ">=4" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/tempy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.0.0.tgz", - "integrity": "sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==", + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", "dev": true, "dependencies": { - "is-stream": "^3.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^2.12.2", - "unique-string": "^3.0.0" + "minipass": "^5.0.0" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/tempy/node_modules/is-stream": { + "node_modules/make-fetch-happen/node_modules/unique-filename": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "unique-slug": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/tempy/node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/tempy/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "engines": { - "node": ">=12.20" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" }, - "engines": { - "node": ">=8" + "bin": { + "markdown-it": "bin/markdown-it.js" } }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/matchit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/matchit/-/matchit-1.1.0.tgz", + "integrity": "sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@arr/every": "^1.0.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6" } }, - "node_modules/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" - }, - "node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, - "engines": { - "node": ">=0.10" + "node_modules/math.gl": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/math.gl/-/math.gl-3.6.3.tgz", + "integrity": "sha512-Yq9CyECvSDox9+5ETi2+x1bGTY5WvGUGL3rJfC4KPoCZAM51MGfrCm6rIn4yOJUVfMPs2a5RwMD+yGS/n1g3gg==", + "dependencies": { + "@math.gl/core": "3.6.3" } }, - "node_modules/text-table": { + "node_modules/matrix-crdt": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, + "resolved": "https://registry.npmjs.org/matrix-crdt/-/matrix-crdt-0.2.0.tgz", + "integrity": "sha512-CmwC7/Wtujq6Jp1+MbIY0noEgGnT7YKl3lSOAtzIpDRyNPghHRxtgrDh+IR1kxsf/kFKWqxjgezzlG2vkUhGyA==", "dependencies": { - "readable-stream": "3" + "another-json": "^0.2.0", + "lodash": "^4.17.21", + "simple-peer": "^9.11.0", + "vscode-lib": "^0.1.0" + }, + "peerDependencies": { + "lib0": "*", + "matrix-js-sdk": "*", + "y-protocols": "*", + "yjs": "*" } }, - "node_modules/tiny-invariant": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", - "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" - }, - "node_modules/tinybench": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.3.1.tgz", - "integrity": "sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==", - "dev": true - }, - "node_modules/tinypool": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.0.tgz", - "integrity": "sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } + "node_modules/matrix-events-sdk": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/matrix-events-sdk/-/matrix-events-sdk-0.0.1.tgz", + "integrity": "sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA==" }, - "node_modules/tinyspy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.2.tgz", - "integrity": "sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==", - "dev": true, + "node_modules/matrix-js-sdk": { + "version": "19.7.0", + "resolved": "https://registry.npmjs.org/matrix-js-sdk/-/matrix-js-sdk-19.7.0.tgz", + "integrity": "sha512-mFN1LBmEpYHCH6II1F8o7y8zJr0kn1yX7ga7tRXHbLJAlBS4bAXRsEoAzdv6OrV8/dS325JlVUYQLHFHQWjYxg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "another-json": "^0.2.0", + "browser-request": "^0.3.3", + "bs58": "^5.0.0", + "content-type": "^1.0.4", + "loglevel": "^1.7.1", + "matrix-events-sdk": "^0.0.1-beta.7", + "p-retry": "4", + "qs": "^6.9.6", + "request": "^2.88.2", + "unhomoglyph": "^1.0.6" + }, "engines": { - "node": ">=14.0.0" + "node": ">=12.9.0" } }, - "node_modules/tippy.js": { - "version": "6.3.7", - "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", - "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dependencies": { - "@popperjs/core": "^2.9.0" + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/md5-hex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", + "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", "dev": true, "dependencies": { - "os-tmpdir": "~1.0.2" + "blueimp-md5": "^2.10.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=8" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" + "node_modules/mdast-util-definitions": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz", + "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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==", + "node_modules/mdast-util-find-and-replace": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz", + "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==", "dependencies": { - "is-number": "^7.0.0" + "@types/mdast": "^3.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" }, - "engines": { - "node": ">=8.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/totalist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", - "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", - "dev": true, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, + "node_modules/mdast-util-from-markdown": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz", + "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, + "node_modules/mdast-util-gfm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz", + "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==", "dependencies": { - "punycode": "^2.1.1" + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-gfm-autolink-literal": "^1.0.0", + "mdast-util-gfm-footnote": "^1.0.0", + "mdast-util-gfm-strikethrough": "^1.0.0", + "mdast-util-gfm-table": "^1.0.0", + "mdast-util-gfm-task-list-item": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/treeverse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", - "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz", + "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "micromark-util-character": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/mdast-util-gfm-footnote": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz", + "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", + "micromark-util-normalize-identifier": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "node_modules/mdast-util-gfm-strikethrough": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz", + "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/trouter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/trouter/-/trouter-2.0.1.tgz", - "integrity": "sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==", - "dev": true, + "node_modules/mdast-util-gfm-table": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz", + "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==", "dependencies": { - "matchit": "^1.0.0" + "@types/mdast": "^3.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.3.0" }, - "engines": { - "node": ">=6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz", + "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==", "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/mdast-util-phrasing": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", + "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==", + "dependencies": { + "@types/mdast": "^3.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "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, + "node_modules/mdast-util-to-hast": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz", + "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==", "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-definitions": "^5.0.0", + "micromark-util-sanitize-uri": "^1.1.0", + "trim-lines": "^3.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" }, - "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" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "node_modules/mdast-util-to-markdown": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz", + "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==", "dependencies": { - "safe-buffer": "^5.0.1" + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" }, - "engines": { - "node": "*" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "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, + "node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", "dependencies": { - "prelude-ls": "^1.2.1" + "@types/mdast": "^3.0.0" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true }, - "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==", + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, "engines": { "node": ">=10" }, @@ -19914,18041 +19271,10669 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "node_modules/meow/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/meow/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "node_modules/meow/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": { - "is-typedarray": "^1.0.0" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/typescript": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", - "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", - "devOptional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "node_modules/meow/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": ">=4.2.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typeson": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/typeson/-/typeson-6.1.0.tgz", - "integrity": "sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA==", + "node_modules/meow/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": ">=0.1.14" + "node": ">=8" } }, - "node_modules/typeson-registry": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/typeson-registry/-/typeson-registry-1.0.0-alpha.39.tgz", - "integrity": "sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw==", + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { - "base64-arraybuffer-es6": "^0.7.0", - "typeson": "^6.0.0", - "whatwg-url": "^8.4.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=8" } }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], + "node_modules/meow/node_modules/read-pkg-up/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": "*" + "node": ">=8" } }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + "node_modules/meow/node_modules/read-pkg/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/uglify-js": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", - "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node_modules/meow/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/unhomoglyph": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unhomoglyph/-/unhomoglyph-1.0.6.tgz", - "integrity": "sha512-7uvcWI3hWshSADBu4JpnyYbTVc7YlhF5GDW/oPD5AxIxl34k4wXR3WDkPnzLxkN32LiTCTKMQLtKVZiwki3zGg==" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", "dev": true, "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" + "is-plain-obj": "^2.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "node_modules/merge-options/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/unicode-property-aliases-ecmascript": { + "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/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/micromark": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz", + "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz", + "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], - "engines": { - "node": ">=4" + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" } }, - "node_modules/unified/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "engines": { - "node": ">=12" + "node_modules/micromark-extension-gfm": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz", + "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-footnote": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz", + "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==", "dependencies": { - "imurmurhash": "^0.1.4" + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "dev": true, + "node_modules/micromark-extension-gfm-footnote": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz", + "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==", "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz", + "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==", + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", + "node_modules/micromark-extension-gfm-table": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz", + "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==", "dependencies": { - "@types/unist": "^2.0.0" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-visit": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", - "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz", + "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "micromark-util-types": "^1.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-visit-parents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", - "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz", + "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==", "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "dev": true - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", - "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==", + "node_modules/micromark-factory-destination": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz", + "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==", "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/micromark-factory-label": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz", + "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "punycode": "^2.1.0" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, + "node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/use-callback-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", - "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-memo-one": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", - "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true + "node_modules/micromark-factory-title": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz", + "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + ], "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "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/v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dev": true, + "node_modules/micromark-factory-whitespace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz", + "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "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, + "node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, + "node_modules/micromark-util-chunked": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz", + "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" + "node_modules/micromark-util-classify-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz", + "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } ], "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/verror/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": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/vfile": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz", - "integrity": "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==", + "node_modules/micromark-util-combine-extensions": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz", + "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" } }, - "node_modules/vfile-message": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", - "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz", + "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/vfile/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/micromark-util-decode-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz", + "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==", "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } ], - "engines": { - "node": ">=4" + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/vite": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.9.tgz", - "integrity": "sha512-waYABTM+G6DBTCpYAxvevpG50UOlZuynR0ckTK5PawNVt7ebX6X7wNXHaGIO6wYYFXSM7/WcuFuO2QzhBB6aMw==", - "dev": true, - "dependencies": { - "esbuild": "^0.14.47", - "postcss": "^8.4.16", - "resolve": "^1.22.1", - "rollup": ">=2.75.6 <2.77.0 || ~2.77.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "less": "*", - "sass": "*", - "stylus": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "less": { - "optional": true + "node_modules/micromark-util-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz", + "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, - "sass": { - "optional": true + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz", + "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, - "stylus": { - "optional": true + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz", + "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" }, - "terser": { - "optional": true + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" + "node_modules/micromark-util-resolve-all": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz", + "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } ], - "engines": { - "node": ">=12" + "dependencies": { + "micromark-util-types": "^1.0.0" } }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", - "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/linux-loong64": "0.14.54", - "esbuild-android-64": "0.14.54", - "esbuild-android-arm64": "0.14.54", - "esbuild-darwin-64": "0.14.54", - "esbuild-darwin-arm64": "0.14.54", - "esbuild-freebsd-64": "0.14.54", - "esbuild-freebsd-arm64": "0.14.54", - "esbuild-linux-32": "0.14.54", - "esbuild-linux-64": "0.14.54", - "esbuild-linux-arm": "0.14.54", - "esbuild-linux-arm64": "0.14.54", - "esbuild-linux-mips64le": "0.14.54", - "esbuild-linux-ppc64le": "0.14.54", - "esbuild-linux-riscv64": "0.14.54", - "esbuild-linux-s390x": "0.14.54", - "esbuild-netbsd-64": "0.14.54", - "esbuild-openbsd-64": "0.14.54", - "esbuild-sunos-64": "0.14.54", - "esbuild-windows-32": "0.14.54", - "esbuild-windows-64": "0.14.54", - "esbuild-windows-arm64": "0.14.54" - } - }, - "node_modules/vite/node_modules/esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" + "node_modules/micromark-util-sanitize-uri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz", + "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } ], - "engines": { - "node": ">=12" + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" } }, - "node_modules/vite/node_modules/esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" + "node_modules/micromark-util-subtokenize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz", + "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, "engines": { - "node": ">=12" + "node": ">=8.6" } }, - "node_modules/vite/node_modules/esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "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==", "engines": { - "node": ">=12" + "node": ">= 0.6" } }, - "node_modules/vite/node_modules/esbuild-darwin-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", - "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, "engines": { - "node": ">=12" + "node": ">= 0.6" } }, - "node_modules/vite/node_modules/esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", - "cpu": [ - "x64" - ], + "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, - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/vite/node_modules/esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", - "cpu": [ - "arm64" - ], + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/vite/node_modules/esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/vite/node_modules/esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/vite/node_modules/esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", - "cpu": [ - "riscv64" - ], + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, "engines": { - "node": ">=12" + "node": ">= 6" } }, - "node_modules/vite/node_modules/esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", - "cpu": [ - "s390x" - ], + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/vite/node_modules/esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", - "cpu": [ - "x64" - ], + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/vite/node_modules/esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", - "cpu": [ - "x64" - ], + "node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, "engines": { - "node": ">=12" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/vite/node_modules/esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", - "cpu": [ - "x64" - ], + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/vite/node_modules/esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", - "cpu": [ - "ia32" - ], + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/vite/node_modules/esbuild-windows-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", - "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", - "cpu": [ - "x64" - ], + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" } }, - "node_modules/vite/node_modules/esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", - "cpu": [ - "arm64" - ], + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/vite/node_modules/rollup": { - "version": "2.77.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", - "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, - "bin": { - "rollup": "dist/bin/rollup" + "dependencies": { + "minipass": "^3.0.0" }, "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=8" } }, - "node_modules/vitest": { - "version": "0.24.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.24.4.tgz", - "integrity": "sha512-4ratHSyVEJPtBLV00uhL4Wj3Pmandc9rsxUkE0q9peNOfaOgGF4lEepdkaXGRi9AGFKr1GRVtjGOJ6Fp2lCpEg==", + "node_modules/minipass/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/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "dependencies": { - "@types/chai": "^4.3.3", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "chai": "^4.3.6", - "debug": "^4.3.4", - "local-pkg": "^0.4.2", - "strip-literal": "^0.4.2", - "tinybench": "^2.3.1", - "tinypool": "^0.3.0", - "tinyspy": "^1.0.2", - "vite": "^3.0.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": ">=v14.16.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/vscode-lib": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/vscode-lib/-/vscode-lib-0.1.2.tgz", - "integrity": "sha512-X7YTInfdx0D7O5d5jxv5tirYNlZT3wwmB/auEWDq8nKrJCkZea48y1brADKWSfmmSCvmaZwG5RJ3VOQf/pPwMg==" - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-keyname": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", - "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==" - }, - "node_modules/w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", - "dev": true, - "dependencies": { - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/walk-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", - "dev": true - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/wasm-dce": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wasm-dce/-/wasm-dce-1.0.2.tgz", - "integrity": "sha512-Fq1+nu43ybsjSnBquLrW/cULmKs61qbv9k8ep13QUe0nABBezMoNAA+j6QY66MW0/eoDVDp1rjXDqQ2VKyS/Xg==", - "dependencies": { - "@babel/core": "^7.0.0-beta.39", - "@babel/traverse": "^7.0.0-beta.39", - "@babel/types": "^7.0.0-beta.39", - "babylon": "^7.0.0-beta.39", - "webassembly-interpreter": "0.0.30" - } - }, - "node_modules/wasm-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/wasm-loader/-/wasm-loader-1.3.0.tgz", - "integrity": "sha512-R4s75XH+o8qM+WaRrAU9S2rbAMDzob18/S3V8R9ZoFpZkPWLAohWWlzWAp1ybeTkOuuku/X1zJtxiV0pBYxZww==", - "dependencies": { - "loader-utils": "^1.1.0", - "wasm-dce": "^1.0.0" - }, - "peerDependencies": { - "wasm-dce": "1.x" - } - }, - "node_modules/wasm-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-vitals": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-1.1.2.tgz", - "integrity": "sha512-PFMKIY+bRSXlMxVAQ+m2aw9c/ioUYfDgrYot0YUa+/xa0sakubWhSDyxAKwzymvXVdF4CZI71g06W+mqhzu6ig==" - }, - "node_modules/webassembly-floating-point-hex-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/webassembly-floating-point-hex-parser/-/webassembly-floating-point-hex-parser-0.1.2.tgz", - "integrity": "sha512-TUf1H++8U10+stJbFydnvrpG5Sznz5Rilez/oZlV5zI0C/e4cSxd8rALAJ8VpTvjVWxLmL3SVSJUK6Ap9AoiNg==", - "engines": { - "node": "*" - } - }, - "node_modules/webassembly-interpreter": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/webassembly-interpreter/-/webassembly-interpreter-0.0.30.tgz", - "integrity": "sha512-+Jdy2piEvz9T5j751mOE8+rBO12p+nNW6Fg4kJZ+zP1oUfsm+151sbAbM8AFxWTURmWCGP+r8Lxwfv3pzN1bCQ==", - "dependencies": { - "@babel/code-frame": "^7.0.0-beta.36", - "long": "^3.2.0", - "webassembly-floating-point-hex-parser": "0.1.2" - }, - "bin": { - "wasm": "lib/bin/repl.js", - "wasm2wast": "lib/bin/wasm2wast.js", - "wasmast": "lib/bin/wasmast.js", - "wasmdump": "lib/bin/wasmdump.js", - "wasmrun": "lib/bin/wasmrun.js", - "wastast": "lib/bin/wastast.js" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==" - }, - "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "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==", - "engines": { - "node": ">=8" - } - }, - "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/write-json-file": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", - "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", - "dev": true, - "dependencies": { - "detect-indent": "^6.0.0", - "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8.3" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/write-json-file/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-json-file/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, - "dependencies": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-pkg/node_modules/detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/write-pkg/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-pkg/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/write-pkg/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/write-pkg/node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/write-pkg/node_modules/type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-pkg/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/write-pkg/node_modules/write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "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/y-indexeddb": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/y-indexeddb/-/y-indexeddb-9.0.6.tgz", - "integrity": "sha512-8mdCYdzZDWS2lGiB9Reaz67ZqvnV6EXH/F7L+TmBC+3mWjIBrPw4UcI79nOhEOh+y9lHXzNpSda4YJ06M13F1A==", - "dependencies": { - "lib0": "^0.2.35" - }, - "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" - }, - "peerDependencies": { - "yjs": "^13.0.0" - } - }, - "node_modules/y-monaco": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/y-monaco/-/y-monaco-0.1.4.tgz", - "integrity": "sha512-RzAvjKJ2yt3VjlKK55U8STJyd1gz5/Qm6pjt7SAVb+k+g+KaSeTuSBGt+lURN+dzzSNs73ZkIAerW3JM0mzBSw==", - "dependencies": { - "lib0": "^0.2.43" - }, - "peerDependencies": { - "monaco-editor": ">=0.20.0", - "yjs": "^13.3.1" - } - }, - "node_modules/y-prosemirror": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/y-prosemirror/-/y-prosemirror-1.0.20.tgz", - "integrity": "sha512-LVMtu3qWo0emeYiP+0jgNcvZkqhzE/otOoro+87q0iVKxy/sMKuiJZnokfJdR4cn9qKx0Un5fIxXqbAlR2bFkA==", - "dependencies": { - "lib0": "^0.2.42" - }, - "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" - }, - "peerDependencies": { - "prosemirror-model": "^1.7.1", - "prosemirror-state": "^1.2.3", - "prosemirror-view": "^1.9.10", - "y-protocols": "^1.0.1", - "yjs": "^13.3.2" - } - }, - "node_modules/y-protocols": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.5.tgz", - "integrity": "sha512-Wil92b7cGk712lRHDqS4T90IczF6RkcvCwAD0A2OPg+adKmOe+nOiT/N2hvpQIWS3zfjmtL4CPaH5sIW1Hkm/A==", - "dependencies": { - "lib0": "^0.2.42" - }, - "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" - } - }, - "node_modules/y-webrtc": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/y-webrtc/-/y-webrtc-10.2.3.tgz", - "integrity": "sha512-X7a6c56/jWhEI8LHLmT3LgzwbPA4r8h46pdVvV+55EQJhi+K6RfmisWgj7h6/2gkB0yveq7iDxlmyrYGnAKW/Q==", - "dependencies": { - "lib0": "^0.2.42", - "simple-peer": "^9.11.0", - "y-protocols": "^1.0.5" - }, - "bin": { - "y-webrtc-signaling": "bin/server.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" - }, - "optionalDependencies": { - "ws": "^7.2.0" - } - }, - "node_modules/y-webrtc/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "optional": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yjs": { - "version": "13.5.41", - "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.5.41.tgz", - "integrity": "sha512-4eSTrrs8OeI0heXKKioRY4ag7V5Bk85Z4MeniUyown3o3y0G7G4JpAZWrZWfTp7pzw2b53GkAQWKqHsHi9j9JA==", - "dependencies": { - "lib0": "^0.2.49" - }, - "funding": { - "type": "GitHub Sponsors ❤", - "url": "https://github.com/sponsors/dmonad" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", - "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/zxcvbn": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz", - "integrity": "sha512-Bq0B+ixT/DMyG8kgX2xWcI5jUvCwqrMxSFam7m0lAf78nf04hv6lNCsyLYdyYTrCVMqNDY/206K7eExYCeSyUQ==" - }, - "packages/common": { - "name": "@typecell-org/common", - "version": "0.0.3", - "dependencies": { - "buffer": "^6.0.3", - "string.prototype.replaceall": "^1.0.5", - "uuid": "^8.3.2" - }, - "devDependencies": { - "@types/uuid": "^8.3.4", - "rimraf": "^3.0.2", - "rollup-plugin-node-polyfills": "^0.2.1", - "typescript": "4.5.5" - } - }, - "packages/common/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "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.2.1" - } - }, - "packages/common/node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "packages/editor": { - "name": "@typecell-org/editor", - "version": "0.0.3", - "dependencies": { - "@atlaskit/atlassian-navigation": "^2.2.6", - "@atlaskit/avatar": "^21.1.1", - "@atlaskit/banner": "^11.6.1", - "@atlaskit/breadcrumbs": "^11.7.3", - "@atlaskit/button": "^16.3.5", - "@atlaskit/checkbox": "^12.3.18", - "@atlaskit/comment": "^10.5.2", - "@atlaskit/css-reset": "^6.3.13", - "@atlaskit/dropdown-menu": "^11.3.0", - "@atlaskit/flag": "^14.6.3", - "@atlaskit/form": "^8.5.6", - "@atlaskit/inline-message": "^11.3.0", - "@atlaskit/menu": "^1.3.8", - "@atlaskit/modal-dialog": "^12.2.14", - "@atlaskit/page-header": "^10.2.3", - "@atlaskit/page-layout": "^1.2.7", - "@atlaskit/progress-bar": "^0.5.8", - "@atlaskit/section-message": "^6.1.14", - "@atlaskit/select": "^15.7.5", - "@atlaskit/spinner": "^15.1.14", - "@atlaskit/textarea": "^4.3.8", - "@atlaskit/textfield": "^5.1.12", - "@atlaskit/tree": "^8.6.1", - "@atlaskit/user-picker": "^9.3.1", - "@blocknote/core": "^0.1.0", - "@deck.gl/aggregation-layers": "^8.6.4", - "@deck.gl/core": "^8.6.4", - "@deck.gl/layers": "^8.6.4", - "@deck.gl/react": "^8.6.4", - "@emotion/react": "^11.4.0", - "@loaders.gl/core": "^3.0.12", - "@loaders.gl/images": "^3.0.12", - "@matrix-org/olm": "3.2.12", - "@syncedstore/yjs-reactive-bindings": "^0.4.0", - "@tippyjs/react": "^4.2.5", - "@tiptap/extension-collaboration": "^2.0.0-beta.38", - "@tiptap/extension-collaboration-cursor": "^2.0.0-beta.37", - "@typecell-org/common": "^0.0.3", - "@typecell-org/engine": "^0.0.3", - "@typecell-org/parsers": "^0.0.3", - "@typescript/vfs": "^1.3.4", - "classnames": "^2.3.1", - "events": "^3.3.0", - "filebridge-client": "^0.1.5", - "fractional-indexing": "^2.0.0", - "frontend-collective-react-dnd-scrollzone": "1.0.2", - "lodash": "^4.17.21", - "lowlight": "^1.20.0", - "lz-string": "^1.4.4", - "markdown-it": "^12.0.2", - "matrix-crdt": "^0.2.0", - "matrix-js-sdk": "^19.4.0", - "mobx": "^6.2.0", - "mobx-react-lite": "^3.2.0", - "monaco-editor": "^0.35.0", - "penpal": "^6.1.0", - "prettier": "2.4.1", - "probe.gl": "^3.1.4", - "qs": "^6.10.1", - "react": "^18.2.0", - "react-avatar": "^3.10.0", - "react-dnd": "^14.0.2", - "react-dnd-html5-backend": "^14.0.0", - "react-dom": "^18.2.0", - "react-error-overlay": "^6.0.9", - "react-github-btn": "^1.2.1", - "react-icons": "^4.6.0", - "react-inspector": "^6.0.1", - "react-intl-next": "npm:react-intl@^5.18.1", - "react-router-dom": "6.2.2", - "remixicon-react": "^1.0.0", - "semver": "^7.3.5", - "simple-peer": "^9.11.1", - "speakingurl": "^14.0.1", - "string.prototype.replaceall": "^1.0.5", - "styled-components": "3.2.6", - "tippy.js": "^6.3.1", - "typescript": "4.5.5", - "ua-parser-js": "^0.7.28", - "uuid": "^8.3.2", - "vscode-lib": "^0.1.2", - "wasm-loader": "^1.3.0", - "web-vitals": "^1.0.1", - "y-indexeddb": "9.0.6", - "y-monaco": "^0.1.3", - "y-protocols": "^1.0.5", - "y-webrtc": "^10.1.8", - "yjs": "^13.5.41", - "zxcvbn": "^4.4.2" - }, - "devDependencies": { - "@esbuild-plugins/node-globals-polyfill": "^0.1.1", - "@esbuild-plugins/node-modules-polyfill": "^0.1.4", - "@playwright/test": "^1.18.1", - "@svgr/webpack": "^5.5.0", - "@types/lodash": "^4.14.168", - "@types/lowlight": "0.0.2", - "@types/markdown-it": "^10.0.3", - "@types/node": "^16.0.0", - "@types/prettier": "^2.6.4", - "@types/qs": "^6.9.7", - "@types/react": "^18.0.25", - "@types/react-dom": "^18.0.9", - "@types/semver": "^7.3.8", - "@types/speakingurl": "^13.0.2", - "@types/ua-parser-js": "^0.7.36", - "@types/uuid": "^8.3.0", - "@types/zxcvbn": "^4.4.1", - "@vitejs/plugin-react": "^2.0.0", - "connect-history-api-fallback": "^2.0.0", - "cross-env": "^7.0.3", - "eslint": "^8.21.0", - "eslint-config-react-app": "^7.0.1", - "fake-indexeddb": "^3.1.2", - "glob": "^7.2.0", - "jsdom": "^20.0.0", - "rimraf": "^3.0.2", - "rollup-plugin-node-polyfills": "^0.2.1", - "rollup-plugin-polyfill-node": "^0.10.2", - "vite": "^3.0.0", - "vitest": "^0.24.4" - } - }, - "packages/editor/node_modules/dnd-core": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-14.0.1.tgz", - "integrity": "sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A==", - "dependencies": { - "@react-dnd/asap": "^4.0.0", - "@react-dnd/invariant": "^2.0.0", - "redux": "^4.1.1" - } - }, - "packages/editor/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "packages/editor/node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "packages/editor/node_modules/react-dnd": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-14.0.5.tgz", - "integrity": "sha512-9i1jSgbyVw0ELlEVt/NkCUkxy1hmhJOkePoCH713u75vzHGyXhPDm28oLfc2NMSBjZRM1Y+wRjHXJT3sPrTy+A==", - "dependencies": { - "@react-dnd/invariant": "^2.0.0", - "@react-dnd/shallowequal": "^2.0.0", - "dnd-core": "14.0.1", - "fast-deep-equal": "^3.1.3", - "hoist-non-react-statics": "^3.3.2" - }, - "peerDependencies": { - "@types/hoist-non-react-statics": ">= 3.3.1", - "@types/node": ">= 12", - "@types/react": ">= 16", - "react": ">= 16.14" - }, - "peerDependenciesMeta": { - "@types/hoist-non-react-statics": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "packages/editor/node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "packages/editor/node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "packages/editor/node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "packages/engine": { - "name": "@typecell-org/engine", - "version": "0.0.3", - "dependencies": { - "es-module-shims": "1.4.3", - "lodash": "^4.17.21", - "mobx": "^6.2.0", - "react": "^18.2.0", - "vscode-lib": "^0.1.2" - }, - "devDependencies": { - "@playwright/test": "^1.18.1", - "@types/chai": "^4.3.0", - "@types/lodash": "^4.14.182", - "@types/mocha": "^9.1.0", - "@types/react": "^18.0.25", - "@vitest/coverage-c8": "^0.24.4", - "chai": "^4.3.6", - "jsdom": "^20.0.0", - "mocha": "^9.2.1", - "playwright-test": "^8.1.1", - "rimraf": "^3.0.2", - "typescript": "4.5.5", - "vitest": "^0.24.4" - } - }, - "packages/engine/node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "packages/engine/node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "packages/exporter": { - "name": "@typecell-org/exporter", - "version": "0.0.3", - "extraneous": true, - "dependencies": { - "@typecell-org/common": "*", - "es-module-shims": "1.4.3", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "mobx": "^6.2.0", - "react": "^17.0.2", - "remark-parse": "^10.0.1", - "remark-stringify": "^10.0.2", - "unified": "^10.0.1", - "vscode-lib": "^0.1.2" - }, - "devDependencies": { - "@playwright/test": "^1.18.1", - "@types/chai": "^4.3.0", - "@types/fs-extra": "9.0.13", - "@types/lodash": "^4.14.182", - "@types/mocha": "^9.1.0", - "@types/react": "^17.0.0", - "@vitest/coverage-c8": "^0.24.4", - "chai": "^4.3.6", - "fast-glob": "^3.2.12", - "jsdom": "^20.0.0", - "mocha": "^9.2.1", - "playwright-test": "^8.1.1", - "rimraf": "^3.0.2", - "typescript": "4.3.2", - "vitest": "^0.24.4" - } - }, - "packages/packager": { - "name": "@typecell-org/packager", - "version": "0.0.3", - "dependencies": { - "@typecell-org/common": "*", - "@typecell-org/engine": "*", - "@typecell-org/parsers": "*", - "es-module-shims": "1.4.3", - "fast-glob": "^3.2.12", - "lodash": "^4.17.21", - "mobx": "^6.2.0", - "react": "^18.2.0", - "vscode-lib": "^0.1.2" - }, - "devDependencies": { - "@playwright/test": "^1.18.1", - "@types/chai": "^4.3.0", - "@types/fs-extra": "9.0.13", - "@types/lodash": "^4.14.182", - "@types/mocha": "^9.1.0", - "@types/react": "^18.0.25", - "@vitest/coverage-c8": "^0.24.4", - "chai": "^4.3.6", - "jsdom": "^20.0.0", - "mocha": "^9.2.1", - "playwright-test": "^8.1.1", - "rimraf": "^3.0.2", - "typescript": "4.5.5", - "vitest": "^0.24.4" - } - }, - "packages/packager/node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "packages/packager/node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "packages/packager/node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "packages/parsers": { - "name": "@typecell-org/parsers", - "version": "0.0.3", - "dependencies": { - "@typecell-org/common": "*", - "@typecell-org/engine": "*", - "fs-extra": "^10.1.0", - "remark-parse": "^10.0.1", - "remark-stringify": "^10.0.2", - "unified": "^10.0.1", - "vscode-lib": "^0.1.2" - }, - "devDependencies": { - "@playwright/test": "^1.18.1", - "@types/fs-extra": "9.0.13", - "@types/react": "^18.0.25", - "@vitest/coverage-c8": "^0.24.4", - "fast-glob": "^3.2.12", - "jsdom": "^20.0.0", - "playwright-test": "^8.1.1", - "rimraf": "^3.0.2", - "typescript": "4.5.5", - "vitest": "^0.24.4" - } - }, - "packages/parsers/node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "packages/parsers/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "packages/parsers/node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@arr/every": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@arr/every/-/every-1.0.1.tgz", - "integrity": "sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==", - "dev": true - }, - "@atlaskit/analytics-namespaced-context": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@atlaskit/analytics-namespaced-context/-/analytics-namespaced-context-6.5.1.tgz", - "integrity": "sha512-TZbjsoLBoZiQepvmvfSH5DK1bpSbGM4Syb1Nvh54CTSS/g2in3WNp2/oXn2CrED1PRRdWOEyKLEjTBAfrXDfqA==", - "requires": { - "@atlaskit/analytics-next": "^8.0.0", - "@babel/runtime": "^7.0.0" - } - }, - "@atlaskit/analytics-next": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next/-/analytics-next-8.3.2.tgz", - "integrity": "sha512-5IW4O1NFRLdO9y8VwlmVECVQeTcZ+WNZv7g1fci61ygNtrABCaaKDfCdvCYKdwSP1dbvlQw865q6vQIx/DV5+A==", - "requires": { - "@atlaskit/analytics-next-stable-react-context": "1.0.1", - "@babel/runtime": "^7.0.0", - "prop-types": "^15.5.10", - "use-memo-one": "^1.1.1" - } - }, - "@atlaskit/analytics-next-stable-react-context": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@atlaskit/analytics-next-stable-react-context/-/analytics-next-stable-react-context-1.0.1.tgz", - "integrity": "sha512-iO6+hIp09dF4iAZQarVz3vKY1kM5Ij5CExYcK9jgc2q+OH8nv8n+BPFeJTdzGOGopmbUZn5Opj9pYQvge1Gr4Q==", - "requires": { - "tslib": "^2.0.0" - } - }, - "@atlaskit/atlassian-navigation": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@atlaskit/atlassian-navigation/-/atlassian-navigation-2.2.8.tgz", - "integrity": "sha512-LedkHlFCmdwXG8V+5VGajoStxSYUaYrsmwEIEpjHiNKFeI8GwPhPiEknwwE04xzyj9XtFhM8neVocxXxtP0nmQ==", - "requires": { - "@atlaskit/analytics-namespaced-context": "^6.5.0", - "@atlaskit/button": "^16.3.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/logo": "*", - "@atlaskit/popup": "^1.4.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@atlaskit/tooltip": "^17.5.0", - "@atlaskit/width-detector": "^4.0.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "chromatism": "^2.6.0", - "lodash": "^4.17.21" - } - }, - "@atlaskit/avatar": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/@atlaskit/avatar/-/avatar-21.1.1.tgz", - "integrity": "sha512-mJeKN1QP0o6g76MydxSkF0VJNgS6UCECzuYWuqsWyy3EEghq6e3ToHWHVTGlFCmaF0cFTzvSUgUKE/1LT6B5rA==", - "requires": { - "@atlaskit/analytics-next": "^8.0.0", - "@atlaskit/icon": "^21.11.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "@emotion/serialize": "^1.1.0" - }, - "dependencies": { - "@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", - "requires": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" - } - }, - "@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - } - } - }, - "@atlaskit/banner": { - "version": "11.6.2", - "resolved": "https://registry.npmjs.org/@atlaskit/banner/-/banner-11.6.2.tgz", - "integrity": "sha512-ymgNPKOyycNeccwD21GVk0HPVgWooINIbatZTDtTGLoCIp0Wg5tVnDqTAIDdWAnSP5avgAYe1ya2KR3fO5Z1gg==", - "requires": { - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" - } - }, - "@atlaskit/blanket": { - "version": "12.2.15", - "resolved": "https://registry.npmjs.org/@atlaskit/blanket/-/blanket-12.2.15.tgz", - "integrity": "sha512-iI36fkGuSb0ufgdOjmylvT1sSZlyuEU616EQb8q/SUP428tHqMFfkR6yGQZE4LYh2dFuCBU1rLpsVeyLLBd3nw==", - "requires": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" - } - }, - "@atlaskit/breadcrumbs": { - "version": "11.7.3", - "resolved": "https://registry.npmjs.org/@atlaskit/breadcrumbs/-/breadcrumbs-11.7.3.tgz", - "integrity": "sha512-q/PaUKGGaFnReFqc4s5+kBE4goUyat+VSMgs/jQ+lOe7+n9Xpz8o12F5RMK6tnh1Zo3LATAxuFbY9D1aAMrVsg==", - "requires": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/button": "^16.3.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@atlaskit/tooltip": "^17.6.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "@react-loosely-lazy/manifest": "^1.0.0", - "react-loosely-lazy": "^1.0.0" - } - }, - "@atlaskit/button": { - "version": "16.3.6", - "resolved": "https://registry.npmjs.org/@atlaskit/button/-/button-16.3.6.tgz", - "integrity": "sha512-sigJimyIvWjRzBdW46oPoyyxDmIWaPi7YtxmWwshld0lxQ9U/HevAA4Jxo7tOoHkaQot4V+yLkVHTuTgaH4OJQ==", - "requires": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/spinner": "^15.1.0", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" - } - }, - "@atlaskit/checkbox": { - "version": "12.3.19", - "resolved": "https://registry.npmjs.org/@atlaskit/checkbox/-/checkbox-12.3.19.tgz", - "integrity": "sha512-RJ+aLBkLFeWp/0vcKfdVflsl+pJRwHxvWOJYKDkXHOpuVles6JUlWJE/9GsKYESgEqJ47v+2Dhq5g/plVdt3mQ==", - "requires": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" - } - }, - "@atlaskit/codemod-utils": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@atlaskit/codemod-utils/-/codemod-utils-4.1.2.tgz", - "integrity": "sha512-L2he0gAJiELTrrN0MP/9qUQtwG/u8p0XJEiUYITmE/Y9U9B1CfSYes1kDWeKDZlV9sN+QB8yP9BeTdIfTYWUbg==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@atlaskit/comment": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/@atlaskit/comment/-/comment-10.6.0.tgz", - "integrity": "sha512-08TxoxK+SvoMyzd4UvrWvu6LDIzQokLdcYSejOTRuLtXrwOdASfkT0pdwz406vQj5QeNVOLGi8J2PJLmwx9+1Q==", - "requires": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/button": "^16.3.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/lozenge": "^11.2.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" - } - }, - "@atlaskit/css-reset": { - "version": "6.3.14", - "resolved": "https://registry.npmjs.org/@atlaskit/css-reset/-/css-reset-6.3.14.tgz", - "integrity": "sha512-KJbBK7bf4jY7Y/x838adkAxkJBFGIAV+vktfkwyci+I+KINoag/MgIML+veD5/sTVfoQuZxoj2mkGjmG7HDtmg==", - "requires": { - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "fbjs": "^3.0.0" - } - }, - "@atlaskit/dropdown-menu": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/@atlaskit/dropdown-menu/-/dropdown-menu-11.4.0.tgz", - "integrity": "sha512-gOeV9H8qhr4R51UT8lvcCdAx+iN4VTB+K5HYmZbG3I9vHt83UMD0SFgmRHVH3pr9V0AxpdmHQn63hmuDjODmZw==", - "requires": { - "@atlaskit/button": "^16.3.0", - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/menu": "^1.3.0", - "@atlaskit/popup": "^1.4.0", - "@atlaskit/spinner": "^15.0.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@atlaskit/visually-hidden": "^1.1.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "bind-event-listener": "^2.1.1" - } - }, - "@atlaskit/ds-explorations": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@atlaskit/ds-explorations/-/ds-explorations-0.1.2.tgz", - "integrity": "sha512-YE74r/k+ow6GgZm/SxpZl86YeuJx6ZlmI8di5LhSt+KJ5rxxIHCoMt6yvzXmOUy3s4etgppuffUCcXonG58GVA==", - "requires": { - "@atlaskit/tokens": "^0.10.3", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "tiny-invariant": "^1.2.0" - } - }, - "@atlaskit/ds-lib": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@atlaskit/ds-lib/-/ds-lib-2.1.1.tgz", - "integrity": "sha512-QwaDma9UMUTPaApkjlzt07gmzoEZKegjixlDHEY7DOCzWqGbt1efxuoiP3GLP1Z5eFf5tHWPtlUYMlb+PO37GQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "bind-event-listener": "^2.1.1" - } - }, - "@atlaskit/flag": { - "version": "14.7.0", - "resolved": "https://registry.npmjs.org/@atlaskit/flag/-/flag-14.7.0.tgz", - "integrity": "sha512-kIzpihZimEWQxF9rbE44DvGNu9hNjFT+Tr5EYxoDrSIyDY9kRHo3xLK9DPqn0NrwrxJ2e5bV9rM8cQGTUnYyHA==", - "requires": { - "@atlaskit/analytics-next": "^8.0.0", - "@atlaskit/button": "^16.3.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/focus-ring": "^1.0.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/motion": "^1.2.0", - "@atlaskit/portal": "^4.0.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@atlaskit/visually-hidden": "^1.1.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" - } - }, - "@atlaskit/focus-ring": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@atlaskit/focus-ring/-/focus-ring-1.0.6.tgz", - "integrity": "sha512-aqTrhYnJDWjrwJrq4vakip9vreZmQKMP/2mP9glQoXIQMCsmOK6hn8G865q+7wfq1TjlbSZwBS7kxX+op+ymWw==", - "requires": { - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" - } - }, - "@atlaskit/form": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/@atlaskit/form/-/form-8.5.8.tgz", - "integrity": "sha512-IdM+dI9U6YAQxV7tswE8/p7QIdTiW6xb1kJn5C6x/Ux1xAG480vsNQyOJPzQEAdOTssIGbvl7fDbnECEbpXWNg==", - "requires": { - "@atlaskit/icon": "^21.10.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "final-form": "^4.20.1", - "final-form-focus": "^1.1.2", - "lodash": "^4.17.21", - "react-uid": "^2.2.0", - "tiny-invariant": "^1.2.0" - } - }, - "@atlaskit/icon": { - "version": "21.11.1", - "resolved": "https://registry.npmjs.org/@atlaskit/icon/-/icon-21.11.1.tgz", - "integrity": "sha512-KAcEmf7M04AFeHpzOA+JiHZ6bAXz7h6vNlMd543VZM15fyjMMiP/p3DItnmEwK1mej0zBRT98nnhiDKxaHtJug==", - "requires": { - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" - } - }, - "@atlaskit/inline-dialog": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@atlaskit/inline-dialog/-/inline-dialog-13.4.0.tgz", - "integrity": "sha512-G7U8Yi3Ypx1eXKXHD5atv9bnM3s+Z6uVqFNGWuMizJnLJhspMQRhjqUb1JMs9OlrJ9VyDU2salQWPOSka1vAhQ==", - "requires": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/popper": "^5.0.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "bind-event-listener": "^2.1.1", - "react-node-resolver": "^1.0.1" - } - }, - "@atlaskit/inline-message": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/@atlaskit/inline-message/-/inline-message-11.4.0.tgz", - "integrity": "sha512-ziGHgQRnvKWh67NqxH4zPoKWuBEYYw1/+wUeYkh3b+XesYmVhnKm6h6pGndtjmgfTofyImiUyuv8kGkbWNE29w==", - "requires": { - "@atlaskit/button": "^16.3.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/inline-dialog": "^13.4.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" - } - }, - "@atlaskit/logo": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/@atlaskit/logo/-/logo-13.9.0.tgz", - "integrity": "sha512-l/UGg4JrCMxp9f3GC5scvqhWwh8iZIgiIWFXsfP9oWqA0tB9yNGrxag6hM6QXpWPhXiN4sUPwse8pgxOOnLs2Q==", - "requires": { - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "react-uid": "^2.2.0" - } - }, - "@atlaskit/lozenge": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@atlaskit/lozenge/-/lozenge-11.2.0.tgz", - "integrity": "sha512-0YCDa6BEnNbT12TXcsmASwUtxgotvk29xwhPkAhwukSk6Zm9lA/t1CFtTWwBoO65r3gw0neFfoE+3Xe6pGgIkQ==", - "requires": { - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/ds-explorations": "^0.1.0", - "@atlaskit/theme": "^12.2.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" - } - }, - "@atlaskit/menu": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/@atlaskit/menu/-/menu-1.3.9.tgz", - "integrity": "sha512-XWuAMUyRqgoUNLkkpyif/d4qOCQzzbusT7KRC96YvpqS5Vbogbi8m93ZyXccSkjat8ByVlY8p1sgHWSzGko1Dw==", - "requires": { - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/focus-ring": "^1.0.0", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" - } - }, - "@atlaskit/modal-dialog": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@atlaskit/modal-dialog/-/modal-dialog-12.3.0.tgz", - "integrity": "sha512-HvmPjaNpu5/SYCfYgqyjFKzXdgoT7jMl6JrESgeYNPQdse8Pzj+Q1CbFynCMJ5+jMg80AMNwrhWYKY/dtKy5tA==", - "requires": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/blanket": "^12.2.0", - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/focus-ring": "^1.0.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/motion": "^1.2.0", - "@atlaskit/portal": "^4.1.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "bind-event-listener": "^2.1.1", - "raf-schd": "^4.0.3", - "react-focus-lock": "^2.5.2", - "react-scrolllock": "^5.0.1", - "react-uid": "^2.2.0" - } - }, - "@atlaskit/motion": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@atlaskit/motion/-/motion-1.2.2.tgz", - "integrity": "sha512-UIoFuB299bTehwTkoBs65YS8kn9y32v1b5LsbuSqkWV2ZgiLrWaOdq8RgPBlHuICq9oBeVy6aBPLR0gkht1iJA==", - "requires": { - "@atlaskit/ds-lib": "^2.1.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "bind-event-listener": "^2.1.1" - } - }, - "@atlaskit/page-header": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@atlaskit/page-header/-/page-header-10.3.0.tgz", - "integrity": "sha512-PAsBEaIamSinpG7J0c9CBDcwcRexSe37yv4samznI2Oupyu7JzeGsoh2FHvUTkscv75Imh1RVvCpoA92OjIPsg==", - "requires": { - "@atlaskit/theme": "^12.2.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" - } - }, - "@atlaskit/page-layout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@atlaskit/page-layout/-/page-layout-1.3.0.tgz", - "integrity": "sha512-N9VJyHGoK8nBOCXzXGF/kAp9geumcdShXeExk/0pE2b4LcMzapHCTA7POuj0gAPffswOYcx0FDcr2jc5KnjAoQ==", - "requires": { - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/motion": "^1.2.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "bind-event-listener": "^2.1.1", - "raf-schd": "^4.0.3" - } - }, - "@atlaskit/popper": { - "version": "5.2.8", - "resolved": "https://registry.npmjs.org/@atlaskit/popper/-/popper-5.2.8.tgz", - "integrity": "sha512-uQzw8EWWXBhL1N3Dak4ZrkE1hVcqi82bL5COLbS5oYHPcIInJiBZhygAstboVB+BfaKlWtyCdujkBprGU+V5Dw==", - "requires": { - "@babel/runtime": "^7.0.0", - "@popperjs/core": "^2.9.1", - "react-popper": "^2.2.3" - } - }, - "@atlaskit/popup": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@atlaskit/popup/-/popup-1.4.1.tgz", - "integrity": "sha512-+hPmkoOUIdrU9WamWECq+qlGTdfQQlkGB569FnAFO5gDNgEZo6ZCUgMqRH8jgUa3OSp2aohprZeeYDd6B9rxWA==", - "requires": { - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/popper": "^5.0.0", - "@atlaskit/portal": "^4.0.0", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "bind-event-listener": "^2.1.1", - "focus-trap": "^2.4.5" - } - }, - "@atlaskit/portal": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/@atlaskit/portal/-/portal-4.2.10.tgz", - "integrity": "sha512-MmGS1NPiNyCinvmic1UKn2GQl8I9jLjfEz8AUVFimP4ytHFQDBE2sQG7eYN7arQDlhXmZAu2xIFt1A1OyD9OnA==", - "requires": { - "@atlaskit/theme": "^12.1.0", - "@babel/runtime": "^7.0.0" - } - }, - "@atlaskit/progress-bar": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@atlaskit/progress-bar/-/progress-bar-0.5.10.tgz", - "integrity": "sha512-dvCf583efRj7830PKW+wfjUYVMKqvKkaNhC3mJnk1RxfIEETwWUmSaOK9FE3h6vgeb7PBSTo/DlfdPyWRkHrkg==", - "requires": { - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" - } - }, - "@atlaskit/section-message": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@atlaskit/section-message/-/section-message-6.2.0.tgz", - "integrity": "sha512-hJFYr/LXsTDpuXEXGjwr8pP0meMfYPz+ANQ4kssVSC/ydAAbaMnpd0NrjHO7fcMtfVNqlXfdeqf7l2WsE7DZJA==", - "requires": { - "@atlaskit/button": "^16.3.0", - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" - } - }, - "@atlaskit/select": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@atlaskit/select/-/select-15.7.5.tgz", - "integrity": "sha512-UnFVrJvM3FKAbXf8CqNE0y40X1F4l9Ax2Lupbvj2fnj9gOSFLR+zrI4/c/IDiOyE9CusIjqpkXFl4ft86fn9kQ==", - "requires": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/icon": "^21.11.0", - "@atlaskit/spinner": "^15.2.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@atlaskit/visually-hidden": "^1.1.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "@popperjs/core": "^2.9.1", - "@types/react-select": "^4.0.18", - "bind-event-listener": "^2.1.1", - "memoize-one": "^6.0.0", - "react-fast-compare": "^3.2.0", - "react-focus-lock": "^2.5.2", - "react-node-resolver": "^1.0.1", - "react-popper": "^2.2.3", - "react-select": "^4.3.1", - "react-uid": "^2.2.0", - "shallow-equal": "^1.0.0" - } - }, - "@atlaskit/spinner": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/@atlaskit/spinner/-/spinner-15.2.0.tgz", - "integrity": "sha512-0Fwi7D3TgdYoE6rwG2obESUZyQWTGoCx32CAmWGlcOad5dz9RqKBy8kRrnenqOHpATULuPfvD40r0/qe2IGTmQ==", - "requires": { - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" - } - }, - "@atlaskit/textarea": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/@atlaskit/textarea/-/textarea-4.3.9.tgz", - "integrity": "sha512-5fyeYhFoaeXCYp448LckY63OHA1NhfhVE/u4PmvonLDug0cfVkCNnqBqqReT8CzCJe4Q+z8+OnPXkG/zKHow0A==", - "requires": { - "@atlaskit/analytics-next": "^8.0.0", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9" - } - }, - "@atlaskit/textfield": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@atlaskit/textfield/-/textfield-5.2.0.tgz", - "integrity": "sha512-Gf3ABEzsWq9Sw3ySd/67vCidhmU1K/pqudwj7zXP1VBeSxn+mw51YHrUD7TE2VqLUEyFvOmBUQtNmeQDl581KA==", - "requires": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" - } - }, - "@atlaskit/theme": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@atlaskit/theme/-/theme-12.2.0.tgz", - "integrity": "sha512-fgCWBgmkx7wr/eIui3kOkLiOrhZYt8ON2E5HJMWWohu6I3vYsQUNCbWjp1Uoht0NLgb0FvwYfPeEmsZUJsX9Cg==", - "requires": { - "@atlaskit/codemod-utils": "^4.1.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0" - } - }, - "@atlaskit/tokens": { - "version": "0.10.18", - "resolved": "https://registry.npmjs.org/@atlaskit/tokens/-/tokens-0.10.18.tgz", - "integrity": "sha512-WoN0NKaYdx7qnRu8CRzFEHwp9tocsED0YHH0ImO+MmjvwS+lNtfcz7sHbuENOehtCBSCcwohNAWDA4MplvX1wg==", - "requires": { - "@atlaskit/ds-lib": "^2.1.0", - "@babel/runtime": "^7.0.0", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - } - }, - "@atlaskit/tooltip": { - "version": "17.6.1", - "resolved": "https://registry.npmjs.org/@atlaskit/tooltip/-/tooltip-17.6.1.tgz", - "integrity": "sha512-zI660ZyG/go/M7XEYk7vh562gSX0/u0fCMnM5sln0r/gEk5pAhTDQh+X0oxhF78+S5vw9kUju8eHcpBJwfQ1Kw==", - "requires": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/ds-lib": "^2.1.0", - "@atlaskit/motion": "^1.2.0", - "@atlaskit/popper": "^5.0.0", - "@atlaskit/portal": "^4.1.0", - "@atlaskit/theme": "^12.2.0", - "@atlaskit/tokens": "^0.10.0", - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1", - "bind-event-listener": "^2.1.1", - "react-uid": "^2.2.0" - } - }, - "@atlaskit/tree": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/@atlaskit/tree/-/tree-8.6.2.tgz", - "integrity": "sha512-geVyjCm108G35d+VCJaD3fm4DVMSw09l6v8u+v7oriCddYE5nQHYZ0b7ihyupxbryhpfTyUmaD8LcJgWt8WESQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "css-box-model": "^1.2.0", - "react-beautiful-dnd-next": "11.0.5" - } - }, - "@atlaskit/ufo": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@atlaskit/ufo/-/ufo-0.1.3.tgz", - "integrity": "sha512-Triy6E3Ce8xoT85HF2PVvREDS2y2yzT1Q3bij2S0g6odEh31FsSOESpYPA3N7GhPyWXuIFOVY4tRjXvlOfJbVA==", - "requires": { - "@babel/runtime": "^7.0.0", - "uuid": "^3.1.0" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "@atlaskit/user-picker": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@atlaskit/user-picker/-/user-picker-9.3.4.tgz", - "integrity": "sha512-cc5uJ6Vs/m4Ae5Igp9E5v0Wqb2wn/dRvMqnXkbzSJd6AUUYhCr4/FxTK1AH6n1882tm92axs9C9ZaVAguD6uxw==", - "requires": { - "@atlaskit/analytics-next": "^8.2.0", - "@atlaskit/avatar": "^21.0.0", - "@atlaskit/icon": "^21.10.0", - "@atlaskit/logo": "^13.8.0", - "@atlaskit/lozenge": "^11.0.0", - "@atlaskit/popper": "^5.0.0", - "@atlaskit/select": "^15.6.0", - "@atlaskit/spinner": "^15.1.4", - "@atlaskit/theme": "^12.1.0", - "@atlaskit/tokens": "^0.10.0", - "@atlaskit/tooltip": "^17.5.0", - "@atlaskit/ufo": "^0.1.0", - "@babel/runtime": "^7.0.0", - "@emotion/core": "^10.0.9", - "lodash": "^4.17.21", - "memoize-one": "^6.0.0", - "uuid": "^3.1.0" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } - } - }, - "@atlaskit/visually-hidden": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@atlaskit/visually-hidden/-/visually-hidden-1.1.0.tgz", - "integrity": "sha512-z/M9ivFDdOx0HHQ9ifi+eEt7uGyqnpNztYGA2J6vklfWJ30Fjtz3yGmZXwiSVrhOI1MXvwx55mxOg7PnR93DLw==", - "requires": { - "@babel/runtime": "^7.0.0", - "@emotion/react": "^11.7.1" - } - }, - "@atlaskit/width-detector": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@atlaskit/width-detector/-/width-detector-4.0.2.tgz", - "integrity": "sha512-aYA9t7N4x3dnrEjjP5aQbR1oDE+apJtO50IPa4mB7uPj2sgydHjVME7IOEZ2Xbub8dm/lSIaQHz6/a6M3T89Mw==", - "requires": { - "@babel/runtime": "^7.0.0", - "raf-schd": "^4.0.3" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.13.tgz", - "integrity": "sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==" - }, - "@babel/core": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.13.tgz", - "integrity": "sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.13", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.13", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.13", - "@babel/types": "^7.18.13", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@babel/eslint-parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz", - "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==", - "dev": true, - "requires": { - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "dependencies": { - "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": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "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 - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "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.18.13", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz", - "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==", - "requires": { - "@babel/types": "^7.18.13", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "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==" - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.13.tgz", - "integrity": "sha512-hDvXp+QYxSRL+23mpAlSGxHMDyIGChm0/AwTfTAAK5Ufe40nCsyNdaYCGuK91phn/fVu9kqayImRDkvNAgdrsA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", - "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", - "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "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-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", - "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", - "dev": true, - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helper-wrap-function": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz", - "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.18.9", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.11", - "@babel/types": "^7.18.10" - } - }, - "@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", - "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "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==", - "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==", - "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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz", - "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", - "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.10.tgz", - "integrity": "sha512-wdGTwWF5QtpTY/gbBtQLAiCnoxfD4qMbN87NYZle1dOZ9Os8Y6zXcKrIaOU8W+TIvFUWVGG9tUgNww3CjXRVVw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.18.6" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", - "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz", - "integrity": "sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@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-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", - "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", - "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz", - "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.18.9.tgz", - "integrity": "sha512-+G6rp2zRuOAInY5wcggsx4+QVao1qPM0osC9fTUVlAV3zOrzTCnrMAFVnR6+a3T8wz1wFIH7KhYMcMB3u1n80A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-flow": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", - "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", - "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz", - "integrity": "sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz", - "integrity": "sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.18.10" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", - "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz", - "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz", - "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.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 - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", - "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.12.tgz", - "integrity": "sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-typescript": "^7.18.6" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", - "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.18.10", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.18.9", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.9", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.9", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.9", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.10", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", - "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/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs2": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.18.9.tgz", - "integrity": "sha512-l057ZarpDX2QnXM89ViR2BgRFgTy2l5UFGDt0SbInhim1N/ljBgPeTJV0kRG1/Bo7CkHfYfrNNwTeQ2CPph9xQ==", - "requires": { - "core-js": "^2.6.12", - "regenerator-runtime": "^0.13.4" - }, - "dependencies": { - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" - } - } - }, - "@babel/runtime-corejs3": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz", - "integrity": "sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A==", - "dev": true, - "requires": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz", - "integrity": "sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.13", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.13", - "@babel/types": "^7.18.13", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.18.13", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz", - "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==", - "requires": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@blocknote/core": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@blocknote/core/-/core-0.1.0.tgz", - "integrity": "sha512-ElqKLvGkaa9j1+3itnVk8Lvzoxit5AlC4gbTdjlfwp5uoXrLFhSb2bOetDj0CVsgmQxPXv9c4vztwHuojssVxQ==", - "requires": { - "@atlaskit/button": "^16.3.5", - "@atlaskit/dropdown-menu": "^11.1.2", - "@atlaskit/menu": "^1.3.0", - "@atlaskit/theme": "^12.1.4", - "@tippyjs/react": "^4.2.6", - "@tiptap/core": "^2.0.0-beta.182", - "@tiptap/extension-bold": "^2.0.0-beta.28", - "@tiptap/extension-code": "^2.0.0-beta.28", - "@tiptap/extension-collaboration": "^2.0.0-beta.38", - "@tiptap/extension-collaboration-cursor": "^2.0.0-beta.37", - "@tiptap/extension-dropcursor": "^2.0.0-beta.29", - "@tiptap/extension-gapcursor": "^2.0.0-beta.39", - "@tiptap/extension-hard-break": "^2.0.0-beta.33", - "@tiptap/extension-history": "^2.0.0-beta.26", - "@tiptap/extension-horizontal-rule": "^2.0.0-beta.36", - "@tiptap/extension-italic": "^2.0.0-beta.28", - "@tiptap/extension-link": "^2.0.0-beta.43", - "@tiptap/extension-paragraph": "^2.0.0-beta.26", - "@tiptap/extension-strike": "^2.0.0-beta.29", - "@tiptap/extension-text": "^2.0.0-beta.17", - "@tiptap/extension-underline": "^2.0.0-beta.25", - "@tiptap/react": "^2.0.0-beta.114", - "lodash": "^4.17.21", - "prosemirror-model": "1.18.1", - "prosemirror-state": "1.4.1", - "prosemirror-view": "1.26.2", - "react": "^17.0.2", - "react-dom": "^17.0.2", - "react-icons": "^4.3.1", - "styled-components": "^5.3.3", - "uuid": "^8.3.2" - }, - "dependencies": { - "@tiptap/react": { - "version": "2.0.0-beta.114", - "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-2.0.0-beta.114.tgz", - "integrity": "sha512-9JbRE+16WM6RxbBxzY74SrJtLodvjeRBnEbWxuhxVgGKxMunRj6r8oED87ODJgqLmkpofwE0KFHTPGdEXfdcKA==", - "requires": { - "@tiptap/extension-bubble-menu": "^2.0.0-beta.61", - "@tiptap/extension-floating-menu": "^2.0.0-beta.56", - "prosemirror-view": "1.26.2" - } - }, - "css-to-react-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", - "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", - "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "styled-components": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.5.tgz", - "integrity": "sha512-ndETJ9RKaaL6q41B69WudeqLzOpY1A/ET/glXkNZ2T7dPjPqpPCXXQjDFYZWwNnE5co0wX+gTCqx9mfxTmSIPg==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^1.1.0", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@deck.gl/aggregation-layers": { - "version": "8.8.9", - "resolved": "https://registry.npmjs.org/@deck.gl/aggregation-layers/-/aggregation-layers-8.8.9.tgz", - "integrity": "sha512-quXUDBeyFau77mlYGmLeGpCzd5NjChdt5+SMG7X7VmxrZuUh6zNP381J1+t6WlNShZdUwjhPKvRQDSYyXo2nIA==", - "requires": { - "@luma.gl/constants": "^8.5.16", - "@luma.gl/shadertools": "^8.5.16", - "@math.gl/web-mercator": "^3.6.2", - "d3-hexbin": "^0.2.1" - } - }, - "@deck.gl/core": { - "version": "8.8.9", - "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-8.8.9.tgz", - "integrity": "sha512-fRbN/EpoFT2935qlSXrGltUsUFr7Qia8yegLfjRkK244bJX6ptuaRee1GZAeqpCVaWQRbXOM11C2NEe3d64oNg==", - "requires": { - "@loaders.gl/core": "^3.2.5", - "@loaders.gl/images": "^3.2.5", - "@luma.gl/constants": "^8.5.16", - "@luma.gl/core": "^8.5.16", - "@math.gl/core": "^3.6.2", - "@math.gl/sun": "^3.6.2", - "@math.gl/web-mercator": "^3.6.2", - "@probe.gl/env": "^3.5.0", - "@probe.gl/log": "^3.5.0", - "@probe.gl/stats": "^3.5.0", - "gl-matrix": "^3.0.0", - "math.gl": "^3.6.2", - "mjolnir.js": "^2.7.0" - } - }, - "@deck.gl/layers": { - "version": "8.8.9", - "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-8.8.9.tgz", - "integrity": "sha512-IwpTfYU2yJdybP4hD2p4A/JZ3jqCzkwpjKxrig43Q4OeR9oNmotS1DOyqD70sF4Al8xOPV9/WxPCht4O7/Pbrw==", - "requires": { - "@loaders.gl/images": "^3.2.5", - "@loaders.gl/schema": "^3.2.5", - "@luma.gl/constants": "^8.5.16", - "@mapbox/tiny-sdf": "^1.1.0", - "@math.gl/core": "^3.6.2", - "@math.gl/polygon": "^3.6.2", - "@math.gl/web-mercator": "^3.6.2", - "earcut": "^2.0.6" - } - }, - "@deck.gl/react": { - "version": "8.8.9", - "resolved": "https://registry.npmjs.org/@deck.gl/react/-/react-8.8.9.tgz", - "integrity": "sha512-muCUYVnpKuvxvPnOajpMUADeYQCSemnWjsZgUZGyItn00CbntWWQK889TnZFUNLsBY04XZV3oLTqV9SXL+PaoQ==", - "requires": {} - }, - "@emotion/babel-plugin": { - "version": "11.10.2", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.2.tgz", - "integrity": "sha512-xNQ57njWTFVfPAc3cjfuaPdsgLp5QOSuRsj9MA6ndEhH/AzuZM86qIQzt6rq+aGBwj3n5/TkLmU5lhAfdRmogA==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.0", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.0.13" - }, - "dependencies": { - "@emotion/serialize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz", - "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==", - "requires": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" - } - }, - "@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - }, - "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==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } - } - }, - "@emotion/cache": { - "version": "10.0.29", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", - "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", - "requires": { - "@emotion/sheet": "0.9.4", - "@emotion/stylis": "0.8.5", - "@emotion/utils": "0.11.3", - "@emotion/weak-memoize": "0.2.5" - } - }, - "@emotion/core": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.3.1.tgz", - "integrity": "sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==", - "requires": { - "@babel/runtime": "^7.5.5", - "@emotion/cache": "^10.0.27", - "@emotion/css": "^10.0.27", - "@emotion/serialize": "^0.11.15", - "@emotion/sheet": "0.9.4", - "@emotion/utils": "0.11.3" - } - }, - "@emotion/css": { - "version": "10.0.27", - "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", - "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", - "requires": { - "@emotion/serialize": "^0.11.15", - "@emotion/utils": "0.11.3", - "babel-plugin-emotion": "^10.0.27" - } - }, - "@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" - }, - "@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", - "requires": { - "@emotion/memoize": "^0.8.0" - } - }, - "@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" - }, - "@emotion/react": { - "version": "11.10.4", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.4.tgz", - "integrity": "sha512-j0AkMpr6BL8gldJZ6XQsQ8DnS9TxEQu1R+OGmDZiWjBAJtCcbt0tS3I/YffoqHXxH6MjgI7KdMbYKw3MEiU9eA==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.0", - "@emotion/cache": "^11.10.0", - "@emotion/serialize": "^1.1.0", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "hoist-non-react-statics": "^3.3.1" - }, - "dependencies": { - "@emotion/cache": { - "version": "11.10.3", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz", - "integrity": "sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==", - "requires": { - "@emotion/memoize": "^0.8.0", - "@emotion/sheet": "^1.2.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.0.13" - } - }, - "@emotion/serialize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz", - "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==", - "requires": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" - } - }, - "@emotion/sheet": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz", - "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==" - }, - "@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "@emotion/weak-memoize": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" - }, - "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - } - } - }, - "@emotion/serialize": { - "version": "0.11.16", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", - "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", - "requires": { - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/unitless": "0.7.5", - "@emotion/utils": "0.11.3", - "csstype": "^2.5.7" - }, - "dependencies": { - "@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" - }, - "@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - } - } - }, - "@emotion/sheet": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", - "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==" - }, - "@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - }, - "@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", - "requires": {} - }, - "@emotion/utils": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", - "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==" - }, - "@emotion/weak-memoize": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", - "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" - }, - "@esbuild-plugins/node-globals-polyfill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.1.1.tgz", - "integrity": "sha512-MR0oAA+mlnJWrt1RQVQ+4VYuRJW/P2YmRTv1AsplObyvuBMnPHiizUF95HHYiSsMGLhyGtWufaq2XQg6+iurBg==", - "dev": true, - "requires": {} - }, - "@esbuild-plugins/node-modules-polyfill": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.1.4.tgz", - "integrity": "sha512-uZbcXi0zbmKC/050p3gJnne5Qdzw8vkXIv+c2BW0Lsc1ji1SkrxbKPUy5Efr0blbTu1SL8w4eyfpnSdPg3G0Qg==", - "dev": true, - "requires": { - "escape-string-regexp": "^4.0.0", - "rollup-plugin-node-polyfills": "^0.2.1" - }, - "dependencies": { - "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 - } - } - }, - "@esbuild/linux-loong64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.6.tgz", - "integrity": "sha512-hqmVU2mUjH6J2ZivHphJ/Pdse2ZD+uGCHK0uvsiLDk/JnSedEVj77CiVUnbMKuU4tih1TZZL8tG9DExQg/GZsw==", - "dev": true, - "optional": true, - "peer": true - }, - "@eslint/eslintrc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", - "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "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 - } - } - }, - "@formatjs/ecma402-abstract": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz", - "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==", - "requires": { - "@formatjs/intl-localematcher": "0.2.25", - "tslib": "^2.1.0" - } - }, - "@formatjs/fast-memoize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz", - "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==", - "requires": { - "tslib": "^2.1.0" - } - }, - "@formatjs/icu-messageformat-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz", - "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==", - "requires": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/icu-skeleton-parser": "1.3.6", - "tslib": "^2.1.0" - } - }, - "@formatjs/icu-skeleton-parser": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz", - "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==", - "requires": { - "@formatjs/ecma402-abstract": "1.11.4", - "tslib": "^2.1.0" - } - }, - "@formatjs/intl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.2.1.tgz", - "integrity": "sha512-vgvyUOOrzqVaOFYzTf2d3+ToSkH2JpR7x/4U1RyoHQLmvEaTQvXJ7A2qm1Iy3brGNXC/+/7bUlc3lpH+h/LOJA==", - "requires": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/fast-memoize": "1.2.1", - "@formatjs/icu-messageformat-parser": "2.1.0", - "@formatjs/intl-displaynames": "5.4.3", - "@formatjs/intl-listformat": "6.5.3", - "intl-messageformat": "9.13.0", - "tslib": "^2.1.0" - } - }, - "@formatjs/intl-displaynames": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-5.4.3.tgz", - "integrity": "sha512-4r12A3mS5dp5hnSaQCWBuBNfi9Amgx2dzhU4lTFfhSxgb5DOAiAbMpg6+7gpWZgl4ahsj3l2r/iHIjdmdXOE2Q==", - "requires": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/intl-localematcher": "0.2.25", - "tslib": "^2.1.0" - } - }, - "@formatjs/intl-listformat": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.5.3.tgz", - "integrity": "sha512-ozpz515F/+3CU+HnLi5DYPsLa6JoCfBggBSSg/8nOB5LYSFW9+ZgNQJxJ8tdhKYeODT+4qVHX27EeJLoxLGLNg==", - "requires": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/intl-localematcher": "0.2.25", - "tslib": "^2.1.0" - } - }, - "@formatjs/intl-localematcher": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz", - "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==", - "requires": { - "tslib": "^2.1.0" - } - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@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 - }, - "@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true - }, - "@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@lerna/add": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-5.3.0.tgz", - "integrity": "sha512-MxwTO2UBxZwwuquKbBqdYa56YTqg6Lfz1MZsRQxO7F2cb2NN8NEYTcGOli/71Ee/2AoX4R4xIFTh3TnaflQ25A==", - "dev": true, - "requires": { - "@lerna/bootstrap": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "npm-package-arg": "8.1.1", - "p-map": "^4.0.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" - } - }, - "@lerna/bootstrap": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-5.3.0.tgz", - "integrity": "sha512-iHVjt6YOQKLY0j+ex13a6ZxjIQ1TSSXqbl6z1hVjBFaDyCh7pra/tgj0LohZDVCaouLwRKucceQfTGrb+cfo7A==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/has-npm-version": "5.3.0", - "@lerna/npm-install": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/rimraf-dir": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/symlink-binary": "5.3.0", - "@lerna/symlink-dependencies": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@npmcli/arborist": "5.3.0", - "dedent": "^0.7.0", - "get-port": "^5.1.1", - "multimatch": "^5.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4" - } - }, - "@lerna/changed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-5.3.0.tgz", - "integrity": "sha512-i6ZfBDBZCpnPaSWTuNGTrnExkHNMC+/cSUuS9njaqe+tXgqE95Ja3cMxWZth9Q1uasjcEBHPU2jG0VKrU37rpA==", - "dev": true, - "requires": { - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/listable": "5.3.0", - "@lerna/output": "5.3.0" - } - }, - "@lerna/check-working-tree": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-5.3.0.tgz", - "integrity": "sha512-qo6jUGWXKLVL1nU8aEECqwrGRjs9o1l1hXdD2juA4Fvzsam1cFVHJwsmw3hAXGhEPD0oalg/XR62H9rZSCLOvQ==", - "dev": true, - "requires": { - "@lerna/collect-uncommitted": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "@lerna/validation-error": "5.3.0" - } - }, - "@lerna/child-process": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-5.3.0.tgz", - "integrity": "sha512-4uXPNIptrgQQQVHVVAXBD8F7IqSvZL3Og0G0DHiWKH+dsSyMIUtaIGJt7sifVoL7nzex4AqEiPq/AubpmG5g4Q==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" - } - }, - "@lerna/clean": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-5.3.0.tgz", - "integrity": "sha512-Jn+Dr7A69dch8m1dLe7l/SDVQVQT2j7zdy2gaZVEmJIgEEaXmEbfJ2t2n06vRXtckI9B85M5mubT1U3Y7KuNuA==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/rimraf-dir": "5.3.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1" - } - }, - "@lerna/cli": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-5.3.0.tgz", - "integrity": "sha512-P7F3Xs98pXMEGZX+mnFfsd6gU03x8UrwQ3mElvQBICl4Ew9z6rS8NGUd3JOPFzm4/vSTjYTnPyPdWBjj6/f6sw==", - "dev": true, - "requires": { - "@lerna/global-options": "5.3.0", - "dedent": "^0.7.0", - "npmlog": "^6.0.2", - "yargs": "^16.2.0" - } - }, - "@lerna/collect-uncommitted": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-5.3.0.tgz", - "integrity": "sha512-Ll/mU9Nes0NQoa0pSv2TR2PTCkIomBGuDWH48OF2sKKu69NuLjrD2L0udS5nJYig9HxFewtm4QTiUdYPxfJXkQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "chalk": "^4.1.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/collect-updates": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-5.3.0.tgz", - "integrity": "sha512-fzJo/rmdXKWKYt+9IXjtenIZtSr3blMH8GEqoVKpSZ7TJGpxcFNmMe6foa60BgaTnDmmg1y7Qu6JbQJ3Ra5c5w==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "slash": "^3.0.0" - } - }, - "@lerna/command": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-5.3.0.tgz", - "integrity": "sha512-UNQQ4EGTumqLhOuDPcRA4LpdS9pcTYKSdh/8MdKPeyIRN70vCTwdeTrxqaaKsn3Jo7ycvyUQT5yfrUFmCClfoA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/project": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@lerna/write-log-file": "5.3.0", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^5.0.0", - "is-ci": "^2.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/conventional-commits": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-5.3.0.tgz", - "integrity": "sha512-9uoQ2E1J7pL0fml5PNO7FydnBNeqrNOQa53Ca1Klf5t/x4vIn51ocOZNm/YbRAc/affnrxxp+gR2/SWlN0yKqQ==", - "dev": true, - "requires": { - "@lerna/validation-error": "5.3.0", - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.4", - "conventional-recommended-bump": "^6.1.0", - "fs-extra": "^9.1.0", - "get-stream": "^6.0.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "semver": "^7.3.4" - } - }, - "@lerna/create": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-5.3.0.tgz", - "integrity": "sha512-DotTReCc3+Q9rpMA8RKAGemUK7JXT7skbxHvpqpPj7ryNkIv/dNAFC2EHglcpt9Rmyo6YbSP2zk0gfDbdiIcVA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "init-package-json": "^3.0.2", - "npm-package-arg": "8.1.1", - "p-reduce": "^2.1.0", - "pacote": "^13.6.1", - "pify": "^5.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0", - "whatwg-url": "^8.4.0", - "yargs-parser": "20.2.4" - } - }, - "@lerna/create-symlink": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-5.3.0.tgz", - "integrity": "sha512-xIoC9m4J/u4NV/8ms4P2fiimaYgialqJvNamvMDRmgE1c3BLDSGk2nE4nVI2W5LxjgJdMTiIH9v1QpTUC9Fv+Q==", - "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/describe-ref": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-5.3.0.tgz", - "integrity": "sha512-R+CtJcOuAF3kJ6GNQnGC3STEi+5OtpNVz2n17sAs/xqJnq79tPdzEhT+pMxB2eSEkQYlSr+cCKMpF0m/mtIPQA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/diff": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-5.3.0.tgz", - "integrity": "sha512-i6f99dtO90u1QIJEfVtKE831m4gnMHBwY+4D84GY2SJMno8uI7ZyxMRZQh1nAFtvlNozO2MgzLr1OHtNMZOIgQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/validation-error": "5.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/exec": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-5.3.0.tgz", - "integrity": "sha512-kI/IuF1hbT+pEMZc3v4+w8BLckUIi45ipzOP0bWvXNgSKKuADAU3HLv+ifRXEjob5906C+Zc7K2IVoVS6r1TDg==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/profiler": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/validation-error": "5.3.0", - "p-map": "^4.0.0" - } - }, - "@lerna/filter-options": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-5.3.0.tgz", - "integrity": "sha512-ddgy0oDisTKIhCJ4WY5CeEhTsyrbW+zeBvZ7rVaG0oQXjSSYBried4TXRvgy67fampfHoPX+eQq5l1SYTRFPlw==", - "dev": true, - "requires": { - "@lerna/collect-updates": "5.3.0", - "@lerna/filter-packages": "5.3.0", - "dedent": "^0.7.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/filter-packages": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-5.3.0.tgz", - "integrity": "sha512-5/2V50sQB2+JNwuCHP/UPm3y8PN2JWVY9CbNLtF3K5bymNsCkQh2KHEL9wlWZ4yfr/2ufpy4XFPaFUHNoUOGnQ==", - "dev": true, - "requires": { - "@lerna/validation-error": "5.3.0", - "multimatch": "^5.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/get-npm-exec-opts": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-5.3.0.tgz", - "integrity": "sha512-cYBypDo8C7f4MvVvap2nYgtk8MXAADrYU1VdECSJ3Stbe4p2vBGt8bM9xkS2uPfQFMK3YSy3YPkSZcSjVXyoGw==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/get-packed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-5.3.0.tgz", - "integrity": "sha512-kD12w7Ko5TThuOuPF2HBLyuPsHK3oyyWyzleGBqR4DqxMtbMRgimyTQnr5o58XBOwUPCFsv1EZiqeGk+3HTGEA==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "ssri": "^9.0.1", - "tar": "^6.1.0" - } - }, - "@lerna/github-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-5.3.0.tgz", - "integrity": "sha512-UqAclsWDMthmbv3Z8QE1K7D/4e93ytg31mc+nEj+UdU+xJQ0L1ypl8zWAmGNs1sFkQntIiTIB4W5zgHet5mmZw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^19.0.3", - "git-url-parse": "^12.0.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/gitlab-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-5.3.0.tgz", - "integrity": "sha512-otwbiaGDgvn5MGF1ypsCO48inMpdcxuiDlbxrKD6glPUwNHiGV+PU8LLCCDKimwjjQhl88ySLpL1oTm4jnZ1Aw==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "npmlog": "^6.0.2", - "whatwg-url": "^8.4.0" - } - }, - "@lerna/global-options": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-5.3.0.tgz", - "integrity": "sha512-iEoFrDSU+KtfcB+lHW5grjg3VkEqzZNTUnWnE1FCBBwj9tSLOHjgKGtWWjIQtBUJ+qcLBbusap9Stqzr7UPYpQ==", - "dev": true - }, - "@lerna/has-npm-version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-5.3.0.tgz", - "integrity": "sha512-A/bK8e+QP/VMqZkq1wZbyOzMz/AY92tAVsBOQ5Yw2zqshdMVj99st3YHLOqJf/HTEzQo27GGI/ajmcltHS2l6A==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "semver": "^7.3.4" - } - }, - "@lerna/import": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-5.3.0.tgz", - "integrity": "sha512-KjVT9oFNSp1JLdrS1LSXjDcLiu2TMSfy6tpmhF9Zxo7oKB21SgWmXVV9rcWDueW2RIxNXDeVUG0NVNj2BRGeEQ==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/validation-error": "5.3.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "p-map-series": "^2.1.0" - } - }, - "@lerna/info": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-5.3.0.tgz", - "integrity": "sha512-pyeZSM/PIpBHCXdHPrbh6sPZlngXUxhTVFb0VaIjQ5Ms585xi15s1UQDO3FvzqdyMyalx0QGzCJbNx5XeoCejg==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/output": "5.3.0", - "envinfo": "^7.7.4" - } - }, - "@lerna/init": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-5.3.0.tgz", - "integrity": "sha512-y46lzEtgMdEseTJGQQqYZOjqqd7iN+e14vFh/9q5h62V4Y8nlUJRzovVo8JSeaGwKLB0B3dq3BuUn0PNywMhpA==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/project": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" - } - }, - "@lerna/link": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-5.3.0.tgz", - "integrity": "sha512-+QBwnGg3S8Zk8M8G5CA4kmGq92rkEMbmWJXaxie3jQayp+GXgSlLs6R4jwSOZlztY6xR3WawMI9sHJ0Vdu+g7w==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/package-graph": "5.3.0", - "@lerna/symlink-dependencies": "5.3.0", - "p-map": "^4.0.0", - "slash": "^3.0.0" - } - }, - "@lerna/list": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-5.3.0.tgz", - "integrity": "sha512-5RJvle3m4l2H0UmKNlwS8h2OIlNGsNTKPC4DYrJYt0+fhgzf5SEV1QKw+fuUqe3F8MziIkSGQB52HsjwPE6AWQ==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/listable": "5.3.0", - "@lerna/output": "5.3.0" - } - }, - "@lerna/listable": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-5.3.0.tgz", - "integrity": "sha512-RdmeV9mDeuBOgVOlF/KNH/qttyiYwHbeqHiMAw9s9AfMo/Fz3iDZaTGZuruMm84TZSkKxI7m5mjTlC0djsyKog==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.3.0", - "chalk": "^4.1.0", - "columnify": "^1.6.0" - } - }, - "@lerna/log-packed": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-5.3.0.tgz", - "integrity": "sha512-tDuOot3vSOUSP7fNNej8UM0fah5oy8mKXe026grt4J0OP4L3rhSWxhfrDBQ3Ylh2dAjgHzscUf/vpnNC9HnhOQ==", - "dev": true, - "requires": { - "byte-size": "^7.0.0", - "columnify": "^1.6.0", - "has-unicode": "^2.0.1", - "npmlog": "^6.0.2" - } - }, - "@lerna/npm-conf": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-5.3.0.tgz", - "integrity": "sha512-ejlypb90tvIsKUCb0fcOKt7wcPEjLdVK2zfbNs0M+UlRDLyRVOHUVdelJ15cRDNjQHzhBo2HBUKn5Fmm/2pcmg==", - "dev": true, - "requires": { - "config-chain": "^1.1.12", - "pify": "^5.0.0" - } - }, - "@lerna/npm-dist-tag": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-5.3.0.tgz", - "integrity": "sha512-OPahPk9QLXQXFgtrWm22NNxajVYKavCyTh8ijMwXTGXXbMJAw+PVjokfrUuEtg7FQi+kfJSrYAcJAxxfQq2eiA==", - "dev": true, - "requires": { - "@lerna/otplease": "5.3.0", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/npm-install": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-5.3.0.tgz", - "integrity": "sha512-scbWo8nW+P9KfitWG3y7Ep97dOs64ECfz9xfqtjagEXKYBPxG3skvwwljkfNnuxrCNs71JVD+imvcewHzih28g==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/get-npm-exec-opts": "5.3.0", - "fs-extra": "^9.1.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "signal-exit": "^3.0.3", - "write-pkg": "^4.0.0" - } - }, - "@lerna/npm-publish": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-5.3.0.tgz", - "integrity": "sha512-n+ocN1Dxrs6AmrSNqZl57cwhP4/VjQXdEI+QYauNnErNjMQW8Wt+tNaTlVAhZ1DnorwAo86o2uzFF/BgdUqh9A==", - "dev": true, - "requires": { - "@lerna/otplease": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "fs-extra": "^9.1.0", - "libnpmpublish": "^6.0.4", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "pify": "^5.0.0", - "read-package-json": "^5.0.1" - } - }, - "@lerna/npm-run-script": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-5.3.0.tgz", - "integrity": "sha512-2cLR1YdzeMjaMKgDuwHE+iZgVPt+Ttzb3/wFtp7Mw9TlKmNIdbHdrnfl12ABz5knPC+62CCNjB/gznfLndPp2w==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "@lerna/get-npm-exec-opts": "5.3.0", - "npmlog": "^6.0.2" - } - }, - "@lerna/otplease": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-5.3.0.tgz", - "integrity": "sha512-Xpju2VC5TiycmBP/mdp9hRstkH2MLm8/7o2NotVTCJwASWdKphRMqezhh5BX0E9i6VyrjzmTqSYEh9FNZZ9MwQ==", - "dev": true, - "requires": { - "@lerna/prompt": "5.3.0" - } - }, - "@lerna/output": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-5.3.0.tgz", - "integrity": "sha512-fISmHDu/9PKInFmT5NXsbh8cR6aE6SUXWrteXJ6PBYK30s0f/pVcfswb9VccX0Yea8HmqMQgCHWUWifkZeXiRA==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/pack-directory": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-5.3.0.tgz", - "integrity": "sha512-dTGMUB6/GjExhmLZ8yeFaRKJuSm6M/IsfxSJdL4gFPLigUIAS4XhzXS3KnL0+Ef1ue1yaTlAE9c/czfkE0pc/w==", - "dev": true, - "requires": { - "@lerna/get-packed": "5.3.0", - "@lerna/package": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/temp-write": "5.3.0", - "npm-packlist": "^5.1.1", - "npmlog": "^6.0.2", - "tar": "^6.1.0" - } - }, - "@lerna/package": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-5.3.0.tgz", - "integrity": "sha512-hsB03miiaNdvZ/UGzl0sVqxVat5x33EG9JiYgIoFqzroQPrG+WShmX3ctuO06TY1pxb4iNuHLPIbQomHEzzj8w==", - "dev": true, - "requires": { - "load-json-file": "^6.2.0", - "npm-package-arg": "8.1.1", - "write-pkg": "^4.0.0" - } - }, - "@lerna/package-graph": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-5.3.0.tgz", - "integrity": "sha512-UEHY7l/yknwFvQgo0RifyY+B5QdzuFutLZYSN1BMmyWttOZD9rkM263qnLNGTZ2BUE4dXDwwwOHuhLvi+xDRsA==", - "dev": true, - "requires": { - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/validation-error": "5.3.0", - "npm-package-arg": "8.1.1", - "npmlog": "^6.0.2", - "semver": "^7.3.4" - } - }, - "@lerna/prerelease-id-from-version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-5.3.0.tgz", - "integrity": "sha512-o1wsLns6hFTsmk4iqTRJNWLnFzlBBwgu17hp8T2iU4U7LUlDT2ZSKV3smGAU6GfrwX3MAp4LZ5syxgjFjrUOnw==", - "dev": true, - "requires": { - "semver": "^7.3.4" - } - }, - "@lerna/profiler": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-5.3.0.tgz", - "integrity": "sha512-LEZYca29EPgZR0q5E+7CJkn25Cw3OxNMQJU/CVn/HGeoWYWOpoDxujrZBl8is2bw06LHXvRbVXEUATLc+ACbqQ==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "upath": "^2.0.1" - } - }, - "@lerna/project": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-5.3.0.tgz", - "integrity": "sha512-InhIo9uwT1yod72ai5SKseJSUk8KkqG6COmwp1/45vibbawb7ZLbokpns7n46A0NdGNlmwJolamybYOuyumejw==", - "dev": true, - "requires": { - "@lerna/package": "5.3.0", - "@lerna/validation-error": "5.3.0", - "cosmiconfig": "^7.0.0", - "dedent": "^0.7.0", - "dot-prop": "^6.0.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.2", - "load-json-file": "^6.2.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "resolve-from": "^5.0.0", - "write-json-file": "^4.3.0" - } - }, - "@lerna/prompt": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-5.3.0.tgz", - "integrity": "sha512-4bIusBdjpw665CJtFsVsaB55hLHnmKnrcOaRjna6N/MdJDl8Th6X4EM4rrfXTX/uUNR3XcV91lYqcLuLmrpm5w==", - "dev": true, - "requires": { - "inquirer": "^8.2.4", - "npmlog": "^6.0.2" - } - }, - "@lerna/publish": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-5.3.0.tgz", - "integrity": "sha512-T8T1BQdI+NnlVARKwIXzILknEuiQlZToBsDpuX06M7+45t/pp9Z+u6pVt3rrqwiUPZ/dpoZzYKI31YdNJtGMcQ==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.3.0", - "@lerna/child-process": "5.3.0", - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/describe-ref": "5.3.0", - "@lerna/log-packed": "5.3.0", - "@lerna/npm-conf": "5.3.0", - "@lerna/npm-dist-tag": "5.3.0", - "@lerna/npm-publish": "5.3.0", - "@lerna/otplease": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/pack-directory": "5.3.0", - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/pulse-till-done": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/validation-error": "5.3.0", - "@lerna/version": "5.3.0", - "fs-extra": "^9.1.0", - "libnpmaccess": "^6.0.3", - "npm-package-arg": "8.1.1", - "npm-registry-fetch": "^13.3.0", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "pacote": "^13.6.1", - "semver": "^7.3.4" - } - }, - "@lerna/pulse-till-done": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-5.3.0.tgz", - "integrity": "sha512-yNvSuPLT1ZTtD2LMVOmiDhw4+9qkyf6xCpfxiUp4cGEN+qIuazWB5JicKLE49o27DBdaG8Ao4lAlb16x/gNrwQ==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/query-graph": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-5.3.0.tgz", - "integrity": "sha512-t99lNj97/Vilp5Js1Be7MoyaZ5U0fbOFh0E7lnTfSLvZhTkPMK6xLvAx2M3NQqhwYCQjTFDuf9ozQ3HQtYZAmA==", - "dev": true, - "requires": { - "@lerna/package-graph": "5.3.0" - } - }, - "@lerna/resolve-symlink": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-5.3.0.tgz", - "integrity": "sha512-zKI7rV5FzzlMBfi6kjDS0ulzcdDTORvdOJ/+CHU5C2h+v+P64Nk2VhZZNCCBDoO/l4GRhgehZOB70GIamO1TSw==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^6.0.2", - "read-cmd-shim": "^3.0.0" - } - }, - "@lerna/rimraf-dir": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-5.3.0.tgz", - "integrity": "sha512-/QJebh0tSY3LjgEyOo+6NH/b7ZNw9IpjqiDtvnLixjtdfkgli1OKOoZTa4KrO0mJoqMRq4yAa98cjpIzyKqCqw==", - "dev": true, - "requires": { - "@lerna/child-process": "5.3.0", - "npmlog": "^6.0.2", - "path-exists": "^4.0.0", - "rimraf": "^3.0.2" - } - }, - "@lerna/run": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-5.3.0.tgz", - "integrity": "sha512-KwoKTj1w71OmUHONNYhZME+tr5lk9Q4f+3LUr2WtWZRuOAGO5ZCRrcZc+N4Ib7zno89Ub6Ovz51fcjwltLh72w==", - "dev": true, - "requires": { - "@lerna/command": "5.3.0", - "@lerna/filter-options": "5.3.0", - "@lerna/npm-run-script": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/profiler": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/timer": "5.3.0", - "@lerna/validation-error": "5.3.0", - "p-map": "^4.0.0" - } - }, - "@lerna/run-lifecycle": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-5.3.0.tgz", - "integrity": "sha512-EuBCGwm2PLgkebfyqo3yNkwfSb1EzHeo3lA8t4yld6LXWkgUPBFhc7RwRc6TsQOpjpfFvDSGoI282R01o0jPVQ==", - "dev": true, - "requires": { - "@lerna/npm-conf": "5.3.0", - "@npmcli/run-script": "^4.1.7", - "npmlog": "^6.0.2", - "p-queue": "^6.6.2" - } - }, - "@lerna/run-topologically": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-5.3.0.tgz", - "integrity": "sha512-WiFF2EiwLjAguKs0lEmcukTL7WhuWFwxNprrGWFxEkBhlGdMFk18n8BaZN8FO26xqzztzuPzSx1re/f/dEEAPg==", - "dev": true, - "requires": { - "@lerna/query-graph": "5.3.0", - "p-queue": "^6.6.2" - } - }, - "@lerna/symlink-binary": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-5.3.0.tgz", - "integrity": "sha512-dIATASuGS6y512AGjacOoTpkFDPsKlhggjzL3KLdSNmxV3288nUqaFBuA7rTnnMNnBQ7jVuE1JKJupZnzPN0cA==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.3.0", - "@lerna/package": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0" - } - }, - "@lerna/symlink-dependencies": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-5.3.0.tgz", - "integrity": "sha512-qkq4YT/Bdrb3W22ve+d2Gy3hRTrtT/zBhjKTCukEpYsFJLwSjZ4z5vbv6J15/j6PN1Km9oTRp6vBYmdjAuARQQ==", - "dev": true, - "requires": { - "@lerna/create-symlink": "5.3.0", - "@lerna/resolve-symlink": "5.3.0", - "@lerna/symlink-binary": "5.3.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0" - } - }, - "@lerna/temp-write": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/temp-write/-/temp-write-5.3.0.tgz", - "integrity": "sha512-AhC5Q+tV0yebEc1P2jsB4apQzztW8dgdLLc1G1Pkt46l5vezRGhZmsj+iUyCsVjpdUSO/UcAq1DbI2Xzhf5arg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "is-stream": "^2.0.0", - "make-dir": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^8.3.2" - } - }, - "@lerna/timer": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-5.3.0.tgz", - "integrity": "sha512-IeDjj1gJtbUPKl2ebpiml9u4k2kRqYF1Dbs6JuWpeC7lGxAx3JcUmkNH2RQ1BYTxk5xc9FKlgNMrZQwhq2K1Ow==", - "dev": true - }, - "@lerna/validation-error": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-5.3.0.tgz", - "integrity": "sha512-GVvnTxx+CNFjXCiJahAu2c/pP2R3DhGuQp4CJUyKegnzGaWK0h5PhlwRL7/LbDMPLh2zLobPOVr9kTOjwv76Nw==", - "dev": true, - "requires": { - "npmlog": "^6.0.2" - } - }, - "@lerna/version": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-5.3.0.tgz", - "integrity": "sha512-QOQSAdpeP66oQQ20nNZ4NhJS5NtZZDGyz36kP/4BeqjGK6QgtrEmto4+vmWj49w3VJUIXnrqAKHiPkhFUmJm5Q==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "5.3.0", - "@lerna/child-process": "5.3.0", - "@lerna/collect-updates": "5.3.0", - "@lerna/command": "5.3.0", - "@lerna/conventional-commits": "5.3.0", - "@lerna/github-client": "5.3.0", - "@lerna/gitlab-client": "5.3.0", - "@lerna/output": "5.3.0", - "@lerna/prerelease-id-from-version": "5.3.0", - "@lerna/prompt": "5.3.0", - "@lerna/run-lifecycle": "5.3.0", - "@lerna/run-topologically": "5.3.0", - "@lerna/temp-write": "5.3.0", - "@lerna/validation-error": "5.3.0", - "chalk": "^4.1.0", - "dedent": "^0.7.0", - "load-json-file": "^6.2.0", - "minimatch": "^3.0.4", - "npmlog": "^6.0.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "p-reduce": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4", - "slash": "^3.0.0", - "write-json-file": "^4.3.0" - } - }, - "@lerna/write-log-file": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-5.3.0.tgz", - "integrity": "sha512-cmrNAI5+9auUJSuTVrUzt2nb/KX6htgjdw7gGPMI1Tm6cdBIbs67R6LedZ8yvYOLGsXB2Se93vxv5fTgEHWfCw==", - "dev": true, - "requires": { - "npmlog": "^6.0.2", - "write-file-atomic": "^4.0.1" - } - }, - "@loaders.gl/core": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.2.8.tgz", - "integrity": "sha512-C8BNToWgk1tqTzPHuOgP9OYH8P6Inb5fmwz1Fa03vddxIXd4ORoYMleQZSu9x72Dos2dZ476Vs7NYbJbs8KrZw==", - "requires": { - "@babel/runtime": "^7.3.1", - "@loaders.gl/loader-utils": "3.2.8", - "@loaders.gl/worker-utils": "3.2.8", - "@probe.gl/log": "^3.5.0", - "probe.gl": "^3.4.0" - } - }, - "@loaders.gl/images": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-3.2.8.tgz", - "integrity": "sha512-QD5mGiUmEbZFEuuQpCPB/vGgvlxgRc/OcOlVUz2vxpbvLPjvuTdLQKCLHrCb4DePBIbepwvrcvJRYz91azN6mA==", - "requires": { - "@loaders.gl/loader-utils": "3.2.8" - } - }, - "@loaders.gl/loader-utils": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-3.2.8.tgz", - "integrity": "sha512-Yp1ixw23tnFNexhP6xPorUj2QeISlzJiyC5oDz+IyFmcpDmQ3qtlD6ChGztkWilnWSohnC2SP+XBZGbpOclgoA==", - "requires": { - "@babel/runtime": "^7.3.1", - "@loaders.gl/worker-utils": "3.2.8", - "@probe.gl/stats": "^3.5.0" - } - }, - "@loaders.gl/schema": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-3.2.8.tgz", - "integrity": "sha512-7Brn+cqGNnaodun0LwnyXtyIX8+73Fr8jQr6TVYZPOHoHXdxVefbJ70bSYlw+tj+dQhWdmqLglUHT0Rxr1gHBQ==", - "requires": { - "@types/geojson": "^7946.0.7", - "apache-arrow": "^4.0.0" - } - }, - "@loaders.gl/worker-utils": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-3.2.8.tgz", - "integrity": "sha512-CY2TvitiNhs6r+wTQ5McDZmAehklWb5Mb7eCt7aWMthRvhgdWpsMch7QOqOcKFCvuy4JkH37NO86LWFMpXeH8w==", - "requires": { - "@babel/runtime": "^7.3.1" - } - }, - "@luma.gl/constants": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-8.5.16.tgz", - "integrity": "sha512-b9JrfhlU4tgQWa7vAzQzzw3yS0NdJBrTEZ6LA9XRKSwVV5VunHXApnrnN4v1oA0AGgnknnUf40PRBZolsVK+7Q==" - }, - "@luma.gl/core": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-8.5.16.tgz", - "integrity": "sha512-w3goHMFEhQFlpoXXygFD6zaZvu4rYvMLfDXThpBMUYm8Y4k46UREFYhsV1aOe1aJlaolsRT/9J2fgSDXr0yA3w==", - "requires": { - "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.16", - "@luma.gl/engine": "8.5.16", - "@luma.gl/gltools": "8.5.16", - "@luma.gl/shadertools": "8.5.16", - "@luma.gl/webgl": "8.5.16" - } - }, - "@luma.gl/engine": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-8.5.16.tgz", - "integrity": "sha512-F9wMLg+ystsXa3oOzLezaD1K7ot+kL69IKIJqVjxNecPLf8E/BxJlKL+AZW7SCluka6pFMlGomog0GnjjCxH8Q==", - "requires": { - "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.16", - "@luma.gl/gltools": "8.5.16", - "@luma.gl/shadertools": "8.5.16", - "@luma.gl/webgl": "8.5.16", - "@math.gl/core": "^3.5.0", - "@probe.gl/env": "^3.5.0", - "@probe.gl/stats": "^3.5.0", - "@types/offscreencanvas": "^2019.7.0" - } - }, - "@luma.gl/gltools": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/@luma.gl/gltools/-/gltools-8.5.16.tgz", - "integrity": "sha512-CNCLbKtMRep7tTuB5x3RA7tD70U8XXA8xhABDZs7oAQ0Q/K2EjnwskSUlWzgD3ZPluh6JZzvQBEi4DSmeW3NZA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.16", - "@probe.gl/env": "^3.5.0", - "@probe.gl/log": "^3.5.0", - "@types/offscreencanvas": "^2019.7.0" - } - }, - "@luma.gl/shadertools": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-8.5.16.tgz", - "integrity": "sha512-L3M3v6bQhIT8McCeqLvHnLJBmBXYDog1QblF4PVszuIB/WH+cHxZ0I26X2a1eEsVCvdeCrxRBxr42743oyfUNA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@math.gl/core": "^3.5.0" - } - }, - "@luma.gl/webgl": { - "version": "8.5.16", - "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-8.5.16.tgz", - "integrity": "sha512-vyzr4Mu3+6rKnyu4c5gmTcuDG6xKF49qy316v8oMp45VT0xCQBP17Poq0b0j0VqbGOOtXGI/pxOtr68Ii9fDuA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.16", - "@luma.gl/gltools": "8.5.16", - "@probe.gl/env": "^3.5.0", - "@probe.gl/stats": "^3.5.0" - } - }, - "@mapbox/tiny-sdf": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", - "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==" - }, - "@math.gl/core": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.3.tgz", - "integrity": "sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==", - "requires": { - "@babel/runtime": "^7.12.0", - "@math.gl/types": "3.6.3", - "gl-matrix": "^3.4.0" - } - }, - "@math.gl/polygon": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-3.6.3.tgz", - "integrity": "sha512-FivQ1ZnYcAss1wVifOkHP/ZnlfQy1IL/769uzNtiHxwUbW0kZG3yyOZ9I7fwyzR5Hvqt3ErJKHjSYZr0uVlz5g==", - "requires": { - "@math.gl/core": "3.6.3" - } - }, - "@math.gl/sun": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@math.gl/sun/-/sun-3.6.3.tgz", - "integrity": "sha512-mrx6CGYYeTNSQttvcw0KVUy+35YDmnjMqpO/o0t06Vcghrt0HNruB/ScRgUSbJrgkbOg1Vcqm23HBd++clzQzw==", - "requires": { - "@babel/runtime": "^7.12.0" - } - }, - "@math.gl/types": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-3.6.3.tgz", - "integrity": "sha512-3uWLVXHY3jQxsXCr/UCNPSc2BG0hNUljhmOBt9l+lNFDp7zHgm0cK2Tw4kj2XfkJy4TgwZTBGwRDQgWEbLbdTA==" - }, - "@math.gl/web-mercator": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-3.6.3.tgz", - "integrity": "sha512-UVrkSOs02YLehKaehrxhAejYMurehIHPfFQvPFZmdJHglHOU4V2cCUApTVEwOksvCp161ypEqVp+9H6mGhTTcw==", - "requires": { - "@babel/runtime": "^7.12.0", - "gl-matrix": "^3.4.0" - } - }, - "@matrix-org/olm": { - "version": "3.2.12", - "resolved": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.12.tgz", - "integrity": "sha1-C848hvnTakmE08PgffHD+0xnm9k=" - }, - "@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==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@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==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/arborist": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz", - "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } - } - }, - "@npmcli/fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.1.tgz", - "integrity": "sha512-1Q0uzx6c/NVNGszePbr5Gc2riSU1zLpNlo/1YWntH+eaPmMgBssAW0qXofCVkpdj3ce4swZtlDYQu+NKiYcptg==", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", - "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/map-workspaces": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", - "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", - "dev": true, - "requires": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "@npmcli/metavuln-calculator": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", - "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", - "dev": true, - "requires": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - } - }, - "@npmcli/move-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", - "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/name-from-folder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", - "dev": true - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", - "dev": true - }, - "@npmcli/package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", - "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1" - } - }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.0.tgz", - "integrity": "sha512-e/QgLg7j2wSJp1/7JRl0GC8c7PMX+uYlA/1Tb+IDOLdSM4T7K1VQ9mm9IGU3WRtY5vEIObpqCLb3aCNCug18DA==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - } - }, - "@nrwl/cli": { - "version": "14.5.4", - "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.5.4.tgz", - "integrity": "sha512-UYr14hxeYV8p/zt6D6z33hljZJQROJAVxSC+mm72fyVvy88Gt0sQNLfMmOARXur0p/73PSLM0jJ2Sr7Ftsuu+A==", - "dev": true, - "requires": { - "nx": "14.5.4" - } - }, - "@nrwl/tao": { - "version": "14.5.4", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.5.4.tgz", - "integrity": "sha512-a2GCuSE8WghjehuU3GVO63KZEnZXXQiqEg137yN/Na+PxwSu68XeaX53SLyzRskTV120YwBBy1YCTNzAZxxsjg==", - "dev": true, - "requires": { - "nx": "14.5.4" - } - }, - "@octokit/auth-token": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", - "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.4.tgz", - "integrity": "sha512-sUpR/hc4Gc7K34o60bWC7WUH6Q7T6ftZ2dUmepSyJr9PRF76/qqkWjE2SOEzCqLA5W83SaISymwKtxks+96hPQ==", - "dev": true, - "requires": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", - "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/graphql": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.0.tgz", - "integrity": "sha512-1ZZ8tX4lUEcLPvHagfIVu5S2xpHYXAmgN0+95eAOPoaVPzCfUXJtA5vASafcpWcO86ze0Pzn30TAx72aB2aguQ==", - "dev": true, - "requires": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", - "dev": true - }, - "@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-3.1.0.tgz", - "integrity": "sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==", - "dev": true, - "requires": { - "@octokit/types": "^6.41.0" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "requires": {} - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.2.0.tgz", - "integrity": "sha512-PZ+yfkbZAuRUtqu6Y191/V3eM0KBPx+Yq7nh+ONPdpm3EX4pd5UnK2y2XgO/0AtNum5a4aJCDjqsDuUZ2hWRXw==", - "dev": true, - "requires": { - "@octokit/types": "^6.41.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/request": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.0.tgz", - "integrity": "sha512-7IAmHnaezZrgUqtRShMlByJK33MT9ZDnMRgZjnRrRV9a/jzzFwKGz0vxhFU6i7VMLraYcQ1qmcAOin37Kryq+Q==", - "dev": true, - "requires": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/request-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.0.tgz", - "integrity": "sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "19.0.3", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.3.tgz", - "integrity": "sha512-5arkTsnnRT7/sbI4fqgSJ35KiFaN7zQm0uQiQtivNQLI8RQx8EHwJCajcTUwmaCMNDg7tdCvqAnc7uvHHPxrtQ==", - "dev": true, - "requires": { - "@octokit/core": "^4.0.0", - "@octokit/plugin-paginate-rest": "^3.0.0", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0" - } - }, - "@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dev": true, - "requires": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "@parcel/watcher": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", - "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", - "dev": true, - "requires": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - } - }, - "@playwright/test": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.1.tgz", - "integrity": "sha512-IJ4X0yOakXtwkhbnNzKkaIgXe6df7u3H3FnuhI9Jqh+CdO0e/lYQlDLYiyI9cnXK8E7UAppAWP+VqAv6VX7HQg==", - "dev": true, - "requires": { - "@types/node": "*", - "playwright-core": "1.25.1" - }, - "dependencies": { - "playwright-core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.1.tgz", - "integrity": "sha512-lSvPCmA2n7LawD2Hw7gSCLScZ+vYRkhU8xH0AapMyzwN+ojoDqhkH/KIEUxwNu2PjPoE/fcE0wLAksdOhJ2O5g==", - "dev": true - } - } - }, - "@polka/url": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-0.5.0.tgz", - "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==", - "dev": true - }, - "@popperjs/core": { - "version": "2.11.6", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", - "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" - }, - "@probe.gl/env": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.5.2.tgz", - "integrity": "sha512-JlNvJ2p6+ObWX7es6n3TycGPTv5CfVrCS8vblI1eHhrFCcZ6RxIo727ffRVwldpp0YTzdgjx3/4fB/1dnVYElw==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@probe.gl/log": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.5.2.tgz", - "integrity": "sha512-5yo8Dg8LrSltuPBdGlLh/WOvt4LdU7DDHu75GMeiS0fKM+J4IACRpGV8SOrktCj1MWZ6JVHcNQkJnoyZ6G7p/w==", - "requires": { - "@babel/runtime": "^7.0.0", - "@probe.gl/env": "3.5.2" - } - }, - "@probe.gl/stats": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.5.2.tgz", - "integrity": "sha512-YKaYXiHF//fgy1OkX38JD70Lc8qxg2Viw8Q2CTNMwGPDJe12wda7kEmMKPJNw2oYLyFUfTzv00KJMA5h18z02w==", - "requires": { - "@babel/runtime": "^7.0.0" - } - }, - "@react-dnd/asap": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@react-dnd/asap/-/asap-4.0.1.tgz", - "integrity": "sha512-kLy0PJDDwvwwTXxqTFNAAllPHD73AycE9ypWeln/IguoGBEbvFcPDbCV03G52bEcC5E+YgupBE0VzHGdC8SIXg==" - }, - "@react-dnd/invariant": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@react-dnd/invariant/-/invariant-2.0.0.tgz", - "integrity": "sha512-xL4RCQBCBDJ+GRwKTFhGUW8GXa4yoDfJrPbLblc3U09ciS+9ZJXJ3Qrcs/x2IODOdIE5kQxvMmE2UKyqUictUw==" - }, - "@react-dnd/shallowequal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz", - "integrity": "sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==" - }, - "@react-loosely-lazy/manifest": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@react-loosely-lazy/manifest/-/manifest-1.0.0.tgz", - "integrity": "sha512-FM5xuGt/moK+jWD11fGfdeqTBv1VH6dkQHbZS3VXPLaRAmIl096t1RD9KLTGAhvwOMzQlD+/pQ12B+pPAbXgdQ==" - }, - "@rollup/plugin-inject": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz", - "integrity": "sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "estree-walker": "^2.0.1", - "magic-string": "^0.25.7" - }, - "dependencies": { - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - } - } - }, - "@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, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@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 - }, - "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 - } - } - }, - "@rushstack/eslint-patch": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz", - "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==", - "dev": true - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "dev": true - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "dev": true - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "dev": true - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "dev": true - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "dev": true - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "dev": true - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "dev": true - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "dev": true - }, - "@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dev": true, - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - } - }, - "@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dev": true, - "requires": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.6" - } - }, - "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - } - }, - "@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - } - }, - "@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - } - }, - "@syncedstore/yjs-reactive-bindings": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@syncedstore/yjs-reactive-bindings/-/yjs-reactive-bindings-0.4.0.tgz", - "integrity": "sha512-J1dk8F3ek1MSW0+/dDHr/EuUuavMiCtRnmFaLyxMBO5rhk3QDLphitquTmUkW27WMucZxmiJBH2DgTlPPauShg==", - "requires": { - "@types/eslint": "6.8.0" - } - }, - "@tippyjs/react": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@tippyjs/react/-/react-4.2.6.tgz", - "integrity": "sha512-91RicDR+H7oDSyPycI13q3b7o4O60wa2oRbjlz2fyRLmHImc4vyDwuUP8NtZaN0VARJY5hybvDYrFzhY9+Lbyw==", - "requires": { - "tippy.js": "^6.3.1" - } - }, - "@tiptap/core": { - "version": "2.0.0-beta.182", - "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.0.0-beta.182.tgz", - "integrity": "sha512-MZGkMGnVnWhBzjvpBNwQ9zBz38ndi3Irbf90uCTSArR0kaCVkW4vmyuPuOXd+0SO8Yv/l5oyDdOCpaG3rnQYfw==", - "requires": { - "prosemirror-commands": "1.3.0", - "prosemirror-keymap": "1.2.0", - "prosemirror-model": "1.18.1", - "prosemirror-schema-list": "1.2.0", - "prosemirror-state": "1.4.1", - "prosemirror-transform": "1.6.0", - "prosemirror-view": "1.26.2" - } - }, - "@tiptap/extension-bold": { - "version": "2.0.0-beta.28", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.28.tgz", - "integrity": "sha512-DY8GOzw9xjmTFrnvTbgHUNxTnDfKrkDgrhe0SUvdkT2udntWp8umPdhPiD3vczLgHOJw6tX68qMRjbsR1ZPcHQ==", - "requires": {} - }, - "@tiptap/extension-bubble-menu": { - "version": "2.0.0-beta.61", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.0.0-beta.61.tgz", - "integrity": "sha512-T3Yx+y1sUnXAJjK1CUfsQewSxOpDca9KzKqN2H9c9RZ9UlorR9XmZg6YYW7m9a7adeihj+o3cCO9jRd8dV+nnA==", - "requires": { - "prosemirror-state": "1.4.1", - "prosemirror-view": "1.26.2", - "tippy.js": "^6.3.7" - } - }, - "@tiptap/extension-code": { - "version": "2.0.0-beta.28", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.0.0-beta.28.tgz", - "integrity": "sha512-QPJ2Gwb1+3NgcC1ZIhvVcb+FsnWWDu5VZXTKXM4mz892i9V2x48uHg5anPiUV6pcolXsW1F5VNbXIHGTUUO6CQ==", - "requires": {} - }, - "@tiptap/extension-collaboration": { - "version": "2.0.0-beta.38", - "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration/-/extension-collaboration-2.0.0-beta.38.tgz", - "integrity": "sha512-oDrQC5z+pLXEQUofkwuJPtysHlP81eTmnKLjjTAAO8zWey3w+nusb6YuQM1W0JbqVD7lcK6YlS+Za+pSA46IdA==", - "requires": { - "prosemirror-state": "1.4.1", - "y-prosemirror": "1.0.20" - } - }, - "@tiptap/extension-collaboration-cursor": { - "version": "2.0.0-beta.37", - "resolved": "https://registry.npmjs.org/@tiptap/extension-collaboration-cursor/-/extension-collaboration-cursor-2.0.0-beta.37.tgz", - "integrity": "sha512-3M1aFPTwCGKJ7YNxYZGidJbdZcqAYjOoDCuKfIKVCQgAuKLc5TQf2bA+7ftwG0wI72xdTRoadKA/YCwc67KBvg==", - "requires": { - "y-prosemirror": "1.0.20" - } - }, - "@tiptap/extension-dropcursor": { - "version": "2.0.0-beta.29", - "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.29.tgz", - "integrity": "sha512-I+joyoFB8pfdXUPLMqdNO08nlB5m2lbu0VQ5dpqdi/HzgVThMZPZA1cW0X8vAUvrALs5/JFRiFoR9hrLN5R5ng==", - "requires": { - "prosemirror-dropcursor": "1.5.0" - } - }, - "@tiptap/extension-floating-menu": { - "version": "2.0.0-beta.56", - "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.0.0-beta.56.tgz", - "integrity": "sha512-j/evHE/6UPGkIgXny9IGcAh0IrcnQmg0b2NBYebs2mqx9xYKYoe+0jVgNdLp/0M3MRgQCzyWTyatBDBFOUR2mw==", - "requires": { - "prosemirror-state": "1.4.1", - "prosemirror-view": "1.26.2", - "tippy.js": "^6.3.7" - } - }, - "@tiptap/extension-gapcursor": { - "version": "2.0.0-beta.39", - "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.39.tgz", - "integrity": "sha512-oCyz5WEeQXrEIoa1WXaD52yf1EwMFCXaK1cVzFgUj8lkXJ+nJj+O/Zp0Mg+9/MVR0LYu/kifqVorKNXM4AFA/g==", - "requires": { - "prosemirror-gapcursor": "1.3.0" - } - }, - "@tiptap/extension-hard-break": { - "version": "2.0.0-beta.33", - "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.33.tgz", - "integrity": "sha512-41xf0vSV9hcyTFd01ItLq/CjhjgmOFLCrO3UWN/P2E/cIxuDTyXcvjTE/KXeqRCOV3OYd9fVr0wO91hc8Ij1Yg==", - "requires": {} - }, - "@tiptap/extension-history": { - "version": "2.0.0-beta.26", - "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.0.0-beta.26.tgz", - "integrity": "sha512-ly19uwvdmXG8Fw1KcavXIHi3Qx6JBASOR7394zghOEpW3atpY8nd/8I373rZ8eDUcGOClfaF7bCx2xvIotAAnw==", - "requires": { - "prosemirror-history": "1.3.0" - } - }, - "@tiptap/extension-horizontal-rule": { - "version": "2.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.36.tgz", - "integrity": "sha512-o+Zp7dcn3zAQhtlhZiFB69mTHuH3ZRbGEF7Cbf1D3uX1izotni5zIZbPaFFUT4r6OmVe/vDDt/nopfcGc10ktQ==", - "requires": { - "prosemirror-state": "1.4.1" - } - }, - "@tiptap/extension-italic": { - "version": "2.0.0-beta.28", - "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.28.tgz", - "integrity": "sha512-/pKRiCfewh7nqiXRD3N4hQHfGrGNOiWPFYZfY35bSpvTms7PDb/MF7xT1CWW23hSpY31BBS+R/a66vlR/gqu7Q==", - "requires": {} - }, - "@tiptap/extension-link": { - "version": "2.0.0-beta.43", - "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.0.0-beta.43.tgz", - "integrity": "sha512-AYueqfTW713KGVfWSWhVbj4ObeWudgawikm3m0uYcKSdsAz/CfEvOD2/NA0uyQzlxmYLA6Pf8HMxoKGN+O4Cmg==", - "requires": { - "linkifyjs": "^3.0.5", - "prosemirror-model": "1.18.1", - "prosemirror-state": "1.4.1" - } - }, - "@tiptap/extension-paragraph": { - "version": "2.0.0-beta.26", - "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.26.tgz", - "integrity": "sha512-WcYsuUa7LLfk0vi7I1dVjdMRu53B52FMMqd+UL1qPdDKVkU3DBsZVwPj+yyfQyqN8Mc/xyg9VacGaiKFLmWNDg==", - "requires": {} - }, - "@tiptap/extension-strike": { - "version": "2.0.0-beta.29", - "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.29.tgz", - "integrity": "sha512-zqFuY7GfNmZ/KClt6kxQ+msGo3syqucP/Xnlihxi+/h/G+oTvEwyOIXCtDOltvxcsWH/TUsdr5vzLp0j+Mdc6Q==", - "requires": {} - }, - "@tiptap/extension-text": { - "version": "2.0.0-beta.17", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.0.0-beta.17.tgz", - "integrity": "sha512-OyKL+pqWJEtjyd9/mrsuY1kZh2b3LWpOQDWKtd4aWR4EA0efmQG+7FPwcIeAVEh7ZoqM+/ABCnPjN6IjzIrSfg==", - "requires": {} - }, - "@tiptap/extension-underline": { - "version": "2.0.0-beta.25", - "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.0.0-beta.25.tgz", - "integrity": "sha512-kRDdb/mF6QWzFGV3cQuLh6xyXULXaKPL/TghefoOZhwkdIWV/M3zFar5tsZO54+tbIrzxoVP6t7mO2Y5G/SLDQ==", - "requires": {} - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@typecell-org/common": { - "version": "file:packages/common", - "requires": { - "@types/uuid": "^8.3.4", - "buffer": "^6.0.3", - "rimraf": "^3.0.2", - "rollup-plugin-node-polyfills": "^0.2.1", - "string.prototype.replaceall": "^1.0.5", - "typescript": "4.5.5", - "uuid": "^8.3.2" - }, - "dependencies": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true - } - } - }, - "@typecell-org/editor": { - "version": "file:packages/editor", - "requires": { - "@atlaskit/atlassian-navigation": "^2.2.6", - "@atlaskit/avatar": "^21.1.1", - "@atlaskit/banner": "^11.6.1", - "@atlaskit/breadcrumbs": "^11.7.3", - "@atlaskit/button": "^16.3.5", - "@atlaskit/checkbox": "^12.3.18", - "@atlaskit/comment": "^10.5.2", - "@atlaskit/css-reset": "^6.3.13", - "@atlaskit/dropdown-menu": "^11.3.0", - "@atlaskit/flag": "^14.6.3", - "@atlaskit/form": "^8.5.6", - "@atlaskit/inline-message": "^11.3.0", - "@atlaskit/menu": "^1.3.8", - "@atlaskit/modal-dialog": "^12.2.14", - "@atlaskit/page-header": "^10.2.3", - "@atlaskit/page-layout": "^1.2.7", - "@atlaskit/progress-bar": "^0.5.8", - "@atlaskit/section-message": "^6.1.14", - "@atlaskit/select": "^15.7.5", - "@atlaskit/spinner": "^15.1.14", - "@atlaskit/textarea": "^4.3.8", - "@atlaskit/textfield": "^5.1.12", - "@atlaskit/tree": "^8.6.1", - "@atlaskit/user-picker": "^9.3.1", - "@blocknote/core": "^0.1.0", - "@deck.gl/aggregation-layers": "^8.6.4", - "@deck.gl/core": "^8.6.4", - "@deck.gl/layers": "^8.6.4", - "@deck.gl/react": "^8.6.4", - "@emotion/react": "^11.4.0", - "@esbuild-plugins/node-globals-polyfill": "^0.1.1", - "@esbuild-plugins/node-modules-polyfill": "^0.1.4", - "@loaders.gl/core": "^3.0.12", - "@loaders.gl/images": "^3.0.12", - "@matrix-org/olm": "3.2.12", - "@playwright/test": "^1.18.1", - "@svgr/webpack": "^5.5.0", - "@syncedstore/yjs-reactive-bindings": "^0.4.0", - "@tippyjs/react": "^4.2.5", - "@tiptap/extension-collaboration": "^2.0.0-beta.38", - "@tiptap/extension-collaboration-cursor": "^2.0.0-beta.37", - "@typecell-org/common": "^0.0.3", - "@typecell-org/engine": "^0.0.3", - "@typecell-org/parsers": "^0.0.3", - "@types/lodash": "^4.14.168", - "@types/lowlight": "0.0.2", - "@types/markdown-it": "^10.0.3", - "@types/node": "^16.0.0", - "@types/prettier": "^2.6.4", - "@types/qs": "^6.9.7", - "@types/react": "^18.0.25", - "@types/react-dom": "^18.0.9", - "@types/semver": "^7.3.8", - "@types/speakingurl": "^13.0.2", - "@types/ua-parser-js": "^0.7.36", - "@types/uuid": "^8.3.0", - "@types/zxcvbn": "^4.4.1", - "@typescript/vfs": "^1.3.4", - "@vitejs/plugin-react": "^2.0.0", - "classnames": "^2.3.1", - "connect-history-api-fallback": "^2.0.0", - "cross-env": "^7.0.3", - "eslint": "^8.21.0", - "eslint-config-react-app": "^7.0.1", - "events": "^3.3.0", - "fake-indexeddb": "^3.1.2", - "filebridge-client": "^0.1.5", - "fractional-indexing": "^2.0.0", - "frontend-collective-react-dnd-scrollzone": "1.0.2", - "glob": "^7.2.0", - "jsdom": "^20.0.0", - "lodash": "^4.17.21", - "lowlight": "^1.20.0", - "lz-string": "^1.4.4", - "markdown-it": "^12.0.2", - "matrix-crdt": "^0.2.0", - "matrix-js-sdk": "^19.4.0", - "mobx": "^6.2.0", - "mobx-react-lite": "^3.2.0", - "monaco-editor": "^0.35.0", - "penpal": "^6.1.0", - "prettier": "2.4.1", - "probe.gl": "^3.1.4", - "qs": "^6.10.1", - "react": "^18.2.0", - "react-avatar": "^3.10.0", - "react-dnd": "^14.0.2", - "react-dnd-html5-backend": "^14.0.0", - "react-dom": "^18.2.0", - "react-error-overlay": "^6.0.9", - "react-github-btn": "^1.2.1", - "react-icons": "^4.6.0", - "react-inspector": "^6.0.1", - "react-intl-next": "npm:react-intl@^5.18.1", - "react-router-dom": "6.2.2", - "remixicon-react": "^1.0.0", - "rimraf": "^3.0.2", - "rollup-plugin-node-polyfills": "^0.2.1", - "rollup-plugin-polyfill-node": "^0.10.2", - "semver": "^7.3.5", - "simple-peer": "^9.11.1", - "speakingurl": "^14.0.1", - "string.prototype.replaceall": "^1.0.5", - "styled-components": "3.2.6", - "tippy.js": "^6.3.1", - "typescript": "4.5.5", - "ua-parser-js": "^0.7.28", - "uuid": "^8.3.2", - "vite": "^3.0.0", - "vitest": "^0.24.4", - "vscode-lib": "^0.1.2", - "wasm-loader": "^1.3.0", - "web-vitals": "^1.0.1", - "y-indexeddb": "9.0.6", - "y-monaco": "^0.1.3", - "y-protocols": "^1.0.5", - "y-webrtc": "^10.1.8", - "yjs": "^13.5.41", - "zxcvbn": "^4.4.2" - }, - "dependencies": { - "dnd-core": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-14.0.1.tgz", - "integrity": "sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A==", - "requires": { - "@react-dnd/asap": "^4.0.0", - "@react-dnd/invariant": "^2.0.0", - "redux": "^4.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-dnd": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-14.0.5.tgz", - "integrity": "sha512-9i1jSgbyVw0ELlEVt/NkCUkxy1hmhJOkePoCH713u75vzHGyXhPDm28oLfc2NMSBjZRM1Y+wRjHXJT3sPrTy+A==", - "requires": { - "@react-dnd/invariant": "^2.0.0", - "@react-dnd/shallowequal": "^2.0.0", - "dnd-core": "14.0.1", - "fast-deep-equal": "^3.1.3", - "hoist-non-react-statics": "^3.3.2" - } - }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" - } - } - }, - "@typecell-org/engine": { - "version": "file:packages/engine", - "requires": { - "@playwright/test": "^1.18.1", - "@types/chai": "^4.3.0", - "@types/lodash": "^4.14.182", - "@types/mocha": "^9.1.0", - "@types/react": "^18.0.25", - "@vitest/coverage-c8": "^0.24.4", - "chai": "^4.3.6", - "es-module-shims": "1.4.3", - "jsdom": "^20.0.0", - "lodash": "^4.17.21", - "mobx": "^6.2.0", - "mocha": "^9.2.1", - "playwright-test": "^8.1.1", - "react": "^18.2.0", - "rimraf": "^3.0.2", - "typescript": "4.5.5", - "vitest": "^0.24.4", - "vscode-lib": "^0.1.2" - }, - "dependencies": { - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true - } - } - }, - "@typecell-org/packager": { - "version": "file:packages/packager", - "requires": { - "@playwright/test": "^1.18.1", - "@typecell-org/common": "*", - "@typecell-org/engine": "*", - "@typecell-org/parsers": "*", - "@types/chai": "^4.3.0", - "@types/fs-extra": "9.0.13", - "@types/lodash": "^4.14.182", - "@types/mocha": "^9.1.0", - "@types/react": "^18.0.25", - "@vitest/coverage-c8": "^0.24.4", - "chai": "^4.3.6", - "es-module-shims": "1.4.3", - "fast-glob": "^3.2.12", - "jsdom": "^20.0.0", - "lodash": "^4.17.21", - "mobx": "^6.2.0", - "mocha": "^9.2.1", - "playwright-test": "^8.1.1", - "react": "^18.2.0", - "rimraf": "^3.0.2", - "typescript": "4.5.5", - "vitest": "^0.24.4", - "vscode-lib": "^0.1.2" - }, - "dependencies": { - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true - } - } - }, - "@typecell-org/parsers": { - "version": "file:packages/parsers", - "requires": { - "@playwright/test": "^1.18.1", - "@typecell-org/common": "*", - "@typecell-org/engine": "*", - "@types/fs-extra": "9.0.13", - "@types/react": "^18.0.25", - "@vitest/coverage-c8": "^0.24.4", - "fast-glob": "^3.2.12", - "fs-extra": "^10.1.0", - "jsdom": "^20.0.0", - "playwright-test": "^8.1.1", - "remark-parse": "^10.0.1", - "remark-stringify": "^10.0.2", - "rimraf": "^3.0.2", - "typescript": "4.5.5", - "unified": "^10.0.1", - "vitest": "^0.24.4", - "vscode-lib": "^0.1.2" - }, - "dependencies": { - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true - } + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" } }, - "@types/chai": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", - "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", + "node_modules/minizlib/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 }, - "@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", - "dev": true, - "requires": { - "@types/chai": "*" + "node_modules/mjolnir.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-2.7.1.tgz", + "integrity": "sha512-72BeUWgTv2cj5aZQKpwL8caNUFhXZ9bDm1hxpNj70XJQ62IBnTZmtv/WPxJvtaVNhzNo+D2U8O6ryNI0zImYcw==", + "dependencies": { + "@types/hammerjs": "^2.0.41", + "hammerjs": "^2.0.8" + }, + "engines": { + "node": ">= 4", + "npm": ">= 3" } }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "requires": { - "@types/ms": "*" + "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" } }, - "@types/eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-hqzmggoxkOubpgTdcOltkfc5N8IftRJqU70d1jbOISjjZVPvjcr+CLi2CI70hx1SUIRkLgpglTy9w28nGe2Hsw==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" } }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, - "@types/flatbuffers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@types/flatbuffers/-/flatbuffers-1.10.0.tgz", - "integrity": "sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA==" - }, - "@types/fs-extra": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "node_modules/mlly": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.0.tgz", + "integrity": "sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "acorn": "^8.9.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.1.2" } }, - "@types/geojson": { - "version": "7946.0.10", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", - "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" - }, - "@types/hammerjs": { - "version": "2.0.41", - "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", - "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==" - }, - "@types/highlight.js": { - "version": "9.12.4", - "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz", - "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==", - "dev": true - }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" + "node_modules/mobx": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.9.0.tgz", + "integrity": "sha512-HdKewQEREEJgsWnErClfbFoVebze6rGazxFLU/XUyrII8dORfVszN1V0BMRnQSzcgsNNtkX8DHj3nC6cdWE9YQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" } }, - "@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/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==" - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.184", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.184.tgz", - "integrity": "sha512-RoZphVtHbxPZizt4IcILciSWiC6dcn+eZ8oX9IWEYfDMcocdd42f7NPI6fQj+6zI8y4E0L7gu2pcZKLGTRaV9Q==", - "dev": true - }, - "@types/lowlight": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@types/lowlight/-/lowlight-0.0.2.tgz", - "integrity": "sha512-37DldsUs2l4rXI2YQgVn+NKVEaaUbBIzJg3eYzAXimGrtre8vxqE65wAGqYs9W6IsoOfgj74se/rBc9yoRXOHQ==", - "dev": true + "node_modules/mobx-react-lite": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.4.3.tgz", + "integrity": "sha512-NkJREyFTSUXR772Qaai51BnE1voWx56LOL80xG7qkZr6vo8vEaLF3sz1JNUVh+rxmUzxYaqOhfuxTfqUh0FXUg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + }, + "peerDependencies": { + "mobx": "^6.1.0", + "react": "^16.8.0 || ^17 || ^18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } }, - "@types/markdown-it": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-10.0.3.tgz", - "integrity": "sha512-daHJk22isOUvNssVGF2zDnnSyxHhFYhtjeX4oQaKD6QzL3ZR1QSgiD1g+Q6/WSWYVogNXYDXODtbgW/WiFCtyw==", + "node_modules/mocha": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, - "requires": { - "@types/highlight.js": "^9.7.0", - "@types/linkify-it": "*", - "@types/mdurl": "*", - "highlight.js": "^9.7.0" + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.3", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "4.2.1", + "ms": "2.1.3", + "nanoid": "3.3.1", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "workerpool": "6.2.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "requires": { - "@types/unist": "*" + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" } }, - "@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true + "node_modules/mocha/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": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } }, - "@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "@types/node": { - "version": "16.18.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.3.tgz", - "integrity": "sha512-jh6m0QUhIRcZpNv7Z/rpN+ZWXOicUUQbSoWks7Htkbb9IjFQj4kzcX/xFCkjstCj5flMsN8FiSvt+q+Tcs4Llg==", - "devOptional": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "@types/offscreencanvas": { - "version": "2019.7.0", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", - "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==" + "node_modules/mocha/node_modules/glob/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "@types/parse-json": { + "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/prettier": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.0.tgz", - "integrity": "sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true + "node_modules/mocha/node_modules/minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } }, - "@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==", + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "node_modules/mocha/node_modules/nanoid": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { - "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "@types/react-dom": { - "version": "18.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", - "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", - "requires": { - "@types/react": "^18.0.25" + "node_modules/mocha/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" } }, - "@types/react-redux": { - "version": "7.1.24", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.24.tgz", - "integrity": "sha512-7FkurKcS1k0FHZEtdbbgN8Oc6b+stGSfZYjQGicofJ0j4U0qIn/jaSvnP2pLwZKiai3/17xqqxkkrxTgN8UNbQ==", - "requires": { - "@types/hoist-non-react-statics": "^3.3.0", - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0", - "redux": "^4.0.0" + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "@types/react-select": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@types/react-select/-/react-select-4.0.18.tgz", - "integrity": "sha512-uCPRMPshd96BwHuT7oCrFduiv5d6km3VwmtW7rVl9g4XetS3VoJ9nZo540LiwtQgaFcW96POwaxQDZDAyYaepg==", - "requires": { - "@emotion/serialize": "^1.0.0", - "@types/react": "*", - "@types/react-dom": "*", - "@types/react-transition-group": "*" - }, + "node_modules/monaco-editor": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.35.0.tgz", + "integrity": "sha512-BJfkAZ0EJ7JgrgWzqjfBNP9hPSS8NlfECEDMEIIiozV2UaPq22yeuOjgbd3TwMh3anH0krWZirXZfn8KUSxiOA==" + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, "dependencies": { - "@emotion/serialize": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz", - "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==", - "requires": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" - } - }, - "@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" - }, - "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - } + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@types/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", - "requires": { - "@types/react": "*" + "node_modules/multimatch/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" } }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + "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 }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + "node_modules/nanoid": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-4.0.2.tgz", + "integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^14 || ^16 || >=18" + } }, - "@types/semver": { - "version": "7.3.12", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.12.tgz", - "integrity": "sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "@types/speakingurl": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@types/speakingurl/-/speakingurl-13.0.3.tgz", - "integrity": "sha512-nBHZAaNTEw1YG3ROL7HtTp7HjW8HD7DuFYbWoonUKTZHj7eyOt4vPzyMcc3+xgWNv7xi2rziaiBXHIq6wBeyrw==", + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, - "@types/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-AQ6zewa0ucLJvtUi5HsErbOFKAcQfRLt9zFLlUOvcXBy2G36a+ZDpCHSGdzJVUD8aNURtIjh9aSjCStNMRCcRQ==" + "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, + "engines": { + "node": ">= 0.6" + } }, - "@types/ua-parser-js": { - "version": "0.7.36", - "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.36.tgz", - "integrity": "sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "node_modules/nested-error-stacks": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", + "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", "dev": true }, - "@types/zxcvbn": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@types/zxcvbn/-/zxcvbn-4.4.1.tgz", - "integrity": "sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w==", + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, - "@typescript-eslint/eslint-plugin": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.1.tgz", - "integrity": "sha512-iC40UK8q1tMepSDwiLbTbMXKDxzNy+4TfPWgIL661Ym0sD42vRcQU93IsZIrmi+x292DBr60UI/gSwfdVYexCA==", + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.36.1", - "@typescript-eslint/type-utils": "5.36.1", - "@typescript-eslint/utils": "5.36.1", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" } }, - "@typescript-eslint/experimental-utils": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.36.1.tgz", - "integrity": "sha512-zLbD16KK1P0tjYXHRKWUcEjJIGDMhbrvjTJyWTfKRLB9NXW45S1zWw4+GZfxEdGzIPyaw22DUgUtyGgr3d7jAg==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.36.1" + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "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": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "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": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "@typescript-eslint/parser": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.1.tgz", - "integrity": "sha512-/IsgNGOkBi7CuDfUbwt1eOqUXF9WGVBW9dwEe1pi+L32XrTsZIgmDFIi2RxjzsvB/8i+MIf5JIoTEH8LOZ368A==", + "node_modules/node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.36.1", - "@typescript-eslint/types": "5.36.1", - "@typescript-eslint/typescript-estree": "5.36.1", - "debug": "^4.3.4" + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" } }, - "@typescript-eslint/scope-manager": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.1.tgz", - "integrity": "sha512-pGC2SH3/tXdu9IH3ItoqciD3f3RRGCh7hb9zPdN2Drsr341zgd6VbhP5OHQO/reUqihNltfPpMpTNihFMarP2w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.36.1", - "@typescript-eslint/visitor-keys": "5.36.1" + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, - "@typescript-eslint/type-utils": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.36.1.tgz", - "integrity": "sha512-xfZhfmoQT6m3lmlqDvDzv9TiCYdw22cdj06xY0obSznBsT///GK5IEZQdGliXpAOaRL34o8phEvXzEo/VJx13Q==", + "node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "5.36.1", - "@typescript-eslint/utils": "5.36.1", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "@typescript-eslint/types": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.1.tgz", - "integrity": "sha512-jd93ShpsIk1KgBTx9E+hCSEuLCUFwi9V/urhjOWnOaksGZFbTOxAT47OH2d4NLJnLhkVD+wDbB48BuaycZPLBg==", - "dev": true + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" }, - "@typescript-eslint/typescript-estree": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.1.tgz", - "integrity": "sha512-ih7V52zvHdiX6WcPjsOdmADhYMDN15SylWRZrT2OMy80wzKbc79n8wFW0xpWpU0x3VpBz/oDgTm2xwDAnFTl+g==", + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, - "requires": { - "@typescript-eslint/types": "5.36.1", - "@typescript-eslint/visitor-keys": "5.36.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" } }, - "@typescript-eslint/utils": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.36.1.tgz", - "integrity": "sha512-lNj4FtTiXm5c+u0pUehozaUWhh7UYKnwryku0nxJlYUEWetyG92uw2pr+2Iy4M/u0ONMKzfrx7AsGBTCzORmIg==", + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.36.1", - "@typescript-eslint/types": "5.36.1", - "@typescript-eslint/typescript-estree": "5.36.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "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": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" } }, - "@typescript-eslint/visitor-keys": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.1.tgz", - "integrity": "sha512-ojB9aRyRFzVMN3b5joSYni6FAS10BBSCAfKJhjJAV08t/a95aM6tAhz+O1jF+EtgxktuSO3wJysp2R+Def/IWQ==", + "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, - "requires": { - "@typescript-eslint/types": "5.36.1", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@typescript/vfs": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.3.5.tgz", - "integrity": "sha512-pI8Saqjupf9MfLw7w2+og+fmb0fZS0J6vsKXXrp4/PDXEFvntgzXmChCXC/KefZZS0YGS6AT8e0hGAJcTsdJlg==", - "requires": { - "debug": "^4.1.1" + "engines": { + "node": ">=0.10.0" } }, - "@ungap/promise-all-settled": { + "node_modules/npm-bundled": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, - "@vitejs/plugin-react": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.0.1.tgz", - "integrity": "sha512-uINzNHmjrbunlFtyVkST6lY1ewSfz/XwLufG0PIqvLGnpk2nOIOa/1CACTDNcKi1/RwaCzJLmsXwm1NsUVV/NA==", - "dev": true, - "requires": { - "@babel/core": "^7.18.10", - "@babel/plugin-transform-react-jsx": "^7.18.10", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-jsx-self": "^7.18.6", - "@babel/plugin-transform-react-jsx-source": "^7.18.6", - "magic-string": "^0.26.2", - "react-refresh": "^0.14.0" + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" } }, - "@vitest/coverage-c8": { - "version": "0.24.4", - "resolved": "https://registry.npmjs.org/@vitest/coverage-c8/-/coverage-c8-0.24.4.tgz", - "integrity": "sha512-1mhYQip6IJw1p9hzM+sH8O/RbILMe7FwScWI7COoMGAThdDRytDjmOal38F/EVrIPZY3nZ5hf7S7JFGjbb4bTg==", + "node_modules/npm-install-checks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", + "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", "dev": true, - "requires": { - "c8": "^7.12.0", - "vitest": "0.24.4" + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true + "node_modules/npm-package-arg": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", + "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } }, - "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/npm-package-arg/node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", "dev": true }, - "acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", - "dev": true + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } }, - "acorn-globals": { + "node_modules/npm-package-arg/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true + "dependencies": { + "builtins": "^1.0.3" + } }, - "add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "node_modules/npm-package-arg/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 }, - "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/npm-packlist": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", + "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", "dev": true, - "requires": { - "debug": "4" + "dependencies": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "node_modules/npm-packlist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/npm-packlist/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "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" + "node_modules/npm-packlist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, - "another-json": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/another-json/-/another-json-0.2.0.tgz", - "integrity": "sha512-/Ndrl68UQLhnCdsAzEXLMFuOR546o2qbYRqCglaNHbjXrwG1ayTcdwr3zkSGOGtGXDyR5X9nCFfnyG2AFJIsqg==" + "node_modules/npm-packlist/node_modules/npm-bundled": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", + "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true + "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "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==", + "node_modules/npm-pick-manifest": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", + "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", "dev": true, - "requires": { - "type-fest": "^0.21.3" + "dependencies": { + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^2.0.0", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "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 + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/npm-pick-manifest/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "requires": { - "color-convert": "^2.0.1" + "engines": { + "node": ">=12" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "apache-arrow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-4.0.1.tgz", - "integrity": "sha512-DyF7GXCbSjsw4P5C8b+qW7OnJKa6w9mJI0mhV0+EfZbVZCmhfiF6ffqcnrI/kzBrRqn9hH/Ft9n5+m4DTbBJpg==", - "requires": { - "@types/flatbuffers": "^1.10.0", - "@types/node": "^14.14.37", - "@types/text-encoding-utf-8": "^1.0.1", - "command-line-args": "5.1.1", - "command-line-usage": "6.1.1", - "flatbuffers": "1.12.0", - "json-bignum": "^0.0.3", - "pad-left": "^2.1.0", - "text-encoding-utf-8": "^1.0.2", - "tslib": "^2.2.0" - }, + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, "dependencies": { - "@types/node": { - "version": "14.18.26", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.26.tgz", - "integrity": "sha512-0b+utRBSYj8L7XAp0d+DX7lI4cSmowNaaTkk6/1SKzbKkG+doLuPusB9EOvzLJ8ahJSk03bTLIL6cWaEd4dBKA==" - } + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "node_modules/npm-registry-fetch": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", + "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "dependencies": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "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==", + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" + "engines": { + "node": ">=12" } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array.prototype.every": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.every/-/array.prototype.every-1.1.3.tgz", - "integrity": "sha512-vWnriJI//SOMOWtXbU/VXhJ/InfnNHPF6BLKn5WfY8xXy+NWql0fUy20GO3sdqBhCAO+qw8S/E5nJiZX+QFdCA==", + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "is-string": "^1.0.7" + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "array.prototype.flatmap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", - "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "requires": { - "safer-buffer": "~2.1.0" + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0" + } }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/nwsapi": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.5.tgz", + "integrity": "sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==", "dev": true }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true + "node_modules/nx": { + "version": "15.9.4", + "resolved": "https://registry.npmjs.org/nx/-/nx-15.9.4.tgz", + "integrity": "sha512-P1G4t59UvE/lkHyruLeSOB5ZuNyh01IwU0tTUOi8f9s/NbP7+OQ8MYVwDV74JHTr6mQgjlS+n+4Eox8tVm9itA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@nrwl/cli": "15.9.4", + "@nrwl/tao": "15.9.4", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "^3.0.0-rc.18", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.3.4", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js" + }, + "optionalDependencies": { + "@nrwl/nx-darwin-arm64": "15.9.4", + "@nrwl/nx-darwin-x64": "15.9.4", + "@nrwl/nx-linux-arm-gnueabihf": "15.9.4", + "@nrwl/nx-linux-arm64-gnu": "15.9.4", + "@nrwl/nx-linux-arm64-musl": "15.9.4", + "@nrwl/nx-linux-x64-gnu": "15.9.4", + "@nrwl/nx-linux-x64-musl": "15.9.4", + "@nrwl/nx-win32-arm64-msvc": "15.9.4", + "@nrwl/nx-win32-x64-msvc": "15.9.4" + }, + "peerDependencies": { + "@swc-node/register": "^1.4.2", + "@swc/core": "^1.2.173" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" + "node_modules/nx/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + "node_modules/nx/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "axe-core": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz", - "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==", - "dev": true + "node_modules/nx/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "node_modules/nx/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 }, - "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/nx/node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, - "requires": { - "object.assign": "^4.1.0" + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" } }, - "babel-plugin-emotion": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz", - "integrity": "sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/serialize": "^0.11.16", - "babel-plugin-macros": "^2.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^1.0.5", - "find-root": "^1.1.0", - "source-map": "^0.5.7" - }, + "node_modules/nx/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, "dependencies": { - "@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" - }, - "@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - }, - "babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "requires": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "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": "*" } }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", - "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", + "node_modules/nx/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, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.2", - "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 - } + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "node_modules/nx/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, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" + "engines": { + "node": ">=8" } }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", - "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", + "node_modules/nx/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, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.2" + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "babel-plugin-styled-components": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", - "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", - "picomatch": "^2.3.0" + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", - "dev": true - }, - "babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "node_modules/nx/node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, - "requires": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "babylon": { - "version": "7.0.0-beta.47", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.47.tgz", - "integrity": "sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ==" - }, - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" - }, - "base64-arraybuffer-es6": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/base64-arraybuffer-es6/-/base64-arraybuffer-es6-0.7.0.tgz", - "integrity": "sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw==", - "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==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "requires": { - "tweetnacl": "^0.14.3" + "node_modules/nx/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" } }, - "before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + "node_modules/nx/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" + } }, - "bin-links": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.1.tgz", - "integrity": "sha512-9vx+ypzVhASvHTS6K+YSGf7nwQdANoz7v6MTC0aCtYnOEZ87YvMf81aY737EZnGZdpbRM3sfWjO9oWkKmuIvyQ==", + "node_modules/nx/node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, - "requires": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "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/nx/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 }, - "bind-event-listener": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bind-event-listener/-/bind-event-listener-2.1.1.tgz", - "integrity": "sha512-O+a5c0D2se/u2VlBJmPRn45IB6R4mYMh1ok3dWxrIZ2pmLqzggBhb875mbq73508ylzofc0+hT9W41x4Y2s8lg==" - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/nx/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/nx/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=12" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" + "node_modules/nx/node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true + "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==", + "engines": { + "node": "*" + } }, - "browser-request": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", - "integrity": "sha512-YyNI4qJJ+piQG6MMEuo7J3Bzaqssufx04zpEKYfSrl/1Op59HWali9zMtBpXnkmqMcOuWJPZvudrm9wISmnCbg==" + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } }, - "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/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "requires": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "requires": { - "base-x": "^4.0.0" + "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==", + "engines": { + "node": ">= 0.4" } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, - "requires": { - "semver": "^7.0.0" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "byte-size": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", - "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", - "dev": true + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz", + "integrity": "sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ==", + "dev": true, + "dependencies": { + "array.prototype.reduce": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.2", + "safe-array-concat": "^1.0.0" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "c8": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", - "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.1.4", - "rimraf": "^3.0.2", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9" + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.omit": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", + "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", "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" - } - }, - "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 - } + "is-extendable": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "cacache": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", - "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "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" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "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": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==" - }, - "caniuse-lite": { - "version": "1.0.30001388", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001388.tgz", - "integrity": "sha512-znVbq4OUjqgLxMxoNX2ZeeLR0d7lcDiE5uJ4eUiWdml1J1EkxbnQq6opT9jb9SMfJxB0XA16/ziHwni4u1I3GQ==" + "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": { + "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": ">= 0.8.0" + } }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "node_modules/ora/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, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "chalk": { + "node_modules/ora/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, - "requires": { + "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/ora/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, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/ora/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 }, - "chromatism": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/chromatism/-/chromatism-2.6.0.tgz", - "integrity": "sha512-ZgkGBXc0b0X7KW26aHIuwQvg6MFt47ehRg+YqcmLtGtHPmn6+5sx9uAFTLHcmsg9kYjOcFJYc/U2n06wrZ7KTA==" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "classnames": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", - "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + "node_modules/ora/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" + } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true + "node_modules/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==" }, - "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/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "requires": { - "restore-cursor": "^3.1.0" + "engines": { + "node": ">=0.10.0" } }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true + "node_modules/p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "dependencies": { + "p-timeout": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "cli-width": { + "node_modules/p-filter": { "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 + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", + "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", + "dev": true, + "dependencies": { + "p-map": "^5.1.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/p-filter/node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true + "node_modules/p-filter/node_modules/clean-stack": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", + "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/p-filter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "engines": { + "node": ">=12" }, - "dependencies": { - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "cmd-shim": { + "node_modules/p-filter/node_modules/indent-string": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", - "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "node_modules/p-filter/node_modules/p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "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" - } - } + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, - "requires": { - "color-name": "~1.1.4" + "engines": { + "node": ">=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 - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "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, - "requires": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" + "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" } }, - "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==", - "requires": { - "array-back": "^3.0.1", - "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==", - "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==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "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==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "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==", - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" - } + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true + "node_modules/p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" + "engines": { + "node": ">=8" }, - "dependencies": { - "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": { - "is-obj": "^2.0.0" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "node_modules/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "engines": { + "node": ">=8" } }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", - "dev": true - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "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/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } }, - "conventional-changelog-angular": { - "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "conventional-changelog-core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", - "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "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, - "requires": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" + "engines": { + "node": ">=6" } }, - "conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true + "node_modules/p-wait-for": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-5.0.2.tgz", + "integrity": "sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==", + "dev": true, + "dependencies": { + "p-timeout": "^6.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "conventional-changelog-writer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "node_modules/p-wait-for/node_modules/p-timeout": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", + "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==", "dev": true, - "requires": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" + "engines": { + "node": ">=14.16" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "dev": true, "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 - } + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "node_modules/pacote": { + "version": "13.6.2", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", + "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" + "dependencies": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "conventional-commits-parser": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "node_modules/pacote/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "node_modules/pacote/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "requires": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" + "engines": { + "node": ">=12" } }, - "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==", - "requires": { - "safe-buffer": "~5.1.1" - }, + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", + "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "core-js": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.0.tgz", - "integrity": "sha512-CVU1xvJEfJGhyCpBrzzzU1kjCfgsGUxhEvwUV2e/cOedYWHdmluamx+knDnmhqALddMG16fZvIqvs9aijsHHaA==" + "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==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "core-js-compat": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.0.tgz", - "integrity": "sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow==", + "node_modules/parse-conflict-json": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", + "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", "dev": true, - "requires": { - "browserslist": "^4.21.3", - "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 - } + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "core-js-pure": { - "version": "3.25.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.25.0.tgz", - "integrity": "sha512-IeHpLwk3uoci37yoI2Laty59+YqH9x5uR65/yiA0ARAJrTrN4YU0rmauLWfvqOuk77SlNJXj2rM6oT/dBD87+A==", - "dev": true + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "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" + } }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "node_modules/parse-json/node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "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" + "node_modules/parse-path": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", + "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", + "dev": true, + "dependencies": { + "protocols": "^2.0.0" } }, - "cp-file": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-9.1.0.tgz", - "integrity": "sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==", + "node_modules/parse-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", + "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" + "dependencies": { + "parse-path": "^7.0.0" } }, - "cpy": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-9.0.1.tgz", - "integrity": "sha512-D9U0DR5FjTCN3oMTcFGktanHnAG5l020yvOCR1zKILmAyPP7I/9pl6NFgRbDcmSENtbK1sQLBz1p9HIOlroiNg==", + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, - "requires": { - "arrify": "^3.0.0", - "cp-file": "^9.1.0", - "globby": "^13.1.1", - "junk": "^4.0.0", - "micromatch": "^4.0.4", - "nested-error-stacks": "^2.1.0", - "p-filter": "^3.0.0", - "p-map": "^5.3.0" - }, "dependencies": { - "aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "requires": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - } - }, - "arrify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", - "dev": true - }, - "clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "requires": { - "escape-string-regexp": "5.0.0" - } - }, - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true - }, - "globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true - }, - "p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, - "requires": { - "aggregate-error": "^4.0.0" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - } + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "node_modules/parse5/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "requires": { - "cross-spawn": "^7.0.1" + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" + "node_modules/patch-package": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-7.0.0.tgz", + "integrity": "sha512-eYunHbnnB2ghjTNc5iL1Uo7TsGMuXk0vibX3RFcE/CdVdXzmdbMsG/4K4IgoSuIkLTI5oHrMQk4+NkFqSed0BQ==", + "dev": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=14", + "npm": ">5" } }, - "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/patch-package/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, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" - }, - "crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + }, + "node_modules/patch-package/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, - "requires": { - "type-fest": "^1.0.1" - }, "dependencies": { - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "css-box-model": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", - "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", - "requires": { - "tiny-invariant": "^1.0.6" + "node_modules/patch-package/node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" } }, - "css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==" - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "node_modules/patch-package/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, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "node_modules/patch-package/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 }, - "css-to-react-native": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.2.tgz", - "integrity": "sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw==", - "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^3.3.0" - } - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "node_modules/patch-package/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, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" + "engines": { + "node": ">=8" } }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/patch-package/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, - "requires": { - "css-tree": "^1.1.2" - }, "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - } + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/patch-package/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, - "requires": { - "cssom": "~0.3.6" - }, "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" - }, - "d3-hexbin": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/d3-hexbin/-/d3-hexbin-0.2.2.tgz", - "integrity": "sha512-KS3fUT2ReD4RlGCjvCEm1RgMtp2NFZumdMu4DBzQK8AZv3fXRM6Xm8I4fSU07UXvH4xxg03NwWKWdvxfS/yc4w==" - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true + "node_modules/patch-package/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" + } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "requires": { - "assert-plus": "^1.0.0" + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" } }, - "data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "node_modules/patch-package/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, - "requires": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, "dependencies": { - "tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "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 - }, - "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, - "requires": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true + "node_modules/patch-package/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" + } }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" + "node_modules/patch-package/node_modules/yaml": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", + "dev": true, + "engines": { + "node": ">= 14" } }, - "debuglog": { + "node_modules/path-browserify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "dev": true }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true + "node_modules/path-equal": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz", + "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==" }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "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, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "decimal.js": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", - "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==", - "dev": true - }, - "decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "requires": { - "character-entities": "^2.0.0" + "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" } }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "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, - "requires": { - "type-detect": "^4.0.0" + "engines": { + "node": ">=8" } }, - "deep-equal": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.0.5.tgz", - "integrity": "sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", + "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "es-get-iterator": "^1.1.1", - "get-intrinsic": "^1.0.1", - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.2", - "is-regex": "^1.1.1", - "isarray": "^2.0.5", - "object-is": "^1.1.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.3", - "which-boxed-primitive": "^1.0.1", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.2" - }, "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, - "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==" - }, - "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 + "lru-cache": "^9.1.1", + "minipass": "^5.0.0 || ^6.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "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 + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "node_modules/path-scurry/node_modules/minipass": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", + "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", "dev": true, - "requires": { - "clone": "^1.0.2" + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "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==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", "dev": true }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", - "dev": true + "node_modules/penpal": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/penpal/-/penpal-6.2.2.tgz", + "integrity": "sha512-RQD7hTx14/LY7QoS3tQYO3/fzVtwvZI+JeS5udgsu7FPaEDjlvfK9HBcme9/ipzSPKnrxSgacI9PI7154W62YQ==" }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, - "delegates": { + "node_modules/picocolors": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, - "deprecation": { + "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" - }, - "dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "diff": { + "node_modules/pify": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dnd-core": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-7.7.0.tgz", - "integrity": "sha512-+YqwflWEY1MEAEl2QiEiRaglYkCwIZryyQwximQGuTOm/ns7fS6Lg/i7OCkrtjM10D5FhArf/VUHIL4ZaRBK0g==", - "peer": true, - "requires": { - "asap": "^2.0.6", - "invariant": "^2.2.4", - "redux": "^4.0.1" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "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, - "requires": { - "esutils": "^2.0.2" + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { - "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - } + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - } + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "requires": { - "webidl-conversions": "^7.0.0" - }, "dependencies": { - "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 - } + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", "dev": true, - "requires": { - "is-obj": "^2.0.0" + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" } }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "dotignore": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", - "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", + "node_modules/playwright": { + "version": "1.35.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.35.1.tgz", + "integrity": "sha512-NbwBeGJLu5m7VGM0+xtlmLAH9VUfWwYOhUi/lSEDyGg46r1CA9RWlvoc5yywxR9AzQb0mOCm7bWtOXV7/w43ZA==", "dev": true, - "requires": { - "minimatch": "^3.0.4" + "hasInstallScript": true, + "dependencies": { + "playwright-core": "1.35.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" } }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "earcut": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "node_modules/playwright-core": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.33.0.tgz", + "integrity": "sha512-aizyPE1Cj62vAECdph1iaMILpT0WUDCq3E6rW6I+dleSbBoGbktvJtzS6VHkZ4DKNEOG9qJpiom/ZxO+S15LAw==", + "dev": true, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" } }, - "electron-to-chromium": { - "version": "1.4.240", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.240.tgz", - "integrity": "sha512-r20dUOtZ4vUPTqAajDGonIM1uas5tf85Up+wPdtNBNvBSqGCfkpvMVvQ1T8YJzPV9/Y9g3FbUDcXb94Rafycow==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "requires": { - "iconv-lite": "^0.6.2" + "node_modules/playwright-test": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/playwright-test/-/playwright-test-9.2.0.tgz", + "integrity": "sha512-g0uvxXxbr1yB1ytan69TuI1nbMZ48jx06d/+qT1CL0Gje2cpBYP2aqTjCYou9ShUN3d1GpIGqqMBikhYR1WwMg==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "camelcase": "^7.0.1", + "chokidar": "^3.5.3", + "cpy": "^9.0.1", + "esbuild": "0.17.18", + "events": "^3.3.0", + "globby": "^13.1.4", + "kleur": "^4.1.5", + "lilconfig": "^2.1.0", + "lodash": "^4.17.21", + "merge-options": "^3.0.4", + "nanoid": "^4.0.2", + "ora": "^6.3.0", + "p-wait-for": "5.0.2", + "path-browserify": "^1.0.1", + "playwright-core": "1.35.0", + "polka": "^0.5.2", + "premove": "^4.0.0", + "process": "^0.11.10", + "sade": "^1.8.1", + "sirv": "^2.0.3", + "source-map": "0.6.1", + "stream-browserify": "^3.0.0", + "strip-ansi": "^7.0.1", + "tape": "^5.6.3", + "tempy": "^3.0.0", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.1.0" }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } + "bin": { + "playwright-test": "cli.js", + "pw-test": "cli.js" + }, + "engines": { + "node": ">=16.0.0" } }, - "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/playwright-test/node_modules/@esbuild/android-arm": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.18.tgz", + "integrity": "sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==", + "cpu": [ + "arm" + ], "dev": true, - "requires": { - "once": "^1.4.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/playwright-test/node_modules/@esbuild/android-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz", + "integrity": "sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "ansi-colors": "^4.1.1" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" + "node_modules/playwright-test/node_modules/@esbuild/android-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.18.tgz", + "integrity": "sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "es-abstract": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz", - "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.2", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "node_modules/playwright-test/node_modules/@esbuild/darwin-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz", + "integrity": "sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "node_modules/playwright-test/node_modules/@esbuild/darwin-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz", + "integrity": "sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==", + "cpu": [ + "x64" + ], "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "es-module-shims": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/es-module-shims/-/es-module-shims-1.4.3.tgz", - "integrity": "sha512-qMUb+8lrpqZ6jW/kelQU7XD1hR71hmxKhIDmmVwsQNQaAYh0fzErnKSj9Xi80L0ubEjnzCDD5ha7oZehkwFApg==" - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "node_modules/playwright-test/node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz", + "integrity": "sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "has": "^1.0.3" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "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==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "node_modules/playwright-test/node_modules/@esbuild/freebsd-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz", + "integrity": "sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "esbuild": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.6.tgz", - "integrity": "sha512-sgLOv3l4xklvXzzczhRwKRotyrfyZ2i1fCS6PTOLPd9wevDPArGU8HFtHrHCOcsMwTjLjzGm15gvC8uxVzQf+w==", + "node_modules/playwright-test/node_modules/@esbuild/linux-arm": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz", + "integrity": "sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==", + "cpu": [ + "arm" + ], "dev": true, - "peer": true, - "requires": { - "@esbuild/linux-loong64": "0.15.6", - "esbuild-android-64": "0.15.6", - "esbuild-android-arm64": "0.15.6", - "esbuild-darwin-64": "0.15.6", - "esbuild-darwin-arm64": "0.15.6", - "esbuild-freebsd-64": "0.15.6", - "esbuild-freebsd-arm64": "0.15.6", - "esbuild-linux-32": "0.15.6", - "esbuild-linux-64": "0.15.6", - "esbuild-linux-arm": "0.15.6", - "esbuild-linux-arm64": "0.15.6", - "esbuild-linux-mips64le": "0.15.6", - "esbuild-linux-ppc64le": "0.15.6", - "esbuild-linux-riscv64": "0.15.6", - "esbuild-linux-s390x": "0.15.6", - "esbuild-netbsd-64": "0.15.6", - "esbuild-openbsd-64": "0.15.6", - "esbuild-sunos-64": "0.15.6", - "esbuild-windows-32": "0.15.6", - "esbuild-windows-64": "0.15.6", - "esbuild-windows-arm64": "0.15.6" - } - }, - "esbuild-android-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.6.tgz", - "integrity": "sha512-Z1CHSgB1crVQi2LKSBwSkpaGtaloVz0ZIYcRMsvHc3uSXcR/x5/bv9wcZspvH/25lIGTaViosciS/NS09ERmVA==", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/playwright-test/node_modules/@esbuild/linux-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz", + "integrity": "sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==", + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-android-arm64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.6.tgz", - "integrity": "sha512-mvM+gqNxqKm2pCa3dnjdRzl7gIowuc4ga7P7c3yHzs58Im8v/Lfk1ixSgQ2USgIywT48QWaACRa3F4MG7djpSw==", + "node_modules/playwright-test/node_modules/@esbuild/linux-ia32": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz", + "integrity": "sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==", + "cpu": [ + "ia32" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-darwin-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.6.tgz", - "integrity": "sha512-BsfVt3usScAfGlXJiGtGamwVEOTM8AiYiw1zqDWhGv6BncLXCnTg1As+90mxWewdTZKq3iIy8s9g8CKkrrAXVw==", + "node_modules/playwright-test/node_modules/@esbuild/linux-loong64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz", + "integrity": "sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==", + "cpu": [ + "loong64" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-darwin-arm64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.6.tgz", - "integrity": "sha512-CnrAeJaEpPakUobhqO4wVSA4Zm6TPaI5UY4EsI62j9mTrjIyQPXA1n4Ju6Iu5TVZRnEqV6q8blodgYJ6CJuwCA==", + "node_modules/playwright-test/node_modules/@esbuild/linux-mips64el": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz", + "integrity": "sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==", + "cpu": [ + "mips64el" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-freebsd-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.6.tgz", - "integrity": "sha512-+qFdmqi+jkAsxsNJkaWVrnxEUUI50nu6c3MBVarv3RCDCbz7ZS1a4ZrdkwEYFnKcVWu6UUE0Kkb1SQ1yGEG6sg==", + "node_modules/playwright-test/node_modules/@esbuild/linux-ppc64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz", + "integrity": "sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==", + "cpu": [ + "ppc64" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-freebsd-arm64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.6.tgz", - "integrity": "sha512-KtQkQOhnNciXm2yrTYZMD3MOm2zBiiwFSU+dkwNbcfDumzzUprr1x70ClTdGuZwieBS1BM/k0KajRQX7r504Xw==", + "node_modules/playwright-test/node_modules/@esbuild/linux-riscv64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz", + "integrity": "sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==", + "cpu": [ + "riscv64" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-linux-32": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.6.tgz", - "integrity": "sha512-IAkDNz3TpxwISTGVdQijwyHBZrbFgLlRi5YXcvaEHtgbmayLSDcJmH5nV1MFgo/x2QdKcHBkOYHdjhKxUAcPwg==", + "node_modules/playwright-test/node_modules/@esbuild/linux-s390x": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz", + "integrity": "sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==", + "cpu": [ + "s390x" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-linux-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.6.tgz", - "integrity": "sha512-gQPksyrEYfA4LJwyfTQWAZaVZCx4wpaLrSzo2+Xc9QLC+i/sMWmX31jBjrn4nLJCd79KvwCinto36QC7BEIU/A==", + "node_modules/playwright-test/node_modules/@esbuild/linux-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz", + "integrity": "sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==", + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-linux-arm": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.6.tgz", - "integrity": "sha512-xZ0Bq2aivsthDjA/ytQZzxrxIZbG0ATJYMJxNeOIBc1zUjpbVpzBKgllOZMsTSXMHFHGrow6TnCcgwqY0+oEoQ==", + "node_modules/playwright-test/node_modules/@esbuild/netbsd-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz", + "integrity": "sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==", + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-linux-arm64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.6.tgz", - "integrity": "sha512-aovDkclFa6C9EdZVBuOXxqZx83fuoq8097xZKhEPSygwuy4Lxs8J4anHG7kojAsR+31lfUuxzOo2tHxv7EiNHA==", + "node_modules/playwright-test/node_modules/@esbuild/openbsd-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz", + "integrity": "sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==", + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-linux-mips64le": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.6.tgz", - "integrity": "sha512-wVpW8wkWOGizsCqCwOR/G3SHwhaecpGy3fic9BF1r7vq4djLjUcA8KunDaBCjJ6TgLQFhJ98RjDuyEf8AGjAvw==", + "node_modules/playwright-test/node_modules/@esbuild/sunos-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz", + "integrity": "sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==", + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-linux-ppc64le": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.6.tgz", - "integrity": "sha512-z6w6gsPH/Y77uchocluDC8tkCg9rfkcPTePzZKNr879bF4tu7j9t255wuNOCE396IYEGxY7y8u2HJ9i7kjCLVw==", + "node_modules/playwright-test/node_modules/@esbuild/win32-arm64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz", + "integrity": "sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==", + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-linux-riscv64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.6.tgz", - "integrity": "sha512-pfK/3MJcmbfU399TnXW5RTPS1S+ID6ra+CVj9TFZ2s0q9Ja1F5A1VirUUvViPkjiw+Kq3zveyn6U09Wg1zJXrw==", + "node_modules/playwright-test/node_modules/@esbuild/win32-ia32": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz", + "integrity": "sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==", + "cpu": [ + "ia32" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-linux-s390x": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.6.tgz", - "integrity": "sha512-OZeeDu32liefcwAE63FhVqM4heWTC8E3MglOC7SK0KYocDdY/6jyApw0UDkDHlcEK9mW6alX/SH9r3PDjcCo/Q==", + "node_modules/playwright-test/node_modules/@esbuild/win32-x64": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz", + "integrity": "sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg==", + "cpu": [ + "x64" + ], "dev": true, "optional": true, - "peer": true + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } }, - "esbuild-netbsd-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.6.tgz", - "integrity": "sha512-kaxw61wcHMyiEsSsi5ut1YYs/hvTC2QkxJwyRvC2Cnsz3lfMLEu8zAjpBKWh9aU/N0O/gsRap4wTur5GRuSvBA==", + "node_modules/playwright-test/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "optional": true, - "peer": true + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "esbuild-openbsd-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.6.tgz", - "integrity": "sha512-CuoY60alzYfIZapUHqFXqXbj88bbRJu8Fp9okCSHRX2zWIcGz4BXAHXiG7dlCye5nFVrY72psesLuWdusyf2qw==", + "node_modules/playwright-test/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, - "optional": true, - "peer": 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.2.1" + } }, - "esbuild-sunos-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.6.tgz", - "integrity": "sha512-1ceefLdPWcd1nW/ZLruPEYxeUEAVX0YHbG7w+BB4aYgfknaLGotI/ZvPWUZpzhC8l1EybrVlz++lm3E6ODIJOg==", + "node_modules/playwright-test/node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", "dev": true, - "optional": true, - "peer": true + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "esbuild-windows-32": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.6.tgz", - "integrity": "sha512-pBqdOsKqCD5LRYiwF29PJRDJZi7/Wgkz46u3d17MRFmrLFcAZDke3nbdDa1c8YgY78RiemudfCeAemN8EBlIpA==", + "node_modules/playwright-test/node_modules/chalk": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz", + "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "dev": true, - "optional": true, - "peer": true + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "esbuild-windows-64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.6.tgz", - "integrity": "sha512-KpPOh4aTOo//g9Pk2oVAzXMpc9Sz9n5A9sZTmWqDSXCiiachfFhbuFlsKBGATYCVitXfmBIJ4nNYYWSOdz4hQg==", + "node_modules/playwright-test/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, - "optional": true, - "peer": true + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "esbuild-windows-arm64": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.6.tgz", - "integrity": "sha512-DB3G2x9OvFEa00jV+OkDBYpufq5x/K7a6VW6E2iM896DG4ZnAvJKQksOsCPiM1DUaa+DrijXAQ/ZOcKAqf/3Hg==", + "node_modules/playwright-test/node_modules/esbuild": { + "version": "0.17.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.18.tgz", + "integrity": "sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w==", "dev": true, - "optional": true, - "peer": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.18", + "@esbuild/android-arm64": "0.17.18", + "@esbuild/android-x64": "0.17.18", + "@esbuild/darwin-arm64": "0.17.18", + "@esbuild/darwin-x64": "0.17.18", + "@esbuild/freebsd-arm64": "0.17.18", + "@esbuild/freebsd-x64": "0.17.18", + "@esbuild/linux-arm": "0.17.18", + "@esbuild/linux-arm64": "0.17.18", + "@esbuild/linux-ia32": "0.17.18", + "@esbuild/linux-loong64": "0.17.18", + "@esbuild/linux-mips64el": "0.17.18", + "@esbuild/linux-ppc64": "0.17.18", + "@esbuild/linux-riscv64": "0.17.18", + "@esbuild/linux-s390x": "0.17.18", + "@esbuild/linux-x64": "0.17.18", + "@esbuild/netbsd-x64": "0.17.18", + "@esbuild/openbsd-x64": "0.17.18", + "@esbuild/sunos-x64": "0.17.18", + "@esbuild/win32-arm64": "0.17.18", + "@esbuild/win32-ia32": "0.17.18", + "@esbuild/win32-x64": "0.17.18" + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "node_modules/playwright-test/node_modules/globby": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.0.tgz", + "integrity": "sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "escodegen": { + "node_modules/playwright-test/node_modules/is-interactive": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "engines": { + "node": ">=12" }, - "dependencies": { - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint": { - "version": "8.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", - "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", + "node_modules/playwright-test/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.1", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "@humanwhocodes/module-importer": "^1.0.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "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.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/playwright-test/node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, "dependencies": { - "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 - }, - "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" - } - }, - "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": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "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" - } - }, - "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 - } + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "node_modules/playwright-test/node_modules/ora": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", + "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", "dev": true, - "requires": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" + "dependencies": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "node_modules/playwright-test/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.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" - } - } + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "node_modules/playwright-test/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, - "requires": { - "debug": "^3.2.7" + "engines": { + "node": ">=12" }, - "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" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "node_modules/playwright-test/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, - "requires": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" + "engines": { + "node": ">=0.10.0" } }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "node_modules/playwright-test/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "node_modules/polka": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/polka/-/polka-0.5.2.tgz", + "integrity": "sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==", "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "^5.0.0" + "dependencies": { + "@polka/url": "^0.5.0", + "trouter": "^2.0.1" } }, - "eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", "dev": true, - "requires": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "dependencies": { - "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 + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "eslint-plugin-react": { - "version": "7.31.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.1.tgz", - "integrity": "sha512-j4/2xWqt/R7AZzG8CakGHA6Xa/u7iR8Q3xCxY+AUghdT92bnIDOBEefV456OeH0QvBcroVc0eyvrrLSyQGYIfg==", + "node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "dev": true, - "requires": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "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, - "requires": {} + "engines": { + "node": ">= 0.8.0" + } }, - "eslint-plugin-testing-library": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.6.0.tgz", - "integrity": "sha512-y63TRzPhGCMNsnUwMGJU1MFWc/3GvYw+nzobp9QiyNTTKsgAt5RKAOT1I34+XqVBpX1lC8bScoOjCkP7iRv0Mw==", + "node_modules/premove": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/premove/-/premove-4.0.0.tgz", + "integrity": "sha512-zim/Hr4+FVdCIM7zL9b9Z0Wfd5Ya3mnKtiuDv7L5lzYzanSq6cOcVJ7EFcgK4I0pt28l8H0jX/x3nyog380XgQ==", "dev": true, - "requires": { - "@typescript-eslint/utils": "^5.13.0" + "bin": { + "premove": "bin.js" + }, + "engines": { + "node": ">=6" } }, - "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": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "node_modules/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "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 - } + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "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 - }, - "espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" + "node_modules/probe.gl": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.6.0.tgz", + "integrity": "sha512-19JydJWI7+DtR4feV+pu4Mn1I5TAc0xojuxVgZdXIyfmTLfUaFnk4OloWK1bKbPtkgGKLr2lnbnCXmpZEcEp9g==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.6.0", + "@probe.gl/log": "3.6.0", + "@probe.gl/stats": "3.6.0" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true, - "requires": { - "estraverse": "^5.2.0" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "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 + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "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 }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-call-limit": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz", + "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "exenv": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", - "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true }, - "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/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } }, - "fake-indexeddb": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/fake-indexeddb/-/fake-indexeddb-3.1.8.tgz", - "integrity": "sha512-7umIgcdnDfNcjw0ZaoD6yR2BflngKmPsyzZC+sV2fdttwz5bH6B6CCaNzzD+MURfRg8pvr/aL0trfNx65FLiDg==", + "node_modules/promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", "dev": true, - "requires": { - "realistic-structured-clone": "^2.0.1" + "dependencies": { + "read": "1" } }, - "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==" + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } }, - "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": { - "@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" + "node_modules/property-information": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.2.0.tgz", + "integrity": "sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "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==" + "node_modules/prosemirror-changeset": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz", + "integrity": "sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==", + "dependencies": { + "prosemirror-transform": "^1.0.0" + } }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "node_modules/prosemirror-collab": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", + "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", + "dependencies": { + "prosemirror-state": "^1.0.0" + } }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" + "node_modules/prosemirror-commands": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.5.2.tgz", + "integrity": "sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" } }, - "fault": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", - "requires": { - "format": "^0.2.0" + "node_modules/prosemirror-dropcursor": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.1.tgz", + "integrity": "sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" } }, - "fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "requires": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" + "node_modules/prosemirror-gapcursor": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz", + "integrity": "sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" } }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + "node_modules/prosemirror-history": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.3.2.tgz", + "integrity": "sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" + } }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" + "node_modules/prosemirror-inputrules": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.2.1.tgz", + "integrity": "sha512-3LrWJX1+ULRh5SZvbIQlwZafOXqp1XuV21MGBu/i5xsztd+9VD15x6OtN6mdqSFI7/8Y77gYUbQ6vwwJ4mr6QQ==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.0.0" } }, - "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": { - "flat-cache": "^3.0.4" + "node_modules/prosemirror-keymap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", + "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" } }, - "filebridge-client": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/filebridge-client/-/filebridge-client-0.1.5.tgz", - "integrity": "sha512-M+RUw+7mufI8IQ+cgiWAmXYmm4kGdABLKHdVgdv0gkNwCc3SNzqbY7d91NMemN9jeCZa0+xLzH/tEfuzEQo65A==", - "requires": { - "vscode-lib": "^0.1.2" + "node_modules/prosemirror-markdown": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.11.0.tgz", + "integrity": "sha512-yP9mZqPRstjZhhf3yykCQNE3AijxARrHe4e7esV9A+gp4cnGOH4QvrKYPpXLHspNWyvJJ+0URH+iIvV5qP1I2Q==", + "dependencies": { + "markdown-it": "^13.0.1", + "prosemirror-model": "^1.0.0" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" + "node_modules/prosemirror-markdown/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "final-form": { - "version": "4.20.7", - "resolved": "https://registry.npmjs.org/final-form/-/final-form-4.20.7.tgz", - "integrity": "sha512-ii3X9wNfyBYFnDPunYN5jh1/HAvtOZ9aJI/TVk0MB86hZuOeYkb+W5L3icgwW9WWNztZR6MDU3En6eoZTUoFPg==", - "requires": { - "@babel/runtime": "^7.10.0" + "node_modules/prosemirror-markdown/node_modules/linkify-it": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", + "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "dependencies": { + "uc.micro": "^1.0.1" } }, - "final-form-focus": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/final-form-focus/-/final-form-focus-1.1.2.tgz", - "integrity": "sha512-Gd+Bd2Ll7ijo3/sd6kJ/bwLkhc2bUJPxTON6fIqee/008EJpACWhT+zoWCm9q6NcfMcWRS+Sp5ikRX8iqdXeGQ==", - "requires": {} + "node_modules/prosemirror-markdown/node_modules/markdown-it": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", + "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "~3.0.1", + "linkify-it": "^4.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } }, - "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==", - "requires": { - "array-back": "^3.0.1" + "node_modules/prosemirror-menu": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.2.tgz", + "integrity": "sha512-437HIWTq4F9cTX+kPfqZWWm+luJm95Aut/mLUy+9OMrOml0bmWDS26ceC6SNfb2/S94et1sZ186vLO7pDHzxSw==", + "dependencies": { + "crelt": "^1.0.0", + "prosemirror-commands": "^1.0.0", + "prosemirror-history": "^1.0.0", + "prosemirror-state": "^1.0.0" } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + "node_modules/prosemirror-model": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.19.2.tgz", + "integrity": "sha512-RXl0Waiss4YtJAUY3NzKH0xkJmsZupCIccqcIFoLTIKFlKNbIvFDRl27/kQy1FP8iUAxrjRRfIVvOebnnXJgqQ==", + "dependencies": { + "orderedmap": "^2.0.0" + } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "node_modules/prosemirror-schema-basic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.2.tgz", + "integrity": "sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==", + "dependencies": { + "prosemirror-model": "^1.19.0" } }, - "find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "requires": { - "micromatch": "^4.0.2" + "node_modules/prosemirror-schema-list": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.3.0.tgz", + "integrity": "sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.7.3" } }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true + "node_modules/prosemirror-state": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", + "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } }, - "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": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "node_modules/prosemirror-tables": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.3.4.tgz", + "integrity": "sha512-z6uLSQ1BLC3rgbGwZmpfb+xkdvD7W/UOsURDfognZFYaTtc0gsk7u/t71Yijp2eLflVpffMk6X0u0+u+MMDvIw==", + "dependencies": { + "prosemirror-keymap": "^1.1.2", + "prosemirror-model": "^1.8.1", + "prosemirror-state": "^1.3.1", + "prosemirror-transform": "^1.2.1", + "prosemirror-view": "^1.13.3" } }, - "flatbuffers": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", - "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==" + "node_modules/prosemirror-trailing-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-2.0.4.tgz", + "integrity": "sha512-0Yl9w7IdHkaCdqR+NE3FOucePME4OmiGcybnF1iasarEILP5U8+4xTnl53yafULjmwcg1SrSG65Hg7Zk2H2v3g==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@remirror/core-constants": "^2.0.1", + "@remirror/core-helpers": "^2.0.2", + "escape-string-regexp": "^4.0.0" + }, + "peerDependencies": { + "prosemirror-model": "^1.19.0", + "prosemirror-state": "^1.4.2", + "prosemirror-view": "^1.30.2" + } }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "node_modules/prosemirror-transform": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.7.3.tgz", + "integrity": "sha512-qDapyx5lqYfxVeUWEw0xTGgeP2S8346QtE7DxkalsXlX89lpzkY6GZfulgfHyk1n4tf74sZ7CcXgcaCcGjsUtA==", + "dependencies": { + "prosemirror-model": "^1.0.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.31.5", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.31.5.tgz", + "integrity": "sha512-tobRCDeCp61elR1d97XE/JTL9FDIfswZpWeNs7GKJjAJvWyMGHWYFCq29850p6bbG2bckP+i9n1vT56RifosbA==", + "dependencies": { + "prosemirror-model": "^1.16.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/protocols": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", + "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", "dev": true }, - "focus-lock": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.11.2.tgz", - "integrity": "sha512-pZ2bO++NWLHhiKkgP1bEXHhR1/OjVcSvlCJ98aNJDFeb7H5OOQaO+SKOZle6041O9rv2tmbrO4JzClAvDUHf0g==", - "requires": { - "tslib": "^2.0.3" - } + "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 }, - "focus-trap": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-2.4.6.tgz", - "integrity": "sha512-vWZTPtBU6pBoyWZDRZJHkXsyP2ZCZBHE3DRVXnSVdQKH/mcDtu9S5Kz8CUDyIqpfZfLEyI9rjKJLnc4Y40BRBg==", - "requires": { - "tabbable": "^1.0.3" + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" } }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "dev": true, - "requires": { - "is-callable": "^1.1.3" + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" } }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "engines": { + "node": ">=8" } }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==" + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } }, - "fractional-indexing": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fractional-indexing/-/fractional-indexing-2.1.0.tgz", - "integrity": "sha512-4tIVui+5dxsXe/BG7D9EzgNIDK9fEoBzjvAf9gFfxFDPo2LsPSjfFKB2QmtcvmioD2IlshtcJFXGEcDPTG6R/A==" + "node_modules/raf-schd": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", + "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==" }, - "frontend-collective-react-dnd-scrollzone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/frontend-collective-react-dnd-scrollzone/-/frontend-collective-react-dnd-scrollzone-1.0.2.tgz", - "integrity": "sha512-me/D9PZJq9j/sjEjs/OPmm6V6nbaHbhgeQiwrWu0t35lhwAOKWc+QBzzKKcZQeboYTkgE8UvCD9el+5ANp+g5Q==", - "requires": { - "hoist-non-react-statics": "^3.1.0", - "lodash.throttle": "^4.0.1", - "prop-types": "^15.5.9", - "raf": "^3.2.0", - "react": "^16.3.0", - "react-display-name": "^0.2.0", - "react-dom": "^16.3.0" + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.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 + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "node_modules/react-avatar": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/react-avatar/-/react-avatar-3.10.0.tgz", + "integrity": "sha512-FB20OZIAJif0WNzGy4PwT5Nca4rekrYWiswBofuGAa5FKpRrFbJKY69267dRXbFqIYQrA/OxNB/TjhnmP2gsEQ==", + "dependencies": { + "core-js": "^3.6.1", + "is-retina": "^1.0.3", + "md5": "^2.0.0" + }, + "peerDependencies": { + "prop-types": "^15.0.0 || ^16.0.0", + "react": "^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" + "node_modules/react-clientside-effect": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz", + "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==", + "dependencies": { + "@babel/runtime": "^7.12.13" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "node_modules/react-display-name": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/react-display-name/-/react-display-name-0.2.5.tgz", + "integrity": "sha512-I+vcaK9t4+kypiSgaiVWAipqHRXYmZIuAiS8vzFvXHHXVigg/sMKwlRgLy6LH2i3rmP+0Vzfl5lFsFRwF1r3pg==" }, - "fsevents": { - "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 + "node_modules/react-dnd": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-7.7.0.tgz", + "integrity": "sha512-anpJDKMgdXE6kXvtBFmIAe1fuaexpVy7meUyNjiTfCnjQ1mRvnttGTVvcW9fMKijsUQYadiyvzd3BRxteFuVXg==", + "peer": true, + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.1", + "dnd-core": "^7.7.0", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.1.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": ">= 16.8", + "react-dom": ">= 16.8" + } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "node_modules/react-dnd-html5-backend": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-14.1.0.tgz", + "integrity": "sha512-6ONeqEC3XKVf4eVmMTe0oPds+c5B9Foyj8p/ZKLb7kL2qh9COYxiBHv3szd6gztqi/efkmriywLUVlPotqoJyw==", + "dependencies": { + "dnd-core": "14.0.1" + } }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "node_modules/react-dnd-html5-backend/node_modules/dnd-core": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-14.0.1.tgz", + "integrity": "sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A==", + "dependencies": { + "@react-dnd/asap": "^4.0.0", + "@react-dnd/invariant": "^2.0.0", + "redux": "^4.1.1" } }, - "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": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "node_modules/react-fast-compare": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + }, + "node_modules/react-focus-lock": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.9.4.tgz", + "integrity": "sha512-7pEdXyMseqm3kVjhdVH18sovparAzLg5h6WvIx7/Ck3ekjhrrDMEegHSa3swwC8wgfdd7DIdUVRGeiHT9/7Sgg==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "focus-lock": "^0.11.6", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.6", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "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==" - }, - "get-browser-rtc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz", - "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ==" + "node_modules/react-github-btn": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/react-github-btn/-/react-github-btn-1.4.0.tgz", + "integrity": "sha512-lV4FYClAfjWnBfv0iNlJUGhamDgIq6TayD0kPZED6VzHWdpcHmPfsYOZ/CFwLfPv4Zp+F4m8QKTj0oy2HjiGXg==", + "dependencies": { + "github-buttons": "^2.22.0" + }, + "peerDependencies": { + "react": ">=16.3.0" + } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "node_modules/react-icons": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz", + "integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==", + "peerDependencies": { + "react": "*" + } }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true + "node_modules/react-inspector": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz", + "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==", + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0 || ^18.0.0" + } }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "node_modules/react-intl-next": { + "name": "react-intl", + "version": "5.25.1", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.25.1.tgz", + "integrity": "sha512-pkjdQDvpJROoXLMltkP/5mZb0/XqrqLoPGKUCfbdkP8m6U9xbK40K51Wu+a4aQqTEvEK5lHBk0fWzUV72SJ3Hg==", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/icu-messageformat-parser": "2.1.0", + "@formatjs/intl": "2.2.1", + "@formatjs/intl-displaynames": "5.4.3", + "@formatjs/intl-listformat": "6.5.3", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/react": "16 || 17 || 18", + "hoist-non-react-statics": "^3.3.2", + "intl-messageformat": "9.13.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": "^16.3.0 || 17 || 18", + "typescript": "^4.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", - "dev": true, - "requires": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" + "node_modules/react-node-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-node-resolver/-/react-node-resolver-1.0.1.tgz", + "integrity": "sha512-IiSe0h2+IJo4enSlbdYjdwJnY86A7TwNxnfQVG2yApxVkHj9es1jum9Lb2aiBXKkLnwAj7ufBBlAa0ROU0o9nA==" + }, + "node_modules/react-popper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", + "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", + "dependencies": { + "react-fast-compare": "^3.0.1", + "warning": "^4.0.2" }, + "peerDependencies": { + "@popperjs/core": "^2.0.0", + "react": "^16.8.0 || ^17 || ^18", + "react-dom": "^16.8.0 || ^17 || ^18" + } + }, + "node_modules/react-redux": { + "version": "7.2.9", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz", + "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==", "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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 - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } + "@babel/runtime": "^7.15.4", + "@types/react-redux": "^7.1.20", + "hoist-non-react-statics": "^3.3.2", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^17.0.2" + }, + "peerDependencies": { + "react": "^16.8.3 || ^17 || ^18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } + "react-native": { + "optional": true } } }, - "get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true + "node_modules/react-redux/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, - "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 + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "node_modules/react-router": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.0.tgz", + "integrity": "sha512-OD+vkrcGbvlwkspUFDgMzsu1RXwdjNh83YgG/28lBnDzgslhCgxIqoExLlxsfTpIygp7fc+Hd3esloNwzkm2xA==", + "dependencies": { + "@remix-run/router": "1.7.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "requires": { - "assert-plus": "^1.0.0" + "node_modules/react-router-dom": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.0.tgz", + "integrity": "sha512-YEwlApKwzMMMbGbhh+Q7MsloTldcwMgHxUY/1g0uA62+B1hZo2jsybCWIDCL8zvIDB1FA0pBKY9chHbZHt+2dQ==", + "dependencies": { + "@remix-run/router": "1.7.0", + "react-router": "6.14.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "git-raw-commits": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", - "dev": true, - "requires": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" + "node_modules/react-select": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.7.3.tgz", + "integrity": "sha512-z8i3NCuFFWL3w27xq92rBkVI2onT0jzIIPe480HlBjXJ3b5o6Q+Clp4ydyeKrj9DZZ3lrjawwLC5NGl0FSvUDg==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@floating-ui/dom": "^1.0.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^6.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0", + "use-isomorphic-layout-effect": "^1.1.2" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", - "dev": true, - "requires": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" + "node_modules/react-textarea-autosize": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz", + "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==", + "dependencies": { + "@babel/runtime": "^7.10.2", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/react-uid": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/react-uid/-/react-uid-2.3.3.tgz", + "integrity": "sha512-iNpDovcb9qBpBTo8iUgqRSQOS8GV3bWoNaTaUptHkXtAooXSo0OWe7vN6TqqB8x3x0bNBbQx96kkmSltQ5h9kQ==", "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true } } }, - "git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, - "requires": { - "meow": "^8.0.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 - } + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" } }, - "git-up": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-6.0.0.tgz", - "integrity": "sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA==", + "node_modules/read-cmd-shim": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.1.tgz", + "integrity": "sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==", "dev": true, - "requires": { - "is-ssh": "^1.4.0", - "parse-url": "^7.0.2" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/read-package-json": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", + "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", + "dev": true, + "dependencies": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "git-url-parse": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-12.0.0.tgz", - "integrity": "sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q==", + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, - "requires": { - "git-up": "^6.0.0" + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" } }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "requires": { - "ini": "^1.3.2" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "github-buttons": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/github-buttons/-/github-buttons-2.22.0.tgz", - "integrity": "sha512-N5bk01s1WgK1FVtoeSUVkRkJpkaSu8yHMPcjye+PTa0jsRjMRNrYqVLgpUf2RA5Kvec05DfHYAT6/68fwkdqPw==" - }, - "gl-matrix": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "node_modules/read-package-json/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/read-package-json/node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, - "requires": { - "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" + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "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 - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "hammerjs": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", - "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==" - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "node_modules/read-package-json/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" + "engines": { + "node": ">=12" } }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-dynamic-import": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz", - "integrity": "sha512-X3fbtsZmwb6W7fJGR9o7x65fZoodygCrZ3TVycvghP62yYQfS0t4RS0Qcz+j5tQYUKeSWS09tHkWW6WhFV3XhQ==", + "node_modules/read-package-json/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "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-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "highlight.js": { - "version": "9.18.5", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", - "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==", - "dev": true - }, - "history": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", - "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", - "requires": { - "@babel/runtime": "^7.7.6" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - }, "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/read-package-json/node_modules/normalize-package-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", "dev": true, - "requires": { - "lru-cache": "^6.0.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" - } - } + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", "dev": true, - "requires": { - "whatwg-encoding": "^2.0.0" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "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 - }, - "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-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "human-signals": { + "node_modules/read-pkg-up/node_modules/find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, - "requires": { - "ms": "^2.0.0" + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "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/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" } }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - } + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" } }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" + "engines": { + "node": ">=4" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "indent-string": { + "node_modules/read-pkg/node_modules/load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "init-package-json": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", - "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", + "node_modules/read-pkg/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, - "requires": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" - }, "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "node_modules/read-pkg/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" } }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "intl-messageformat": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz", - "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==", - "requires": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/fast-memoize": "1.2.1", - "@formatjs/icu-messageformat-parser": "2.1.0", - "tslib": "^2.1.0" + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" } }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "peer": true, - "requires": { - "loose-envify": "^1.0.0" + "node_modules/read-pkg/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" } }, - "ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/read-pkg/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "engines": { + "node": ">=4" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "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==", + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.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==" - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { - "ci-info": "^2.0.0" + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "requires": { - "has": "^1.0.3" + "node_modules/realistic-structured-clone": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/realistic-structured-clone/-/realistic-structured-clone-2.0.4.tgz", + "integrity": "sha512-lItAdBIFHUSe6fgztHPtmmWqKUgs+qhcYLi3wTRUl4OTB3Vb8aBVSjGfQZUvkmJCKoX3K9Wf7kyLp/F/208+7A==", + "dev": true, + "dependencies": { + "core-js": "^3.4", + "domexception": "^1.0.1", + "typeson": "^6.1.0", + "typeson-registry": "^1.0.0-alpha.20" } }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" + "node_modules/realistic-structured-clone/node_modules/domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "dependencies": { + "webidl-conversions": "^4.0.2" } }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/realistic-structured-clone/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 }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { + "node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "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 }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" } }, - "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 + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "node_modules/rehype-minify-whitespace": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-5.0.1.tgz", + "integrity": "sha512-PPp4lWJiBPlePI/dv1BeYktbwkfgXkrK59MUa+tYbMPgleod+4DvFK2PLU0O0O60/xuhHfiR9GUIUlXTU8sRIQ==", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-embedded": "^2.0.0", + "hast-util-is-element": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "unified": "^10.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-retina": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-retina/-/is-retina-1.0.3.tgz", - "integrity": "sha512-/tCmbIETZwCd8uHWO+GvbRa7jxwHFHdfetHfiwoP0aN9UDf3prUJMtKn7iBFYipYhqY1bSTjur8hC/Dakt8eyw==" + "node_modules/rehype-parse": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-8.0.4.tgz", + "integrity": "sha512-MJJKONunHjoTh4kc3dsM1v3C9kGrrxvA3U8PxZlP2SjH8RNUSrb+lF7Y0KVaUDnGH2QZ5vAn7ulkiajM9ifuqg==", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^7.0.0", + "parse5": "^6.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "dev": true + "node_modules/rehype-parse/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" + "node_modules/rehype-remark": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/rehype-remark/-/rehype-remark-9.1.2.tgz", + "integrity": "sha512-c0fG3/CrJ95zAQ07xqHSkdpZybwdsY7X5dNWvgL2XqLKZuqmG3+vk6kP/4miCnp+R+x/0uKKRSpfXb9aGR8Z5w==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "hast-util-to-mdast": "^8.3.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "requires": { - "protocols": "^2.0.1" + "node_modules/rehype-stringify": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz", + "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-to-html": "^8.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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 + "node_modules/remark-gfm": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", + "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^2.0.0", + "micromark-extension-gfm": "^2.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" + "node_modules/remark-parse": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz", + "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" + "node_modules/remark-rehype": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", + "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" + "node_modules/remark-stringify": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.3.tgz", + "integrity": "sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" + "node_modules/remixicon-react": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remixicon-react/-/remixicon-react-1.0.0.tgz", + "integrity": "sha512-KOXlc8EdKdujr2f/2idyFSQRjUB8p0HNiWZYBBzRsTRlTXFuSAFfnGq9culNjhCGmc92Jbtfr9OP0MXWvTMdsQ==", + "peerDependencies": { + "react": ">=0.14.0" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "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", + "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" + } }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true + "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==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "dev": true + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" + "node_modules/request/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==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" } }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" } }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" } }, - "isarray": { + "node_modules/requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dependencies": { - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" - }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "isomorphic.js": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", - "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "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 - }, - "istanbul-lib-report": { + "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "engines": { + "node": ">=8" } }, - "js-tokens": { + "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "jsdom": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz", - "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==", - "dev": true, - "requires": { - "abab": "^2.0.6", - "acorn": "^8.7.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.3.1", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "^7.0.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^3.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.8.0", - "xml-name-validator": "^4.0.0" - }, - "dependencies": { - "tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "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 - }, - "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, - "requires": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - } - } + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-bignum": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", - "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "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==" - }, - "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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", - "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" + "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" } }, - "jsonc-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", - "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", - "dev": true + "node_modules/resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w==", + "dev": true, + "dependencies": { + "through": "~2.3.4" + } }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" } }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "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, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" + "node_modules/rollup": { + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.2.tgz", + "integrity": "sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", + "node_modules/rollup-plugin-inject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", + "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", "dev": true, - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" + "dependencies": { + "estree-walker": "^0.6.1", + "magic-string": "^0.25.3", + "rollup-pluginutils": "^2.8.1" } }, - "junk": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.0.tgz", - "integrity": "sha512-ojtSU++zLJ3jQG9bAYjg94w+/DOJtRyD7nPaerMFrBhmdVmiV5/exYH5t4uHga4G/95nT6hr1OJoKIFbYbrW5w==", - "dev": true - }, - "just-diff": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.0.3.tgz", - "integrity": "sha512-a8p80xcpJ6sdurk5PxDKb4mav9MeKjA3zFKZpCWBIfvg8mznfnmb13MKZvlrwJ+Lhis0wM3uGAzE0ArhFHvIcg==", - "dev": true - }, - "just-diff-apply": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.3.1.tgz", - "integrity": "sha512-dgFenZnMsc1xGNqgdtgnh7DK+Oy352CE3VZLbzcbQpsBs9iI2K3M0IRrdgREZ72eItTjbl0suRyvKRdVQa9GbA==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "node_modules/rollup-plugin-node-polyfills": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", + "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", + "dev": true, + "dependencies": { + "rollup-plugin-inject": "^3.0.0" + } }, - "klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "node_modules/rollup-plugin-polyfill-node": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.12.0.tgz", + "integrity": "sha512-PWEVfDxLEKt8JX1nZ0NkUAgXpkZMTb85rO/Ru9AQ69wYW8VUCfDgP4CGRXXWYni5wDF0vIeR1UoF3Jmw/Lt3Ug==", "dev": true, - "requires": { - "graceful-fs": "^4.1.11" + "dependencies": { + "@rollup/plugin-inject": "^5.0.1" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0" } }, - "kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==" }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "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, - "requires": { - "language-subtag-registry": "~0.3.2" + "engines": { + "node": ">=0.12.0" } }, - "lerna": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-5.3.0.tgz", - "integrity": "sha512-0Y9xJqleVu0ExGmsw2WM/GkVmxOwtA7OLQFS5ERPKJfnsxH9roTX3a7NPaGQRI2E+tSJLJJGgNSf3WYEqinOqA==", - "dev": true, - "requires": { - "@lerna/add": "5.3.0", - "@lerna/bootstrap": "5.3.0", - "@lerna/changed": "5.3.0", - "@lerna/clean": "5.3.0", - "@lerna/cli": "5.3.0", - "@lerna/create": "5.3.0", - "@lerna/diff": "5.3.0", - "@lerna/exec": "5.3.0", - "@lerna/import": "5.3.0", - "@lerna/info": "5.3.0", - "@lerna/init": "5.3.0", - "@lerna/link": "5.3.0", - "@lerna/list": "5.3.0", - "@lerna/publish": "5.3.0", - "@lerna/run": "5.3.0", - "@lerna/version": "5.3.0", - "import-local": "^3.0.2", - "npmlog": "^6.0.2", - "nx": ">=14.4.3 < 16" + "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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "dependencies": { + "tslib": "^2.1.0" } }, - "lib0": { - "version": "0.2.52", - "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.52.tgz", - "integrity": "sha512-CjxlM7UgICfN6b2OPALBXchIBiNk6jE+1g7JP8ha+dh1xKRDSYpH0WQl1+rMqCju49xUnwPG34v4CR5/rPOZhg==", - "requires": { - "isomorphic.js": "^0.2.4" + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" } }, - "libnpmaccess": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.3.tgz", - "integrity": "sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg==", + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", "dev": true, - "requires": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" - }, "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "libnpmpublish": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.4.tgz", - "integrity": "sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg==", - "dev": true, - "requires": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } + "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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } + { + "type": "consulting", + "url": "https://feross.org/support" } - } - }, - "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "dev": true + ] }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "requires": { - "uc.micro": "^1.0.1" + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" } }, - "linkifyjs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-3.0.5.tgz", - "integrity": "sha512-1Y9XQH65eQKA9p2xtk+zxvnTeQBG7rdAXSkUG97DmuI/Xhji9uaUzaWxRj6rf9YC0v8KKHkxav7tnLX82Sz5Fg==" + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true }, - "load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" + "dependencies": { + "xmlchars": "^2.2.0" }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } + "loose-envify": "^1.1.0" } }, - "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/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==", "dependencies": { - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true - } + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "local-pkg": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", - "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", - "dev": true + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, - "requires": { - "p-locate": "^4.1.0" + "dependencies": { + "randombytes": "^2.1.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "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==", + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" } }, - "loglevel": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.0.tgz", - "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==" - }, - "long": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", - "integrity": "sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==" + "node_modules/shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" }, - "longest-streak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", - "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==" + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "peer": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "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" } }, - "loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "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, - "requires": { - "get-func-name": "^2.0.0" + "engines": { + "node": ">=8" } }, - "lowlight": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", - "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", - "requires": { - "fault": "^1.0.0", - "highlight.js": "~10.7.0" - }, + "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==", "dependencies": { - "highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==" - } + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "lru-cache": { - "version": "7.13.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.13.2.tgz", - "integrity": "sha512-VJL3nIpA79TodY/ctmZEfhASgqekbT574/c4j3jn4bKXbSCnTTCH/KltZyvL2GlV+tGSMtsWyem8DCX7qKTMBA==", + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true }, - "lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==" + "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 }, - "magic-string": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.3.tgz", - "integrity": "sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" + "node_modules/simple-peer": { + "version": "9.11.1", + "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.11.1.tgz", + "integrity": "sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==", + "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": { + "buffer": "^6.0.3", + "debug": "^4.3.2", + "err-code": "^3.0.1", + "get-browser-rtc": "^1.1.0", + "queue-microtask": "^1.2.3", + "randombytes": "^2.1.0", + "readable-stream": "^3.6.0" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "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 + "node_modules/simple-peer/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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.2.1" } }, - "make-fetch-happen": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.0.tgz", - "integrity": "sha512-OnEfCLofQVJ5zgKwGk55GaqosqKjaR6khQlJY3dBAA+hM25Bc5CmX5rKUfVut+rYA3uidA7zb7AvcglU87rPRg==", + "node_modules/simple-peer/node_modules/err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" + }, + "node_modules/sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" } }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "node_modules/sirv/node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", "dev": true }, - "markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "requires": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "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" } }, - "matchit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/matchit/-/matchit-1.1.0.tgz", - "integrity": "sha512-+nGYoOlfHmxe5BW5tE0EMJppXEwdSf8uBA1GTZC7Q77kbT35+VKLYJMzVNWCHSsga1ps1tPYFtFyvxvKzWVmMA==", + "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, - "requires": { - "@arr/every": "^1.0.0" + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "math.gl": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/math.gl/-/math.gl-3.6.3.tgz", - "integrity": "sha512-Yq9CyECvSDox9+5ETi2+x1bGTY5WvGUGL3rJfC4KPoCZAM51MGfrCm6rIn4yOJUVfMPs2a5RwMD+yGS/n1g3gg==", - "requires": { - "@math.gl/core": "3.6.3" + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" } }, - "matrix-crdt": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/matrix-crdt/-/matrix-crdt-0.2.0.tgz", - "integrity": "sha512-CmwC7/Wtujq6Jp1+MbIY0noEgGnT7YKl3lSOAtzIpDRyNPghHRxtgrDh+IR1kxsf/kFKWqxjgezzlG2vkUhGyA==", - "requires": { - "another-json": "^0.2.0", - "lodash": "^4.17.21", - "simple-peer": "^9.11.0", - "vscode-lib": "^0.1.0" + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" } }, - "matrix-events-sdk": { - "version": "0.0.1-beta.7", - "resolved": "https://registry.npmjs.org/matrix-events-sdk/-/matrix-events-sdk-0.0.1-beta.7.tgz", - "integrity": "sha512-9jl4wtWanUFSy2sr2lCjErN/oC8KTAtaeaozJtrgot1JiQcEI4Rda9OLgQ7nLKaqb4Z/QUx/fR3XpDzm5Jy1JA==" - }, - "matrix-js-sdk": { - "version": "19.4.0", - "resolved": "https://registry.npmjs.org/matrix-js-sdk/-/matrix-js-sdk-19.4.0.tgz", - "integrity": "sha512-B8Mm4jCsCHaMaChcdM3VhZDVKrn0nMSDtYvHmS15Iu8Pe0G4qmIpk2AoADBAL9U9yN3pCqvs3TDXaQhM8UxRRA==", - "requires": { - "@babel/runtime": "^7.12.5", - "another-json": "^0.2.0", - "browser-request": "^0.3.3", - "bs58": "^5.0.0", - "content-type": "^1.0.4", - "loglevel": "^1.7.1", - "matrix-events-sdk": "^0.0.1-beta.7", - "p-retry": "4", - "qs": "^6.9.6", - "request": "^2.88.2", - "unhomoglyph": "^1.0.6" + "node_modules/sort-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" } }, - "mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" } }, - "mdast-util-to-markdown": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", - "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==" - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "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==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", "dev": true }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "memoize-one": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "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 - } - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - } + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "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, - "requires": { - "is-plain-obj": "^2.1.0" - }, "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", "dev": true }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromark": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz", - "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==", - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "engines": { + "node": ">=0.10.0" } }, - "micromark-core-commonmark": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", - "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" } }, - "micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" } }, - "micromark-factory-label": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", - "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, - "micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "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" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" } }, - "micromark-factory-title": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", - "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true }, - "micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true }, - "micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", - "requires": { - "micromark-util-symbol": "^1.0.0" + "node_modules/std-env": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz", + "integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==", + "dev": true + }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dev": true, + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "node_modules/stdin-discarder/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "node_modules/stdin-discarder/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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.2.1" } }, - "micromark-util-decode-numeric-character-reference": { + "node_modules/stop-iteration-iterator": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", - "requires": { - "micromark-util-symbol": "^1.0.0" + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "micromark-util-decode-string": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", - "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" } }, - "micromark-util-encode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", - "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==" - }, - "micromark-util-html-tag-name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", - "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==" - }, - "micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", - "requires": { - "micromark-util-symbol": "^1.0.0" + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" } }, - "micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", - "requires": { - "micromark-util-types": "^1.0.0" - } + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "dev": true }, - "micromark-util-sanitize-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", - "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "micromark-util-subtokenize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", - "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "micromark-util-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", - "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==" + "node_modules/string-width-cjs/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 }, - "micromark-util-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", - "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==" + "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==" }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "node_modules/string.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "node_modules/string.prototype.replaceall": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.replaceall/-/string.prototype.replaceall-1.0.7.tgz", + "integrity": "sha512-xB2WV2GlSCSJT5dMGdhdH1noMPiAB91guiepwTYyWY9/0Vq/TZ7RPmnOSUGAEvry08QIK7EMr28aAii+9jC6kw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "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==", - "requires": { - "mime-db": "1.52.0" + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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 - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "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": { - "brace-expansion": "^1.1.7" + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" + "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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "node_modules/strip-ansi-cjs": { + "name": "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": { - "minipass": "^3.0.0" + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "minipass-fetch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", - "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "engines": { + "node": ">=8" } }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "requires": { - "minipass": "^3.0.0" + "engines": { + "node": ">=6" } }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "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, - "requires": { - "minipass": "^3.0.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "node_modules/strip-literal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz", + "integrity": "sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==", "dev": true, - "requires": { - "minipass": "^3.0.0" + "dependencies": { + "acorn": "^8.8.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" } }, - "mjolnir.js": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-2.7.1.tgz", - "integrity": "sha512-72BeUWgTv2cj5aZQKpwL8caNUFhXZ9bDm1hxpNj70XJQ62IBnTZmtv/WPxJvtaVNhzNo+D2U8O6ryNI0zImYcw==", - "requires": { - "@types/hammerjs": "^2.0.41", - "hammerjs": "^2.0.8" + "node_modules/styled-components": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.2.6.tgz", + "integrity": "sha512-CpFUIyKXl5JP0PYQ7aNncpn6Oxts+5JfMvvdhjIN2S8afPZbw/VdgVucNkMrPrMY7aIFoYrm4qwti1V+vyhi2g==", + "hasInstallScript": true, + "dependencies": { + "buffer": "^5.0.3", + "css-to-react-native": "^2.0.3", + "fbjs": "^0.8.16", + "hoist-non-react-statics": "^2.5.0", + "is-plain-object": "^2.0.1", + "prop-types": "^15.5.4", + "react-is": "^16.3.1", + "stylis": "^3.5.0", + "stylis-rule-sheet": "^0.0.10", + "supports-color": "^3.2.3" + }, + "peerDependencies": { + "react": ">= 0.14.0 < 17.0.0-0" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true + "node_modules/styled-components/node_modules/core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js." }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" + "node_modules/styled-components/node_modules/fbjs": { + "version": "0.8.18", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", + "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", + "dependencies": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.30" } }, - "mobx": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.6.1.tgz", - "integrity": "sha512-7su3UZv5JF+ohLr2opabjbUAERfXstMY+wiBtey8yNAPoB8H187RaQXuhFjNkH8aE4iHbDWnhDFZw0+5ic4nGQ==" + "node_modules/styled-components/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "engines": { + "node": ">=0.10.0" + } }, - "mobx-react-lite": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.4.0.tgz", - "integrity": "sha512-bRuZp3C0itgLKHu/VNxi66DN/XVkQG7xtoBVWxpvC5FhAqbOCP21+nPhULjnzEqd7xBMybp6KwytdUpZKEgpIQ==", - "requires": {} + "node_modules/styled-components/node_modules/hoist-non-react-statics": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" }, - "mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "debug": { - "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" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "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 - }, - "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" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "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": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "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" - } - }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "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" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "node_modules/styled-components/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "monaco-editor": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.35.0.tgz", - "integrity": "sha512-BJfkAZ0EJ7JgrgWzqjfBNP9hPSS8NlfECEDMEIIiozV2UaPq22yeuOjgbd3TwMh3anH0krWZirXZfn8KUSxiOA==" + "node_modules/styled-components/node_modules/stylis": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", + "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + "node_modules/styled-components/node_modules/stylis-rule-sheet": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", + "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", + "peerDependencies": { + "stylis": "^3.5.0" + } }, - "mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true + "node_modules/styled-components/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "node_modules/supabase": { + "version": "1.68.6", + "resolved": "https://registry.npmjs.org/supabase/-/supabase-1.68.6.tgz", + "integrity": "sha512-3+0SBoY4oRZ1GkDUkMaUfsIAk0ofhw0EntJJo+GZNrciXE0lDZ7AX31g63AyJ1yfNxElbYBcrWIMtsZgeDG35w==", "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" + "hasInstallScript": true, + "dependencies": { + "bin-links": "^4.0.1", + "node-fetch": "^3.2.10", + "tar": "6.1.15" + }, + "bin": { + "supabase": "bin/supabase" }, + "engines": { + "npm": ">=8" + } + }, + "node_modules/supabase/node_modules/bin-links": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.1.tgz", + "integrity": "sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA==", + "dev": true, "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - } + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "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/supabase/node_modules/cmd-shim": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz", + "integrity": "sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "nanoid": { + "node_modules/supabase/node_modules/node-fetch": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", + "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "node_modules/supabase/node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "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_modules/supabase/node_modules/read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "node_modules/supabase/node_modules/signal-exit": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", + "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "nested-error-stacks": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", - "dev": true + "node_modules/supabase/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "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/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", "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==", - "requires": { - "whatwg-url": "^5.0.0" + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } + "sprintf-js": "~1.0.2" } }, - "node-gyp": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.1.0.tgz", - "integrity": "sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==", + "node_modules/svgo/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/svgo/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, "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/tabbable": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.1.2.tgz", + "integrity": "sha512-qCN98uP7i9z0fIS4amQ5zbGBOq+OSigYeGvPy7NDk8Y9yncqDZ9pRPgfsc2PJIVM9RrJj7GIfuRgmjoUU9zTHQ==" + }, + "node_modules/tape": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/tape/-/tape-5.6.3.tgz", + "integrity": "sha512-cUDDGSbyoSIpdUAqbqLI/r7i/S4BHuCB9M5j7E/LrLs/x/i4zeAJ798aqo+FGo+kr9seBZwr8AkZW6rjceyAMQ==", + "dev": true, + "dependencies": { + "array.prototype.every": "^1.1.4", + "call-bind": "^1.0.2", + "deep-equal": "^2.2.0", + "defined": "^1.0.1", + "dotignore": "^0.1.2", + "for-each": "^0.3.3", + "get-package-type": "^0.1.0", + "glob": "^7.2.3", + "has": "^1.0.3", + "has-dynamic-import": "^2.0.1", + "inherits": "^2.0.4", + "is-regex": "^1.1.4", + "minimist": "^1.2.7", + "object-inspect": "^1.12.3", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "resolve": "^2.0.0-next.4", + "resumer": "^0.0.0", + "string.prototype.trim": "^1.2.7", + "through": "^2.3.8" + }, + "bin": { + "tape": "bin/tape" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "dev": true - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "node_modules/tape/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "dev": true, - "requires": { - "abbrev": "1" + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "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, - "requires": { - "npm-normalize-package-bin": "^1.0.1" + "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" } }, - "npm-install-checks": { + "node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, - "requires": { - "semver": "^7.1.1" + "engines": { + "node": ">=8" } }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "node_modules/tar/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 }, - "npm-package-arg": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", - "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", - "dev": true, - "requires": { - "hosted-git-info": "^3.0.6", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - } - } - }, - "npm-packlist": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", - "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true, - "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" + "engines": { + "node": ">=4" } }, - "npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", + "node_modules/tempy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.0.0.tgz", + "integrity": "sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==", "dev": true, - "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } + "is-stream": "^3.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^2.12.2", + "unique-string": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "npm-registry-fetch": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz", - "integrity": "sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg==", + "node_modules/tempy/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/tempy/node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, - "requires": { - "path-key": "^3.0.0" + "engines": { + "node": ">=8" } }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "node_modules/tempy/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "requires": { - "boolbase": "~1.0.0" + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "nwsapi": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", - "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", - "dev": true - }, - "nx": { - "version": "14.5.4", - "resolved": "https://registry.npmjs.org/nx/-/nx-14.5.4.tgz", - "integrity": "sha512-xv1nTaQP6kqVDE4PXcB1tLlgzNAPUHE/2vlqSLgxjNb6colKf0vrEZhVTjhnbqBeJiTb33gUx50bBXkurCkN5w==", + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, - "requires": { - "@nrwl/cli": "14.5.4", - "@nrwl/tao": "14.5.4", - "@parcel/watcher": "2.0.4", - "chalk": "4.1.0", - "chokidar": "^3.5.1", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^10.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.0.0", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^3.9.0", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.4.0", - "yargs-parser": "21.0.1" - }, - "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" - } - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "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" - } - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "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.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true - } + "engines": { + "node": ">=0.10" } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "node_modules/throttle-debounce": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", + "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", + "engines": { + "node": ">=10" } }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "dependencies": { + "readable-stream": "3" } }, - "object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "node_modules/time-zone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", + "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "engines": { + "node": ">=4" } }, - "object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, + "node_modules/tinybench": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz", + "integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.5.0.tgz", + "integrity": "sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==", "dev": true, - "requires": { - "array.prototype.reduce": "^1.0.4", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" + "engines": { + "node": ">=14.0.0" } }, - "object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "node_modules/tinyspy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.1.tgz", + "integrity": "sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==", "dev": true, - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "engines": { + "node": ">=14.0.0" } }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "node_modules/tippy.js": { + "version": "6.3.7", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", + "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", + "dependencies": { + "@popperjs/core": "^2.9.0" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, - "requires": { - "wrappy": "1" + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" } }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, - "requires": { - "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": ">=6" } }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" } }, - "orderedmap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.0.0.tgz", - "integrity": "sha512-buf4PoAMlh45b8a8gsGy/X6w279TSqkyAS0C0wdTSJwFSU+ljQFJON5I8NfjLHoCXwpSROIo2wr0g33T+kQshQ==" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, - "requires": { - "p-timeout": "^3.1.0" + "engines": { + "node": ">= 4.0.0" } }, - "p-filter": { + "node_modules/tr46": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", - "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, - "requires": { - "p-map": "^5.1.0" - }, "dependencies": { - "aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "requires": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - } - }, - "clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "requires": { - "escape-string-regexp": "5.0.0" - } - }, - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true - }, - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true - }, - "p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, - "requires": { - "aggregate-error": "^4.0.0" - } - } + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" } }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/treeverse": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", + "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", "dev": true, - "requires": { - "p-try": "^2.0.0" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, - "requires": { - "aggregate-error": "^3.0.0" + "engines": { + "node": ">=8" } }, - "p-map-series": { + "node_modules/trim-trailing-lines": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", - "dev": true + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-2.1.0.tgz", + "integrity": "sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true + "node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "node_modules/trouter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/trouter/-/trouter-2.0.1.tgz", + "integrity": "sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==", "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" + "dependencies": { + "matchit": "^1.0.0" + }, + "engines": { + "node": ">=6" } }, - "p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, - "dependencies": { - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true } } }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" } }, - "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 + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } }, - "p-wait-for": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-4.1.0.tgz", - "integrity": "sha512-i8nE5q++9h8oaQHWltS1Tnnv4IoMDOlqN7C0KFG2OdbK0iFJIt6CROZ8wfBM+K4Pxqfnq4C4lkkpXqTEpB5DZw==", + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "requires": { - "p-timeout": "^5.0.0" - }, "dependencies": { - "p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", - "dev": true - } + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "requires": { - "p-reduce": "^2.0.0" + "engines": { + "node": ">=4" } }, - "pacote": { - "version": "13.6.1", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", - "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", + "node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==" + }, + "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, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - } + "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" } }, - "pad-left": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz", - "integrity": "sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==", - "requires": { - "repeat-string": "^1.5.4" - } + "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 }, - "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==", - "requires": { - "callsites": "^3.0.0" + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" } }, - "parse-conflict-json": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", - "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - } + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "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" - } + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, - "parse-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-5.0.0.tgz", - "integrity": "sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A==", + "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, - "requires": { - "protocols": "^2.0.0" + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "parse-url": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-7.0.2.tgz", - "integrity": "sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "requires": { - "is-ssh": "^1.4.0", - "normalize-url": "^6.1.0", - "parse-path": "^5.0.0", - "protocols": "^2.0.1" + "engines": { + "node": ">=4" } }, - "parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", + "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, - "requires": { - "entities": "^4.3.0" + "engines": { + "node": ">=10" }, - "dependencies": { - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "patch-package": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", - "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", - "dev": true, - "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "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" - } - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "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": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "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" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "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": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "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" - } - }, - "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 - }, - "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" - } - } + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "penpal": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/penpal/-/penpal-6.2.2.tgz", - "integrity": "sha512-RQD7hTx14/LY7QoS3tQYO3/fzVtwvZI+JeS5udgsu7FPaEDjlvfK9HBcme9/ipzSPKnrxSgacI9PI7154W62YQ==" + "node_modules/typescript-json-schema": { + "version": "0.58.1", + "resolved": "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.58.1.tgz", + "integrity": "sha512-EcmquhfGEmEJOAezLZC6CzY0rPNzfXuky+Z3zoXULEEncW8e13aAjmC2r8ppT1bvvDekJj1TJ4xVhOdkjYtkUA==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/node": "^16.9.2", + "glob": "^7.1.7", + "path-equal": "^1.2.5", + "safe-stable-stringify": "^2.2.0", + "ts-node": "^10.9.1", + "typescript": "~4.9.5", + "yargs": "^17.1.1" + }, + "bin": { + "typescript-json-schema": "bin/typescript-json-schema" + } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "node_modules/typescript-json-schema/node_modules/@types/node": { + "version": "16.18.38", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", + "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "node_modules/typescript-json-schema/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "node_modules/typescript-json-schema/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true + "node_modules/typescript-json-schema/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } }, - "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==", + "node_modules/typeson": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/typeson/-/typeson-6.1.0.tgz", + "integrity": "sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA==", "dev": true, - "requires": { - "find-up": "^4.0.0" + "engines": { + "node": ">=0.1.14" } }, - "playwright": { - "version": "1.24.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.24.2.tgz", - "integrity": "sha512-iMWDLgaFRT+7dXsNeYwgl8nhLHsUrzFyaRVC+ftr++P1dVs70mPrFKBZrGp1fOKigHV9d1syC03IpPbqLKlPsg==", + "node_modules/typeson-registry": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/typeson-registry/-/typeson-registry-1.0.0-alpha.39.tgz", + "integrity": "sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw==", "dev": true, - "requires": { - "playwright-core": "1.24.2" + "dependencies": { + "base64-arraybuffer-es6": "^0.7.0", + "typeson": "^6.0.0", + "whatwg-url": "^8.4.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "playwright-core": { - "version": "1.24.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.24.2.tgz", - "integrity": "sha512-zfAoDoPY/0sDLsgSgLZwWmSCevIg1ym7CppBwllguVBNiHeixZkc1AdMuYUPZC6AdEYc4CxWEyLMBTw2YcmRrA==", - "dev": true - }, - "playwright-test": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/playwright-test/-/playwright-test-8.1.1.tgz", - "integrity": "sha512-FFfuPH6Q/AFoJQDJ6/ateZBBQoiJx8LS8eM0pWExgB0OS9nygnM+KMR/25/dfYdlgw1bESlwtBa5UrBwulvKIw==", + "node_modules/typeson-registry/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, - "requires": { - "buffer": "^6.0.3", - "camelcase": "^6.3.0", - "chokidar": "^3.5.3", - "cpy": "^9.0.1", - "esbuild": "0.14.39", - "events": "^3.3.0", - "globby": "^13.1.1", - "kleur": "^4.1.4", - "lilconfig": "^2.0.5", - "lodash": "^4.17.21", - "merge-options": "^3.0.4", - "nanoid": "^3.3.4", - "ora": "^6.1.0", - "p-wait-for": "4.1.0", - "path-browserify": "^1.0.1", - "playwright-core": "1.22.1", - "polka": "^0.5.2", - "premove": "^4.0.0", - "process": "^0.11.10", - "sade": "^1.8.1", - "sirv": "^2.0.2", - "source-map": "0.6.1", - "stream-browserify": "^3.0.0", - "strip-ansi": "^7.0.0", - "tape": "^5.5.3", - "tempy": "^3.0.0", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0" - }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "bl": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz", - "integrity": "sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==", - "dev": true, - "requires": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chalk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", - "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", - "dev": true - }, - "cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, - "requires": { - "restore-cursor": "^4.0.0" - } - }, - "esbuild": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", - "dev": true, - "requires": { - "esbuild-android-64": "0.14.39", - "esbuild-android-arm64": "0.14.39", - "esbuild-darwin-64": "0.14.39", - "esbuild-darwin-arm64": "0.14.39", - "esbuild-freebsd-64": "0.14.39", - "esbuild-freebsd-arm64": "0.14.39", - "esbuild-linux-32": "0.14.39", - "esbuild-linux-64": "0.14.39", - "esbuild-linux-arm": "0.14.39", - "esbuild-linux-arm64": "0.14.39", - "esbuild-linux-mips64le": "0.14.39", - "esbuild-linux-ppc64le": "0.14.39", - "esbuild-linux-riscv64": "0.14.39", - "esbuild-linux-s390x": "0.14.39", - "esbuild-netbsd-64": "0.14.39", - "esbuild-openbsd-64": "0.14.39", - "esbuild-sunos-64": "0.14.39", - "esbuild-windows-32": "0.14.39", - "esbuild-windows-64": "0.14.39", - "esbuild-windows-arm64": "0.14.39" - } - }, - "esbuild-android-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz", - "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz", - "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", - "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz", - "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz", - "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz", - "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz", - "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz", - "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz", - "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz", - "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz", - "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz", - "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz", - "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz", - "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz", - "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz", - "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz", - "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz", - "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz", - "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz", - "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==", - "dev": true, - "optional": true - }, - "globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true - }, - "is-unicode-supported": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz", - "integrity": "sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==", - "dev": true - }, - "log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dev": true, - "requires": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - } - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "ora": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz", - "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==", - "dev": true, - "requires": { - "bl": "^5.0.0", - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "strip-ansi": "^7.0.1", - "wcwidth": "^1.0.1" - } - }, - "playwright-core": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.22.1.tgz", - "integrity": "sha512-H+ZUVYnceWNXrRf3oxTEKAr81QzFsCKu5Fp//fEjQvqgKkfA1iX3E9DBrPJpPNOrgVzcE+IqeI0fDmYJe6Ynnw==", - "dev": true - }, - "restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" } }, - "polka": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/polka/-/polka-0.5.2.tgz", - "integrity": "sha512-FVg3vDmCqP80tOrs+OeNlgXYmFppTXdjD5E7I4ET1NjvtNmQrb1/mJibybKkb/d4NA7YWAr1ojxuhpL3FHqdlw==", + "node_modules/typeson-registry/node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, - "requires": { - "@polka/url": "^0.5.0", - "trouter": "^2.0.1" + "engines": { + "node": ">=10.4" } }, - "postcss": { - "version": "8.4.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", - "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "node_modules/typeson-registry/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, "dependencies": { - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - } + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" } }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "node_modules/ua-parser-js": { + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } }, - "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 + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, - "premove": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/premove/-/premove-4.0.0.tgz", - "integrity": "sha512-zim/Hr4+FVdCIM7zL9b9Z0Wfd5Ya3mnKtiuDv7L5lzYzanSq6cOcVJ7EFcgK4I0pt28l8H0jX/x3nyog380XgQ==", + "node_modules/ufo": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.2.tgz", + "integrity": "sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==", "dev": true }, - "prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==" + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } }, - "probe.gl": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.5.2.tgz", - "integrity": "sha512-8lFQVmi7pMQZkqfj8+VjX4GU9HTkyxgRm5/h/xxA/4/IvZPv3qtP996L+awPwZsrPRKEw99t12SvqEHqSls/sA==", - "requires": { - "@babel/runtime": "^7.0.0", - "@probe.gl/env": "3.5.2", - "@probe.gl/log": "3.5.2", - "@probe.gl/stats": "3.5.2" + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", - "dev": true + "node_modules/unhomoglyph": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unhomoglyph/-/unhomoglyph-1.0.6.tgz", + "integrity": "sha512-7uvcWI3hWshSADBu4JpnyYbTVc7YlhF5GDW/oPD5AxIxl34k4wXR3WDkPnzLxkN32LiTCTKMQLtKVZiwki3zGg==" }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "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/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" } }, - "promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "promise-call-limit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", - "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", - "dev": true + "node_modules/unified/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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true + "node_modules/unified/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "promise-retry": { + "node_modules/unique-filename": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", + "node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, - "requires": { - "read": "1" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "prosemirror-commands": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.3.0.tgz", - "integrity": "sha512-BwBbZ5OAScPcm0x7H8SPbqjuEJnCU2RJT9LDyOiiIl/3NbL1nJZI4SFNHwU2e/tRr2Xe7JsptpzseqvZvToLBQ==", - "requires": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "dev": true, + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "prosemirror-dropcursor": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.5.0.tgz", - "integrity": "sha512-vy7i77ddKyXlu8kKBB3nlxLBnsWyKUmQIPB5x8RkYNh01QNp/qqGmdd5yZefJs0s3rtv5r7Izfu2qbtr+tYAMQ==", - "requires": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0", - "prosemirror-view": "^1.1.0" + "node_modules/unist-util-find-after": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-4.0.1.tgz", + "integrity": "sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "prosemirror-gapcursor": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.0.tgz", - "integrity": "sha512-9Tdx83xB2W4Oqchm12FtCkSizbqvi64cjs1I9TRPblqdA5TUWoVZ4ZI+t71Jh6HSEh4cDMPzx3UwfryJtKlb/w==", - "requires": { - "prosemirror-keymap": "^1.0.0", - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-view": "^1.0.0" + "node_modules/unist-util-generated": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz", + "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "prosemirror-history": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.3.0.tgz", - "integrity": "sha512-qo/9Wn4B/Bq89/YD+eNWFbAytu6dmIM85EhID+fz9Jcl9+DfGEo8TTSrRhP15+fFEoaPqpHSxlvSzSEbmlxlUA==", - "requires": { - "prosemirror-state": "^1.2.2", - "prosemirror-transform": "^1.0.0", - "rope-sequence": "^1.3.0" + "node_modules/unist-util-is": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz", + "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "prosemirror-keymap": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.0.tgz", - "integrity": "sha512-TdSfu+YyLDd54ufN/ZeD1VtBRYpgZnTPnnbY+4R08DDgs84KrIPEPbJL8t1Lm2dkljFx6xeBE26YWH3aIzkPKg==", - "requires": { - "prosemirror-state": "^1.0.0", - "w3c-keyname": "^2.2.0" + "node_modules/unist-util-position": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz", + "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "prosemirror-model": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.18.1.tgz", - "integrity": "sha512-IxSVBKAEMjD7s3n8cgtwMlxAXZrC7Mlag7zYsAKDndAqnDScvSmp/UdnRTV/B33lTCVU3CCm7dyAn/rVVD0mcw==", - "requires": { - "orderedmap": "^2.0.0" + "node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "prosemirror-schema-list": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.2.0.tgz", - "integrity": "sha512-8PT/9xOx1HHdC7fDNNfhQ50Z8Mzu7nKyA1KCDltSpcZVZIbB0k7KtsHrnXyuIhbLlScoymBiLZ00c5MH6wdFsA==", - "requires": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" + "node_modules/unist-util-visit": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz", + "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "prosemirror-state": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.1.tgz", - "integrity": "sha512-U/LBDW2gNmVa07sz/D229XigSdDQ5CLFwVB1Vb32MJbAHHhWe/6pOc721faI17tqw4pZ49i1xfY/jEZ9tbIhPg==", - "requires": { - "prosemirror-model": "^1.0.0", - "prosemirror-transform": "^1.0.0" + "node_modules/unist-util-visit-parents": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz", + "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "prosemirror-transform": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.6.0.tgz", - "integrity": "sha512-MAp7AjsjEGEqQY0sSMufNIUuEyB1ZR9Fqlm8dTwwWwpEJRv/plsKjWXBbx52q3Ml8MtaMcd7ic14zAHVB3WaMw==", - "requires": { - "prosemirror-model": "^1.0.0" - } + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true }, - "prosemirror-view": { - "version": "1.26.2", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.26.2.tgz", - "integrity": "sha512-CGKw+GadkfSBEwRAJTHCEKJ4DlV6/3IhAdjpwGyZHUHtbP7jX4Ol4zmi7xa2c6GOabDlIJLYXJydoNYLX7lNeQ==", - "requires": { - "prosemirror-model": "^1.16.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0" + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" } }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", "dev": true }, - "protocols": { + "node_modules/upath": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" } }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "requires": { - "performance-now": "^2.1.0" + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "raf-schd": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.3.tgz", - "integrity": "sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==" + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" + "node_modules/use-callback-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", + "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "react-avatar": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/react-avatar/-/react-avatar-3.10.0.tgz", - "integrity": "sha512-FB20OZIAJif0WNzGy4PwT5Nca4rekrYWiswBofuGAa5FKpRrFbJKY69267dRXbFqIYQrA/OxNB/TjhnmP2gsEQ==", - "requires": { - "core-js": "^3.6.1", - "is-retina": "^1.0.3", - "md5": "^2.0.0" + "node_modules/use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "react-beautiful-dnd-next": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/react-beautiful-dnd-next/-/react-beautiful-dnd-next-11.0.5.tgz", - "integrity": "sha512-kM5Mob41HkA3ShS9uXqeMkW51L5bVsfttxfrwwHucu7I6SdnRKCyN78t6QiLH/UJQQ8T4ukI6NeQAQQpGwolkg==", - "requires": { - "@babel/runtime-corejs2": "^7.4.5", - "css-box-model": "^1.1.2", - "memoize-one": "^5.0.4", - "raf-schd": "^4.0.0", - "react-redux": "^7.0.3", - "redux": "^4.0.1", - "tiny-invariant": "^1.0.4", - "use-memo-one": "^1.1.0" + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, - "dependencies": { - "memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + "peerDependenciesMeta": { + "@types/react": { + "optional": true } } }, - "react-clientside-effect": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz", - "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==", - "requires": { - "@babel/runtime": "^7.12.13" + "node_modules/use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "react-display-name": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/react-display-name/-/react-display-name-0.2.5.tgz", - "integrity": "sha512-I+vcaK9t4+kypiSgaiVWAipqHRXYmZIuAiS8vzFvXHHXVigg/sMKwlRgLy6LH2i3rmP+0Vzfl5lFsFRwF1r3pg==" - }, - "react-dnd": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-7.7.0.tgz", - "integrity": "sha512-anpJDKMgdXE6kXvtBFmIAe1fuaexpVy7meUyNjiTfCnjQ1mRvnttGTVvcW9fMKijsUQYadiyvzd3BRxteFuVXg==", - "peer": true, - "requires": { - "@types/hoist-non-react-statics": "^3.3.1", - "dnd-core": "^7.7.0", - "hoist-non-react-statics": "^3.3.0", - "invariant": "^2.1.0", - "shallowequal": "^1.1.0" + "node_modules/use-memo-one": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", + "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "react-dnd-html5-backend": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/react-dnd-html5-backend/-/react-dnd-html5-backend-14.1.0.tgz", - "integrity": "sha512-6ONeqEC3XKVf4eVmMTe0oPds+c5B9Foyj8p/ZKLb7kL2qh9COYxiBHv3szd6gztqi/efkmriywLUVlPotqoJyw==", - "requires": { - "dnd-core": "14.0.1" - }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", "dependencies": { - "dnd-core": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-14.0.1.tgz", - "integrity": "sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A==", - "requires": { - "@react-dnd/asap": "^4.0.0", - "@react-dnd/invariant": "^2.0.0", - "redux": "^4.1.1" - } + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true } } }, - "react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" } }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "react-focus-lock": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.9.1.tgz", - "integrity": "sha512-pSWOQrUmiKLkffPO6BpMXN7SNKXMsuOakl652IBuALAu1esk+IcpJyM+ALcYzPTTFz1rD0R54aB9A4HuP5t1Wg==", - "requires": { - "@babel/runtime": "^7.0.0", - "focus-lock": "^0.11.2", - "prop-types": "^15.6.2", - "react-clientside-effect": "^1.2.6", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "react-github-btn": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-github-btn/-/react-github-btn-1.3.0.tgz", - "integrity": "sha512-IpyNbbYENfmYOLoRkeKauAZF5PTkplawRquSiI7uDVJBUCVrR5jQ9zYBx4TlpzhWeYU+BIfKNnXtz2wvQJPsZg==", - "requires": { - "github-buttons": "^2.21.1" + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" } }, - "react-icons": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.6.0.tgz", - "integrity": "sha512-rR/L9m9340yO8yv1QT1QurxWQvWpbNHqVX0fzMln2HEb9TEIrQRGsqiNFQfiv9/JEUbyHmHPlNTB2LWm2Ttz0g==", - "requires": {} - }, - "react-input-autosize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-3.0.0.tgz", - "integrity": "sha512-nL9uS7jEs/zu8sqwFE5MAPx6pPkNAriACQ2rGLlqmKr2sPGtN7TXTyDdQt4lbNXVx7Uzadb40x8qotIuru6Rhg==", - "requires": { - "prop-types": "^15.5.8" + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" } }, - "react-inspector": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.1.tgz", - "integrity": "sha512-cxKSeFTf7jpSSVddm66sKdolG90qURAX3g1roTeaN6x0YEbtWc8JpmFN9+yIqLNH2uEkYerWLtJZIXRIFuBKrg==", - "requires": {} + "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 }, - "react-intl-next": { - "version": "npm:react-intl@5.25.1", - "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.25.1.tgz", - "integrity": "sha512-pkjdQDvpJROoXLMltkP/5mZb0/XqrqLoPGKUCfbdkP8m6U9xbK40K51Wu+a4aQqTEvEK5lHBk0fWzUV72SJ3Hg==", - "requires": { - "@formatjs/ecma402-abstract": "1.11.4", - "@formatjs/icu-messageformat-parser": "2.1.0", - "@formatjs/intl": "2.2.1", - "@formatjs/intl-displaynames": "5.4.3", - "@formatjs/intl-listformat": "6.5.3", - "@types/hoist-non-react-statics": "^3.3.1", - "@types/react": "16 || 17 || 18", - "hoist-non-react-statics": "^3.3.2", - "intl-messageformat": "9.13.0", - "tslib": "^2.1.0" - } + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "peer": true + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } }, - "react-loosely-lazy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/react-loosely-lazy/-/react-loosely-lazy-1.0.0.tgz", - "integrity": "sha512-Ai/ox310hio8D0FxiZPEORTnHgyTeQ3seNhxVb+jh1hBrEgBlvB4Pvvb5zAKiktwcYGNIHQaZqtATkS68WLw5Q==", - "requires": {} + "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" + } }, - "react-node-resolver": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-node-resolver/-/react-node-resolver-1.0.1.tgz", - "integrity": "sha512-IiSe0h2+IJo4enSlbdYjdwJnY86A7TwNxnfQVG2yApxVkHj9es1jum9Lb2aiBXKkLnwAj7ufBBlAa0ROU0o9nA==" + "node_modules/validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "react-popper": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", - "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", - "requires": { - "react-fast-compare": "^3.0.1", - "warning": "^4.0.2" + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "react-redux": { - "version": "7.2.8", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.8.tgz", - "integrity": "sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw==", - "requires": { - "@babel/runtime": "^7.15.4", - "@types/react-redux": "^7.1.20", - "hoist-non-react-statics": "^3.3.2", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, + "node_modules/vfile": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", + "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==", "dependencies": { - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - } + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true - }, - "react-router": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.2.2.tgz", - "integrity": "sha512-/MbxyLzd7Q7amp4gDOGaYvXwhEojkJD5BtExkuKmj39VEE0m3l/zipf6h2WIB2jyAO0lI6NGETh4RDcktRm4AQ==", - "requires": { - "history": "^5.2.0" + "node_modules/vfile-location": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz", + "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==", + "dependencies": { + "@types/unist": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "react-router-dom": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.2.2.tgz", - "integrity": "sha512-AtYEsAST7bDD4dLSQHDnk/qxWLJdad5t1HFa1qJyUrCeGgEuCSw0VB/27ARbF9Fi/W5598ujvJOm3ujUCVzuYQ==", - "requires": { - "history": "^5.2.0", - "react-router": "6.2.2" + "node_modules/vfile-message": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz", + "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "react-scrolllock": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scrolllock/-/react-scrolllock-5.0.1.tgz", - "integrity": "sha512-poeEsjnZAlpA6fJlaNo4rZtcip2j6l5mUGU/SJe1FFlicEudS943++u7ZSdA7lk10hoyYK3grOD02/qqt5Lxhw==", - "requires": { - "exenv": "^1.2.2" + "node_modules/vfile/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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" } }, - "react-select": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-4.3.1.tgz", - "integrity": "sha512-HBBd0dYwkF5aZk1zP81Wx5UsLIIT2lSvAY2JiJo199LjoLHoivjn9//KsmvQMEFGNhe58xyuOITjfxKCcGc62Q==", - "requires": { - "@babel/runtime": "^7.12.0", - "@emotion/cache": "^11.4.0", - "@emotion/react": "^11.1.1", - "memoize-one": "^5.0.0", - "prop-types": "^15.6.0", - "react-input-autosize": "^3.0.0", - "react-transition-group": "^4.3.0" - }, + "node_modules/vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, "dependencies": { - "@emotion/cache": { - "version": "11.10.3", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.3.tgz", - "integrity": "sha512-Psmp/7ovAa8appWh3g51goxu/z3iVms7JXOreq136D8Bbn6dYraPnmL6mdM8GThEx9vwSn92Fz+mGSjBzN8UPQ==", - "requires": { - "@emotion/memoize": "^0.8.0", - "@emotion/sheet": "^1.2.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "stylis": "4.0.13" - } + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true }, - "@emotion/sheet": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz", - "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w==" + "sass": { + "optional": true }, - "@emotion/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==" + "stylus": { + "optional": true }, - "@emotion/weak-memoize": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz", - "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==" + "sugarss": { + "optional": true }, - "memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + "terser": { + "optional": true } } }, - "react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "node_modules/vite-node": { + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.29.8.tgz", + "integrity": "sha512-b6OtCXfk65L6SElVM20q5G546yu10/kNrhg08afEoWlFRJXFq9/6glsvSVY+aI6YeC1tu2TtAqI2jHEQmOmsFw==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.1.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "react-uid": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/react-uid/-/react-uid-2.3.2.tgz", - "integrity": "sha512-oeaoT4YOjsqHdrEJoO8SONNNBsoGh7AJPbsNqRK6Dv8UMdctWxA4ncj9gAA/Odki5g0GZaDSR7HydBJ8HxwgNg==", - "requires": { - "tslib": "^2.0.0" + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "mute-stream": "~0.0.4" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "read-cmd-shim": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", - "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", - "dev": true + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } }, - "read-package-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", - "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", - "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - } - }, - "normalize-package-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", - "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - } + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true - } + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "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==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], "dev": true, - "requires": { - "picomatch": "^2.2.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "realistic-structured-clone": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/realistic-structured-clone/-/realistic-structured-clone-2.0.4.tgz", - "integrity": "sha512-lItAdBIFHUSe6fgztHPtmmWqKUgs+qhcYLi3wTRUl4OTB3Vb8aBVSjGfQZUvkmJCKoX3K9Wf7kyLp/F/208+7A==", + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], "dev": true, - "requires": { - "core-js": "^3.4", - "domexception": "^1.0.1", - "typeson": "^6.1.0", - "typeson-registry": "^1.0.0-alpha.20" - }, - "dependencies": { - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "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 - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "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==" - }, - "redux": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", - "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", - "requires": { - "@babel/runtime": "^7.9.2" + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "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": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], "dev": true, - "requires": { - "regenerate": "^1.4.2" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" } }, - "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==" - }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", - "dev": true - }, - "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], "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": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "remark-stringify": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", - "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" + "node_modules/vite/node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" } }, - "remixicon-react": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remixicon-react/-/remixicon-react-1.0.0.tgz", - "integrity": "sha512-KOXlc8EdKdujr2f/2idyFSQRjUB8p0HNiWZYBBzRsTRlTXFuSAFfnGq9culNjhCGmc92Jbtfr9OP0MXWvTMdsQ==", - "requires": {} - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "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" + "node_modules/vitest": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.31.4.tgz", + "integrity": "sha512-GoV0VQPmWrUFOZSg3RpQAPN+LPmHg2/gxlMNJlyxJihkz6qReHDV6b0pPDcqFLNEPya4tWJ1pgwUNP9MLmUfvQ==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.31.4", + "@vitest/runner": "0.31.4", + "@vitest/snapshot": "0.31.4", + "@vitest/spy": "0.31.4", + "@vitest/utils": "0.31.4", + "acorn": "^8.8.2", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.7", + "concordance": "^5.0.4", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "std-env": "^3.3.2", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.5.0", + "vite": "^3.0.0 || ^4.0.0", + "vite-node": "0.31.4", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" }, - "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==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": 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==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + "webdriverio": { + "optional": true } } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "node_modules/vitest/node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" } }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/vitest/node_modules/vite-node": { + "version": "0.31.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.31.4.tgz", + "integrity": "sha512-uzL377GjJtTbuc5KQxVbDu2xfU/x0wVjUtXQR2ihS21q/NK6ROr4oG0rsSkBBddZUVCwzfx22in76/0ZZHXgkQ==", "dev": true, - "requires": { - "resolve-from": "^5.0.0" + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.2.0", + "pathe": "^1.1.0", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "node_modules/vscode-lib": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/vscode-lib/-/vscode-lib-0.1.2.tgz", + "integrity": "sha512-X7YTInfdx0D7O5d5jxv5tirYNlZT3wwmB/auEWDq8nKrJCkZea48y1brADKWSfmmSCvmaZwG5RJ3VOQf/pPwMg==" }, - "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, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w==", + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, - "requires": { - "through": "~2.3.4" + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" } }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "node_modules/walk-up-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", "dev": true }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "loose-envify": "^1.0.0" } }, - "rollup": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.0.tgz", - "integrity": "sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA==", - "dev": true, - "peer": true, - "requires": { - "fsevents": "~2.3.2" + "node_modules/wasm-dce": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wasm-dce/-/wasm-dce-1.0.2.tgz", + "integrity": "sha512-Fq1+nu43ybsjSnBquLrW/cULmKs61qbv9k8ep13QUe0nABBezMoNAA+j6QY66MW0/eoDVDp1rjXDqQ2VKyS/Xg==", + "dependencies": { + "@babel/core": "^7.0.0-beta.39", + "@babel/traverse": "^7.0.0-beta.39", + "@babel/types": "^7.0.0-beta.39", + "babylon": "^7.0.0-beta.39", + "webassembly-interpreter": "0.0.30" } }, - "rollup-plugin-inject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", - "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1", - "magic-string": "^0.25.3", - "rollup-pluginutils": "^2.8.1" - }, + "node_modules/wasm-loader": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/wasm-loader/-/wasm-loader-1.3.0.tgz", + "integrity": "sha512-R4s75XH+o8qM+WaRrAU9S2rbAMDzob18/S3V8R9ZoFpZkPWLAohWWlzWAp1ybeTkOuuku/X1zJtxiV0pBYxZww==", "dependencies": { - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - } + "loader-utils": "^1.1.0", + "wasm-dce": "^1.0.0" + }, + "peerDependencies": { + "wasm-dce": "1.x" } }, - "rollup-plugin-node-polyfills": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", - "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", - "dev": true, - "requires": { - "rollup-plugin-inject": "^3.0.0" + "node_modules/wasm-loader/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "rollup-plugin-polyfill-node": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-polyfill-node/-/rollup-plugin-polyfill-node-0.10.2.tgz", - "integrity": "sha512-5GMywXiLiuQP6ZzED/LO/Q0HyDi2W6b8VN+Zd3oB0opIjyRs494Me2ZMaqKWDNbGiW4jvvzl6L2n4zRgxS9cSQ==", - "dev": true, - "requires": { - "@rollup/plugin-inject": "^4.0.0" + "node_modules/wasm-loader/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" } }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "requires": { - "estree-walker": "^0.6.1" + "dependencies": { + "defaults": "^1.0.3" } }, - "rope-sequence": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.3.tgz", - "integrity": "sha512-85aZYCxweiD5J8yTEbw+E6A27zSnLPNDL0WfPdw3YYodq7WjnTKo0q4dtyQ2gz23iPT8Q9CUyJtAaUNcTxRf5Q==" - }, - "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 - }, - "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==", - "requires": { - "queue-microtask": "^1.2.2" + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "rxjs": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", - "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, - "sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "requires": { - "mri": "^1.1.0" + "engines": { + "node": ">= 8" } }, - "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==" + "node_modules/web-vitals": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-1.1.2.tgz", + "integrity": "sha512-PFMKIY+bRSXlMxVAQ+m2aw9c/ioUYfDgrYot0YUa+/xa0sakubWhSDyxAKwzymvXVdF4CZI71g06W+mqhzu6ig==" }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "node_modules/webassembly-floating-point-hex-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/webassembly-floating-point-hex-parser/-/webassembly-floating-point-hex-parser-0.1.2.tgz", + "integrity": "sha512-TUf1H++8U10+stJbFydnvrpG5Sznz5Rilez/oZlV5zI0C/e4cSxd8rALAJ8VpTvjVWxLmL3SVSJUK6Ap9AoiNg==", + "engines": { + "node": "*" + } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "node_modules/webassembly-interpreter": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/webassembly-interpreter/-/webassembly-interpreter-0.0.30.tgz", + "integrity": "sha512-+Jdy2piEvz9T5j751mOE8+rBO12p+nNW6Fg4kJZ+zP1oUfsm+151sbAbM8AFxWTURmWCGP+r8Lxwfv3pzN1bCQ==", + "dependencies": { + "@babel/code-frame": "^7.0.0-beta.36", + "long": "^3.2.0", + "webassembly-floating-point-hex-parser": "0.1.2" + }, + "bin": { + "wasm": "lib/bin/repl.js", + "wasm2wast": "lib/bin/wasm2wast.js", + "wasmast": "lib/bin/wasmast.js", + "wasmdump": "lib/bin/wasmdump.js", + "wasmrun": "lib/bin/wasmrun.js", + "wastast": "lib/bin/wastast.js" + } }, - "saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "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, - "requires": { - "xmlchars": "^2.2.0" + "engines": { + "node": ">=12" } }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "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==", - "requires": { - "yallist": "^4.0.0" - } - } + "ms": "2.0.0" } }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/well-known-symbols": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", + "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", "dev": true, - "requires": { - "randombytes": "^2.1.0" + "engines": { + "node": ">=6" } }, - "set-blocking": { + "node_modules/whatwg-encoding": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, - "requires": { - "kind-of": "^6.0.2" + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" } }, - "shallow-equal": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", - "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "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==", + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "requires": { - "shebang-regex": "^3.0.0" + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "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==" }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" } }, - "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 - }, - "simple-peer": { - "version": "9.11.1", - "resolved": "https://registry.npmjs.org/simple-peer/-/simple-peer-9.11.1.tgz", - "integrity": "sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==", - "requires": { - "buffer": "^6.0.3", - "debug": "^4.3.2", - "err-code": "^3.0.1", - "get-browser-rtc": "^1.1.0", - "queue-microtask": "^1.2.3", - "randombytes": "^2.1.0", - "readable-stream": "^3.6.0" - }, + "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": { - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "err-code": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", - "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==" - } + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "sirv": { + "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", - "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" - }, "dependencies": { - "@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", - "dev": true - } + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "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 + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "socks": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz", - "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==", + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", "dev": true, - "requires": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "node_modules/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", "dev": true, - "requires": { - "is-plain-obj": "^2.0.0" + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } + "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "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 + "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, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "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==", + "node_modules/workerpool": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", "dev": true }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "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==", + "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" } }, - "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==", + "node_modules/wrap-ansi-cjs": { + "name": "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": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "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" } }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "speakingurl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", - "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==" - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "node_modules/wrap-ansi-cjs/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, - "requires": { - "through": "2" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "node_modules/wrap-ansi-cjs/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, - "requires": { - "readable-stream": "^3.0.0" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "node_modules/wrap-ansi-cjs/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 }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "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" + "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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" + "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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true + "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==" }, - "stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, - "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" + "node_modules/write-json-file": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", + "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", + "dev": true, + "dependencies": { + "detect-indent": "^6.0.0", + "graceful-fs": "^4.1.15", + "is-plain-obj": "^2.0.0", + "make-dir": "^3.0.0", + "sort-keys": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/write-json-file/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "engines": { + "node": ">=8" } }, - "string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "string.prototype.replaceall": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.replaceall/-/string.prototype.replaceall-1.0.6.tgz", - "integrity": "sha512-OA8VDhE7ssNFlyoDXUHxw6V5cjgPrtosyJKqJX5i1P5tV9eUynsbhx1yz0g+Ye4fjFwAxhKLxt8GSRx2Aqc+Sw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", - "is-regex": "^1.1.4" + "node_modules/write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">=8" } }, - "string.prototype.trim": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.6.tgz", - "integrity": "sha512-8lMR2m+U0VJTPp6JjvJTtGyc4FIGq9CdRt7O9p6T0e6K4vjU+OP+SQJpbe/SBmRcCUIvNUnjsbmY6lnMp8MhsQ==", + "node_modules/write-pkg/node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "engines": { + "node": ">=4" } }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "node_modules/write-pkg/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" } }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "node_modules/write-pkg/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" } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/write-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "requires": { - "ansi-regex": "^5.0.1" + "bin": { + "semver": "bin/semver" } }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { + "node_modules/write-pkg/node_modules/sort-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, - "requires": { - "min-indent": "^1.0.0" + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "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 + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "strip-literal": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-0.4.2.tgz", - "integrity": "sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw==", + "node_modules/write-pkg/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, - "requires": { - "acorn": "^8.8.0" + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, - "strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "node_modules/write-pkg/node_modules/write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", "dev": true, - "requires": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "engines": { + "node": ">=6" } }, - "styled-components": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.2.6.tgz", - "integrity": "sha512-CpFUIyKXl5JP0PYQ7aNncpn6Oxts+5JfMvvdhjIN2S8afPZbw/VdgVucNkMrPrMY7aIFoYrm4qwti1V+vyhi2g==", - "requires": { - "buffer": "^5.0.3", - "css-to-react-native": "^2.0.3", - "fbjs": "^0.8.16", - "hoist-non-react-statics": "^2.5.0", - "is-plain-object": "^2.0.1", - "prop-types": "^15.5.4", - "react-is": "^16.3.1", - "stylis": "^3.5.0", - "stylis-rule-sheet": "^0.0.10", - "supports-color": "^3.2.3" + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" }, - "dependencies": { - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==" - }, - "fbjs": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz", - "integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==", - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==" - }, - "hoist-non-react-statics": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", - "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, - "stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", - "requires": {} + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "requires": { - "has-flag": "^1.0.0" - } + "utf-8-validate": { + "optional": true } } }, - "stylis": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", - "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true, - "requires": { - "has-flag": "^4.0.0" + "engines": { + "node": ">=12" } }, - "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==" - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "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, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.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" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "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" - } - }, - "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" - } - } + "engines": { + "node": ">=0.4" } }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true + "node_modules/y-indexeddb": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/y-indexeddb/-/y-indexeddb-9.0.6.tgz", + "integrity": "sha512-8mdCYdzZDWS2lGiB9Reaz67ZqvnV6EXH/F7L+TmBC+3mWjIBrPw4UcI79nOhEOh+y9lHXzNpSda4YJ06M13F1A==", + "dependencies": { + "lib0": "^0.2.35" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + }, + "peerDependencies": { + "yjs": "^13.0.0" + } }, - "tabbable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-1.1.3.tgz", - "integrity": "sha512-nOWwx35/JuDI4ONuF0ZTo6lYvI0fY0tZCH1ErzY2EXfu4az50ZyiUX8X073FLiZtmWUVlkRnuXsehjJgCw9tYg==" + "node_modules/y-monaco": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/y-monaco/-/y-monaco-0.1.4.tgz", + "integrity": "sha512-RzAvjKJ2yt3VjlKK55U8STJyd1gz5/Qm6pjt7SAVb+k+g+KaSeTuSBGt+lURN+dzzSNs73ZkIAerW3JM0mzBSw==", + "dependencies": { + "lib0": "^0.2.43" + }, + "peerDependencies": { + "monaco-editor": ">=0.20.0", + "yjs": "^13.3.1" + } }, - "table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.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==" - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" - } + "node_modules/y-prosemirror": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/y-prosemirror/-/y-prosemirror-1.0.20.tgz", + "integrity": "sha512-LVMtu3qWo0emeYiP+0jgNcvZkqhzE/otOoro+87q0iVKxy/sMKuiJZnokfJdR4cn9qKx0Un5fIxXqbAlR2bFkA==", + "dependencies": { + "lib0": "^0.2.42" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + }, + "peerDependencies": { + "prosemirror-model": "^1.7.1", + "prosemirror-state": "^1.2.3", + "prosemirror-view": "^1.9.10", + "y-protocols": "^1.0.1", + "yjs": "^13.3.2" } }, - "tape": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/tape/-/tape-5.6.0.tgz", - "integrity": "sha512-LyM4uqbiTAqDgsHTY0r1LH66yE24P3SZaz5TL3mPUds0XCTFl/0AMUBrjgBjUclvbPTFB4IalXg0wFfbTuuu/Q==", - "dev": true, - "requires": { - "array.prototype.every": "^1.1.3", - "call-bind": "^1.0.2", - "deep-equal": "^2.0.5", - "defined": "^1.0.0", - "dotignore": "^0.1.2", - "for-each": "^0.3.3", - "get-package-type": "^0.1.0", - "glob": "^7.2.3", - "has": "^1.0.3", - "has-dynamic-import": "^2.0.1", - "inherits": "^2.0.4", - "is-regex": "^1.1.4", - "minimist": "^1.2.6", - "object-inspect": "^1.12.2", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.3", - "resolve": "^2.0.0-next.3", - "resumer": "^0.0.0", - "string.prototype.trim": "^1.2.6", - "through": "^2.3.8" + "node_modules/y-protocols": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.5.tgz", + "integrity": "sha512-Wil92b7cGk712lRHDqS4T90IczF6RkcvCwAD0A2OPg+adKmOe+nOiT/N2hvpQIWS3zfjmtL4CPaH5sIW1Hkm/A==", + "dependencies": { + "lib0": "^0.2.42" }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, + "node_modules/y-webrtc": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/y-webrtc/-/y-webrtc-10.2.5.tgz", + "integrity": "sha512-ZyBNvTI5L28sQ2PQI0T/JvyWgvuTq05L21vGkIlcvNLNSJqAaLCBJRe3FHEqXoaogqWmRcEAKGfII4ErNXMnNw==", "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } + "lib0": "^0.2.42", + "simple-peer": "^9.11.0", + "y-protocols": "^1.0.5" + }, + "bin": { + "y-webrtc-signaling": "bin/server.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + }, + "optionalDependencies": { + "ws": "^7.2.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" } }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "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, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "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" } }, - "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/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, - "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" + "engines": { + "node": ">=10" } }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true - }, - "tempy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.0.0.tgz", - "integrity": "sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==", + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "requires": { - "is-stream": "^3.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^2.12.2", - "unique-string": "^3.0.0" - }, "dependencies": { - "is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - } + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" } }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "engines": { + "node": ">=10" }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "node_modules/yjs": { + "version": "13.6.5", + "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.5.tgz", + "integrity": "sha512-5JdxEzrGpDJxMK99Cf1ICTAaplJf4xIW74ZPvXRzLJJd4PIxVX5ZYjhBsW8cXBPweSghPz95sPIVvyYtS9fHFQ==", + "dependencies": { + "lib0": "^0.2.74" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "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, - "requires": { - "readable-stream": "3" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "tiny-invariant": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", - "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" - }, - "tinybench": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.3.1.tgz", - "integrity": "sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==", - "dev": true + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "tinypool": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.0.tgz", - "integrity": "sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==", - "dev": true + "node_modules/zxcvbn": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz", + "integrity": "sha512-Bq0B+ixT/DMyG8kgX2xWcI5jUvCwqrMxSFam7m0lAf78nf04hv6lNCsyLYdyYTrCVMqNDY/206K7eExYCeSyUQ==" }, - "tinyspy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.2.tgz", - "integrity": "sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==", - "dev": true + "packages/common": { + "name": "@typecell-org/common", + "version": "0.0.3", + "dependencies": { + "buffer": "^6.0.3", + "string.prototype.replaceall": "^1.0.5", + "uuid": "^8.3.2" + }, + "devDependencies": { + "@types/uuid": "^8.3.4", + "rimraf": "^3.0.2", + "rollup-plugin-node-polyfills": "^0.2.1", + "typescript": "5.0.4" + } }, - "tippy.js": { - "version": "6.3.7", - "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", - "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", - "requires": { - "@popperjs/core": "^2.9.0" + "packages/common/node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "packages/common/node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, + "packages/editor": { + "name": "@typecell-org/editor", + "version": "0.0.3", + "dependencies": { + "@atlaskit/atlassian-navigation": "^2.2.6", + "@atlaskit/avatar": "^21.1.1", + "@atlaskit/banner": "^11.6.1", + "@atlaskit/breadcrumbs": "^11.7.3", + "@atlaskit/button": "^16.3.5", + "@atlaskit/checkbox": "^12.3.18", + "@atlaskit/comment": "^10.5.2", + "@atlaskit/css-reset": "^6.3.13", + "@atlaskit/dropdown-menu": "^11.3.0", + "@atlaskit/flag": "^14.6.3", + "@atlaskit/form": "^8.5.6", + "@atlaskit/inline-message": "^11.3.0", + "@atlaskit/menu": "^1.3.8", + "@atlaskit/modal-dialog": "^12.2.14", + "@atlaskit/page-header": "^10.2.3", + "@atlaskit/page-layout": "^1.3.10", + "@atlaskit/progress-bar": "^0.5.8", + "@atlaskit/section-message": "^6.1.14", + "@atlaskit/select": "^15.7.5", + "@atlaskit/spinner": "^15.1.14", + "@atlaskit/textarea": "^4.3.8", + "@atlaskit/textfield": "^5.1.12", + "@atlaskit/tree": "^8.6.1", + "@atlaskit/user-picker": "^9.3.1", + "@blocknote/core": "file:../../../BlockNote/packages/core", + "@blocknote/react": "file:../../../BlockNote/packages/react", + "@deck.gl/aggregation-layers": "^8.6.4", + "@deck.gl/core": "^8.6.4", + "@deck.gl/layers": "^8.6.4", + "@deck.gl/react": "^8.6.4", + "@emotion/react": "^11.4.0", + "@hocuspocus/provider": "^2.1.0", + "@loaders.gl/core": "^3.0.12", + "@loaders.gl/images": "^3.0.12", + "@matrix-org/olm": "3.2.12", + "@react-dnd/invariant": "^2.0.0", + "@react-dnd/shallowequal": "^2.0.0", + "@supabase/auth-ui-react": "^0.4.2", + "@supabase/auth-ui-shared": "^0.1.6", + "@supabase/supabase-js": "^2.26.0", + "@syncedstore/yjs-reactive-bindings": "^0.5.1", + "@tippyjs/react": "^4.2.5", + "@tiptap/core": "^2.0.3", + "@tiptap/extension-collaboration": "^2.0.0-beta.38", + "@tiptap/extension-collaboration-cursor": "^2.0.0-beta.37", + "@tiptap/react": "^2.0.3", + "@typecell-org/common": "^0.0.3", + "@typecell-org/engine": "^0.0.3", + "@typecell-org/parsers": "^0.0.3", + "@typescript/vfs": "^1.3.4", + "classnames": "^2.3.1", + "events": "^3.3.0", + "filebridge-client": "^0.1.5", + "fractional-indexing": "^2.0.0", + "frontend-collective-react-dnd-scrollzone": "1.0.2", + "history": "^5.3.0", + "lodash": "^4.17.21", + "lowlight": "^1.20.0", + "lz-string": "^1.4.4", + "markdown-it": "^12.0.2", + "matrix-crdt": "^0.2.0", + "matrix-js-sdk": "^19.4.0", + "mobx": "^6.2.0", + "mobx-react-lite": "^3.2.0", + "monaco-editor": "^0.35.0", + "penpal": "^6.1.0", + "prettier": "2.4.1", + "probe.gl": "^3.1.4", + "qs": "^6.10.1", + "react": "^18.2.0", + "react-avatar": "^3.10.0", + "react-dnd": "^14.0.2", + "react-dnd-html5-backend": "^14.0.0", + "react-dom": "^18.2.0", + "react-error-overlay": "^6.0.9", + "react-github-btn": "^1.2.1", + "react-icons": "^4.6.0", + "react-inspector": "^6.0.1", + "react-intl-next": "npm:react-intl@^5.18.1", + "react-router-dom": "^6.10.0", + "remixicon-react": "^1.0.0", + "semver": "^7.3.5", + "simple-peer": "^9.11.1", + "speakingurl": "^14.0.1", + "string.prototype.replaceall": "^1.0.5", + "styled-components": "3.2.6", + "tippy.js": "^6.3.1", + "ts-json-schema-generator": "v0.97.1-next.0", + "typescript": "5.0.4", + "typescript-json-schema": "^0.58.1", + "ua-parser-js": "^0.7.28", + "uuid": "^8.3.2", + "vscode-lib": "^0.1.2", + "wasm-loader": "^1.3.0", + "web-vitals": "^1.0.1", + "y-indexeddb": "9.0.6", + "y-monaco": "^0.1.4", + "y-protocols": "^1.0.5", + "y-webrtc": "^10.2.5", + "yjs": "^13.6.4", + "zxcvbn": "^4.4.2" + }, + "devDependencies": { + "@esbuild-plugins/node-globals-polyfill": "^0.1.1", + "@esbuild-plugins/node-modules-polyfill": "^0.1.4", + "@playwright/experimental-ct-react": "^1.33.0", + "@playwright/test": "^1.33.0", + "@svgr/webpack": "^5.5.0", + "@types/lodash": "^4.14.168", + "@types/lowlight": "0.0.2", + "@types/markdown-it": "^10.0.3", + "@types/node": "^16.0.0", + "@types/prettier": "^2.6.4", + "@types/qs": "^6.9.7", + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@types/semver": "^7.3.8", + "@types/speakingurl": "^13.0.2", + "@types/ua-parser-js": "^0.7.36", + "@types/uuid": "^8.3.0", + "@types/zxcvbn": "^4.4.1", + "@vitejs/plugin-react": "^4.0.0", + "connect-history-api-fallback": "^2.0.0", + "cross-env": "^7.0.3", + "eslint": "^8.21.0", + "eslint-config-react-app": "^7.0.1", + "fake-indexeddb": "^3.1.2", + "glob": "^7.2.0", + "jsdom": "^20.0.0", + "playwright-test": "^9.0.0", + "rimraf": "^3.0.2", + "rollup-plugin-node-polyfills": "^0.2.1", + "rollup-plugin-polyfill-node": "^0.12.0", + "vite": "^4.3.8", + "vitest": "^0.31.1" } }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "packages/editor/node_modules/@types/node": { + "version": "16.18.36", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.36.tgz", + "integrity": "sha512-8egDX8dE50XyXWH6C6PRCNkTP106DuUrvdrednFouDSmCi7IOvrqr0frznfZaHifHH/3aq/7a7v9N4wdXMqhBQ==", + "devOptional": true }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" + "packages/editor/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" } }, - "totalist": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", - "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", - "dev": true - }, - "tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, + "packages/editor/node_modules/dnd-core": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/dnd-core/-/dnd-core-14.0.1.tgz", + "integrity": "sha512-+PVS2VPTgKFPYWo3vAFEA8WPbTf7/xo43TifH9G8S1KqnrQu0o77A3unrF5yOugy4mIz7K5wAVFHUcha7wsz6A==", "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true - } - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "treeverse": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", - "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", - "dev": true - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, - "trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" - }, - "trouter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/trouter/-/trouter-2.0.1.tgz", - "integrity": "sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==", - "dev": true, - "requires": { - "matchit": "^1.0.0" + "@react-dnd/asap": "^4.0.0", + "@react-dnd/invariant": "^2.0.0", + "redux": "^4.1.1" } }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, + "packages/editor/node_modules/react-dnd": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/react-dnd/-/react-dnd-14.0.5.tgz", + "integrity": "sha512-9i1jSgbyVw0ELlEVt/NkCUkxy1hmhJOkePoCH713u75vzHGyXhPDm28oLfc2NMSBjZRM1Y+wRjHXJT3sPrTy+A==", "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true + "@react-dnd/invariant": "^2.0.0", + "@react-dnd/shallowequal": "^2.0.0", + "dnd-core": "14.0.1", + "fast-deep-equal": "^3.1.3", + "hoist-non-react-statics": "^3.3.2" + }, + "peerDependencies": { + "@types/hoist-non-react-statics": ">= 3.3.1", + "@types/node": ">= 12", + "@types/react": ">= 16", + "react": ">= 16.14" + }, + "peerDependenciesMeta": { + "@types/hoist-non-react-statics": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@types/react": { + "optional": true } } }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "tsutils": { - "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" - }, + "packages/editor/node_modules/ts-json-schema-generator": { + "version": "0.97.1-next.0", + "resolved": "https://registry.npmjs.org/ts-json-schema-generator/-/ts-json-schema-generator-0.97.1-next.0.tgz", + "integrity": "sha512-LTq3lFhwiayiORTM/1nXFifbvlUnz2A/0Vi0qs/+WlVMVVMU4cxmMRrwp7sMySsaUIhWfqP3i5dOikUK90rN9g==", "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "@types/json-schema": "^7.0.9", + "commander": "^8.3.0", + "glob": "^7.2.0", + "json5": "^2.2.0", + "safe-stable-stringify": "^2.3.1", + "typescript": "~4.5.4" + }, + "bin": { + "ts-json-schema-generator": "bin/ts-json-schema-generator" + }, + "engines": { + "node": ">=10.0.0" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "requires": { - "safe-buffer": "^5.0.1" + "packages/editor/node_modules/ts-json-schema-generator/node_modules/typescript": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "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": { - "prelude-ls": "^1.2.1" + "packages/editor/node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" } }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "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 - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" + "packages/engine": { + "name": "@typecell-org/engine", + "version": "0.0.3", + "dependencies": { + "es-module-shims": "1.4.3", + "lodash": "^4.17.21", + "mobx": "^6.2.0", + "react": "^18.2.0", + "vscode-lib": "^0.1.2" + }, + "devDependencies": { + "@playwright/test": "^1.33.0", + "@types/chai": "^4.3.0", + "@types/lodash": "^4.14.182", + "@types/mocha": "^9.1.0", + "@types/react": "^18.0.25", + "@vitest/coverage-c8": "^0.24.4", + "chai": "^4.3.6", + "jsdom": "^20.0.0", + "mocha": "^9.2.1", + "playwright-test": "^9.0.0", + "rimraf": "^3.0.2", + "typescript": "5.0.4", + "vitest": "^0.24.4" } }, - "typescript": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", - "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", - "devOptional": true, - "peer": true - }, - "typeson": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/typeson/-/typeson-6.1.0.tgz", - "integrity": "sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA==", - "dev": true - }, - "typeson-registry": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/typeson-registry/-/typeson-registry-1.0.0-alpha.39.tgz", - "integrity": "sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw==", + "packages/engine/node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], "dev": true, - "requires": { - "base64-arraybuffer-es6": "^0.7.0", - "typeson": "^6.0.0", - "whatwg-url": "^8.4.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" - }, - "ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==" - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "uglify-js": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", - "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", + "packages/engine/node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], "dev": true, - "optional": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unhomoglyph": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unhomoglyph/-/unhomoglyph-1.0.6.tgz", - "integrity": "sha512-7uvcWI3hWshSADBu4JpnyYbTVc7YlhF5GDW/oPD5AxIxl34k4wXR3WDkPnzLxkN32LiTCTKMQLtKVZiwki3zGg==" - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "packages/engine/node_modules/esbuild": { + "version": "0.15.18", "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, + "packages/engine/node_modules/rollup": { + "version": "2.79.1", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true - }, - "unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, + "packages/engine/node_modules/strip-literal": { + "version": "0.4.2", + "dev": true, + "license": "MIT", "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==" - }, - "is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" - } + "acorn": "^8.8.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "packages/engine/node_modules/tinypool": { + "version": "0.3.1", "dev": true, - "requires": { - "unique-slug": "^2.0.0" + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "packages/engine/node_modules/tinyspy": { + "version": "1.1.1", "dev": true, - "requires": { - "imurmurhash": "^0.1.4" + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, - "unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "packages/engine/node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", "dev": true, - "requires": { - "crypto-random-string": "^4.0.0" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" } }, - "unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==" - }, - "unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "requires": { - "@types/unist": "^2.0.0" + "packages/engine/node_modules/vite": { + "version": "3.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "unist-util-visit": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", - "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.1.1" + "packages/engine/node_modules/vitest": { + "version": "0.24.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^4.3.3", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "strip-literal": "^0.4.2", + "tinybench": "^2.3.1", + "tinypool": "^0.3.0", + "tinyspy": "^1.0.2", + "vite": "^3.0.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } } }, - "unist-util-visit-parents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", - "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "packages/packager": { + "name": "@typecell-org/packager", + "version": "0.0.3", + "dependencies": { + "@typecell-org/common": "*", + "@typecell-org/engine": "*", + "@typecell-org/parsers": "*", + "es-module-shims": "1.4.3", + "fast-glob": "^3.2.12", + "lodash": "^4.17.21", + "mobx": "^6.2.0", + "react": "^18.2.0", + "vscode-lib": "^0.1.2" + }, + "devDependencies": { + "@playwright/test": "^1.33.0", + "@types/chai": "^4.3.0", + "@types/fs-extra": "9.0.13", + "@types/lodash": "^4.14.182", + "@types/mocha": "^9.1.0", + "@types/react": "^18.0.25", + "@vitest/coverage-c8": "^0.24.4", + "chai": "^4.3.6", + "jsdom": "^20.0.0", + "mocha": "^9.2.1", + "playwright-test": "^9.0.0", + "rimraf": "^3.0.2", + "typescript": "5.0.4", + "vitest": "^0.24.4" } }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "dev": true + "packages/packager/node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true + "packages/packager/node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "update-browserslist-db": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", - "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "packages/packager/node_modules/esbuild": { + "version": "0.15.18", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, + "packages/packager/node_modules/rollup": { + "version": "2.79.1", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" + "packages/packager/node_modules/strip-literal": { + "version": "0.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.8.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "packages/packager/node_modules/tinypool": { + "version": "0.3.1", "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, - "use-callback-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", - "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", - "requires": { - "tslib": "^2.0.0" + "packages/packager/node_modules/tinyspy": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, - "use-memo-one": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.3.tgz", - "integrity": "sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==", - "requires": {} - }, - "use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "requires": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" + "packages/packager/node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "packages/packager/node_modules/vite": { + "version": "3.2.6", "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" + "license": "MIT", + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "uvu": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", - "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", - "requires": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" + "packages/packager/node_modules/vitest": { + "version": "0.24.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^4.3.3", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "strip-literal": "^0.4.2", + "tinybench": "^2.3.1", + "tinypool": "^0.3.0", + "tinyspy": "^1.0.2", + "vite": "^3.0.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } } }, - "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 + "packages/parsers": { + "name": "@typecell-org/parsers", + "version": "0.0.3", + "dependencies": { + "@typecell-org/common": "*", + "@typecell-org/engine": "*", + "fs-extra": "^10.1.0", + "remark-parse": "^10.0.1", + "remark-stringify": "^10.0.2", + "unified": "^10.0.1", + "vscode-lib": "^0.1.2" + }, + "devDependencies": { + "@playwright/test": "^1.33.0", + "@types/fs-extra": "9.0.13", + "@types/react": "^18.0.25", + "@vitest/coverage-c8": "^0.24.4", + "fast-glob": "^3.2.12", + "jsdom": "^20.0.0", + "playwright-test": "^9.0.0", + "rimraf": "^3.0.2", + "typescript": "5.0.4", + "vitest": "^0.24.4" + } }, - "v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "packages/parsers/node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "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==", + "packages/parsers/node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "packages/parsers/node_modules/esbuild": { + "version": "0.15.18", "dev": true, - "requires": { - "builtins": "^5.0.0" + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - }, + "packages/parsers/node_modules/fs-extra": { + "version": "10.1.0", + "license": "MIT", "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - } + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "vfile": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz", - "integrity": "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "packages/parsers/node_modules/rollup": { + "version": "2.79.1", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "packages/parsers/node_modules/strip-literal": { + "version": "0.4.2", + "dev": true, + "license": "MIT", "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==" - } + "acorn": "^8.8.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "vfile-message": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", - "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "packages/parsers/node_modules/tinypool": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "packages/parsers/node_modules/tinyspy": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "packages/parsers/node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" } }, - "vite": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.9.tgz", - "integrity": "sha512-waYABTM+G6DBTCpYAxvevpG50UOlZuynR0ckTK5PawNVt7ebX6X7wNXHaGIO6wYYFXSM7/WcuFuO2QzhBB6aMw==", + "packages/parsers/node_modules/vite": { + "version": "3.2.6", "dev": true, - "requires": { - "esbuild": "^0.14.47", - "fsevents": "~2.3.2", - "postcss": "^8.4.16", + "license": "MIT", + "dependencies": { + "esbuild": "^0.15.9", + "postcss": "^8.4.18", "resolve": "^1.22.1", - "rollup": ">=2.75.6 <2.77.0 || ~2.77.0" + "rollup": "^2.79.1" }, - "dependencies": { - "@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "dev": true, - "optional": true - }, - "esbuild": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", - "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", - "dev": true, - "requires": { - "@esbuild/linux-loong64": "0.14.54", - "esbuild-android-64": "0.14.54", - "esbuild-android-arm64": "0.14.54", - "esbuild-darwin-64": "0.14.54", - "esbuild-darwin-arm64": "0.14.54", - "esbuild-freebsd-64": "0.14.54", - "esbuild-freebsd-arm64": "0.14.54", - "esbuild-linux-32": "0.14.54", - "esbuild-linux-64": "0.14.54", - "esbuild-linux-arm": "0.14.54", - "esbuild-linux-arm64": "0.14.54", - "esbuild-linux-mips64le": "0.14.54", - "esbuild-linux-ppc64le": "0.14.54", - "esbuild-linux-riscv64": "0.14.54", - "esbuild-linux-s390x": "0.14.54", - "esbuild-netbsd-64": "0.14.54", - "esbuild-openbsd-64": "0.14.54", - "esbuild-sunos-64": "0.14.54", - "esbuild-windows-32": "0.14.54", - "esbuild-windows-64": "0.14.54", - "esbuild-windows-arm64": "0.14.54" - } - }, - "esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", - "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", - "dev": true, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { "optional": true }, - "esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", - "dev": true, + "less": { "optional": true }, - "esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", - "dev": true, + "sass": { "optional": true }, - "esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", - "dev": true, + "stylus": { "optional": true }, - "esbuild-windows-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", - "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", - "dev": true, + "sugarss": { "optional": true }, - "esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", - "dev": true, + "terser": { "optional": true - }, - "rollup": { - "version": "2.77.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", - "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } } } }, - "vitest": { - "version": "0.24.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.24.4.tgz", - "integrity": "sha512-4ratHSyVEJPtBLV00uhL4Wj3Pmandc9rsxUkE0q9peNOfaOgGF4lEepdkaXGRi9AGFKr1GRVtjGOJ6Fp2lCpEg==", + "packages/parsers/node_modules/vitest": { + "version": "0.24.5", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "@types/chai": "^4.3.3", "@types/chai-subset": "^1.3.3", "@types/node": "*", @@ -37960,561 +29945,320 @@ "tinypool": "^0.3.0", "tinyspy": "^1.0.2", "vite": "^3.0.0" - } - }, - "vscode-lib": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/vscode-lib/-/vscode-lib-0.1.2.tgz", - "integrity": "sha512-X7YTInfdx0D7O5d5jxv5tirYNlZT3wwmB/auEWDq8nKrJCkZea48y1brADKWSfmmSCvmaZwG5RJ3VOQf/pPwMg==" - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-keyname": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz", - "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==" - }, - "w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", - "dev": true, - "requires": { - "xml-name-validator": "^4.0.0" - } - }, - "walk-up-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", - "dev": true - }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "wasm-dce": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wasm-dce/-/wasm-dce-1.0.2.tgz", - "integrity": "sha512-Fq1+nu43ybsjSnBquLrW/cULmKs61qbv9k8ep13QUe0nABBezMoNAA+j6QY66MW0/eoDVDp1rjXDqQ2VKyS/Xg==", - "requires": { - "@babel/core": "^7.0.0-beta.39", - "@babel/traverse": "^7.0.0-beta.39", - "@babel/types": "^7.0.0-beta.39", - "babylon": "^7.0.0-beta.39", - "webassembly-interpreter": "0.0.30" - } - }, - "wasm-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/wasm-loader/-/wasm-loader-1.3.0.tgz", - "integrity": "sha512-R4s75XH+o8qM+WaRrAU9S2rbAMDzob18/S3V8R9ZoFpZkPWLAohWWlzWAp1ybeTkOuuku/X1zJtxiV0pBYxZww==", - "requires": { - "loader-utils": "^1.1.0", - "wasm-dce": "^1.0.0" }, - "dependencies": { - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true } } }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "web-vitals": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-1.1.2.tgz", - "integrity": "sha512-PFMKIY+bRSXlMxVAQ+m2aw9c/ioUYfDgrYot0YUa+/xa0sakubWhSDyxAKwzymvXVdF4CZI71g06W+mqhzu6ig==" - }, - "webassembly-floating-point-hex-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/webassembly-floating-point-hex-parser/-/webassembly-floating-point-hex-parser-0.1.2.tgz", - "integrity": "sha512-TUf1H++8U10+stJbFydnvrpG5Sznz5Rilez/oZlV5zI0C/e4cSxd8rALAJ8VpTvjVWxLmL3SVSJUK6Ap9AoiNg==" - }, - "webassembly-interpreter": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/webassembly-interpreter/-/webassembly-interpreter-0.0.30.tgz", - "integrity": "sha512-+Jdy2piEvz9T5j751mOE8+rBO12p+nNW6Fg4kJZ+zP1oUfsm+151sbAbM8AFxWTURmWCGP+r8Lxwfv3pzN1bCQ==", - "requires": { - "@babel/code-frame": "^7.0.0-beta.36", - "long": "^3.2.0", - "webassembly-floating-point-hex-parser": "0.1.2" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "requires": { - "iconv-lite": "0.6.3" - }, + "packages/server": { + "name": "@typecell-org/server", + "version": "0.0.3", "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } + "@hocuspocus/extension-database": "^2.1.0", + "@hocuspocus/extension-logger": "^2.1.0", + "@hocuspocus/server": "^2.1.0", + "@supabase/supabase-js": "^2.12.1", + "@typecell-org/common": "^0.0.3", + "dotenv": "^16.3.1", + "vscode-lib": "^0.1.2" + }, + "devDependencies": { + "@hocuspocus/provider": "^2.1.0", + "@playwright/test": "^1.33.0", + "@vitest/coverage-c8": "^0.24.4", + "jsdom": "^20.0.0", + "nanoid": "^4.0.1", + "playwright-test": "^9.0.0", + "supabase": "^1.68.6", + "typescript": "5.0.4", + "vite-node": "^0.29.7", + "vitest": "^0.24.4", + "ws": "^8.13.0", + "yjs": "^13.6.4" } }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" - }, - "whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "packages/server/node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "packages/server/node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dev": true, - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "packages/server/node_modules/dotenv": { + "version": "16.3.1", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, - "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "packages/server/node_modules/esbuild": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", + "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", "dev": true, - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, + "packages/server/node_modules/rollup": { + "version": "2.79.1", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "packages/server/node_modules/strip-literal": { + "version": "0.4.2", "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "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 - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, + "license": "MIT", "dependencies": { - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" - } + "acorn": "^8.8.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "packages/server/node_modules/tinypool": { + "version": "0.3.1", "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "packages/server/node_modules/tinyspy": { + "version": "1.1.1", "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "license": "MIT", + "engines": { + "node": ">=14.0.0" } }, - "write-json-file": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", - "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", + "packages/server/node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", "dev": true, - "requires": { - "detect-indent": "^6.0.0", - "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - } + "engines": { + "node": ">=12.20" } }, - "write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "packages/server/node_modules/vite": { + "version": "3.2.6", "dev": true, - "requires": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, + "license": "MIT", "dependencies": { - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true + "esbuild": "^0.15.9", + "postcss": "^8.4.18", + "resolve": "^1.22.1", + "rollup": "^2.79.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true + "less": { + "optional": true }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } + "sass": { + "optional": true }, - "type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true + "stylus": { + "optional": true }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } + "sugarss": { + "optional": true }, - "write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "requires": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - } + "terser": { + "optional": true } } }, - "ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "packages/server/node_modules/vitest": { + "version": "0.24.5", "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "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 - }, - "y-indexeddb": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/y-indexeddb/-/y-indexeddb-9.0.6.tgz", - "integrity": "sha512-8mdCYdzZDWS2lGiB9Reaz67ZqvnV6EXH/F7L+TmBC+3mWjIBrPw4UcI79nOhEOh+y9lHXzNpSda4YJ06M13F1A==", - "requires": { - "lib0": "^0.2.35" - } - }, - "y-monaco": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/y-monaco/-/y-monaco-0.1.4.tgz", - "integrity": "sha512-RzAvjKJ2yt3VjlKK55U8STJyd1gz5/Qm6pjt7SAVb+k+g+KaSeTuSBGt+lURN+dzzSNs73ZkIAerW3JM0mzBSw==", - "requires": { - "lib0": "^0.2.43" - } - }, - "y-prosemirror": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/y-prosemirror/-/y-prosemirror-1.0.20.tgz", - "integrity": "sha512-LVMtu3qWo0emeYiP+0jgNcvZkqhzE/otOoro+87q0iVKxy/sMKuiJZnokfJdR4cn9qKx0Un5fIxXqbAlR2bFkA==", - "requires": { - "lib0": "^0.2.42" - } - }, - "y-protocols": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.5.tgz", - "integrity": "sha512-Wil92b7cGk712lRHDqS4T90IczF6RkcvCwAD0A2OPg+adKmOe+nOiT/N2hvpQIWS3zfjmtL4CPaH5sIW1Hkm/A==", - "requires": { - "lib0": "^0.2.42" - } - }, - "y-webrtc": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/y-webrtc/-/y-webrtc-10.2.3.tgz", - "integrity": "sha512-X7a6c56/jWhEI8LHLmT3LgzwbPA4r8h46pdVvV+55EQJhi+K6RfmisWgj7h6/2gkB0yveq7iDxlmyrYGnAKW/Q==", - "requires": { - "lib0": "^0.2.42", - "simple-peer": "^9.11.0", - "ws": "^7.2.0", - "y-protocols": "^1.0.5" - }, + "license": "MIT", "dependencies": { - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "optional": true, - "requires": {} + "@types/chai": "^4.3.3", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "chai": "^4.3.6", + "debug": "^4.3.4", + "local-pkg": "^0.4.2", + "strip-literal": "^0.4.2", + "tinybench": "^2.3.1", + "tinypool": "^0.3.0", + "tinyspy": "^1.0.2", + "vite": "^3.0.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.16.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true } } }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "packages/server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" + "engines": { + "node": ">=10.0.0" }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true + "utf-8-validate": { + "optional": true } } - }, - "yjs": { - "version": "13.5.41", - "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.5.41.tgz", - "integrity": "sha512-4eSTrrs8OeI0heXKKioRY4ag7V5Bk85Z4MeniUyown3o3y0G7G4JpAZWrZWfTp7pzw2b53GkAQWKqHsHi9j9JA==", - "requires": { - "lib0": "^0.2.49" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, - "zwitch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", - "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==" - }, - "zxcvbn": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/zxcvbn/-/zxcvbn-4.4.2.tgz", - "integrity": "sha512-Bq0B+ixT/DMyG8kgX2xWcI5jUvCwqrMxSFam7m0lAf78nf04hv6lNCsyLYdyYTrCVMqNDY/206K7eExYCeSyUQ==" } } } diff --git a/package.json b/package.json index c2f0050cb..8efc868dd 100644 --- a/package.json +++ b/package.json @@ -3,11 +3,12 @@ "private": true, "license": "AGPL-3.0", "devDependencies": { - "lerna": "^5.0.0", - "playwright": "^1.18.1", - "patch-package": "^6.4.7", + "@playwright/experimental-ct-react": "^1.33.0", "@types/react": "^18.0.25", - "@types/react-dom": "^18.0.9" + "@types/react-dom": "^18.0.9", + "lerna": "^5.0.0", + "patch-package": "^7.0.0", + "playwright": "^1.33.0" }, "workspaces": [ "packages/*" @@ -26,17 +27,17 @@ "lint": "lerna run lint --concurrency 1 --stream", "watch": "npm run build && lerna run --parallel watch", "start": "npm run start-react", - "start-filebridge": "npx filebridge docs", + "start-filebridge": "npx filebridge packages/editor/public/_docs", "start-react": "lerna run --scope @typecell-org/editor start --stream", - "start:local": "lerna run --scope @typecell-org/editor start:local --stream", "start:preview": "lerna run --scope @typecell-org/editor preview --stream", + "start:server": "lerna run --scope @typecell-org/server dev --stream", "prepublishOnly": "npm run test && npm run build", "deploy": "lerna publish", "link-matrix-crdt": "npm link matrix-crdt" }, "overrides": { "--comment": "needed so that playwright-test doesn't install a different version of pw", - "playwright-core": "1.24.2", + "playwright-core": "1.33.0", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9" } diff --git a/packages/common/package.json b/packages/common/package.json index aa79b15b2..5ed32ba58 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -9,7 +9,7 @@ }, "devDependencies": { "rimraf": "^3.0.2", - "typescript": "4.5.5", + "typescript": "5.0.4", "@types/uuid": "^8.3.4", "rollup-plugin-node-polyfills": "^0.2.1" }, diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 0872bb70a..636da16e0 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -3,4 +3,4 @@ import * as binary from "./binary.js"; import * as error from "./error.js"; import * as uniqueId from "./uniqueId.js"; -export { base64, uniqueId, binary, error }; +export { base64, binary, error, uniqueId }; diff --git a/packages/common/src/uniqueId.ts b/packages/common/src/uniqueId.ts index 4c9db4cad..9025abe1f 100644 --- a/packages/common/src/uniqueId.ts +++ b/packages/common/src/uniqueId.ts @@ -1,8 +1,22 @@ -import replaceAll from "string.prototype.replaceall"; -import { v4 as uuidv4 } from "uuid"; -(replaceAll as any).shim(); +import * as nano from "nanoid"; +import { UnreachableCaseError } from "./error.js"; +const alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz"; +const nanoid = nano.customAlphabet(alphabet, 12); -export function generate() { - // remove dashes because we can't easily use those in javascript variable names - return uuidv4().replaceAll("-", ""); +export function generateId(type: "document" | "block" | "reference") { + // don't start with a number because programming languages don't like that for variable names + let id = nanoid(); + while (id[0] >= "0" && id[0] <= "9") { + id = nanoid(); + } + + if (type === "document") { + return "d" + id; + } else if (type === "block") { + return "b" + id; + } else if (type === "reference") { + return "r" + id; + } else { + throw new UnreachableCaseError(type); + } } diff --git a/packages/commonTest/src/randomUser.ts b/packages/commonTest/src/randomUser.ts new file mode 100644 index 000000000..aab0e382c --- /dev/null +++ b/packages/commonTest/src/randomUser.ts @@ -0,0 +1,13 @@ +export function getRandomUserData(basename: string) { + const randomID = Math.random() + .toString(36) + .replace(/[^a-z]+/g, "") + .substring(0, 5); + + const name = basename + "-" + randomID; + return { + email: `${name}@email.com`, + password: `password-${name}`, + name, + }; +} diff --git a/packages/commonTest/tsconfig.json b/packages/commonTest/tsconfig.json new file mode 100644 index 000000000..11fdfa948 --- /dev/null +++ b/packages/commonTest/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "es6", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "downlevelIteration": true + }, + "include": ["src"] +} diff --git a/packages/editor/.env.development b/packages/editor/.env.development new file mode 100644 index 000000000..938738eaa --- /dev/null +++ b/packages/editor/.env.development @@ -0,0 +1,7 @@ +# Note: keep this file in sync with env.ts +VITE_ENVIRONMENT=DEV +VITE_TYPECELL_BACKEND_WS_URL=ws://localhost:1234 +VITE_TYPECELL_SUPABASE_URL=http://localhost:54321 +VITE_TYPECELL_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0 +VITE_MATRIX_HOMESERVER_URI=https://mx.typecell.org +VITE_MATRIX_HOMESERVER_NAME=typecell.org \ No newline at end of file diff --git a/packages/editor/.env.production b/packages/editor/.env.production new file mode 100644 index 000000000..4f88be449 --- /dev/null +++ b/packages/editor/.env.production @@ -0,0 +1,6 @@ +VITE_ENVIRONMENT=PROD +VITE_TYPECELL_BACKEND_WS_URL=wss://backend.typecell.org/ +VITE_TYPECELL_SUPABASE_URL=https://guzxrzrjknsekuefovon.supabase.co +VITE_TYPECELL_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imd1enhyenJqa25zZWt1ZWZvdm9uIiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODc0MjIzMDUsImV4cCI6MjAwMjk5ODMwNX0.2ZvW9nvWHSy1BFIBQYBxEysB2VJS761wpPiPmpe5Yqk +VITE_MATRIX_HOMESERVER_URI=https://mx.typecell.org +VITE_MATRIX_HOMESERVER_NAME=typecell.org \ No newline at end of file diff --git a/packages/editor/.env.staging b/packages/editor/.env.staging new file mode 100644 index 000000000..74598b9da --- /dev/null +++ b/packages/editor/.env.staging @@ -0,0 +1,6 @@ +VITE_ENVIRONMENT=STAGING +VITE_TYPECELL_BACKEND_WS_URL=wss://backend.staging.typecell.org/ +VITE_TYPECELL_SUPABASE_URL=https://glsqqdamehahvdqssxow.supabase.co +VITE_TYPECELL_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imdsc3FxZGFtZWhhaHZkcXNzeG93Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODc0MjIzNTksImV4cCI6MjAwMjk5ODM1OX0.Z4_bs6Zcq2MtoKlCK-R_-7MFHOa4NeK_axCgGtLheIY +VITE_MATRIX_HOMESERVER_URI=https://mx.typecell.org +VITE_MATRIX_HOMESERVER_NAME=typecell.org \ No newline at end of file diff --git a/packages/editor/.env.test b/packages/editor/.env.test new file mode 100644 index 000000000..bc86ad45c --- /dev/null +++ b/packages/editor/.env.test @@ -0,0 +1,6 @@ +VITE_ENVIRONMENT=DEV +VITE_TYPECELL_BACKEND_WS_URL=ws://localhost:1234 +VITE_TYPECELL_SUPABASE_URL=http://localhost:54321 +VITE_TYPECELL_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0 +VITE_MATRIX_HOMESERVER_URI=https://mx.typecell.org +VITE_MATRIX_HOMESERVER_NAME=typecell.org \ No newline at end of file diff --git a/packages/editor/.gitignore b/packages/editor/.gitignore index bba769f27..45d337387 100644 --- a/packages/editor/.gitignore +++ b/packages/editor/.gitignore @@ -2,4 +2,5 @@ build # Playwright test-results/ -playwright-report/ \ No newline at end of file +playwright-report/ +playwright/.cache \ No newline at end of file diff --git a/packages/editor/.npmrc b/packages/editor/.npmrc deleted file mode 100644 index 45c69bbe0..000000000 --- a/packages/editor/.npmrc +++ /dev/null @@ -1 +0,0 @@ -@matrix-org:registry=https://gitlab.matrix.org/api/v4/packages/npm/ diff --git a/packages/editor/package.json b/packages/editor/package.json index 481913f0b..c4439bf4b 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -3,6 +3,7 @@ "version": "0.0.3", "private": true, "dependencies": { + "@hocuspocus/provider": "^2.1.0", "@atlaskit/atlassian-navigation": "^2.2.6", "@atlaskit/avatar": "^21.1.1", "@atlaskit/banner": "^11.6.1", @@ -11,7 +12,6 @@ "@atlaskit/checkbox": "^12.3.18", "@atlaskit/comment": "^10.5.2", "@atlaskit/css-reset": "^6.3.13", - "@atlaskit/user-picker": "^9.3.1", "@atlaskit/dropdown-menu": "^11.3.0", "@atlaskit/flag": "^14.6.3", "@atlaskit/form": "^8.5.6", @@ -19,16 +19,20 @@ "@atlaskit/menu": "^1.3.8", "@atlaskit/modal-dialog": "^12.2.14", "@atlaskit/page-header": "^10.2.3", - "@atlaskit/page-layout": "^1.2.7", + "@atlaskit/page-layout": "^1.3.10", "@atlaskit/progress-bar": "^0.5.8", "@atlaskit/section-message": "^6.1.14", - "@atlaskit/spinner": "^15.1.14", "@atlaskit/select": "^15.7.5", + "@atlaskit/spinner": "^15.1.14", "@atlaskit/textarea": "^4.3.8", "@atlaskit/textfield": "^5.1.12", "@atlaskit/tree": "^8.6.1", - "@tiptap/extension-collaboration": "^2.0.0-beta.38", - "@tiptap/extension-collaboration-cursor": "^2.0.0-beta.37", + "@atlaskit/user-picker": "^9.3.1", + "@tiptap/react": "^2.0.3", + "@blocknote/core": "file:../../../BlockNote/packages/core", + "@blocknote/react": "file:../../../BlockNote/packages/react", + "@react-dnd/invariant": "^2.0.0", + "@react-dnd/shallowequal": "^2.0.0", "@deck.gl/aggregation-layers": "^8.6.4", "@deck.gl/core": "^8.6.4", "@deck.gl/layers": "^8.6.4", @@ -37,17 +41,25 @@ "@loaders.gl/core": "^3.0.12", "@loaders.gl/images": "^3.0.12", "@matrix-org/olm": "3.2.12", - "@syncedstore/yjs-reactive-bindings": "^0.4.0", + "@supabase/auth-ui-react": "^0.4.2", + "@supabase/auth-ui-shared": "^0.1.6", + "@supabase/supabase-js": "^2.26.0", + "@syncedstore/yjs-reactive-bindings": "^0.5.1", "@tippyjs/react": "^4.2.5", - "@typecell-org/parsers": "^0.0.3", + "@tiptap/core": "^2.0.3", + "@tiptap/react": "^2.0.3", + "@tiptap/extension-collaboration": "^2.0.0-beta.38", + "@tiptap/extension-collaboration-cursor": "^2.0.0-beta.37", "@typecell-org/common": "^0.0.3", "@typecell-org/engine": "^0.0.3", + "@typecell-org/parsers": "^0.0.3", "@typescript/vfs": "^1.3.4", - "@blocknote/core": "^0.1.0", "classnames": "^2.3.1", + "events": "^3.3.0", "filebridge-client": "^0.1.5", "fractional-indexing": "^2.0.0", "frontend-collective-react-dnd-scrollzone": "1.0.2", + "history": "^5.3.0", "lodash": "^4.17.21", "lowlight": "^1.20.0", "lz-string": "^1.4.4", @@ -71,27 +83,28 @@ "react-icons": "^4.6.0", "react-inspector": "^6.0.1", "react-intl-next": "npm:react-intl@^5.18.1", + "react-router-dom": "^6.10.0", "remixicon-react": "^1.0.0", "semver": "^7.3.5", - "speakingurl": "^14.0.1", "simple-peer": "^9.11.1", + "speakingurl": "^14.0.1", "string.prototype.replaceall": "^1.0.5", "styled-components": "3.2.6", "tippy.js": "^6.3.1", - "typescript": "4.5.5", + "typescript": "5.0.4", + "typescript-json-schema": "^0.58.1", + "ts-json-schema-generator": "v0.97.1-next.0", "ua-parser-js": "^0.7.28", "uuid": "^8.3.2", "vscode-lib": "^0.1.2", "wasm-loader": "^1.3.0", "web-vitals": "^1.0.1", "y-indexeddb": "9.0.6", - "y-monaco": "^0.1.3", - "y-webrtc": "^10.1.8", + "y-monaco": "^0.1.4", "y-protocols": "^1.0.5", - "yjs": "^13.5.41", - "zxcvbn": "^4.4.2", - "react-router-dom": "6.2.2", - "events": "^3.3.0" + "y-webrtc": "^10.2.5", + "yjs": "^13.6.4", + "zxcvbn": "^4.4.2" }, "scripts": { "copytypes:self": "rimraf public/types && tsc --declaration --stripInternal --emitDeclarationOnly --noEmit false --declarationDir public/types/@typecell-org/editor", @@ -101,23 +114,21 @@ "copytypes:alldeps": "npm run copytypes:dep --pkgname=common && npm run copytypes:dep --pkgname=engine", "copytypes": "npm run copytypes:self && npm run copytypes:alldeps && npm run copytypes:allexternaldeps", "start": "npm run copytypes && npm run vite:dev", - "start:local": "npm run copytypes && cross-env VITE_REACT_APP_HOMESERVER_URI=http://localhost:8888 VITE_REACT_APP_HOMESERVER_NAME=test.typecell.org npm run vite:dev", "copy-docs": "node copy-docs.mjs > public/_docs/index.json", "build": "tsc -v && npm run copytypes && npm run copy-docs", - "build:react": "npm run build && cross-env NODE_OPTIONS=--max_old_space_size=8192 CI=true npm run vite:build", - "build:react:local-preview": "npm run build && cross-env NODE_OPTIONS=--max_old_space_size=8192 VITE_REACT_APP_PREVIEW=true VITE_REACT_APP_HOMESERVER_URI=http://localhost:8888 VITE_REACT_APP_HOMESERVER_NAME=test.typecell.org npm run vite:build", - "build:react:preview": "npm run build && cross-env NODE_OPTIONS=--max_old_space_size=8192 VITE_REACT_APP_PREVIEW=true npm run vite:build", + "build:react": "cross-env NODE_OPTIONS=--max_old_space_size=8192 CI=true npm run vite:build", "install-playwright": "npx playwright install --with-deps", - "playwright:dev": "cross-env TYPECELL_BASE_URL=http://localhost:5173 npx playwright test", + "playwright:dev": "cross-env TYPECELL_BASE_URL=http://localhost:5173 npx playwright test --ui", "playwright:preview": "cross-env TYPECELL_BASE_URL=http://localhost:4173 npx playwright test", "lint": "eslint src", "test-watch": "vitest watch", "unittest:vitest": "vitest", - "test": "npm run unittest:vitest", + "unittest:playwright": "playwright-test '**/*.browsertest.ts'", + "test": "npm run unittest:vitest && npm run unittest:playwright", "vite:dev": "vite", - "vite:build": "vite build", + "vite:build": "vite build --mode=$MODE", "vite:preview": "vite preview", - "preview": "npm run build:react:local-preview && npm run vite:preview" + "preview": "npm run build:react && npm run vite:preview" }, "eslintConfig": { "extends": [ @@ -138,35 +149,37 @@ ] }, "devDependencies": { + "@esbuild-plugins/node-globals-polyfill": "^0.1.1", + "@esbuild-plugins/node-modules-polyfill": "^0.1.4", + "@playwright/experimental-ct-react": "^1.33.0", + "@playwright/test": "^1.33.0", "@svgr/webpack": "^5.5.0", "@types/lodash": "^4.14.168", "@types/lowlight": "0.0.2", + "@types/markdown-it": "^10.0.3", + "@types/node": "^16.0.0", + "@types/prettier": "^2.6.4", "@types/qs": "^6.9.7", + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", "@types/semver": "^7.3.8", "@types/speakingurl": "^13.0.2", "@types/ua-parser-js": "^0.7.36", "@types/uuid": "^8.3.0", "@types/zxcvbn": "^4.4.1", - "@types/prettier": "^2.6.4", - "@types/markdown-it": "^10.0.3", - "@types/node": "^16.0.0", - "@types/react": "^18.0.25", - "@types/react-dom": "^18.0.9", + "@vitejs/plugin-react": "^4.0.0", + "connect-history-api-fallback": "^2.0.0", "cross-env": "^7.0.3", "eslint": "^8.21.0", "eslint-config-react-app": "^7.0.1", "fake-indexeddb": "^3.1.2", "glob": "^7.2.0", - "rimraf": "^3.0.2", - "@playwright/test": "^1.18.1", - "vite": "^3.0.0", - "@vitejs/plugin-react": "^2.0.0", - "vitest": "^0.24.4", "jsdom": "^20.0.0", - "@esbuild-plugins/node-globals-polyfill": "^0.1.1", - "@esbuild-plugins/node-modules-polyfill": "^0.1.4", - "rollup-plugin-polyfill-node": "^0.10.2", + "playwright-test": "^9.0.0", + "rimraf": "^3.0.2", "rollup-plugin-node-polyfills": "^0.2.1", - "connect-history-api-fallback": "^2.0.0" + "rollup-plugin-polyfill-node": "^0.12.0", + "vite": "^4.3.8", + "vitest": "^0.31.1" } } diff --git a/packages/editor/playwright.config.ts b/packages/editor/playwright.config.ts index 652ab5be1..ce6edbb9e 100644 --- a/packages/editor/playwright.config.ts +++ b/packages/editor/playwright.config.ts @@ -1,12 +1,14 @@ -import type { PlaywrightTestConfig } from "@playwright/test"; +import { defineConfig } from "@playwright/experimental-ct-react"; import { devices } from "@playwright/test"; -import { TestOptions } from "./tests/end-to-end/setup/fixtures"; - /** * See https://playwright.dev/docs/test-configuration. */ -const config: PlaywrightTestConfig = { - testDir: "./tests", +export default defineConfig({ + testMatch: [ + "tests/**/*.@(spec|test).?(m)[jt]s?(x)", + "src/**/*.@(pwctest).?(m)[jt]s?(x)", + ], + testDir: "./", globalSetup: "./tests/end-to-end/setup/globalSetup.ts", /* Maximum time one test can run for. */ timeout: 30 * 1000, @@ -16,7 +18,7 @@ const config: PlaywrightTestConfig = { * Maximum time expect() should wait for the condition to be met. * For example in `await expect(locator).toHaveText();` */ - timeout: 5000, + timeout: 10000, }, /* Fail the build on CI if you accidentally left test.only in the source code. */ @@ -50,21 +52,21 @@ const config: PlaywrightTestConfig = { /* Project-specific settings. */ use: { - // headless: false, + // headless: true, ...devices["Desktop Chrome"], }, }, - { - name: "chromium no WebRTC", + // { + // name: "chromium no WebRTC", - /* Project-specific settings. */ - use: { - // headless: false, - ...devices["Desktop Chrome"], - disableWebRTC: true, - }, - testMatch: /.*collaboration.*/, - }, + // /* Project-specific settings. */ + // use: { + // // headless: false, + // ...devices["Desktop Chrome"], + // disableWebRTC: true, + // }, + // testMatch: /.*collaboration.*/, + // }, // { // name: "firefox", @@ -119,5 +121,5 @@ const config: PlaywrightTestConfig = { // timeout: 60 * 1000, // port: 3000, // }, -}; -export default config; +}); +// export default config; diff --git a/packages/editor/playwright/index.html b/packages/editor/playwright/index.html new file mode 100644 index 000000000..f626dc1af --- /dev/null +++ b/packages/editor/playwright/index.html @@ -0,0 +1,6 @@ + + +
+ + + diff --git a/packages/editor/playwright/index.ts b/packages/editor/playwright/index.ts new file mode 100644 index 000000000..632ec912d --- /dev/null +++ b/packages/editor/playwright/index.ts @@ -0,0 +1 @@ +// Apply theme here, add anything your component needs at runtime here. diff --git a/packages/editor/public/_docs/README.md b/packages/editor/public/_docs/README.md index 84925c350..e69de29bb 100644 --- a/packages/editor/public/_docs/README.md +++ b/packages/editor/public/_docs/README.md @@ -1,32 +0,0 @@ -# Welcome to TypeCell Notebooks - -Hi there 👋 ! Welcome to the community preview of TypeCell, an experimental _live notebook programming_ environment for the web. - -This guide should help you to get started, and learn more about the ins & outs. - -## Tutorial - -Complete the tutorial to get familiar with TypeCell: - -» [Interactive introduction](/docs/interactive-introduction.md) - -## Reference manual - -We've written about the main functionality of TypeCell in the [manual](/docs/manual): - -- [Notebooks and cells](/docs/manual/1.%20Notebooks%20and%20cells.md) -- [TypeScript and exports](/docs/manual/2.%20TypeScript%20and%20exports.md) -- [Reactive variables](/docs/manual/3.%20Reactive%20variables.md) -- [Working with user input](/docs/manual/4.%20Inputs.md) -- [Imports & NPM](/docs/manual/5.%20Imports%20and%20NPM.md) -- [Collaboration](/docs/manual/6.%20Collaboration.md) - -## Demos - -Another good way to learn is to check out some notebooks from our community: - -» [View demo notebooks](/docs/demos.md) - -# Feedback ❤️ - -As always, we'd love to hear your thoughts and see your experiments, so [come and say hi on Discord](https://discord.gg/TcJ9TRC3SV) or [Matrix](https://matrix.to/#/#typecell-space:matrix.org) as well. diff --git a/packages/editor/public/_docs/demos.md b/packages/editor/public/_docs/demos.md index 6af020abc..19eb5977e 100644 --- a/packages/editor/public/_docs/demos.md +++ b/packages/editor/public/_docs/demos.md @@ -2,12 +2,12 @@ To showcase some of TypeCell's features, explore these demos from our community: -- [Create an interactive map with Leaflet](/@niklas/maps) -- [Interactive character counter using Vega Lite](/@yousef/character-counter) -- [Visualize weather data with two React chart libraries](/@yousef/charts) -- [Explore TypeCell's reactivity with the help of time](/@niklas/time) -- [Connect React file uploader with an API](/@niklas/api) -- [Working with a CSV dataset](/@niklas/csv) +* [Create an interactive map with Leaflet](/@niklas/maps) +* [Interactive character counter using Vega Lite](/@yousef/character-counter) +* [Visualize weather data with two React chart libraries](/@yousef/charts) +* [Explore TypeCell's reactivity with the help of time](/@niklas/time) +* [Connect React file uploader with an API](/@niklas/api) +* [Working with a CSV dataset](/@niklas/csv) ## Built something exciting? diff --git a/packages/editor/public/_docs/interactive-introduction.md b/packages/editor/public/_docs/interactive-introduction.md index 211d5dfc0..d57b78833 100644 --- a/packages/editor/public/_docs/interactive-introduction.md +++ b/packages/editor/public/_docs/interactive-introduction.md @@ -11,6 +11,7 @@ Let's say you're like my grandma, and you have a lot of cats. Our story will be ### Step 1: give your cat a name! + ```typescript export let cat = { name: "", @@ -50,6 +51,7 @@ export default message; ### Step 2: Friends + ```typescript export default (
I feel like our cat needs a friend. Let's call him {$.friend.name}.
@@ -61,6 +63,7 @@ Uh oh, what's this? I forgot to add a cell defining our friend. Can you do it fo A cell is a container for code & output. To add one, click on the + above or below another cell. You can do it wherever you like. + ```typescript // @default-collapsed @@ -83,13 +86,14 @@ to access across cells! Exported variables are also displayed below the cell. Code cells automatically run when: -- You change the code of a cell -- Any of the reactive variables the cell references (from `$`) are changed +* You change the code of a cell +* Any of the reactive variables the cell references (from `$`) are changed ## Feeding neighbors Our cats have some neighbors. Let's involve them in the story too! + ```typescript export let neighbors = [ $.cat, @@ -110,6 +114,7 @@ export let neighbors = [ Now, if you're like my grandma, you're feeding the entire neighborhood by yourself, but you don't yet know if our friend prefers dry/wet food or how many cans they eat per week. + ```typescript // @default-collapsed @@ -131,6 +136,7 @@ export default ( Alright, once you've completed steps 1 - 3, let's see how much food you need to prepare. We do this in the cell below: + ```typescript // Repeats a character a number of times and returns the string. export function repeat(char: string, times: number) { @@ -185,6 +191,7 @@ JSX is part of React, and makes it easy to create type-safe HTML elements. In Ty Next, we'll create some user input fields to indicate how much food we have prepared. The built-in TypeCell Input library makes this easy: + ```typescript export let dryFoodPrepared = typecell.Input( , @@ -214,6 +221,7 @@ export default ( Now, let's also create some cells to calculate whether we have prepared enough food: + ```typescript // @default-collapsed @@ -302,7 +310,7 @@ export default ( These are just 2 of the many input types that TypeCell supports. To see the other choices, make sure to try the TypeCell inputs tutorial. -_Tip: expand the 3 cells above to see how they work._ +*Tip: expand the 3 cells above to see how they work.* ## Final notes diff --git a/packages/editor/public/_docs/manual/3. Reactive variables.md b/packages/editor/public/_docs/manual/3. Reactive variables.md index 50633cdac..e69de29bb 100644 --- a/packages/editor/public/_docs/manual/3. Reactive variables.md +++ b/packages/editor/public/_docs/manual/3. Reactive variables.md @@ -1,34 +0,0 @@ -# Reactive variables - -This is where things get interesting! Your code can reference variables exported by other cells. - -Cells in TypeCell Notebooks (re)evaluate when: - -* The code of the cell changes (i.e.: you're editing the code) -* A variable the cell depends upon updates - -## The `$` variable - -Exports of cells are available under the `$` variable. Have a look at the example below, and change the `name` variable to your own name. Notice how the greeting in the cell below updates automatically. - - -```typescript -export let name = "Anonymous coder"; - -``` - -```typescript -export let greeting = ( -
- Hello, {$.name}! -
-); - -``` - -Tip: type `$.` in a TypeScript cell, and the editor (Intellisense) will display a list of all exported variables you can reference. - -## Interactive Tutorial - -The Reactive model of TypeCell is quite powerful. If you haven't already, follow the [interactive introduction](/docs/interactive-introduction.md) or have a look at the [demos](/docs/demos.md) to get some hands-on experience. - diff --git a/packages/editor/public/_docs/manual/4. Inputs.md b/packages/editor/public/_docs/manual/4. Inputs.md index 900b092cc..733554215 100644 --- a/packages/editor/public/_docs/manual/4. Inputs.md +++ b/packages/editor/public/_docs/manual/4. Inputs.md @@ -22,13 +22,13 @@ export default $.textVariable; ``` - ## Using `typecell.Input` As the pattern above is quite common, we've created an easy **shorthand** for this that supports different kind of input types: ### Text input + ```typescript // The second parameter (default) is optional export let text1 = typecell.Input(, "default text"); @@ -49,6 +49,7 @@ export let length = $.text1.length; ### Radio buttons and checkboxes + ```typescript // Test two Radio inputs part of the same group @@ -92,6 +93,7 @@ export default $.bold; ### Selects and Dropdowns + ```typescript // Select with "multiple" attribute export let selectMultiple = typecell.Input( @@ -128,7 +130,7 @@ export default $.select; ### Numbers & Ranges -You can user _number_ and _range_ input types to allow the user to enter numbers. Make sure to explicitly pass `` to guide the type system that the edited variable is a number. +You can user *number* and *range* input types to allow the user to enter numbers. Make sure to explicitly pass `` to guide the type system that the edited variable is a number. ```typescript diff --git a/packages/editor/public/_docs/manual/5. Imports and NPM.md b/packages/editor/public/_docs/manual/5. Imports and NPM.md index 369be2c8e..e69de29bb 100644 --- a/packages/editor/public/_docs/manual/5. Imports and NPM.md +++ b/packages/editor/public/_docs/manual/5. Imports and NPM.md @@ -1,54 +0,0 @@ -# Imports & NPM - -TypeCell Notebooks support importing code from NPM, or from other TypeCell notebooks. - -## Importing other notebooks - -You can split your code into multiple notebooks. -This is a great way to create reusable components that you can use across notebooks, or even share with the community. - -`import * as myNotebook from "!@username/notebook";` - -See this example, where we import a message from an external notebook [`@yousef/demo-message`](https://www.typecell.org/@yousef/demo-message). - -```typescript -import * as myNotebook from "!@yousef/demo-message"; - -export default myNotebook.message; -``` - -**TypeCell Notebooks are designed to be as "live" as possible**: when you change the code of your imported notebook, -the notebook that imports the code will update live, as-you-type. - -## NPM - -In TypeCell Notebooks, you can also use any library from [NPM](https://www.npmjs.com/). Simply import the library in a TypeScript cell, and we'll try to resolve it (including TypeScript types) automatically. - -### Example - -Let's use the [canvas-confetti](https://www.npmjs.com/package/canvas-confetti) library to make it rain confetti! - -```typescript -import { create } from "canvas-confetti"; - -export const canvas = document.createElement("canvas"); -canvas.width = 200; -canvas.height = 100; - -const myConfetti = create(canvas); - -// Drop some confetty every 500ms -setInterval(() => myConfetti({ particleCount: 70, origin: { y: 0 } }), 500); -``` - -### Compatibility - -Libraries are loaded in your browser via [Skypack](https://www.skypack.dev/). -Skypack support is best for modern libraries with ESM support, but not all NPM libraries are compatible. - -NPM imports are work in progress. Can't get a library to work? Let us know on [Discord](https://discord.gg/TcJ9TRC3SV) or [Matrix](https://matrix.to/#/#typecell-space:matrix.org)! - -#### TypeScript - -When available, TypeCell tries to automatically resolve types for your library. -Some libraries don't ship with TypeScript types. In this case, an error might appear, but the library can still work. diff --git a/packages/editor/server/.gitignore b/packages/editor/server/.gitignore deleted file mode 100644 index 6320cd248..000000000 --- a/packages/editor/server/.gitignore +++ /dev/null @@ -1 +0,0 @@ -data \ No newline at end of file diff --git a/packages/editor/src/@types/env.d.ts b/packages/editor/src/@types/env.d.ts index a7c2305e5..5e60053ad 100644 --- a/packages/editor/src/@types/env.d.ts +++ b/packages/editor/src/@types/env.d.ts @@ -1,11 +1,12 @@ /// interface ImportMetaEnv { - readonly PROD: boolean; - readonly DEV: boolean; - readonly VITE_REACT_APP_STAGING: string; - readonly VITE_REACT_APP_HOMESERVER_URI: string; - readonly VITE_REACT_APP_HOMESERVER_NAME: string; + readonly VITE_ENVIRONMENT: "PROD" | "DEV" | "STAGING"; + readonly VITE_TYPECELL_BACKEND_WS_URL: string; + readonly VITE_TYPECELL_SUPABASE_URL: string; + readonly VITE_TYPECELL_SUPABASE_ANON_KEY: string; + readonly VITE_MATRIX_HOMESERVER_URI: string; + readonly VITE_MATRIX_HOMESERVER_NAME: string; // more env variables... } diff --git a/packages/editor/src/app/App.tsx b/packages/editor/src/app/App.tsx index 333a93a08..e642c6987 100644 --- a/packages/editor/src/app/App.tsx +++ b/packages/editor/src/app/App.tsx @@ -1,69 +1,83 @@ import { observer } from "mobx-react-lite"; -import { BrowserRouter, Route, Routes } from "react-router-dom"; -import { getStoreService } from "../store/local/stores"; +import { + BrowserRouter, + Outlet, + Route, + Routes, + useNavigate, +} from "react-router-dom"; +import { SessionStore } from "../store/local/SessionStore"; + +import { navigateRef, setNavigateRef } from "./GlobalNavigateRef"; +import Main from "./main/Main"; import { AILanding } from "./main/components/startscreen/AILanding"; import { StartScreen } from "./main/components/startscreen/StartScreen"; -import Main from "./main/Main"; -import { ValidatedServerConfig } from "./matrix-auth/auth/util/AutoDiscoveryUtils"; +import { matrixAuthProvider } from "./matrix-auth/MatrixAuthProvider"; import { DocumentRoute } from "./routes/document"; -import { DynamicRoute } from "./routes/dynamic"; -import { Login } from "./routes/login"; -import { ProfileRoute } from "./routes/profile"; -import { Register } from "./routes/register"; +import { supabaseAuthProvider } from "./supabase-auth/supabaseAuthProvider"; + +const Wrapper = observer((props: { sessionStore: SessionStore }) => { + const navigate = useNavigate(); -export const App = observer((props: { config: ValidatedServerConfig }) => { - console.log("app render"); - const { sessionStore } = getStoreService(); - if (sessionStore.user === "loading") { + if (!navigateRef.current) { + setNavigateRef(navigate); + } + + if (!props.sessionStore.isLoaded) { return
Loading
; // } else if (sessionStore.user === "offlineNoUser") { // return
Offline
; } else { + return ; + } +}); + +export const App = observer( + (props: { + authProvider: typeof matrixAuthProvider | typeof supabaseAuthProvider; + sessionStore: SessionStore; + }) => { + console.log("app render"); + const { sessionStore } = props; return ( - }> - }> + }> + }> + + }> + + }> + } + /> + } + /> + + + Not implemented yet} /> }> - }> - } /> - } /> + path="/login" + element={props.authProvider.routes.login(sessionStore as any)} + /> + {props.authProvider.routes.additionalRoutes(sessionStore as any)} + {/* todo: notfound? */} - } - /> - Not implemented yet} /> - } /> - {/* todo: notfound? */} ); } -}); +); export default App; - -// // Before we continue, let's see if we're supposed to do an SSO redirect -// const [userId] = await Lifecycle.getStoredSessionOwner(); -// const hasPossibleToken = !!userId; -// const isReturningFromSso = !!params.loginToken; -// const autoRedirect = config["sso_immediate_redirect"] === true; -// if (!hasPossibleToken && !isReturningFromSso && autoRedirect) { -// console.log("Bypassing app load to redirect to SSO"); -// const tempCli = createClient({ -// baseUrl: config["validated_server_config"].hsUrl, -// idBaseUrl: config["validated_server_config"].isUrl, -// }); -// PlatformPeg.get().startSingleSignOn( -// tempCli, -// "sso", -// `/${getScreenFromLocation(window.location).screen}` -// ); - -// // We return here because startSingleSignOn() will asynchronously redirect us. We don't -// // care to wait for it, and don't want to show any UI while we wait (not even half a welcome -// // page). As such, just don't even bother loading the MatrixChat component. -// return; -// } diff --git a/packages/editor/src/app/GlobalNavigateRef.ts b/packages/editor/src/app/GlobalNavigateRef.ts new file mode 100644 index 000000000..6c3985a80 --- /dev/null +++ b/packages/editor/src/app/GlobalNavigateRef.ts @@ -0,0 +1,9 @@ +import { NavigateFunction } from "react-router-dom"; + +export let navigateRef: { current: NavigateFunction | undefined } = { + current: undefined, +}; + +export function setNavigateRef(navigate: NavigateFunction) { + navigateRef.current = navigate; +} diff --git a/packages/editor/src/app/documentRenderers/DocumentView.tsx b/packages/editor/src/app/documentRenderers/DocumentView.tsx index 858e25c76..79d9f9f48 100644 --- a/packages/editor/src/app/documentRenderers/DocumentView.tsx +++ b/packages/editor/src/app/documentRenderers/DocumentView.tsx @@ -5,22 +5,28 @@ import { Identifier } from "../../identifiers/Identifier"; import { DocConnection } from "../../store/DocConnection"; import PluginResource from "../../store/PluginResource"; import ProjectResource from "../../store/ProjectResource"; -import DocumentMenu from "../main/components/documentMenu"; -import { Breadcrumb } from "../main/components/documentMenu/Breadcrumb"; -import { MenuBar } from "../main/components/menuBar/MenuBar"; + +// import { MenuBar } from "../maidocn/components/menuBar/MenuBar"; // import RichTextRenderer from "./richtext/RichTextRenderer"; import styles from "./DocumentView.module.css"; // import { CustomRenderer } from "./custom/CustomRenderer"; +import ProfileResource from "../../store/ProfileResource"; +import { SessionStore } from "../../store/local/SessionStore"; +import { DocumentMenu } from "../main/components/documentMenu/DocumentMenu"; +import { MenuBar } from "../main/components/menuBar/MenuBar"; import NotebookRenderer from "./notebook/NotebookRenderer"; import PluginRenderer from "./plugin/PluginRenderer"; +import ProfileRenderer from "./profile/ProfileRenderer"; import ProjectContainer from "./project/ProjectContainer"; import ProjectRenderer from "./project/ProjectRenderer"; import RichTextRenderer from "./richtext/RichTextRenderer"; type Props = { id: Identifier; + subIdentifiers: Identifier[]; isNested?: boolean; hideDocumentMenu?: boolean; + sessionStore: SessionStore; }; /** @@ -31,7 +37,7 @@ const DocumentView = observer((props: Props) => { const [connection, setConnection] = useState(); React.useEffect(() => { - const newConnection = DocConnection.load(props.id); + const newConnection = DocConnection.load(props.id, props.sessionStore); setConnection(newConnection); // for testing: @@ -43,7 +49,7 @@ const DocumentView = observer((props: Props) => { setConnection(undefined); }; // eslint-disable-next-line react-hooks/exhaustive-deps - }, [props.id.toString()]); + }, [props.id.toString(), props.sessionStore]); if (!connection) { return null; @@ -63,9 +69,15 @@ const DocumentView = observer((props: Props) => { return (
{!props.hideDocumentMenu && ( - + )} - +
); } else if (connection.doc.type === "!project") { @@ -74,13 +86,15 @@ const DocumentView = observer((props: Props) => {
{!props.hideDocumentMenu && ( - +
+ {/* TODO */}
)}
); @@ -89,6 +103,8 @@ const DocumentView = observer((props: Props) => { ); } @@ -98,11 +114,14 @@ const DocumentView = observer((props: Props) => { return (
{!props.hideDocumentMenu && ( - + )}
); @@ -113,6 +132,14 @@ const DocumentView = observer((props: Props) => { plugin={connection.doc.getSpecificType(PluginResource)!} /> ); + } else if (connection.doc.type === "!profile") { + return ( + + ); } else if (connection.doc.type.startsWith("!")) { throw new Error("invalid built in type"); } else { diff --git a/packages/editor/src/app/documentRenderers/custom/CustomRenderer.tsx b/packages/editor/src/app/documentRenderers/custom/CustomRenderer.tsx index b68cab009..f402f768b 100644 --- a/packages/editor/src/app/documentRenderers/custom/CustomRenderer.tsx +++ b/packages/editor/src/app/documentRenderers/custom/CustomRenderer.tsx @@ -1,20 +1,22 @@ +import { CodeModel, Engine } from "@typecell-org/engine"; import { observer } from "mobx-react-lite"; import * as React from "react"; import { useEffect, useState } from "react"; -import { Engine, CodeModel } from "@typecell-org/engine"; -import { getTypeCellCodeModel } from "../../../models/TypeCellCodeModel"; +import { getTypeCellCodeModel } from "../../../models/YTextTypeCellCodeModel"; import { BaseResource } from "../../../store/BaseResource"; import { DocConnection } from "../../../store/DocConnection"; import { runtimeStore } from "../../../store/local/runtimeStore"; -import RetryErrorBoundary from "../../../util/RetryErrorBoundary"; import { MonacoContext } from "../../../runtime/editor/MonacoContext"; import { getTypeCellResolver } from "../../../runtime/executor/resolver/resolver"; +import { SessionStore } from "../../../store/local/SessionStore"; +import RetryErrorBoundary from "../../../util/RetryErrorBoundary"; // TODO: should this be a React component or raw JS? type Props = { document: BaseResource; + sessionStore: SessionStore; }; /** @@ -35,12 +37,12 @@ export const CustomRenderer = observer((props: Props) => { if (!renderer) { return; } - const loader = DocConnection.load(renderer.rendererId); + const loader = DocConnection.load(renderer.rendererId, props.sessionStore); setRendererDocument(loader); return () => { loader.dispose(); }; - }, [renderer]); + }, [props.sessionStore, renderer]); // TODO: also useMemo to get engine, instead of useEffect? useEffect(() => { diff --git a/packages/editor/src/app/documentRenderers/notebook/NotebookCell.tsx b/packages/editor/src/app/documentRenderers/notebook/NotebookCell.tsx index 6f2e81384..afb525ed2 100644 --- a/packages/editor/src/app/documentRenderers/notebook/NotebookCell.tsx +++ b/packages/editor/src/app/documentRenderers/notebook/NotebookCell.tsx @@ -12,14 +12,12 @@ import React, { import { VscChevronDown, VscChevronRight } from "react-icons/vsc"; import { MonacoBinding } from "y-monaco"; import { Awareness } from "y-protocols/awareness"; -import { - getTypeCellCodeModel, - TypeCellCodeModel, -} from "../../../models/TypeCellCodeModel"; +import { TypeCellCodeModel } from "../../../models/TypeCellCodeModel"; +import { getTypeCellCodeModel } from "../../../models/YTextTypeCellCodeModel"; import SourceModelCompiler from "../../../runtime/compiler/SourceModelCompiler"; import { MonacoContext } from "../../../runtime/editor/MonacoContext"; import { ExecutionHost } from "../../../runtime/executor/executionHosts/ExecutionHost"; -import { getStoreService } from "../../../store/local/stores"; +import { SessionStore } from "../../../store/local/SessionStore"; import { HoverTrackerContext } from "./HoverTrackerContext"; import { NotebookCellModel } from "./NotebookCellModel"; @@ -33,10 +31,11 @@ type Props = { initialFocus?: boolean; awareness: Awareness | undefined; toolbar?: React.ReactElement; + sessionStore: SessionStore; }; const NotebookCell: React.FC = observer((props) => { - const { cell, awareness, compiler, initialFocus } = props; + const { cell, awareness, compiler, initialFocus, sessionStore } = props; const initial = useRef(true); const [model, setModel] = useState(); @@ -48,7 +47,6 @@ const NotebookCell: React.FC = observer((props) => { const monaco = useContext(MonacoContext).monaco; // const [codeRef, setCodeRef] = useState(); - const sessionStore = getStoreService().sessionStore; const user = sessionStore.loggedInUserId; const [codeVisible, setCodeVisible] = useState( @@ -249,7 +247,7 @@ const NotebookCell: React.FC = observer((props) => { style={{ position: "relative" }}> {model && props.executionHost.renderOutput( - model, + model.path, hoverTrackerContext.setHover )} diff --git a/packages/editor/src/app/documentRenderers/notebook/NotebookRenderer.tsx b/packages/editor/src/app/documentRenderers/notebook/NotebookRenderer.tsx index c55595915..243640e66 100644 --- a/packages/editor/src/app/documentRenderers/notebook/NotebookRenderer.tsx +++ b/packages/editor/src/app/documentRenderers/notebook/NotebookRenderer.tsx @@ -7,28 +7,29 @@ import { MonacoContext } from "../../../runtime/editor/MonacoContext"; import { ExecutionHost } from "../../../runtime/executor/executionHosts/ExecutionHost"; import SandboxedExecutionHost from "../../../runtime/executor/executionHosts/sandboxed/SandboxedExecutionHost"; import { DocumentResource } from "../../../store/DocumentResource"; +import { SessionStore } from "../../../store/local/SessionStore"; import CellListDraggableCell from "./CellListDraggableCell"; import NotebookLanguageSelector from "./LanguageSelector"; -import NotebookCell from "./NotebookCell"; import { MonacoColorManager } from "./MonacoColorManager"; -import { getStoreService } from "../../../store/local/stores"; +import NotebookCell from "./NotebookCell"; type Props = { document: DocumentResource; + sessionStore: SessionStore; }; const USE_SAFE_IFRAME = true; const NotebookRenderer: React.FC = observer((props) => { - const sessionStore = getStoreService().sessionStore; + const { sessionStore } = props; const disposer = useRef<() => void>(); const monaco = useContext(MonacoContext).monaco; useEffect(() => { // make sure color info is broadcast, and color info from other users are reflected in monaco editor styles - if (props.document.webrtcProvider?.awareness) { + if (props.document.awareness) { const colorManager = new MonacoColorManager( - props.document.webrtcProvider.awareness, + props.document.awareness, sessionStore.loggedInUserId || "Anonymous", sessionStore.userColor ); @@ -37,7 +38,7 @@ const NotebookRenderer: React.FC = observer((props) => { }; } }, [ - props.document.webrtcProvider?.awareness, + props.document.awareness, sessionStore.loggedInUserId, sessionStore.userColor, ]); @@ -57,7 +58,8 @@ const NotebookRenderer: React.FC = observer((props) => { const newExecutionHost: ExecutionHost = new SandboxedExecutionHost( props.document.id, newCompiler, - monaco + monaco, + sessionStore ); disposer.current = () => { @@ -66,7 +68,7 @@ const NotebookRenderer: React.FC = observer((props) => { }; return [newCompiler, newExecutionHost]; - }, [props.document.id, monaco]); + }, [props.document.id, monaco, sessionStore]); useEffect(() => { return () => { @@ -110,7 +112,7 @@ const NotebookRenderer: React.FC = observer((props) => { cell={cell} executionHost={executionHost} compiler={compiler} - awareness={props.document.webrtcProvider?.awareness} + awareness={props.document.awareness} toolbar={ = observer((props) => { // onRemove={() => remove(i)} /> } + sessionStore={sessionStore} /> ))} @@ -126,4 +129,4 @@ const NotebookRenderer: React.FC = observer((props) => { ); }); -export default NotebookRenderer; \ No newline at end of file +export default NotebookRenderer; diff --git a/packages/editor/src/app/documentRenderers/profile/ProfileRenderer.tsx b/packages/editor/src/app/documentRenderers/profile/ProfileRenderer.tsx new file mode 100644 index 000000000..044b9f2fc --- /dev/null +++ b/packages/editor/src/app/documentRenderers/profile/ProfileRenderer.tsx @@ -0,0 +1,15 @@ +import { observer } from "mobx-react-lite"; +import React from "react"; +import { Identifier } from "../../../identifiers/Identifier"; +import ProfileResource from "../../../store/ProfileResource"; + +type Props = { + profile: ProfileResource; + subIdentifiers: Identifier[]; +}; + +const ProfileRenderer: React.FC = observer((props) => { + return
Hello {props.profile.title}
; +}); + +export default ProfileRenderer; diff --git a/packages/editor/src/app/documentRenderers/project/ProjectRenderer.module.css b/packages/editor/src/app/documentRenderers/project/ProjectContainer.module.css similarity index 77% rename from packages/editor/src/app/documentRenderers/project/ProjectRenderer.module.css rename to packages/editor/src/app/documentRenderers/project/ProjectContainer.module.css index 7b3067da3..36badfc5e 100644 --- a/packages/editor/src/app/documentRenderers/project/ProjectRenderer.module.css +++ b/packages/editor/src/app/documentRenderers/project/ProjectContainer.module.css @@ -8,13 +8,21 @@ } .projectContainer { + --ds-border-selected: transparent; height: 100%; display: flex; - flex-direction: row; + flex-direction: column; align-items: stretch; overflow: hidden; + flex: 1 1; } +#leftSidebar > div > div:first-child > div:first-child { + min-width: 100px !important; +} +.projectContainer > div { + flex: 1 1; +} .sidebarContainer { max-width: 400px; min-width: 250px; diff --git a/packages/editor/src/app/documentRenderers/project/ProjectContainer.tsx b/packages/editor/src/app/documentRenderers/project/ProjectContainer.tsx index d2b13755a..5cf608434 100644 --- a/packages/editor/src/app/documentRenderers/project/ProjectContainer.tsx +++ b/packages/editor/src/app/documentRenderers/project/ProjectContainer.tsx @@ -1,86 +1,331 @@ +import { + Content, + LeftSidebar, + LeftSidebarState, + PageLayout, +} from "@atlaskit/page-layout"; +import { TreeData, TreeItem } from "@atlaskit/tree"; import { observer } from "mobx-react-lite"; -import React from "react"; -import { Outlet, useLocation, useNavigate } from "react-router-dom"; -import { path } from "vscode-lib"; -import { parseIdentifier } from "../../../identifiers"; +import { useNavigate } from "react-router-dom"; +import { Identifier } from "../../../identifiers/Identifier"; +import { identifiersToPath } from "../../../identifiers/paths/identifierPathHelpers"; +import { BaseResource } from "../../../store/BaseResource"; +import { DocConnection } from "../../../store/DocConnection"; import ProjectResource from "../../../store/ProjectResource"; -import DocumentView from "../DocumentView"; -import FolderView from "./directoryNavigation/FolderView"; +import { SessionStore } from "../../../store/local/SessionStore"; +import { ChildReference } from "../../../store/referenceDefinitions/child"; +import styles from "./ProjectContainer.module.css"; import SidebarTree from "./directoryNavigation/SidebarTree"; -import { filesToTreeNodes } from "./directoryNavigation/treeNodeUtil"; -import styles from "./ProjectRenderer.module.css"; type Props = { project: ProjectResource; + activeChild?: Identifier; isNested?: boolean; + children?: any; + sessionStore: SessionStore; }; +let id = 0; + +function docToTreeItem( + doc: BaseResource, + items: Record, + sessionStore: SessionStore, + root = false +) { + const children = doc.getRefs(ChildReference); + const childrenWithDocs = children.map((c) => { + const doc = DocConnection.get(c.target, sessionStore); + const resource = doc?.tryDoc; + return { + doc: resource, + id: c.target, + }; + }); + + const childrenWithLoadedDocs = childrenWithDocs.filter( + (c) => c.doc !== undefined + ); + const isChildrenLoading = childrenWithLoadedDocs.length !== children.length; + + const childrenIds: string[] = []; + + childrenWithLoadedDocs.forEach((c) => { + if (c.doc) { + childrenIds.push(docToTreeItem(c.doc, items, sessionStore).id as string); + } + }); + + let i = 0; + let id = doc.id + "-" + i; + + while (items[id]) { + id = doc.id + "-" + ++i; + } + const ret: TreeItem = { + id, + isChildrenLoading, + children: childrenIds, + hasChildren: children.length > 0, + isExpanded: root, + data: { + id: doc.id, + identifier: doc.identifier, + allChildren: children.map((c) => c.target), + title: + // TODO, decide on notebook vs richtext + doc.type === "!notebook" || doc.type === "!richtext" + ? doc.doc.title + : "", + }, + }; + + items[id] = ret; + return ret; +} + +function docToAkTree( + doc: BaseResource, + sessionStore: SessionStore, + activeId?: Identifier +) { + const items: Record = {}; + const rootItem = docToTreeItem(doc, items, sessionStore, true); + const root: TreeData = { + rootId: rootItem.id, + items, + // id: doc.id, + // children: [], + // hasChildren: false, + // isExpanded: false, + // isChildrenLoading: false, + // data: { + }; + + if (activeId) { + for (let item of Object.values(items)) { + if (item.data.id === activeId.toString()) { + item.data.isActive = true; + } else { + item.data.isActive = false; + } + } + } + return root; +} + const ProjectContainer = observer((props: Props) => { - const location = useLocation(); const navigate = useNavigate(); - const files = Array.from(props.project.files.keys()).sort(); - const tree = filesToTreeNodes( - files.map((f) => ({ - fileName: f, - })) + const tree = docToAkTree( + props.project, + props.sessionStore, + props.activeChild ); - const onClick = (item: string) => { - const isDocs = location.pathname.startsWith("/docs"); + // const files = Array.from(props.project.files.keys()).sort(); + + // const tree = filesToTreeNodes( + // files.map((f) => ({ + // fileName: f, + // })) + // ); + + const onAddPageHandler = async (parentId?: string) => { + const ret = await DocConnection.create(props.sessionStore); + if (typeof ret === "string") { + throw new Error("Error creating doc: " + ret); + } + ret.create("!richtext"); + + if (parentId) { + // add to parent + const parentDoc = DocConnection.get(parentId, props.sessionStore)?.tryDoc; + if (!parentDoc) { + throw new Error("Parent not found: " + parentId); + } + parentDoc.addRef(ChildReference, ret.identifier, undefined, false); // TODO: true + } else { + // add to root (project) + props.project.addRef(ChildReference, ret.identifier, undefined, false); // TODO: true + } + const path = identifiersToPath([props.project.identifier, ret.identifier]); navigate({ - pathname: props.isNested - ? path.join(location.pathname, "/", item) - : isDocs - ? item - : ":/" + item, + pathname: "/" + path, }); + + // ret.doc.cellList.addCell(0, "markdown", "# " + obj.title); + // ret.doc.cellList.addCell( + // 1, + // "typescript", + // `export let message = "Hello World"` + // ); }; - let defaultFile = files.find((f) => f === "README.md"); - let defaultFileContent = <>; - if (defaultFile) { - // TODO: cleanup? - // Directory listing with a default file - let idTemp = parseIdentifier(props.project.identifier.uri.toString()); - idTemp.subPath = defaultFile; - let documentIdentifier = parseIdentifier( - idTemp.fullUriOfSubPath()!.toString() - ); - defaultFileContent = ( - - ); - } + + const onClick = (identifier: Identifier) => { + const path = identifiersToPath([props.project.identifier, identifier]); + + navigate({ + pathname: "/" + path, + }); + }; + + // let defaultFile = files.find((f) => f === "README.md"); + // let defaultFileContent = <>; + // if (defaultFile) { + // // TODO: cleanup? + // // Directory listing with a default file + // let idTemp = parseIdentifier(props.project.identifier.uri.toString()); + // idTemp.subPath = defaultFile; + // let documentIdentifier = parseIdentifier( + // idTemp.fullUriOfSubPath()!.toString() + // ); + // defaultFileContent = ( + // + // ); + // } if (props.isNested) { return (
- + {/* */}
- {defaultFileContent} + {/* {defaultFileContent} */}
); } else { return (
-
- -
- {/* {defaultFileContent} */} - + + console.log("onExpand", state) + } + onLeftSidebarCollapse={(state: LeftSidebarState) => + console.log("onCollapse", state) + }> + + + console.log("onResizeStart", state) + } + onResizeEnd={(state: LeftSidebarState) => + console.log("onResizeEnd", state) + } + onFlyoutExpand={() => console.log("onFlyoutExpand")} + onFlyoutCollapse={() => console.log("onFlyoutCollapse")} + // overrides={{ + // ResizeButton: { + // render: (Component, props) => ( + + // // + // + // // + // ), + // }, + // }} + > +
+ +
+
+ {/*
+ +
*/} + {/* {defaultFileContent} */} +
+ {props.children} + {/* */} +
+
+
); } }); export default ProjectContainer; + +/** + +DocA + - DocB + - DocD + - DocC + + DocB.children = [DocD] + DocD.parent = DocB + + // reparent 1 + DocB.children = [] // what if no access? + DocC.children = [DocD] + DocD.parent = DocC + + // reparent 2 + DocB.children = [] + DocA.children = [DocD] + DocD.parent = DocA + + // conflict + - DocA + - DocB + - DocC + - DocD + - DocD + + */ + +// Doc A: +// + +// Doc B has an inbox with the following messages: +// +// +// +// + +// I get Doc A, it refers to a child. Is this ok? +// Get Doc B. +// - It's not at clock. We can't validate the child / parent rel because we're not synced yet +// - it is at clock. Check if update has been subsumed +// - check c. +// - it's not at clock. + +// BackRef validation algorithm: +// - keep an inbox of validated messages +// - load next message that should be validated +// - if other document is not at clock, keep in queue because we're not synced yet, continue next +// - if document is at clock, validate +// - if document contains message, accept message as truth. mark validated and wait until it becomes invalid before checking the next message +// - if document does not contain message, ignore message. mark validated and continue next + +// Issue: +// - User Alice doesn't have access to B, but moves it's child c1 from B to C +// - this is fine, other clients won't validate her message because B still contains c1 +// - Bob then moves child c1 from B to D +// - Alice's message is now valid, because B no longer contains c1. Bob's message won't be processed + +// too complicated. use a different approach where children can have multiple parents and they'll be shown as "copy" if so. oldest = original diff --git a/packages/editor/src/app/documentRenderers/project/ProjectRenderer.tsx b/packages/editor/src/app/documentRenderers/project/ProjectRenderer.tsx index 833aa1f6a..98a278e44 100644 --- a/packages/editor/src/app/documentRenderers/project/ProjectRenderer.tsx +++ b/packages/editor/src/app/documentRenderers/project/ProjectRenderer.tsx @@ -1,38 +1,34 @@ import { observer } from "mobx-react-lite"; import React from "react"; -import { - Route, - Routes, - useLocation, - useOutletContext, - useParams, -} from "react-router-dom"; -import { path } from "vscode-lib"; -import { parseIdentifier } from "../../../identifiers"; import { Identifier } from "../../../identifiers/Identifier"; import ProjectResource from "../../../store/ProjectResource"; +import { SessionStore } from "../../../store/local/SessionStore"; import DocumentView from "../DocumentView"; import ProjectContainer from "./ProjectContainer"; type Props = { project: ProjectResource; isNested?: boolean; + subIdentifiers: Identifier[]; + sessionStore: SessionStore; }; -const NestedDocument = (props: { parent: Identifier }) => { - const params = useParams(); - const sub = params["*"] as string; +// const NestedDocument = (props: { parent: Identifier }) => { +// const params = useParams(); +// const sub = params["*"] as string; - const newIdStr = path.join(props.parent.toString(), "/:/", sub); - const documentIdentifier = parseIdentifier( - parseIdentifier(newIdStr).fullUriOfSubPath()!.toString() - ); - return ; -}; +// // const newIdStr = path.join(props.parent.toString(), "/:/", sub); +// const documentIdentifier = getIdentifierFromPath(sub, [props.parent]); +// // parseIdentifier(newIdStr).fullUriOfSubPath()!.toString() +// // ); +// // return
{sub}
; +// return ; +// }; const RootDirectory = (props: {}) => { - const defaultDoc = (useOutletContext() as any)?.defaultFileContent as any; - return defaultDoc || <>; + return
hello
; + // const defaultDoc = (useOutletContext() as any)?.defaultFileContent as any; + // return defaultDoc || <>; }; // const Debug = (props: { children: any }) => { @@ -46,38 +42,52 @@ const RootDirectory = (props: {}) => { // }; const ProjectRenderer: React.FC = observer((props) => { // const fileSet = useRef(new ObservableSet()); - const identifier = props.project.identifier; - const path = useLocation(); - - const subPath = (useParams() as any).subPath; - if (subPath) { - throw new Error("unexpected"); - } - - const isDocs = path.pathname.startsWith("/docs"); - const rootPath = isDocs ? "docs" : identifier.toString(); + // const identifier = props.project.identifier; + // const path = useLocation(); + // const subPath = (useParams() as any).subPath; + // if (subPath) { + // throw new Error("unexpected"); + // } + // const identifiers = pathToIdentifiers(path.pathname.substring(1)); + // const idPath = getPathFromIdentifier(identifier); + // let matchedPath: string; + // let sep = ":/"; + // if (typeof idPath === "string") { + // matchedPath = idPath; + // } else { + // if (path.pathname.substring(1).startsWith(idPath.shorthand)) { + // matchedPath = idPath.shorthand; + // sep = "/"; + // } else { + // matchedPath = idPath.path; + // } + // } + const [childId, ...remainingIds] = props.subIdentifiers; return ( - - }> - } /> - {isDocs ? ( - } /> - ) : ( - } /> - )} - - {/* - errorsdf {rootPath} {path.pathname} {identifier.toRouteString()} - - } - /> */} - + + {childId ? ( + + ) : ( + + )} + + // + // }> + // } /> + // } /> + // + // ); }); diff --git a/packages/editor/src/app/documentRenderers/project/directoryNavigation/SidebarTree.module.css b/packages/editor/src/app/documentRenderers/project/directoryNavigation/SidebarTree.module.css index 2b1892ed3..b2217c650 100644 --- a/packages/editor/src/app/documentRenderers/project/directoryNavigation/SidebarTree.module.css +++ b/packages/editor/src/app/documentRenderers/project/directoryNavigation/SidebarTree.module.css @@ -4,15 +4,62 @@ font-weight: normal !important; font-size: 13px !important; height: 2.1em !important; + padding-right: 2px !important; } -.chevron { +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +.kebab, +.addChild { + /* visibility: hidden; */ + display: none; + opacity: 0; + /* transition: opacity 0.2s ease-in 0.1s; */ +} + +.sidebarButton.active { + background-color: var( + --ds-background-neutral-subtle-hovered, + rgba(9, 30, 66, 0.08) + ); + font-weight: bolder !important; +} + +.sidebarButton:hover .kebab, +.sidebarButton:hover .addChild { + display: inline-block; + animation: fade-in 0.3s ease-in 0.1s; + animation-fill-mode: forwards; + /* visibility: visible; */ + opacity: 0; +} + +.chevron, +.kebab, +.addChild, +.add { width: 20px; height: 20px; padding: 5px; border-radius: 3px; } -.chevron:hover { +.kebab { + width: 16px; + padding: 0; + height: 20px; + padding-top: 2px; +} +.chevron:hover, +.kebab:hover, +.addChild:hover, +.add:hover { background-color: #d8dadf; } diff --git a/packages/editor/src/app/documentRenderers/project/directoryNavigation/SidebarTree.tsx b/packages/editor/src/app/documentRenderers/project/directoryNavigation/SidebarTree.tsx index c9036e6cd..984c29707 100644 --- a/packages/editor/src/app/documentRenderers/project/directoryNavigation/SidebarTree.tsx +++ b/packages/editor/src/app/documentRenderers/project/directoryNavigation/SidebarTree.tsx @@ -1,126 +1,276 @@ import Button from "@atlaskit/button"; -import Tree, { ItemId, mutateTree, RenderItemParams } from "@atlaskit/tree"; -import _ from "lodash"; +import Tree, { + ItemId, + mutateTree, + RenderItemParams, + TreeData, + TreeDestinationPosition, + TreeSourcePosition, +} from "@atlaskit/tree"; import { observer } from "mobx-react-lite"; -import React, { useCallback, useEffect, useState } from "react"; -import { VscChevronDown, VscChevronRight } from "react-icons/vsc"; +import React, { useEffect, useMemo, useRef } from "react"; +import { + VscAdd, + VscChevronDown, + VscChevronRight, + VscKebabVertical, +} from "react-icons/vsc"; +import { Identifier } from "../../../../identifiers/Identifier"; +import { DocConnection } from "../../../../store/DocConnection"; +import { SessionStore } from "../../../../store/local/SessionStore"; +import { ChildReference } from "../../../../store/referenceDefinitions/child"; import styles from "./SidebarTree.module.css"; -import { treeToTreeData } from "./treeDataUtil"; -import { TreeNode } from "./treeNodeUtil"; - -const RenderItem = ({ - item, - onExpand, - onCollapse, - provided, - depth, -}: RenderItemParams) => { - const onClick = () => { - // main item has clicked (not chevron, always call onExpand) - (onExpand as any)({ id: item.id, isChevron: false }); - }; - const onChevronClick = (e: React.MouseEvent) => { - e.stopPropagation(); - if (item.isExpanded) { - (onCollapse as any)({ id: item.id, isChevron: true }); - } else { - (onExpand as any)({ id: item.id, isChevron: true }); - } - }; +const RenderItem = + ( + onClick: (item: Identifier) => void, + onAddChild: (parentId: string) => void + ) => + ({ item, onExpand, onCollapse, provided, depth }: RenderItemParams) => { + // const doc = DocConnection.get(item.data.identifier)?.tryDoc; + // if (!doc) { + // console.warn("Doc not found but should be loaded", item.data.identifier); + // return null; + // } - return ( -
- -
- ); -}; + }> + {item.data.title || "Untitled"} + + + ); + }; + +function updateAkTree(oldTree: TreeData, newTree: TreeData) { + for (let [key, item] of Object.entries(newTree.items)) { + if (oldTree.items[key]) { + item.isExpanded = oldTree.items[key].isExpanded; + } + } +} export const SidebarTree = observer( - (props: { tree: TreeNode[]; onClick: (item: string) => void }) => { - const [akTree, setAktree] = useState(() => treeToTreeData(props.tree)); - - // eslint-disable-next-line react-hooks/exhaustive-deps - const update = useCallback( - _.debounce( - (tree: TreeNode[]) => { - const newTree = treeToTreeData(tree); - for (let item of Object.keys(newTree.items)) { - if (akTree.items[item]) { - newTree.items[item].isExpanded = akTree.items[item].isExpanded; - } - } - setAktree(newTree); - }, - 100, - { trailing: true } - ), - [akTree] - ); + (props: { + tree: TreeData; + onClick: (item: Identifier) => void; + onAddNewPage: (parent?: string) => Promise; + sessionStore: SessionStore; + }) => { + const { sessionStore, tree } = props; + // A little cumbersome logic because we want to update the currentTree + // both from outside this component and inside + const currentTree = useRef(tree); + const prevTreeFromProps = useRef(tree); + const cache = useRef(new Map()); + const [forceUpdate, setForceUpdate] = React.useState(0); + + // detect change in props + if (prevTreeFromProps.current !== tree) { + updateAkTree(currentTree.current, tree); + currentTree.current = tree; + prevTreeFromProps.current = tree; + } + const akTree = currentTree.current; useEffect(() => { - update(props.tree); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [props.tree]); + const itemsToLoad = new Set(); + for (let item of Object.values(akTree.items)) { + if (item.isExpanded) { + item.data.allChildren.forEach((child: any) => { + itemsToLoad.add(child as string); + }); + } + } - const onExpand = (info: { id: ItemId; isChevron: boolean }) => { - setAktree(mutateTree(akTree, info.id, { isExpanded: true })); - const item = akTree.items[info.id]; + // clear items from cache if not in itemsToLoad + for (let [key, item] of cache.current.entries()) { + if (!itemsToLoad.has(key)) { + item.dispose(); + cache.current.delete(key); + } + } - if (!info.isChevron) { - props.onClick(item.data!.path); + // load items + for (let key of itemsToLoad) { + if (!cache.current.has(key)) { + const item = DocConnection.load(key, sessionStore); + cache.current.set(key, item); + } } + }, [akTree, sessionStore]); + + const onExpand = (id: ItemId) => { + const mutated = mutateTree(akTree, id, { + isExpanded: true, + }); + currentTree.current = mutated; + setForceUpdate(forceUpdate + 1); }; - const onCollapse = (info: { id: ItemId; isChevron: boolean }) => { - setAktree(mutateTree(akTree, info.id, { isExpanded: false })); - const item = akTree.items[info.id]; + const onCollapse = (id: ItemId) => { + const mutated = mutateTree(akTree, id, { isExpanded: false }); + currentTree.current = mutated; + setForceUpdate(forceUpdate + 1); + }; - if (!info.isChevron) { - props.onClick(item.data!.path); + const renderItem = useMemo( + () => RenderItem(props.onClick, props.onAddNewPage), + [props.onAddNewPage, props.onClick] + ); + + const onDragEnd = ( + source: TreeSourcePosition, + destination?: TreeDestinationPosition + ) => { + if (!destination) { + return; + } + const sourceDoc = DocConnection.get( + akTree.items[source.parentId].data!.id + "", + sessionStore + )?.tryDoc; + const destDoc = DocConnection.get( + akTree.items[destination.parentId].data!.id + "", + sessionStore + )?.tryDoc; + if (!sourceDoc || !destDoc) { + throw new Error("Doc not found but should be loaded"); } + + const itemIdentifier: Identifier = + akTree.items[akTree.items[source.parentId].children[source.index]].data! + .identifier; + + if (destDoc === sourceDoc) { + if (destination.index === undefined) { + throw new Error("no destination index"); + } + sourceDoc.moveRef(ChildReference, itemIdentifier, destination.index); + } else { + destDoc.addRef( + ChildReference, + itemIdentifier, + destination.index || 0, + false + ); // TODO (must be true) + sourceDoc.removeRef(ChildReference, itemIdentifier); + } + // const { tree } = this.state; + // if (!destination) { + // return; + // } + // const newTree = moveItemOnTree(tree, source, destination); + // this.setState({ + // tree: newTree, + // }); }; return ( - + <> + {}} + onDragEnd={onDragEnd} + offsetPerLevel={17} + isDragEnabled + isNestingEnabled + /> + + ); } ); diff --git a/packages/editor/src/app/documentRenderers/richtext/CustomDragHandleMenu.tsx b/packages/editor/src/app/documentRenderers/richtext/CustomDragHandleMenu.tsx new file mode 100644 index 000000000..91eb5ac16 --- /dev/null +++ b/packages/editor/src/app/documentRenderers/richtext/CustomDragHandleMenu.tsx @@ -0,0 +1,21 @@ +import { + BlockColorsButton, + DragHandleMenu, + DragHandleMenuItem, + DragHandleMenuProps, + RemoveBlockButton, +} from "@blocknote/react"; + +export function CustomDragHandleMenu(props: DragHandleMenuProps) { + return ( + + props.editor.removeBlocks([props.block])}> + Configure + + Delete + Colors + + ); +} diff --git a/packages/editor/src/app/documentRenderers/richtext/InlineMonacoContent.tsx b/packages/editor/src/app/documentRenderers/richtext/InlineMonacoContent.tsx new file mode 100644 index 000000000..8d7efbf8a --- /dev/null +++ b/packages/editor/src/app/documentRenderers/richtext/InlineMonacoContent.tsx @@ -0,0 +1,176 @@ +import { createTipTapBlock } from "@blocknote/core"; +import { mergeAttributes } from "@tiptap/core"; +// import styles from "../../Block.module.css"; + +// @ts-ignore +// @ts-ignore +// @ts-ignore +import { + NodeViewProps, + NodeViewWrapper, + ReactNodeViewRenderer, +} from "@tiptap/react"; +import { keymap } from "prosemirror-keymap"; +import { EditorState, Selection } from "prosemirror-state"; +import { EditorView, NodeView } from "prosemirror-view"; +import { MonacoElement } from "./MonacoElement"; + +function arrowHandler( + dir: "up" | "down" | "left" | "right" | "forward" | "backward" +) { + return (state: EditorState, dispatch: any, view: EditorView) => { + if (state.selection.empty) { + let side = dir === "left" || dir === "up" ? -1 : 1; + let $head = state.selection.$head; + + let nextPos = Selection.near( + state.doc.resolve(side > 0 ? $head.pos + 1 : $head.pos - 1), + side + ); + + if (nextPos.$head && nextPos.$head.parent.type.name === "inlineCode") { + dispatch(state.tr.setSelection(nextPos)); + return true; + } + } + return false; + }; +} + +const arrowHandlers = keymap({ + ArrowLeft: arrowHandler("left"), + ArrowRight: arrowHandler("right"), + ArrowUp: arrowHandler("up"), + ArrowDown: arrowHandler("down"), +} as any); + +const ComponentWithWrapper = ( + props: NodeViewProps & { block: any; htmlAttributes: any } +) => { + const { htmlAttributes, ...restProps } = props; + return ( + + {/* @ts-ignore */} + + + ); +}; + +// TODO: clean up listeners +export const InlineMonacoContent = createTipTapBlock({ + name: "inlineCode", + // inline: true, + content: "inline*", + editable: true, + selectable: false, + parseHTML() { + return [ + { + tag: "code", + priority: 200, + node: "code", + }, + ]; + }, + + renderHTML({ HTMLAttributes }: any) { + return [ + "code", + mergeAttributes(HTMLAttributes, { + // class: styles.blockContent, + "data-content-type": this.name, + }), + ["code", 0], + ]; + }, + + addNodeView() { + const BlockContent = (props: any) => { + // const Content = blockConfig.render; + + // Add props as HTML attributes in kebab-case with "data-" prefix + const htmlAttributes: Record = {}; + // for (const [attribute, value] of Object.entries(props.node.attrs)) { + // if (attribute in blockConfig.propSchema) { + // htmlAttributes[camelToDataKebab(attribute)] = value; + // } + // } + + // Gets BlockNote editor instance + const editor = this.options.editor!; + // Gets position of the node + const pos = + typeof props.getPos === "function" ? props.getPos() : undefined; + // Gets TipTap editor instance + const tipTapEditor = editor._tiptapEditor; + // Gets parent blockContainer node + // const blockContainer = tipTapEditor.state.doc.resolve(pos!).node(); + // // Gets block identifier + // const blockIdentifier = blockContainer.attrs.id; + // // Get the block + // const block = editor.getBlock(blockIdentifier)!; + + console.log("ComponentWithWrapper"); + return ( + + ); + }; + + return (props) => { + if (!(props.editor as any).contentComponent) { + // same logic as in ReactNodeViewRenderer + return {}; + } + const ret = ReactNodeViewRenderer(BlockContent, { + stopEvent: () => true, + })(props) as NodeView; + // manual hack, because tiptap React nodeviews don't support setSelection + ret.setSelection = (anchor, head) => { + // This doesn't work because the Tiptap react renderer doesn't properly support forwardref + // (ret as any).renderer.ref?.setSelection(anchor, head); + (ret as any).renderer.updateProps({ + selectionHack: { anchor, head }, + }); + }; + + // disable contentdom, because we render the content ourselves in MonacoElement + // TODO: set contentDOM to undefined, but this causes a bug in PM + (ret as any).contentDOMElement = undefined; + + // This is a hack because tiptap doesn't support innerDeco, and this information is normally dropped + const oldUpdated = ret.update!.bind(ret); + ret.update = (node, outerDeco, innerDeco) => { + const retAsAny = ret as any; + let decorations = retAsAny.decorations; + if ( + retAsAny.decorations.decorations !== outerDeco || + retAsAny.decorations.innerDecorations !== innerDeco + ) { + // change the format of "decorations" to have both the outerDeco and innerDeco + decorations = { + decorations: outerDeco, + innerDecorations: innerDeco, + }; + } + return oldUpdated(node, decorations, undefined as any); + }; + return ret; + }; + }, + addProseMirrorPlugins() { + return [arrowHandlers] as any; + }, +}); + +InlineMonacoContent.config.group = "inline" as any; +(InlineMonacoContent as any).config.inline = true as any; diff --git a/packages/editor/src/app/documentRenderers/richtext/MonacoBlockContent.tsx b/packages/editor/src/app/documentRenderers/richtext/MonacoBlockContent.tsx new file mode 100644 index 000000000..d7ef91e5c --- /dev/null +++ b/packages/editor/src/app/documentRenderers/richtext/MonacoBlockContent.tsx @@ -0,0 +1,212 @@ +import { createTipTapBlock } from "@blocknote/core"; +import { mergeAttributes } from "@tiptap/core"; +// import styles from "../../Block.module.css"; + +// @ts-ignore +// @ts-ignore +// @ts-ignore +import { + NodeViewProps, + NodeViewWrapper, + ReactNodeViewRenderer, +} from "@tiptap/react"; +import { keymap } from "prosemirror-keymap"; +import { EditorState, Selection } from "prosemirror-state"; +import { EditorView, NodeView } from "prosemirror-view"; +import { MonacoElement } from "./MonacoElement"; + +function arrowHandler( + dir: "up" | "down" | "left" | "right" | "forward" | "backward" +) { + return (state: EditorState, dispatch: any, view: EditorView) => { + if (state.selection.empty && view.endOfTextblock(dir)) { + let side = dir === "left" || dir === "up" ? -1 : 1; + let $head = state.selection.$head; + let nextPos = Selection.near( + state.doc.resolve(side > 0 ? $head.after() : $head.before()), + side + ); + if (nextPos.$head && nextPos.$head.parent.type.name === "codeNode") { + dispatch(state.tr.setSelection(nextPos)); + return true; + } + } + return false; + }; +} + +const arrowHandlers = keymap({ + ArrowLeft: arrowHandler("left"), + ArrowRight: arrowHandler("right"), + ArrowUp: arrowHandler("up"), + ArrowDown: arrowHandler("down"), +} as any); + +const ComponentWithWrapper = ( + props: NodeViewProps & { block: any; htmlAttributes: any } +) => { + const { htmlAttributes, ...restProps } = props; + return ( + + {/* @ts-ignore */} + + + ); +}; + +// TODO: clean up listeners +export const MonacoBlockContent = createTipTapBlock({ + name: "codeNode", + content: "inline*", + editable: true, + selectable: true, + parseHTML() { + return [ + { + tag: "p", + priority: 200, + node: "paragraph", + }, + ]; + }, + + renderHTML({ HTMLAttributes }: any) { + return [ + "code", + mergeAttributes(HTMLAttributes, { + // class: styles.blockContent, + "data-content-type": this.name, + }), + ["p", 0], + ]; + }, + + addAttributes() { + return { + language: { + default: "typescript", + parseHTML: (element) => element.getAttribute("data-language"), + renderHTML: (attributes) => { + return { + "data-language": attributes.language, + }; + }, + }, + // TODO + moduleName: { + default: "", + parseHTML: (element) => element.getAttribute("data-moduleName"), + renderHTML: (attributes) => { + return { + "data-moduleName": attributes.moduleName, + }; + }, + }, + // TODO + key: { + default: "", + parseHTML: (element) => element.getAttribute("data-key"), + renderHTML: (attributes) => { + return { + "data-key": attributes.key, + }; + }, + }, + bindings: { + default: "", + parseHTML: (element) => element.getAttribute("data-bindings"), + renderHTML: (attributes) => { + return { + "data-bindings": attributes.bindings, + }; + }, + }, + }; + }, + + addNodeView() { + const BlockContent = (props: any) => { + // const Content = blockConfig.render; + + // Add props as HTML attributes in kebab-case with "data-" prefix + const htmlAttributes: Record = {}; + // for (const [attribute, value] of Object.entries(props.node.attrs)) { + // if (attribute in blockConfig.propSchema) { + // htmlAttributes[camelToDataKebab(attribute)] = value; + // } + // } + + // Gets BlockNote editor instance + const editor = this.options.editor!; + // Gets position of the node + const pos = + typeof props.getPos === "function" ? props.getPos() : undefined; + // Gets TipTap editor instance + const tipTapEditor = editor._tiptapEditor; + // Gets parent blockContainer node + const blockContainer = tipTapEditor.state.doc.resolve(pos!).node(); + // Gets block identifier + const blockIdentifier = blockContainer.attrs.id; + // Get the block + const block = editor.getBlock(blockIdentifier)!; + + console.log("ComponentWithWrapper"); + return ( + + ); + }; + + return (props) => { + if (!(props.editor as any).contentComponent) { + // same logic as in ReactNodeViewRenderer + return {}; + } + const ret = ReactNodeViewRenderer(BlockContent, { + stopEvent: () => true, + })(props) as NodeView; + // manual hack, because tiptap React nodeviews don't support setSelection + ret.setSelection = (anchor, head) => { + // This doesn't work because the Tiptap react renderer doesn't properly support forwardref + // (ret as any).renderer.ref?.setSelection(anchor, head); + (ret as any).renderer.updateProps({ + selectionHack: { anchor, head }, + }); + }; + + // disable contentdom, because we render the content ourselves in MonacoElement + // TODO: set contentDOM to undefined, but this causes a bug in PM + (ret as any).contentDOMElement = undefined; + + // This is a hack because tiptap doesn't support innerDeco, and this information is normally dropped + const oldUpdated = ret.update!.bind(ret); + ret.update = (node, outerDeco, innerDeco) => { + const retAsAny = ret as any; + let decorations = retAsAny.decorations; + if ( + retAsAny.decorations.decorations !== outerDeco || + retAsAny.decorations.innerDecorations !== innerDeco + ) { + // change the format of "decorations" to have both the outerDeco and innerDeco + decorations = { + decorations: outerDeco, + innerDecorations: innerDeco, + }; + } + return oldUpdated(node, decorations, undefined as any); + }; + return ret; + }; + }, + addProseMirrorPlugins() { + return [arrowHandlers] as any; + }, +}); diff --git a/packages/editor/src/app/documentRenderers/richtext/MonacoElement.module.css b/packages/editor/src/app/documentRenderers/richtext/MonacoElement.module.css new file mode 100644 index 000000000..89016aa69 --- /dev/null +++ b/packages/editor/src/app/documentRenderers/richtext/MonacoElement.module.css @@ -0,0 +1,3 @@ +.inlineTooltip .tippy-svg-arrow { + fill: gray; +} diff --git a/packages/editor/src/app/documentRenderers/richtext/MonacoElement.tsx b/packages/editor/src/app/documentRenderers/richtext/MonacoElement.tsx new file mode 100644 index 000000000..387810f5f --- /dev/null +++ b/packages/editor/src/app/documentRenderers/richtext/MonacoElement.tsx @@ -0,0 +1,371 @@ +import Tippy from "@tippyjs/react"; +import { NodeViewProps } from "@tiptap/core"; +import { untracked } from "mobx"; +import * as monaco from "monaco-editor"; +import React, { + useCallback, + useContext, + useEffect, + useMemo, + useRef, + useState, +} from "react"; +import { + VscChevronDown, + VscChevronRight, + VscSettingsGear, +} from "react-icons/vsc"; +import { roundArrow } from "tippy.js"; +import "tippy.js/dist/svg-arrow.css"; +import { MonacoTypeCellCodeModel } from "../../../models/MonacoTypeCellCodeModel"; +import LocalExecutionHost from "../../../runtime/executor/executionHosts/local/LocalExecutionHost"; +import NotebookLanguageSelector from "../notebook/LanguageSelector"; +import { + applyDecorationsToMonaco, + applyNodeChangesToMonaco, + bindMonacoAndProsemirror, +} from "./MonacoProsemirrorHelpers"; +import { RichTextContext } from "./RichTextContext"; +const MonacoElementComponent = function MonacoElement( + props: NodeViewProps & { block: any; selectionHack: any; inline: boolean } +) { + const editorRef = useRef(); + const tippyRef = useRef(); + const context = useContext(RichTextContext); + + // hacky way to only initialize some resources once + // probably useMemo is not the best fit for this + const models = useMemo(() => { + // console.log("create", props.block.id, refa.current); + const uri = monaco.Uri.parse( + `file:///!@${context.document.id}/${Math.random()}.cell.tsx` + ); + const model = monaco.editor.createModel( + props.node.textContent, + props.block?.props.language || "typescript", // TODO: string type + uri + ); // TODO + const codeModel = new MonacoTypeCellCodeModel(model); + context.compiler.registerModel(codeModel); // TODO: cleanup + + return { + model, + codeModel, + state: { + isUpdating: false, + node: props.node, + lastDecorations: [] as string[], + }, + dispose: () => { + codeModel.dispose(); + model.dispose(); + }, + }; + }, []); + + // hacky way to dispose of the useMemo values above + useEffect(() => { + return () => { + models.dispose(); + }; + }, []); + + useEffect(() => { + if (!editorRef.current) { + return; + } + models.state.isUpdating = true; + models.state.node = props.node; + try { + applyNodeChangesToMonaco(props.node, models.model); + models.state.lastDecorations = applyDecorationsToMonaco( + models.model, + props.decorations as any, + editorRef.current!, + models.state.lastDecorations + ); + } finally { + models.state.isUpdating = false; + } + }, [props.node, props.decorations]); + + useEffect(() => { + if (props.selected) { + editorRef.current?.focus(); + } + }, [props.selected]); + + useEffect(() => { + if (!props.selectionHack) { + return; + } + let startPos = models.model.getPositionAt(props.selectionHack.anchor); + let endPos = models.model.getPositionAt(props.selectionHack.head); + models.state.isUpdating = true; + editorRef.current?.setSelection( + monaco.Selection.fromPositions(startPos, endPos) + ); + models.state.isUpdating = false; + + if (tippyRef.current) { + tippyRef.current.show(); + } + + editorRef.current?.focus(); + }, [props.selectionHack]); + + const codeRefCallback = useCallback((el: HTMLDivElement) => { + let editor = editorRef.current; + + if (editor && editor?.getContainerDomNode() !== el) { + editor.dispose(); + editorRef.current = undefined; + } + + if (!el) { + return; + } + + let newEditor = monaco.editor.create(el, { + model: models.model, + theme: "typecellTheme", + renderLineHighlight: props.inline ? "none" : "all", + }); + + bindMonacoAndProsemirror( + newEditor, + props.editor.view, + props.getPos, + models.state + ); + + // disable per-cell find command (https://github.com/microsoft/monaco-editor/issues/102) + (newEditor as any)._standaloneKeybindingService.addDynamicKeybinding( + "-actions.find", + null, // keybinding + () => {} // need to pass an empty handler + ); + + // if (initialFocus && initial.current) { + // initial.current = false; + // // newEditor.focus(); + // } + + newEditor.onDidBlurEditorWidget(() => { + newEditor.trigger("blur", "editor.action.formatDocument", {}); + }); + + newEditor.onDidContentSizeChange(() => { + const height = Math.min(500, newEditor.getContentHeight()); + const width = props.inline + ? newEditor.getContentWidth() + 50 + : newEditor.getContainerDomNode()!.offsetWidth; + try { + newEditor.layout({ + height, + width, + }); + } finally { + } + }); + + newEditor.onDidBlurEditorText(() => { + if (tippyRef.current) { + tippyRef.current.hide(); + } + }); + + // setInterval(() => { + // const contentHeight = Math.min(500, newEditor.getContentHeight()); + // newEditor.layout({ + // height: contentHeight, + // width: props.inline + // ? 600 + // : newEditor.getContainerDomNode()!.offsetWidth, + // }); + // }, 10000); + editorRef.current = newEditor; + }, []); + + const [codeVisible, setCodeVisible] = useState( + untracked(() => !props.node.textContent.startsWith("// @default-collapsed")) + ); + + useEffect(() => { + if (!codeVisible || !editorRef.current) { + return; + } + const editor = editorRef.current; + const height = Math.min(500, editor.getContentHeight()); + const width = props.inline + ? editor.getContentWidth() + 50 + : editor.getContainerDomNode()!.offsetWidth; + try { + editor.layout({ + height, + width, + }); + } finally { + } + }, [codeVisible]); + + const [settingsVisible, setSettingsVisible] = useState(false); + + if (props.inline) { + return ( + <> + (tippyRef.current = tip)} + onHide={(p) => { + if (editorRef.current?.hasTextFocus()) { + return false; + } + }} + onMount={(p) => { + const contentWidth = editorRef.current!.getContentWidth() + 50; + const contentHeight = editorRef.current!.getContentHeight(); + editorRef.current?.layout({ + height: contentHeight, + width: contentWidth, + }); + // p.popperInstance?.update(); + }} + delay={[0, 200]} + content={ +
+ }> + setCodeVisible(true)} + // onMouseOut={() => setCodeVisible(false)} + > + {context.executionHost.renderOutput( + models.model.uri.toString(), + () => {} + )} + +
+ {/* {props.toolbar && props.toolbar} */} + {/* {codeVisible && ( + + )} */} + {/*
+ {context.executionHost.renderOutput( + models.model.uri.toString(), + () => {} + )} +
*/} + + ); + } + + return ( +
+
+ {codeVisible ? ( + setCodeVisible(false)} + /> + ) : ( + setCodeVisible(true)} + /> + )} + {props.block?.props.moduleName && ( + setSettingsVisible(!settingsVisible)} + /> + )} +
+ {} +
+
+ { + // TODO: use blocknote api + props.updateAttributes({ + language, + }); + }} + // onRemove={() => remove(i)} + /> + +
+
+ +
+ {context.executionHost.renderOutput( + models.model.uri.toString(), + () => {} + )} +
+ {settingsVisible && ( +
+ {(context.executionHost as LocalExecutionHost).renderEditArea( + models.model.uri.toString(), + models.codeModel.getValue(), + (code) => { + models.model.setValue(code); + }, + props.node.attrs.key, + props.node.attrs.bindings, + (bindings: string) => { + // models.state.isUpdating = true; + props.updateAttributes({ + bindings, + }); + // models.state.isUpdating = false; + } + )} +
+ )} +
+
+ ); +}; + +// TODO: check why this doesn't work +export const MonacoElement = React.memo(MonacoElementComponent); diff --git a/packages/editor/src/app/documentRenderers/richtext/MonacoProsemirrorHelpers.ts b/packages/editor/src/app/documentRenderers/richtext/MonacoProsemirrorHelpers.ts new file mode 100644 index 000000000..4d1109aa9 --- /dev/null +++ b/packages/editor/src/app/documentRenderers/richtext/MonacoProsemirrorHelpers.ts @@ -0,0 +1,309 @@ +import * as monaco from "monaco-editor"; +import { Node } from "prosemirror-model"; +import { Selection, TextSelection, Transaction } from "prosemirror-state"; +import { Decoration, EditorView } from "prosemirror-view"; + +function selectionDir( + view: EditorView, + pos: number, + size: number, + dir: -1 | 1 +) { + const targetPos = pos + (dir < 0 ? 0 : size); + const selection = Selection.near(view.state.doc.resolve(targetPos), dir); + view.dispatch(view.state.tr.setSelection(selection).scrollIntoView()); + view.focus(); +} + +function getTransactionForSelectionUpdate( + selection: monaco.Selection | null, + model: monaco.editor.ITextModel | null, + offset: number, + tr: Transaction +) { + if (selection && model) { + const selFrom = model!.getOffsetAt(selection.getStartPosition()) + offset; + const selEnd = model!.getOffsetAt(selection.getEndPosition()) + offset; + tr.setSelection( + TextSelection.create( + tr.doc, + selection.getDirection() === monaco.SelectionDirection.LTR + ? selFrom + : selEnd, + selection.getDirection() === monaco.SelectionDirection.LTR + ? selEnd + : selFrom + ) + ); + } +} + +export function bindMonacoAndProsemirror( + mon: monaco.editor.IStandaloneCodeEditor, + view: EditorView, + getPos: () => number, + state: { + isUpdating: boolean; + node: Node; + } +) { + /** + * When the user selection changes in the monaco editor, we want to make sure the selection in the prosemirror document is updated accordingly. + */ + mon.onDidChangeCursorSelection((e) => { + console.log("change selection"); + + if (typeof getPos === "boolean") { + throw new Error("getPos is boolean"); + } + + if (state.isUpdating) { + return; + } + + if (!mon.hasTextFocus()) { + // only update prosemirror selection if the monaco editor actually has focus + // this makes sure prettier updates on blur don't reset the selection to the code editor + return; + } + + let offset = getPos() + 1; + + let tr = view.state.tr; + getTransactionForSelectionUpdate( + mon.getSelection(), + mon.getModel(), + offset, + tr as any + ); + try { + view.dispatch(tr); + } catch (e) { + console.error(e); + } + }); + + /** + * When changes are made by this user to the monaco editor, we want to apply those changes to the prosemirror document. + */ + mon.onDidChangeModelContent((e) => { + if (typeof getPos === "boolean") { + throw new Error("getPos is boolean"); + } + + if (state.isUpdating) { + return; + } + + let offset = getPos() + 1; + // { main } = update.state.selection; + + let tr = view.state.tr; + + e.changes.forEach((change) => { + if (change.text.length) { + tr.replaceWith( + offset + change.rangeOffset, + offset + change.rangeOffset + change.rangeLength, + view.state.schema.text(change.text.toString()) + ); + } else { + tr.delete( + offset + change.rangeOffset, + offset + change.rangeOffset + change.rangeLength + ); + } + // TODO: update offset? + }); + + if (mon.hasTextFocus()) { + // only update prosemirror selection if the monaco editor actually has focus + // this makes sure prettier updates on blur don't reset the selection to the code editor + getTransactionForSelectionUpdate( + mon.getSelection(), + mon.getModel(), + offset, + tr as any + ); + } + try { + view.dispatch(tr); + + // setTimeout(() => mon.focus(), 1000); + console.log(mon); + } catch (e) { + console.error(e); + } + }); + + /** + * When we're at the edges of the monaco editor, and the user hits an arrow key, + * we might want to move the selection outside of the monaco editor, and into other nodes + */ + mon.onKeyDown((e) => { + if (typeof getPos === "boolean") { + throw new Error("getPos is boolean"); + } + + // delete empty node on backspace + if (e.code === "Delete" || e.code === "Backspace") { + if (state.node.textContent === "") { + view.dispatch( + view.state.tr.deleteRange(getPos(), getPos() + state.node.nodeSize) + ); + view.focus(); + return; + } + } + + // handle arrow movements + const { lineNumber = 1, column = 1 } = mon.getPosition() || {}; + const model = mon.getModel(); + const maxLines = model?.getLineCount() || 1; + let dir: -1 | 1 | null = null; + if (e.code === "ArrowLeft") { + if (lineNumber !== 1 || column !== 1) { + return; + } + dir = -1; + } else if (e.code === "ArrowRight") { + if ( + lineNumber !== maxLines || + column - 1 !== model?.getLineLength(maxLines) + ) { + return; + } + dir = 1; + } else if (e.code === "ArrowUp") { + if (lineNumber !== 1) { + return; + } + dir = -1; + } else if (e.code === "ArrowDown") { + if (lineNumber !== maxLines) { + return; + } + dir = 1; + } + if (dir !== null) { + console.log("dir", dir, state.node.nodeSize); + selectionDir(view, getPos(), state.node.nodeSize, dir); + return; + } + }); +} + +/** + * This function takes care of applying changes from the prosemirror document to the monaco editor. + */ +export function applyNodeChangesToMonaco( + node: Node, + modal: monaco.editor.ITextModel +) { + let newText = node.textContent; + let curText = modal.getValue(); + if (newText === curText) { + return; + } + let start = 0, + curEnd = curText.length, + newEnd = newText.length; + while ( + start < curEnd && + curText.charCodeAt(start) === newText.charCodeAt(start) + ) { + ++start; + } + while ( + curEnd > start && + newEnd > start && + curText.charCodeAt(curEnd - 1) === newText.charCodeAt(newEnd - 1) + ) { + curEnd--; + newEnd--; + } + + modal.applyEdits([ + { + range: monaco.Range.fromPositions( + modal.getPositionAt(start), + modal.getPositionAt(curEnd) + ), + text: newText.slice(start, newEnd), + }, + ]); +} + +/** + * This function takes care of showing prosemirror decorations (in our case, selections from other users) + * in the monaco editor. + * + * It's similar to this logic from y-monaco: https://github.com/yjs/y-monaco/blob/96a73c6a67daf85f75e8a136bc66c8f29b329ed9/src/y-monaco.js#L88 + */ +export function applyDecorationsToMonaco( + modal: monaco.editor.ITextModel, + decorations: { + decorations: Decoration[]; + innerDecorations: { local: Decoration[] }; + }, + mon: monaco.editor.IStandaloneCodeEditor, + lastDecorations: string[] +) { + if (!decorations.innerDecorations) { + return []; + } + const newDecorations: monaco.editor.IModelDeltaDecoration[] = []; + // const decs = (innerDecorations as any).local as Decoration[]; + + decorations.innerDecorations.local + .filter((d) => d.spec.type === "cursor") + .forEach((cursorDec) => { + const selectionDec = decorations.innerDecorations.local.find( + (d) => + d.spec.type === "selection" && + d.spec.clientID === cursorDec.spec.clientID + ); + + let start: monaco.Position; + let end: monaco.Position; + let afterContentClassName: string | undefined; + let beforeContentClassName: string | undefined; + + const to = cursorDec.to; + const from = selectionDec + ? selectionDec.from === to + ? selectionDec.to + : selectionDec.from + : to; + + if (from < to) { + start = modal.getPositionAt(from); + end = modal.getPositionAt(to); + afterContentClassName = + "yRemoteSelectionHead yRemoteSelectionHead-" + + cursorDec.spec.clientId; + } else { + start = modal.getPositionAt(to); + end = modal.getPositionAt(from); + beforeContentClassName = + "yRemoteSelectionHead yRemoteSelectionHead-" + + cursorDec.spec.clientId; + } + newDecorations.push({ + range: new monaco.Range( + start.lineNumber, + start.column, + end.lineNumber, + end.column + ), + options: { + className: + "yRemoteSelection yRemoteSelection-" + cursorDec.spec.clientId, + afterContentClassName, + beforeContentClassName, + }, + }); + }); + + return mon.deltaDecorations(lastDecorations, newDecorations); +} diff --git a/packages/editor/src/app/documentRenderers/richtext/RichTextContext.ts b/packages/editor/src/app/documentRenderers/richtext/RichTextContext.ts new file mode 100644 index 000000000..6c4bd003d --- /dev/null +++ b/packages/editor/src/app/documentRenderers/richtext/RichTextContext.ts @@ -0,0 +1,14 @@ +import { createContext } from "react"; +import SourceModelCompiler from "../../../runtime/compiler/SourceModelCompiler"; +import { ExecutionHost } from "../../../runtime/executor/executionHosts/ExecutionHost"; +import { DocumentResource } from "../../../store/DocumentResource"; + +export const RichTextContext = createContext<{ + executionHost: ExecutionHost; + compiler: SourceModelCompiler; + document: DocumentResource; +}>({ + executionHost: undefined as any, + compiler: undefined as any, + document: undefined as any, +}); diff --git a/packages/editor/src/app/documentRenderers/richtext/RichTextRenderer.module.css b/packages/editor/src/app/documentRenderers/richtext/RichTextRenderer.module.css index fa3b3dc34..85fbe1036 100644 --- a/packages/editor/src/app/documentRenderers/richtext/RichTextRenderer.module.css +++ b/packages/editor/src/app/documentRenderers/richtext/RichTextRenderer.module.css @@ -1,4 +1,5 @@ .editor { padding: 0 calc((100% - 731px) / 2); height: 100%; + background: transparent !important; } diff --git a/packages/editor/src/app/documentRenderers/richtext/RichTextRenderer.tsx b/packages/editor/src/app/documentRenderers/richtext/RichTextRenderer.tsx index 7deb38a9f..a87cf1bad 100644 --- a/packages/editor/src/app/documentRenderers/richtext/RichTextRenderer.tsx +++ b/packages/editor/src/app/documentRenderers/richtext/RichTextRenderer.tsx @@ -1,49 +1,276 @@ +import { autorun } from "mobx"; import { observer } from "mobx-react-lite"; -import React from "react"; +import React, { useContext, useEffect, useMemo } from "react"; // import LocalExecutionHost from "../../../runtime/executor/executionHosts/local/LocalExecutionHost" -import { EditorContent, useEditor } from "@blocknote/core"; +import { + BaseSlashMenuItem, + BlockNoteEditor, + DefaultBlockSchema, + PartialBlock, + defaultBlockSchema, +} from "@blocknote/core"; import "@blocknote/core/style.css"; -import Collaboration from "@tiptap/extension-collaboration"; -import CollaborationCursor from "@tiptap/extension-collaboration-cursor"; +import { + BlockNoteView, + defaultReactSlashMenuItems, + useBlockNote, +} from "@blocknote/react"; import ReactDOM from "react-dom"; +import SourceModelCompiler from "../../../runtime/compiler/SourceModelCompiler"; +import { MonacoContext } from "../../../runtime/editor/MonacoContext"; +import LocalExecutionHost from "../../../runtime/executor/executionHosts/local/LocalExecutionHost"; +import { Block } from "../../../runtime/executor/lib/exports"; import { DocumentResource } from "../../../store/DocumentResource"; -import { getStoreService } from "../../../store/local/stores"; +import { SessionStore } from "../../../store/local/SessionStore"; +import { MonacoColorManager } from "../notebook/MonacoColorManager"; +import { CustomDragHandleMenu } from "./CustomDragHandleMenu"; +import { InlineMonacoContent } from "./InlineMonacoContent"; +import { MonacoBlockContent } from "./MonacoBlockContent"; +import { RichTextContext } from "./RichTextContext"; import styles from "./RichTextRenderer.module.css"; type Props = { document: DocumentResource; + sessionStore: SessionStore; }; window.React = React; window.ReactDOM = ReactDOM; +class FakeProvider { + constructor(public readonly awareness: any) {} +} +function insertOrUpdateBlock( + editor: BlockNoteEditor, + block: PartialBlock +) { + const currentBlock = editor.getTextCursorPosition()!.block; + + if ( + (currentBlock.content.length === 1 && + currentBlock.content[0].type === "text" && + currentBlock.content[0].text === "/") || + currentBlock.content.length === 0 + ) { + editor.updateBlock(currentBlock, block); + } else { + editor.insertBlocks([block], currentBlock, "after"); + editor.setTextCursorPosition(editor.getTextCursorPosition()!.nextBlock!); + } +} + +const baseSlashCommands = [ + ...defaultReactSlashMenuItems, + new BaseSlashMenuItem( + "Code", + (editor: any) => + insertOrUpdateBlock(editor, { + type: "codeNode", + } as any), + ["m"] + ), + new BaseSlashMenuItem( + "Inline code", + (editor) => { + // state.tr.replaceSelectionWith(dinoType.create({type})) + const node = editor._tiptapEditor.schema.node( + "inlineCode", + undefined, + editor._tiptapEditor.schema.text("export default ")! + ); + const tr = editor._tiptapEditor.state.tr.replaceSelectionWith(node); + // TODO: set selection at end of ""export default " and open inline node + editor._tiptapEditor.view.dispatch(tr); + }, + // insertOrUpdateBlock(editor, { + // type: "abc", + // } as any), + ["m"] + ), +]; + +const slashCommands = [...baseSlashCommands]; + const RichTextRenderer: React.FC = observer((props) => { - const sessionStore = getStoreService().sessionStore; + const { sessionStore } = props; + const monaco = useContext(MonacoContext).monaco; + const tools = useMemo(() => { + const newCompiler = new SourceModelCompiler(monaco); + // if (!USE_SAFE_IFRAME) { + // throw new Error( + // "LocalExecutionHost disabled to prevent large bundle size" + // ); + // // newExecutionHost = new LocalExecutionHost(props.document.id, newCompiler, monaco); + // } + const newExecutionHost: LocalExecutionHost = new LocalExecutionHost( + props.document.id, + newCompiler, + monaco, + sessionStore, + (obj) => console.log("loadPlugins", obj) + ); + + console.log("context", newExecutionHost.engine.observableContext.context); + autorun(() => { + const customSlashCommands: any[] = []; + for (let [_key, val] of Object.entries( + newExecutionHost.engine.observableContext.context + )) { + if (typeof val === "object" && (val as any)?.__moduleName) { + const moduleName = (val as any)?.__moduleName; + for (let [key, obj] of Object.entries(val as any)) { + if (obj instanceof Block) { + console.log("blockcomp", key, val); + customSlashCommands.push( + new BaseSlashMenuItem(obj.name, (editor) => { + insertOrUpdateBlock( + editor as any, + { + type: "codeNode", + props: { + language: "typescript", + moduleName: moduleName, + key, + bindings: "", + }, + content: `// @default-collapsed +import * as doc from "${moduleName}"; + +export let myMap = doc; + +export default { +block: doc.${key}, +doc, +};`, + } as any + ); + }) + ); + } + } + } + } + console.log("customSlashCommands", customSlashCommands.length); + slashCommands.splice( + baseSlashCommands.length, + slashCommands.length - baseSlashCommands.length, + // ...customSlashCommands + ...customSlashCommands.slice(0) + ); + }); + // const newExecutionHost: ExecutionHost = new SandboxedExecutionHost( + // props.document.id, + // newCompiler, + // monaco + // ); + return { newCompiler, newExecutionHost }; + }, []); - const editor = useEditor({ - onUpdate: ({ editor }) => { - console.log(editor.getJSON()); + useEffect(() => { + // make sure color info is broadcast, and color info from other users are reflected in monaco editor styles + if (props.document.awareness) { + const colorManager = new MonacoColorManager( + props.document.awareness, + sessionStore.loggedInUserId || "Anonymous", + sessionStore.userColor + ); + return () => { + colorManager.dispose(); + }; + } + }, [ + props.document.awareness, + sessionStore.loggedInUserId, + sessionStore.userColor, + ]); + + const editor = useBlockNote({ + editorDOMAttributes: { + class: styles.editor, + "data-test": "editor", }, - editorProps: { - attributes: { - class: styles.editor, - "data-test": "editor", - }, + customElements: { + dragHandleMenu: CustomDragHandleMenu, }, - disableHistoryExtension: true, - extensions: [ - CollaborationCursor.configure({ - provider: props.document.webrtcProvider, - user: { - name: sessionStore.loggedInUserId || "Anonymous", - color: sessionStore.userColor, + blockSchema: { + ...defaultBlockSchema, + codeNode: { + propSchema: { + language: { + type: "string", + default: "typescript", + }, + moduleName: { + type: "string", + default: "", + }, + key: { + type: "string", + default: "", + }, + bindings: { + type: "string", + default: "", + }, + }, + node: MonacoBlockContent, + }, + inlineCode: { + propSchema: { + language: { + type: "string", + default: "typescript", + }, }, - }), - Collaboration.configure({ - fragment: props.document.data, - }), - ], + node: InlineMonacoContent, + }, + } as any, + slashCommands, + collaboration: { + provider: new FakeProvider(props.document.awareness), + user: { + name: sessionStore.loggedInUserId || "Anonymous", + color: sessionStore.userColor, + }, + fragment: props.document.data as any, + }, + // onUpdate: ({ editor }) => { + // console.log(editor.getJSON()); + // }, + // editorProps: { + // attributes: { + // class: styles.editor, + // "data-test": "editor", + // }, + // }, + // disableHistoryExtension: true, + // extensions: [ + // CollaborationCursor.configure({ + // provider: { + // awareness: props.document.awareness, + // }, + // user: { + // name: sessionStore.loggedInUserId || "Anonymous", + // color: sessionStore.userColor, + // }, + // }), + // Collaboration.configure({ + // fragment: props.document.data, + // }), + // ], }); - return ; + return ( +
+ {tools.newExecutionHost.renderContainer()} + + + +
+ ); }); export default RichTextRenderer; diff --git a/packages/editor/src/app/main/Main.tsx b/packages/editor/src/app/main/Main.tsx index 25dae062a..2efdb6e7a 100644 --- a/packages/editor/src/app/main/Main.tsx +++ b/packages/editor/src/app/main/Main.tsx @@ -3,15 +3,13 @@ import { DndProvider } from "react-dnd"; import { HTML5Backend } from "react-dnd-html5-backend"; import { Outlet, useLocation, useNavigate } from "react-router-dom"; import { DocumentResource } from "../../store/DocumentResource"; -import { getStoreService } from "../../store/local/stores"; +import { SessionStore } from "../../store/local/SessionStore"; import { CloseNewPageDialog, IsNewPageDialogOpen } from "../routes/routes"; +import styles from "./Main.module.css"; import { Navigation } from "./components/Navigation"; import NewPageDialog from "./components/NewPageDialog"; -import styles from "./Main.module.css"; - -const Main = observer((props: {}) => { - const sessionStore = getStoreService().sessionStore; +const Main = observer((props: { sessionStore: SessionStore }) => { let location = useLocation(); let navigate = useNavigate(); @@ -27,11 +25,12 @@ const Main = observer((props: {}) => { " " + (location.pathname === "/ai" ? styles.ai : "") }> - + - {sessionStore.loggedInUserId && ( + {props.sessionStore.loggedInUserId && ( CloseNewPageDialog(navigate)} isOpen={IsNewPageDialogOpen(location)} /> diff --git a/packages/editor/src/app/main/components/Navigation.tsx b/packages/editor/src/app/main/components/Navigation.tsx index 552da1daf..13c457fd4 100644 --- a/packages/editor/src/app/main/components/Navigation.tsx +++ b/packages/editor/src/app/main/components/Navigation.tsx @@ -5,9 +5,10 @@ import { PrimaryButton, } from "@atlaskit/atlassian-navigation"; import { observer } from "mobx-react-lite"; +import { useCallback } from "react"; import { VscSignIn } from "react-icons/vsc"; import { Link, useLocation, useNavigate } from "react-router-dom"; -import { getStoreService } from "../../../store/local/stores"; +import { SessionStore } from "../../../store/local/SessionStore"; import { toDocs, toLoginScreen } from "../../routes/routes"; import { Logo } from "./Logo"; import styles from "./Navigation.module.css"; @@ -23,11 +24,21 @@ const ProductHome = () => { ); }; -export const Navigation = observer(() => { - const sessionStore = getStoreService().sessionStore; +export const Navigation = observer((props: { sessionStore: SessionStore }) => { + const { sessionStore } = props; const navigate = useNavigate(); const location = useLocation(); + const renderProfile = useCallback(() => { + return ( + <> + {sessionStore.isLoggedIn && ( + + )} + + ); + }, [sessionStore]); + return ( { Documentation GitHub @@ -48,13 +59,7 @@ export const Navigation = observer(() => { // Documentation // , ]} - renderProfile={observer(() => ( - <> - {sessionStore.isLoggedIn && ( - - )} - - ))} + renderProfile={renderProfile} // renderHelp={() => ( // // Documentation diff --git a/packages/editor/src/app/main/components/NewPageDialog.tsx b/packages/editor/src/app/main/components/NewPageDialog.tsx index db9c1787b..a7d857cac 100644 --- a/packages/editor/src/app/main/components/NewPageDialog.tsx +++ b/packages/editor/src/app/main/components/NewPageDialog.tsx @@ -13,6 +13,7 @@ import { useNavigate } from "react-router-dom"; import * as Y from "yjs"; import { BaseResource } from "../../../store/BaseResource"; import { DocConnection } from "../../../store/DocConnection"; +import { SessionStore } from "../../../store/local/SessionStore"; import { UnreachableCaseError } from "../../../util/UnreachableCaseError"; import { toDocument } from "../../routes/routes"; import { Card } from "./common/card/Card"; @@ -22,6 +23,7 @@ export const NewPageDialog = (props: { isOpen: boolean; close: () => void; ownerId: string; + sessionStore: SessionStore; }) => { const [loading, setLoading] = useState(false); const [selectedType, setSelectedType] = useState<"!richtext" | "!notebook">( @@ -50,10 +52,7 @@ export const NewPageDialog = (props: { setError(""); setLoading(true); - const ret = await DocConnection.create({ - owner: props.ownerId, - document: obj.title, - }); + const ret = await DocConnection.create(props.sessionStore); setLoading(false); @@ -62,8 +61,9 @@ export const NewPageDialog = (props: { case "already-exists": setWarning("A page with this title already exists"); break; - case "invalid-identifier": - setWarning("Invalid title"); + case "error": + setError("Unknown error while creating new document."); + console.error(ret); break; default: throw new UnreachableCaseError(ret); @@ -102,13 +102,9 @@ export const NewPageDialog = (props: { // so it's nice to make sure we don't dispose it beforehand (and prevent a reload) setTimeout(() => { ret.dispose(); - }, 500); + }, 50000); // TODO } else { - if (ret.status !== "error") { - throw new UnreachableCaseError(ret.status); - } - console.error(ret); - setError("Unknown error while creating new document."); + throw new UnreachableCaseError(ret); } // setName(obj.name); // setIsOpen(false); diff --git a/packages/editor/src/app/main/components/Profile.tsx b/packages/editor/src/app/main/components/Profile.tsx index 2a0f7c153..7f63186c2 100644 --- a/packages/editor/src/app/main/components/Profile.tsx +++ b/packages/editor/src/app/main/components/Profile.tsx @@ -1,12 +1,14 @@ import Breadcrumbs, { BreadcrumbsItem } from "@atlaskit/breadcrumbs"; import { useNavigate } from "react-router-dom"; +import { SessionStore } from "../../../store/local/SessionStore"; +import { NotebookOverview } from "../../matrix-auth/routes/overview/NotebookOverview"; import { toProfilePage } from "../../routes/routes"; -import { MenuBar } from "./menuBar/MenuBar"; -import { NotebookOverview } from "./NotebookOverview"; import styles from "./Profile.module.css"; +import { MenuBar } from "./menuBar/MenuBar"; interface ProfileProps { owner: string; + sessionStore: SessionStore; } export const Profile = function (props: ProfileProps) { @@ -26,7 +28,10 @@ export const Profile = function (props: ProfileProps) {
- +
); diff --git a/packages/editor/src/app/main/components/ProfilePopup.tsx b/packages/editor/src/app/main/components/ProfilePopup.tsx index 165c61cc5..ac18fc1ad 100644 --- a/packages/editor/src/app/main/components/ProfilePopup.tsx +++ b/packages/editor/src/app/main/components/ProfilePopup.tsx @@ -7,33 +7,30 @@ import { observer } from "mobx-react-lite"; import Avatar from "react-avatar"; import { useNavigate } from "react-router-dom"; import { SessionStore } from "../../../store/local/SessionStore"; -import { getStoreService } from "../../../store/local/stores"; + import { OpenNewPageDialog } from "../../routes/routes"; export const ProfilePopup = observer( (props: { sessionStore: SessionStore }) => { const navigate = useNavigate(); - const navigationStore = getStoreService().navigationStore; /* TODO: props.authStore.user!.firebase.photoURL! */ return ( { - const { triggerRef, isSelected, testId, ...passProps } = props; + trigger={(innerProps) => { + const { triggerRef, isSelected, testId, ...passProps } = innerProps; return ( } - ref={props.triggerRef} + ref={triggerRef} {...passProps} // icon={} tooltip="" @@ -44,8 +41,7 @@ export const ProfilePopup = observer( OpenNewPageDialog(navigate)}> New page - {navigationStore.menuPortalChildren.map((c) => c.children)} - + {" "} {/* @${props.authStore.user?.username} */} {/* Profile */} diff --git a/packages/editor/src/app/main/components/documentMenu/Breadcrumb.tsx b/packages/editor/src/app/main/components/documentMenu/Breadcrumb.tsx index 151c9d336..8760e8a2f 100644 --- a/packages/editor/src/app/main/components/documentMenu/Breadcrumb.tsx +++ b/packages/editor/src/app/main/components/documentMenu/Breadcrumb.tsx @@ -1,13 +1,17 @@ import Breadcrumbs, { BreadcrumbsItem } from "@atlaskit/breadcrumbs"; +import { observer } from "mobx-react-lite"; +import { useContext } from "react"; import { VscFile, VscGithub, VscGlobe } from "react-icons/vsc"; -import { useNavigate, useOutletContext } from "react-router-dom"; -import { path } from "vscode-lib"; +import { useNavigate } from "react-router-dom"; import { FileIdentifier } from "../../../../identifiers/FileIdentifier"; import { GithubIdentifier } from "../../../../identifiers/GithubIdentifier"; import { HttpsIdentifier } from "../../../../identifiers/HttpsIdentifier"; import { Identifier } from "../../../../identifiers/Identifier"; -import { MatrixIdentifier } from "../../../../identifiers/MatrixIdentifier"; -import { toProfilePage } from "../../../routes/routes"; +import { identifiersToPath } from "../../../../identifiers/paths/identifierPathHelpers"; +import { DocConnection } from "../../../../store/DocConnection"; +import ProfileResource from "../../../../store/ProfileResource"; +import { SessionStore } from "../../../../store/local/SessionStore"; +import { RouteContext } from "../../../routes/RouteContext"; const buttonStyle = { alignItems: "baseline", @@ -26,134 +30,83 @@ const buttonStyle = { minWidth: 0, }; -const BreadcrumbItems = (props: { identifier: Identifier }) => { - const items: JSX.Element[] = []; - const navigate = useNavigate(); - const identifier = props.identifier; - - const toRoot = () => { - if (identifier.title === "Docs") { - navigate({ - pathname: "/docs", - }); - } else { - navigate({ - pathname: "/" + identifier.toString(), - }); +function getTitleForIdentifier( + identifier: Identifier, + sessionStore: SessionStore +) { + const doc = DocConnection.get(identifier, sessionStore); + if (doc) { + switch (doc.tryDoc?.type) { + case "!project": + // TODO + return "public workspace"; + case "!profile": + return doc.tryDoc!.getSpecificType(ProfileResource).title; + case "!notebook": + case "!document": + case "!richtext": + return doc.tryDoc!.doc.title || "Untitled"; + default: + return "…"; } - }; - - if (identifier instanceof FileIdentifier) { - // Show path as single item - items.push( - } - text={identifier.title || identifier.uri.toString()} - onClick={toRoot} - /> - ); - } else if (identifier instanceof GithubIdentifier) { - // Show path as single item - items.push( - } - href="" - onClick={toRoot} - text={identifier.title || identifier.uri.toString()} - /> - ); - } else if (identifier instanceof HttpsIdentifier) { - // Show path as single item - items.push( - } - href="" - text={identifier.title || identifier.uri.toString()} - onClick={toRoot} - /> - ); - } else if (identifier instanceof MatrixIdentifier) { - items.push( - { - navigate(toProfilePage(identifier.owner)); - }} - />, - ( - // Replace default component so it doesn't render as a link - - )} - /> - ); } + return "…"; +} - return <>{[...items]}; -}; - -export const Breadcrumb = (props: { identifier: Identifier }) => { - const parentId = (useOutletContext() as any)?.parentIdentifier as - | Identifier - | undefined; +const BreadcrumbItems = observer((props: { sessionStore: SessionStore }) => { + const items: JSX.Element[] = []; const navigate = useNavigate(); - if (parentId) { - let parentPart = parentId.toString(); - if (parentPart.endsWith("index.json")) { - // TODO: hacky to fix here, this is for the http loader - parentPart = parentPart.substring( - 0, - parentPart.length - "index.json".length - ); - } - if (!props.identifier.toString().startsWith(parentPart)) { - throw new Error("unexpected parent identifier"); - } + const { groups } = useContext(RouteContext); - const subOnly = props.identifier.toString().substring(parentPart.length); + groups.forEach((identifiers) => { + const lastIdentifier = identifiers[identifiers.length - 1]; - const parts = subOnly.split("/"); - const subItems: JSX.Element[] = []; - while (parts.length) { - const link = - parentId.title === "Docs" - ? path.join("/docs", ...parts) - : "/" + path.join(parentPart, ":", ...parts); + identifiers.forEach((identifier, i) => { + let component: any; - const part = parts.pop()!; - if (part.length) { - subItems.push( - { - navigate({ pathname: link }); - e.preventDefault(); - }} - /> - ); + // if (i === identifiers.length - 1) { + // component = () => ( + // // Replace default component so it doesn't render as a link + // + // ); + // } + let icon; + if (i === 0) { + if (identifier instanceof HttpsIdentifier) { + icon = ; + } else if (identifier instanceof FileIdentifier) { + icon = ; + } else if (identifier instanceof GithubIdentifier) { + icon = ; + } } - } - subItems.reverse(); - return ( - - {parentId && } - {[...subItems]} - - ); - } + const path = "/" + identifiersToPath(identifiers.slice(0, i + 1)); + items.push( + { + e.preventDefault(); + navigate(path); + }} + /> + ); + }); + }); + + return <>{[...items]}; +}); + +export const Breadcrumb = (props: { sessionStore: SessionStore }) => { return ( - + ); }; diff --git a/packages/editor/src/app/main/components/documentMenu/DocumentMenu.tsx b/packages/editor/src/app/main/components/documentMenu/DocumentMenu.tsx index 79186fb36..99c388693 100644 --- a/packages/editor/src/app/main/components/documentMenu/DocumentMenu.tsx +++ b/packages/editor/src/app/main/components/documentMenu/DocumentMenu.tsx @@ -11,14 +11,19 @@ import { MatrixIdentifier } from "../../../../identifiers/MatrixIdentifier"; import { openAsMarkdown } from "../../../../integrations/markdown/export"; import { DocumentResource } from "../../../../store/DocumentResource"; import { SessionStore } from "../../../../store/local/SessionStore"; -import { getStoreService } from "../../../../store/local/stores"; import { ClosePermissionsDialog, IsPermissionsDialogOpen, OpenPermissionsDialog, } from "../../../routes/routes"; import { MenuBar } from "../menuBar/MenuBar"; -import PermissionsDialog from "../permissions/PermissionsDialog"; + +import { TypeCellIdentifier } from "../../../../identifiers/TypeCellIdentifier"; +import { MatrixRemote } from "../../../../store/yjs-sync/remote/MatrixRemote"; +import { MatrixSessionStore } from "../../../matrix-auth/MatrixSessionStore"; +import MatrixPermissionsDialog from "../../../matrix-auth/routes/permissions/PermissionsDialog"; +import { SupabaseSessionStore } from "../../../supabase-auth/SupabaseSessionStore"; +import SupabasePermissionsDialog from "../../../supabase-auth/routes/permissions/PermissionsDialog"; import { Breadcrumb } from "./Breadcrumb"; import styles from "./DocumentMenu.module.css"; import { ForkAlert } from "./ForkAlert"; @@ -26,6 +31,7 @@ import { ShareButton } from "./ShareButton"; type Props = { document: DocumentResource; + sessionStore: SessionStore; }; // TODO: move? @@ -36,22 +42,57 @@ function userCanEditPermissions( if (identifier && identifier instanceof MatrixIdentifier) { return sessionStore.loggedInUserId === identifier.owner; } - return false; + return true; + // TODO + // if (identifier && identifier instanceof TypeCellIdentifier) { + // return sessionStore.loggedInUserId === identifier.owner; + // } + // return false; } export const DocumentMenu: React.FC = observer((props) => { - const sessionStore = getStoreService().sessionStore; + const { sessionStore } = props; const canEditPermissions = userCanEditPermissions( sessionStore, props.document.identifier ); let location = useLocation(); let navigate = useNavigate(); + + let permissionsArea: any; + if ( + props.document.identifier instanceof MatrixIdentifier && + sessionStore instanceof MatrixSessionStore + ) { + permissionsArea = ( + ClosePermissionsDialog(navigate)} + isOpen={IsPermissionsDialogOpen(location)} + remote={props.document.remote as MatrixRemote} + sessionStore={sessionStore} + /> + ); + } else if ( + props.document.identifier instanceof TypeCellIdentifier && + sessionStore instanceof SupabaseSessionStore + ) { + permissionsArea = ( + ClosePermissionsDialog(navigate)} + isOpen={IsPermissionsDialogOpen(location)} + identifier={props.document.identifier} + sessionStore={sessionStore} + /> + ); + } else { + throw new Error("unexpected types"); + } + return ( - - {props.document.connection!.needsFork && ( - + + {props.document.needsFork && ( + )} - {canEditPermissions && ( - ClosePermissionsDialog(navigate)} - isOpen={IsPermissionsDialogOpen(location)} - connection={props.document.connection!} - /> - )} + {canEditPermissions && permissionsArea} ); }); diff --git a/packages/editor/src/app/main/components/documentMenu/ForkAlert.tsx b/packages/editor/src/app/main/components/documentMenu/ForkAlert.tsx index 6cee84744..d10f905b1 100644 --- a/packages/editor/src/app/main/components/documentMenu/ForkAlert.tsx +++ b/packages/editor/src/app/main/components/documentMenu/ForkAlert.tsx @@ -1,69 +1,66 @@ import { observer } from "mobx-react-lite"; import { VscWarning } from "react-icons/vsc"; import { Link, useLocation, useNavigate } from "react-router-dom"; -import { BaseResource } from "../../../../store/BaseResource"; import { DocumentResource } from "../../../../store/DocumentResource"; -import { getStoreService } from "../../../../store/local/stores"; -import { UnreachableCaseError } from "../../../../util/UnreachableCaseError"; -import { toDocument, toLoginScreen } from "../../../routes/routes"; -import styles from "./ForkAlert.module.css"; -export const ForkAlert = observer((props: { document: DocumentResource }) => { - /* eslint-disable jsx-a11y/anchor-is-valid */ - const sessionStore = getStoreService().sessionStore; - const navigate = useNavigate(); - const location = useLocation(); +import { SessionStore } from "../../../../store/local/SessionStore"; +import { toLoginScreen } from "../../../routes/routes"; +import styles from "./ForkAlert.module.css"; - if (!props.document.connection?.needsFork) { - throw new Error(" but no fork needed"); - } +export const ForkAlert = observer( + (props: { document: DocumentResource; sessionStore: SessionStore }) => { + /* eslint-disable jsx-a11y/anchor-is-valid */ + const { sessionStore } = props; + const navigate = useNavigate(); + const location = useLocation(); - const forkAction = sessionStore.isLoggedIn ? ( -
{ - e.preventDefault(); - if (!props.document.connection) { - throw new Error("unexpected, forking without currentDocument"); - } - const result = await props.document.connection.fork(); - if (result instanceof BaseResource) { - navigate(toDocument(result)); - } else { - if (result.status !== "error") { - throw new UnreachableCaseError(result.status); - } - throw new Error("error while forking"); - } - return false; - }}> - save a copy - - ) : ( - - sign in to save a copy - - ); + if (!props.document.needsFork) { + throw new Error(" but no fork needed"); + } - return ( - - ); -}); + ) : ( + + sign in to save a copy + + ); + + return ( + + ); + } +); diff --git a/packages/editor/src/app/main/components/documentMenu/index.tsx b/packages/editor/src/app/main/components/documentMenu/index.tsx deleted file mode 100644 index ca12a2716..000000000 --- a/packages/editor/src/app/main/components/documentMenu/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import { DocumentMenu } from "./DocumentMenu"; - -export default DocumentMenu; diff --git a/packages/editor/src/app/main/components/menuBar/MenuBar.module.css b/packages/editor/src/app/main/components/menuBar/MenuBar.module.css index 7f9f44207..d9da56ab2 100644 --- a/packages/editor/src/app/main/components/menuBar/MenuBar.module.css +++ b/packages/editor/src/app/main/components/menuBar/MenuBar.module.css @@ -9,7 +9,7 @@ justify-content: space-between; position: sticky; top: 0; - z-index: 99; + /* z-index: 99; */ } /* Targets atlaskit Breadcrumb separators */ diff --git a/packages/editor/src/app/main/components/startscreen/AILanding.tsx b/packages/editor/src/app/main/components/startscreen/AILanding.tsx index 852795cbe..174407200 100644 --- a/packages/editor/src/app/main/components/startscreen/AILanding.tsx +++ b/packages/editor/src/app/main/components/startscreen/AILanding.tsx @@ -1,16 +1,16 @@ import { observer } from "mobx-react-lite"; import { useNavigate } from "react-router-dom"; -import { getStoreService } from "../../../../store/local/stores"; +import { SessionStore } from "../../../../store/local/SessionStore"; import buttonStyles from "../../../../styles/buttons.module.css"; import { OpenNewPageDialog, toNewGuestNotebook } from "../../../routes/routes"; +import styles from "./StartScreen.module.css"; import globe from "./assets/globe.svg"; import intro from "./assets/intro.gif"; import lightning from "./assets/lightning.svg"; import npm from "./assets/npm.svg"; -import styles from "./StartScreen.module.css"; -export const AILanding = observer(() => { - const { sessionStore } = getStoreService(); +export const AILanding = observer((props: { sessionStore: SessionStore }) => { + const { sessionStore } = props; const navigate = useNavigate(); function onNewNotebookClick(e: any) { e.preventDefault(); diff --git a/packages/editor/src/app/main/components/startscreen/StartScreen.tsx b/packages/editor/src/app/main/components/startscreen/StartScreen.tsx index 085d66eaa..7a8ef1df6 100644 --- a/packages/editor/src/app/main/components/startscreen/StartScreen.tsx +++ b/packages/editor/src/app/main/components/startscreen/StartScreen.tsx @@ -1,15 +1,16 @@ import { observer } from "mobx-react-lite"; -import { Link, useNavigate } from "react-router-dom"; -import { getStoreService } from "../../../../store/local/stores"; +import { useEffect } from "react"; +import { Link, useLocation, useNavigate } from "react-router-dom"; +import { SessionStore } from "../../../../store/local/SessionStore"; import buttonStyles from "../../../../styles/buttons.module.css"; +import { NotebookOverviewItem } from "../../../matrix-auth/routes/overview/NotebookOverviewItem"; import { OpenNewPageDialog, toDocs, - toIdentifierString, toNewGuestNotebook, toTutorial, } from "../../../routes/routes"; -import { NotebookOverviewItem } from "../NotebookOverviewItem"; +import styles from "./StartScreen.module.css"; import apiPreviewImage from "./assets/api_preview.jpg"; import chartsPreviewImage from "./assets/charts_preview.jpg"; import globe from "./assets/globe.svg"; @@ -17,11 +18,22 @@ import intro from "./assets/intro.gif"; import lightning from "./assets/lightning.svg"; import npm from "./assets/npm.svg"; import timePreviewImage from "./assets/time_preview.jpg"; -import styles from "./StartScreen.module.css"; -export const StartScreen = observer(() => { - const { sessionStore } = getStoreService(); +export const StartScreen = observer((props: { sessionStore: SessionStore }) => { + const { sessionStore } = props; const navigate = useNavigate(); + const location = useLocation(); + + useEffect(() => { + if (location.pathname === "/" && sessionStore.loggedInUserId) { + // logged in, redirect to main workspace. + // homepage is still accessible via /home + navigate({ + pathname: "/@" + sessionStore.loggedInUserId + "/public", + }); + } + }, [location.pathname, sessionStore.loggedInUserId, navigate]); + function onNewNotebookClick(e: any) { e.preventDefault(); if (sessionStore.isLoggedIn) { @@ -145,9 +157,11 @@ export const StartScreen = observer(() => { username: "niklas", profileImageUrl: "", }} - to={toIdentifierString( + to={ + "TODO" /*toIdentifierString( "@niklas/time" - )}> + )*/ + }>
{ username: "yousef", profileImageUrl: "", }} - to={toIdentifierString( + to={ + "TODO" /*toIdentifierString( "@yousef/charts" - )}> + )*/ + }>
{ username: "niklas", profileImageUrl: "", }} - to={toIdentifierString("@niklas/api")}> + to={ + "TODO" /*toIdentifierString("@niklas/api")*/ + }>
diff --git a/packages/editor/src/app/matrix-auth/MatrixAuthProvider.tsx b/packages/editor/src/app/matrix-auth/MatrixAuthProvider.tsx new file mode 100644 index 000000000..85465726f --- /dev/null +++ b/packages/editor/src/app/matrix-auth/MatrixAuthProvider.tsx @@ -0,0 +1,19 @@ +import { Route } from "react-router-dom"; +import { MatrixSessionStore } from "./MatrixSessionStore"; +import { cachedValidatedConfig } from "./matrixConfig"; +import { Login } from "./routes/login"; +import { Register } from "./routes/register"; + +export const matrixAuthProvider = { + routes: { + login: (sessionStore: MatrixSessionStore) => ( + + ), + register: (sessionStore: MatrixSessionStore) => ( + + ), + additionalRoutes: (_sessionStore: MatrixSessionStore) => ( + Not implemented yet} /> + ), + }, +}; diff --git a/packages/editor/src/app/matrix-auth/MatrixSessionStore.ts b/packages/editor/src/app/matrix-auth/MatrixSessionStore.ts new file mode 100644 index 000000000..19dc56cec --- /dev/null +++ b/packages/editor/src/app/matrix-auth/MatrixSessionStore.ts @@ -0,0 +1,186 @@ +import { MatrixClient } from "matrix-js-sdk"; +import { computed, makeObservable, observable, runInAction } from "mobx"; +import { arrays, uri } from "vscode-lib"; +import { SessionStore } from "../../store/local/SessionStore"; +import { MatrixAuthStore } from "./MatrixAuthStore"; +import { MatrixClientPeg } from "./MatrixClientPeg"; +import { getUserFromMatrixId } from "./matrixUserIds"; +// @ts-ignore +import { uniqueId } from "@typecell-org/common"; +import { DEFAULT_HOMESERVER_URI } from "../../config/config"; +import { Identifier } from "../../identifiers/Identifier"; +import { MatrixIdentifier } from "../../identifiers/MatrixIdentifier"; +import { DocumentCoordinator } from "../../store/yjs-sync/DocumentCoordinator"; + +const colors = [ + "#958DF1", + "#F98181", + "#FBBC88", + "#FAF594", + "#70CFF8", + "#94FADB", + "#B9F18D", +]; + +/** + * The sessionStore keeps track of user related data + * (e.g.: is the user logged in, what is the user name, etc) + */ +export class MatrixSessionStore extends SessionStore { + public storePrefix: string = "mx"; + private initialized = false; + public userColor = arrays.getRandomElement(colors)!; + + public user: + | "loading" + | "offlineNoUser" + | { + type: "guest-user"; + matrixClient: MatrixClient; + coordinator: DocumentCoordinator; + } + | { + type: "user"; + fullUserId: string; + userId: string; + matrixClient: MatrixClient; + coordinator: DocumentCoordinator; + } = "loading"; + + /** + * returns true if the user is logged in to his own matrix identity. + * returns false if only a guest user or no user is available. + * + * Note that this definition of loggedin is different than in the Matrix-related code, + * in Matrix code (e.g. MatrixAuthStore.loggedIn), a guest user is also considered logged in ("logged in as guest") + */ + public get isLoggedIn() { + return typeof this.user !== "string" && this.user.type === "user"; + } + + public get isLoaded() { + return this.user !== "loading"; + } + + /** + * Returns the userId (e.g.: @bret) when logged in, undefined otherwise + */ + public get loggedInUserId() { + return typeof this.user !== "string" && this.user.type === "user" + ? this.user.userId + : undefined; + } + + public logout = async () => { + if (!this.isLoggedIn) { + throw new Error("can't logout when not logged in"); + } + await this.matrixAuthStore.logout(); + + // after logging out, call initialize() to sign in as a guest + await this.matrixAuthStore.initialize(true); + }; + + constructor(public readonly matrixAuthStore: MatrixAuthStore) { + super(); + makeObservable(this, { + user: observable.ref, + isLoggedIn: computed, + }); + } + + public getIdentifierForNewDocument(): Identifier { + return new MatrixIdentifier( + uri.URI.from({ + scheme: "mx", + authority: DEFAULT_HOMESERVER_URI.authority, + path: "/" + uniqueId.generateId("document"), + }) + ); + } + + // TODO: should be a reaction to prevent calling twice? + public async enableGuest() { + if (!this.initialized) { + throw new Error( + "enableGuest should only be called after being initialized" + ); + } + + if (this.user === "offlineNoUser") { + await this.matrixAuthStore.initialize(true); + } + } + + public async initialize() { + if (this.initialized) { + throw new Error("initialize() called when already initialized"); + } + this.initialized = true; + + try { + const Olm = await import("@matrix-org/olm"); + const olmWasmPath = await import("@matrix-org/olm/olm.wasm?url"); + await Olm.init({ + locateFile: () => olmWasmPath, + }); + + // returns true when: + // - successfully created / restored a user (or guest) + // returns false when: + // - failed restore / create user (e.g.: wanted to register a guest, but offline) + // throws error when: + // - unexpected + await this.matrixAuthStore.initialize(false); + // catch future login state changes triggered by the sdk + this._register( + this.matrixAuthStore.onLoggedInChanged(() => { + this.updateStateFromAuthStore().catch((e) => { + console.error("error initializing sessionstore", e); + }); + }) + ); + this.updateStateFromAuthStore(); + } catch (err) { + // keep state as "loading" + console.error("error loading session from matrix", err); + } + } + + /** + * Updates the state of sessionStore based on the internal matrixAuthStore.loggedIn + */ + private async updateStateFromAuthStore() { + if (this.matrixAuthStore.loggedIn) { + const matrixClient = MatrixClientPeg.get(); + + if (matrixClient.isGuestAccount) { + runInAction(() => { + this.user = { + type: "guest-user", + matrixClient, + coordinator: new DocumentCoordinator("user-mx-guest"), + }; + }); + } else { + // signed in as a real user + runInAction(() => { + this.user = { + type: "user", + matrixClient, + userId: getUserFromMatrixId(matrixClient.getUserId() as string) + .localUserId, + fullUserId: matrixClient.getUserId(), // TODO: nicer to remove make userId represent the full matrix id instead of having a separate property + coordinator: new DocumentCoordinator( + "user-mx-" + matrixClient.getUserId() + ), + }; + }); + } + } else { + runInAction(() => { + this.user = "offlineNoUser"; + }); + } + } +} diff --git a/packages/editor/src/app/matrix-auth/README.md b/packages/editor/src/app/matrix-auth/README.md new file mode 100644 index 000000000..31f60354a --- /dev/null +++ b/packages/editor/src/app/matrix-auth/README.md @@ -0,0 +1 @@ +Part of these files are copied from element / matrix-react-sdk, as the sdks are not easy to add as an external package. diff --git a/packages/editor/src/app/matrix-auth/matrixConfig.ts b/packages/editor/src/app/matrix-auth/matrixConfig.ts new file mode 100644 index 000000000..12068da20 --- /dev/null +++ b/packages/editor/src/app/matrix-auth/matrixConfig.ts @@ -0,0 +1,11 @@ +import { MATRIX_CONFIG } from "../../config/config"; + +export const cachedValidatedConfig = { + hsName: MATRIX_CONFIG.hsName, + hsNameIsDifferent: true, + hsUrl: MATRIX_CONFIG.hsUrl, + isDefault: true, + isNameResolvable: true, + isUrl: MATRIX_CONFIG.isUrl, + warning: null, +}; diff --git a/packages/editor/src/util/userIds.ts b/packages/editor/src/app/matrix-auth/matrixUserIds.ts similarity index 78% rename from packages/editor/src/util/userIds.ts rename to packages/editor/src/app/matrix-auth/matrixUserIds.ts index 05abfcd18..046a03da2 100644 --- a/packages/editor/src/util/userIds.ts +++ b/packages/editor/src/app/matrix-auth/matrixUserIds.ts @@ -1,4 +1,4 @@ -import { DEFAULT_HOMESERVER_HOST } from "../config/config"; +import { DEFAULT_HOMESERVER_URI } from "../../config/config"; export function getUserFromMatrixId(matrixId: string) { // @username:hostname:port (port is optional) @@ -12,14 +12,14 @@ export function getUserFromMatrixId(matrixId: string) { } return { - localUserId: parts[1], + localUserId: parts[1].substring(1), host: parts[2], }; } export function friendlyUserId(matrixId: string) { const parsed = getUserFromMatrixId(matrixId); - if (parsed.host === DEFAULT_HOMESERVER_HOST) { + if (parsed.host === DEFAULT_HOMESERVER_URI.authority) { return parsed.localUserId; } return matrixId; diff --git a/packages/editor/src/app/matrix-auth/routes/login.tsx b/packages/editor/src/app/matrix-auth/routes/login.tsx new file mode 100644 index 000000000..b0f38bc97 --- /dev/null +++ b/packages/editor/src/app/matrix-auth/routes/login.tsx @@ -0,0 +1,43 @@ +import { observer } from "mobx-react-lite"; +import { Navigate, useLocation, useNavigate } from "react-router-dom"; +import { ValidatedServerConfig } from "../../matrix-auth/auth/util/AutoDiscoveryUtils"; +import { toRecoverPasswordScreen, toRegisterScreen } from "../../routes/routes"; +import { MatrixSessionStore } from "../MatrixSessionStore"; +import LoginComponent from "../auth/Login"; + +export const Login = observer( + (props: { + config: ValidatedServerConfig; + sessionStore: MatrixSessionStore; + }) => { + const { sessionStore } = props; + const location = useLocation(); + const navigate = useNavigate(); + + const from = (location.state as any)?.from?.pathname || "/"; + let pageAfterLogin = window.location.origin + from; + + if (sessionStore.isLoggedIn) { + return ; + } + + return ( + { + navigate(toRegisterScreen(), { + state: { from: (location.state as any)?.from }, + }); + }} + onServerConfigChange={() => { + // TODO + console.log("config change (not implemented)"); + }} + // TODO: does this work correctly after SSO login is declined? + pageAfterLogin={pageAfterLogin} + onForgotPasswordClick={() => navigate(toRecoverPasswordScreen())} + /> + ); + } +); diff --git a/packages/editor/src/app/main/components/NotebookOverview.module.css b/packages/editor/src/app/matrix-auth/routes/overview/NotebookOverview.module.css similarity index 100% rename from packages/editor/src/app/main/components/NotebookOverview.module.css rename to packages/editor/src/app/matrix-auth/routes/overview/NotebookOverview.module.css diff --git a/packages/editor/src/app/main/components/NotebookOverview.tsx b/packages/editor/src/app/matrix-auth/routes/overview/NotebookOverview.tsx similarity index 91% rename from packages/editor/src/app/main/components/NotebookOverview.tsx rename to packages/editor/src/app/matrix-auth/routes/overview/NotebookOverview.tsx index 23e3f1254..3e26654ff 100644 --- a/packages/editor/src/app/main/components/NotebookOverview.tsx +++ b/packages/editor/src/app/matrix-auth/routes/overview/NotebookOverview.tsx @@ -3,9 +3,8 @@ import { Method } from "matrix-js-sdk"; import { observer } from "mobx-react-lite"; import { useEffect, useState } from "react"; import { Link } from "react-router-dom"; -import { parseIdentifier } from "../../../identifiers"; -import { getStoreService } from "../../../store/local/stores"; -import { toIdentifier } from "../../routes/routes"; +import { SessionStore } from "../../../../store/local/SessionStore"; +import { MatrixSessionStore } from "../../MatrixSessionStore"; import styles from "./NotebookOverview.module.css"; type Room = { @@ -38,11 +37,7 @@ function parseRoomFromAlias(rawAlias: string): Room | undefined { const RoomInfo = function (props: { room: Room }) { return (
- + {props.room.name}
{props.room.user}
@@ -53,6 +48,7 @@ const RoomInfo = function (props: { room: Room }) { type NotebookOverviewProps = { owner: string; + sessionStore: SessionStore; }; /** @@ -70,7 +66,7 @@ export const NotebookOverview = observer(function ( const [searchString, setSearchString] = useState(""); - const sessionStore = getStoreService().sessionStore; + const { sessionStore } = props; useEffect(() => { // async function resolveRoom(roomId: string): Promise { @@ -89,6 +85,10 @@ export const NotebookOverview = observer(function ( try { setLoading(true); + if (!(sessionStore instanceof MatrixSessionStore)) { + throw new Error("sessionStore is not a MatrixSessionStore"); + } + if (typeof sessionStore.user === "string") { sessionStore.enableGuest(); return; diff --git a/packages/editor/src/app/main/components/NotebookOverviewItem.module.css b/packages/editor/src/app/matrix-auth/routes/overview/NotebookOverviewItem.module.css similarity index 100% rename from packages/editor/src/app/main/components/NotebookOverviewItem.module.css rename to packages/editor/src/app/matrix-auth/routes/overview/NotebookOverviewItem.module.css diff --git a/packages/editor/src/app/main/components/NotebookOverviewItem.tsx b/packages/editor/src/app/matrix-auth/routes/overview/NotebookOverviewItem.tsx similarity index 92% rename from packages/editor/src/app/main/components/NotebookOverviewItem.tsx rename to packages/editor/src/app/matrix-auth/routes/overview/NotebookOverviewItem.tsx index 0584a57de..020dab22c 100644 --- a/packages/editor/src/app/main/components/NotebookOverviewItem.tsx +++ b/packages/editor/src/app/matrix-auth/routes/overview/NotebookOverviewItem.tsx @@ -1,7 +1,7 @@ import { observer } from "mobx-react-lite"; import { Link, To } from "react-router-dom"; -import buttonStyles from "../../../styles/buttons.module.css"; -import { toProfilePage } from "../../routes/routes"; +import buttonStyles from "../../../../styles/buttons.module.css"; +import { toProfilePage } from "../../../routes/routes"; import styles from "./NotebookOverviewItem.module.css"; export const NotebookOverviewItem = observer( diff --git a/packages/editor/src/app/main/components/permissions/MatrixUserPicker.tsx b/packages/editor/src/app/matrix-auth/routes/permissions/MatrixUserPicker.tsx similarity index 92% rename from packages/editor/src/app/main/components/permissions/MatrixUserPicker.tsx rename to packages/editor/src/app/matrix-auth/routes/permissions/MatrixUserPicker.tsx index 6b5c5ee90..a70c83cb1 100644 --- a/packages/editor/src/app/main/components/permissions/MatrixUserPicker.tsx +++ b/packages/editor/src/app/matrix-auth/routes/permissions/MatrixUserPicker.tsx @@ -1,8 +1,8 @@ import UserPicker from "@atlaskit/user-picker"; import { useCallback, useState } from "react"; import { IntlProvider } from "react-intl-next"; -import { friendlyUserId } from "../../../../util/userIds"; -import { MatrixClientPeg } from "../../../matrix-auth/MatrixClientPeg"; +import { MatrixClientPeg } from "../../MatrixClientPeg"; +import { friendlyUserId } from "../../matrixUserIds"; import { User } from "./userUtils"; export function MatrixUserPicker(props: { diff --git a/packages/editor/src/app/main/components/permissions/PermissionsDialog.tsx b/packages/editor/src/app/matrix-auth/routes/permissions/PermissionsDialog.tsx similarity index 73% rename from packages/editor/src/app/main/components/permissions/PermissionsDialog.tsx rename to packages/editor/src/app/matrix-auth/routes/permissions/PermissionsDialog.tsx index a4f234cb4..796d5e6b7 100644 --- a/packages/editor/src/app/main/components/permissions/PermissionsDialog.tsx +++ b/packages/editor/src/app/matrix-auth/routes/permissions/PermissionsDialog.tsx @@ -1,18 +1,17 @@ import { ModalTransition } from "@atlaskit/modal-dialog"; import { observer } from "mobx-react-lite"; -import React from "react"; -import { DocConnection } from "../../../../store/DocConnection"; -import { getStoreService } from "../../../../store/local/stores"; +import { MatrixRemote } from "../../../../store/yjs-sync/remote/MatrixRemote"; +import { MatrixSessionStore } from "../../MatrixSessionStore"; import PermissionsLoader from "./PermissionsLoader"; const PermissionsDialog = observer( (props: { isOpen: boolean; close: () => void; - connection: DocConnection; + remote: MatrixRemote; + sessionStore: MatrixSessionStore; }) => { - const sessionStore = getStoreService().sessionStore; - + const { sessionStore } = props; const user = sessionStore.user; if (typeof user === "string" || user.type === "guest-user") { throw new Error("can't access permissions when not signed in"); @@ -23,7 +22,7 @@ const PermissionsDialog = observer( {props.isOpen && ( diff --git a/packages/editor/src/app/main/components/permissions/PermissionsLoader.tsx b/packages/editor/src/app/matrix-auth/routes/permissions/PermissionsLoader.tsx similarity index 73% rename from packages/editor/src/app/main/components/permissions/PermissionsLoader.tsx rename to packages/editor/src/app/matrix-auth/routes/permissions/PermissionsLoader.tsx index a3af15281..9c79304c5 100644 --- a/packages/editor/src/app/main/components/permissions/PermissionsLoader.tsx +++ b/packages/editor/src/app/matrix-auth/routes/permissions/PermissionsLoader.tsx @@ -4,17 +4,17 @@ import Modal, { ModalTitle, } from "@atlaskit/modal-dialog"; import Spinner from "@atlaskit/spinner"; -import { getMatrixRoomAccess, MatrixMemberReader } from "matrix-crdt"; +import { MatrixMemberReader, getMatrixRoomAccess } from "matrix-crdt"; import { observer } from "mobx-react-lite"; import { useEffect, useState } from "react"; -import { DocConnection } from "../../../../store/DocConnection"; +import { MatrixRemote } from "../../../../store/yjs-sync/remote/MatrixRemote"; import PermissionSettings from "./PermissionsSettings"; import styles from "./PermissionsSettings.module.css"; import { PermissionData, UserPermission } from "./permissionUtils"; const PermissionsLoader = observer( (props: { - document: DocConnection; + remote: MatrixRemote; user: string | undefined; matrixClient: any; closeCallback: () => void; @@ -24,21 +24,28 @@ const PermissionsLoader = observer( PermissionData | undefined >(); + const mxRemote = props.remote; + + if (!(mxRemote instanceof MatrixRemote)) { + throw new Error("MatrixRemote not available"); + } + const mxProvider = mxRemote.matrixProvider; + const mxReader = mxProvider?.matrixReader; + + if (!mxRemote || !mxReader || !mxProvider || !mxProvider.roomId) { + throw new Error("MatrixProvider / MatrixReader not available"); + } + useEffect(() => { - const mxProvider = props.document.matrixProvider!; - const mxReader = props.document.matrixProvider?.matrixReader!; - if (!mxProvider || !mxReader || !mxProvider.roomId) { - throw new Error("MatrixProvider / MatrixReader not available"); - } async function initReader() { const roomSettings = await getMatrixRoomAccess( props.matrixClient, - mxProvider.roomId! + mxProvider!.roomId! ); if (typeof roomSettings !== "string") { throw new Error("unexpected roomSettings" + roomSettings); } - const mreader = new MatrixMemberReader(props.matrixClient, mxReader); + const mreader = new MatrixMemberReader(props.matrixClient, mxReader!); await mreader.initialize(); const entries = [...mreader.members.values()].map((u) => { @@ -60,15 +67,12 @@ const PermissionsLoader = observer( return () => { setPermissionData(undefined); }; - }, [ - props.document, - props.document.matrixProvider?.matrixReader, - props.matrixClient, - ]); + }, [props.remote, mxProvider, mxReader, props.matrixClient]); if (!permissionData) { return ( - + // TODO css={{ overflow: "visible" }} + Sharing & Permissions @@ -81,11 +85,6 @@ const PermissionsLoader = observer( ); } - const mxProvider = props.document.matrixProvider!; - if (!mxProvider || !mxProvider.roomId) { - throw new Error("roomId not available"); - } - return ( props.closeCallback()}> Sharing & Permissions diff --git a/packages/editor/src/app/main/components/permissions/UserPermissionRow.tsx b/packages/editor/src/app/matrix-auth/routes/permissions/UserPermissionRow.tsx similarity index 95% rename from packages/editor/src/app/main/components/permissions/UserPermissionRow.tsx rename to packages/editor/src/app/matrix-auth/routes/permissions/UserPermissionRow.tsx index 8ac1360b2..f06ddf426 100644 --- a/packages/editor/src/app/main/components/permissions/UserPermissionRow.tsx +++ b/packages/editor/src/app/matrix-auth/routes/permissions/UserPermissionRow.tsx @@ -1,8 +1,8 @@ import Button from "@atlaskit/button"; import Select from "@atlaskit/select"; -import React, { useState } from "react"; +import { useState } from "react"; import Avatar from "react-avatar"; -import { friendlyUserId } from "../../../../util/userIds"; +import { friendlyUserId } from "../../matrixUserIds"; import styles from "./PermissionsSettings.module.css"; import { DocPermission, diff --git a/packages/editor/src/app/main/components/permissions/permissionUtils.ts b/packages/editor/src/app/matrix-auth/routes/permissions/permissionUtils.ts similarity index 100% rename from packages/editor/src/app/main/components/permissions/permissionUtils.ts rename to packages/editor/src/app/matrix-auth/routes/permissions/permissionUtils.ts diff --git a/packages/editor/src/app/main/components/permissions/userUtils.ts b/packages/editor/src/app/matrix-auth/routes/permissions/userUtils.ts similarity index 100% rename from packages/editor/src/app/main/components/permissions/userUtils.ts rename to packages/editor/src/app/matrix-auth/routes/permissions/userUtils.ts diff --git a/packages/editor/src/app/matrix-auth/routes/register.tsx b/packages/editor/src/app/matrix-auth/routes/register.tsx new file mode 100644 index 000000000..01c8a80d7 --- /dev/null +++ b/packages/editor/src/app/matrix-auth/routes/register.tsx @@ -0,0 +1,82 @@ +import { observer } from "mobx-react-lite"; +import qs from "qs"; +import { Navigate, useLocation, useNavigate } from "react-router-dom"; +import { MATRIX_CONFIG } from "../../../config/config"; +import Registration from "../../matrix-auth/auth/Registration"; +import { ValidatedServerConfig } from "../../matrix-auth/auth/util/AutoDiscoveryUtils"; +import { toLoginScreen } from "../../routes/routes"; +import { MatrixSessionStore } from "../MatrixSessionStore"; + +function makeRegistrationUrl(params: any) { + let url = + window.location.protocol + "//" + window.location.host + "/register"; + + let keys = Object.keys(params); + + // if any of the params (in our case, is_url) is undefined, don't include it in url + keys = keys.filter((key) => params[key] !== undefined); + + for (let i = 0; i < keys.length; ++i) { + if (i === 0) { + url += "?"; + } else { + url += "&"; + } + const k = keys[i]; + url += k + "=" + encodeURIComponent(params[k]); + } + return url; +} + +export const Register = observer( + (props: { + config: ValidatedServerConfig; + sessionStore: MatrixSessionStore; + }) => { + const { sessionStore } = props; + const navigate = useNavigate(); + const location = useLocation(); + const params = qs.parse(window.location.search); + + if (params.hs_url && params.hs_url !== MATRIX_CONFIG.hsUrl) { + throw new Error("different homeserver not supported"); + } + + if (params.is_url && params.is_url !== MATRIX_CONFIG.isUrl) { + throw new Error("different identity server not supported"); + } + + const from = (location.state as any)?.from?.pathname || "/"; + let pageAfterLogin = window.location.origin + from; + + if (sessionStore.isLoggedIn) { + return ; + } + + // const email = ThreepidInviteStore.instance.pickBestInvite()?.toEmail; + return ( + { + navigate(toLoginScreen(), { + state: { from: (location.state as any)?.from }, + }); + }} + onServerConfigChange={() => { + // TODO + console.log("config change (not implemented)"); + }} + defaultDeviceDisplayName={"TypeCell web"} + // TODO: does this work correctly after SSO login is declined? + pageAfterLogin={pageAfterLogin} + serverConfig={props.config} + /> + ); + } +); diff --git a/packages/editor/src/app/portals/MenuPortal.tsx b/packages/editor/src/app/portals/MenuPortal.tsx deleted file mode 100644 index 7597d10ae..000000000 --- a/packages/editor/src/app/portals/MenuPortal.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { observable } from "mobx"; -import { observer } from "mobx-react-lite"; -import { useEffect, useRef } from "react"; -import { arrays } from "vscode-lib"; -import { getStoreService } from "../../store/local/stores"; - -/** - * This portal works via Mobx instead of using normal React Portals. - * Normal React Portals have the disadvantage that they render directly into the DOM. - * This means we always have a wrapping DOM element. This doesn't interact nicely with atlaskit menus, - * as we want inserted DropDown Items to be direct children of the menu - */ -export const MenuPortal = observer((props: { children: any }) => { - const parent = useRef({ - children: observable([] as any[], { deep: false }), - }); - - useEffect(() => { - const navigationStore = getStoreService().navigationStore; - navigationStore.menuPortalChildren.push(parent.current!); - - return () => { - // eslint-disable-next-line react-hooks/exhaustive-deps - arrays.remove(navigationStore.menuPortalChildren, parent.current!); - }; - }, []); - // if (!navigationStore.menuPortalHost) { - // return null; - // } - // return ReactDOM.createPortal(props.children, navigationStore.menuPortalHost); - parent.current.children = props.children; - console.log("assign children"); - return null; -}); diff --git a/packages/editor/src/app/routes/RouteContext.ts b/packages/editor/src/app/routes/RouteContext.ts new file mode 100644 index 000000000..e5a4713a7 --- /dev/null +++ b/packages/editor/src/app/routes/RouteContext.ts @@ -0,0 +1,6 @@ +import { createContext } from "react"; +import { Identifier } from "../../identifiers/Identifier"; + +export const RouteContext = createContext<{ + groups: Array; +}>({ groups: [] }); diff --git a/packages/editor/src/app/routes/document.tsx b/packages/editor/src/app/routes/document.tsx index a49dd9217..4348cb63c 100644 --- a/packages/editor/src/app/routes/document.tsx +++ b/packages/editor/src/app/routes/document.tsx @@ -1,16 +1,56 @@ -import { useParams } from "react-router-dom"; -import { parseIdentifier } from "../../identifiers"; +import { observer } from "mobx-react-lite"; +import { useLocation } from "react-router-dom"; +import { tryPathToIdentifiers } from "../../identifiers/paths/identifierPathHelpers"; +import { SessionStore } from "../../store/local/SessionStore"; import DocumentView from "../documentRenderers/DocumentView"; +import { SupabaseSessionStore } from "../supabase-auth/SupabaseSessionStore"; +import { RouteContext } from "./RouteContext"; +import { OwnerAliasRoute } from "./ownerAlias"; -export const DocumentRoute = () => { - let params = useParams(); - let owner = params.userParam; - let document = params.documentParam; - if (!owner || !document) { - throw new Error("unexpected"); - } - owner = "@" + owner; - const parsedIdentifier = parseIdentifier({ owner, document }); +export const DocumentRoute = observer( + (props: { sessionStore: SessionStore }) => { + const { sessionStore } = props; + if (!(sessionStore instanceof SupabaseSessionStore)) { + throw new Error("No session store"); + } + + let location = useLocation(); + + if (!sessionStore.coordinators) { + return
Loading
; + } + + let [owner, workspace, ...documentParts] = location.pathname + .substring(1) + .split("/"); + const document = documentParts.join("/"); - return ; -}; + if (!owner || owner.length < 2 || !owner.startsWith("@")) { + const identifiers = tryPathToIdentifiers(location.pathname.substring(1)); + if (identifiers !== "invalid-identifier") { + return ( + + + + ); + } else { + return
Not found
; + } + } + + owner = owner.substring(1); + + return ( + + ); + } +); diff --git a/packages/editor/src/app/routes/dynamic.tsx b/packages/editor/src/app/routes/dynamic.tsx deleted file mode 100644 index fd0f20e3c..000000000 --- a/packages/editor/src/app/routes/dynamic.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { useLocation } from "react-router-dom"; -import { ENVIRONMENT } from "../../config/config"; -import { parseIdentifier, tryParseIdentifier } from "../../identifiers"; -import DocumentView from "../documentRenderers/DocumentView"; - -export const DynamicRoute = () => { - let location = useLocation(); - - if (location.pathname.startsWith("/docs")) { - const id = - ENVIRONMENT === "DEV" - ? parseIdentifier("fs:", "Docs") - : /*parseIdentifier( - "github:yousefed/typecell-next/docs" + - (remainingPath ? "/:/" + remainingPath : "") - );*/ - ENVIRONMENT === "PREVIEW" - ? parseIdentifier("http:/_docs/index.json", "Docs") - : parseIdentifier("https:/_docs/index.json", "Docs"); - - return ; - } - - const parsedIdentifier = tryParseIdentifier(location.pathname.substring(1)); - if (parsedIdentifier !== "invalid-identifier") { - return ( - // - // }> - // errorouter
} /> - // - - ); - } - return
Not found
; -}; diff --git a/packages/editor/src/app/routes/login.tsx b/packages/editor/src/app/routes/login.tsx deleted file mode 100644 index bc4ba6317..000000000 --- a/packages/editor/src/app/routes/login.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { observer } from "mobx-react-lite"; -import { Navigate, useLocation, useNavigate } from "react-router-dom"; -import { getStoreService } from "../../store/local/stores"; -import LoginComponent from "../matrix-auth/auth/Login"; -import { ValidatedServerConfig } from "../matrix-auth/auth/util/AutoDiscoveryUtils"; -import { toRecoverPasswordScreen, toRegisterScreen } from "./routes"; - -export const Login = observer((props: { config: ValidatedServerConfig }) => { - const { matrixAuthStore, sessionStore } = getStoreService(); - - const location = useLocation(); - const navigate = useNavigate(); - - const from = (location.state as any)?.from?.pathname || "/"; - let pageAfterLogin = window.location.origin + from; - - if (sessionStore.isLoggedIn) { - return ; - } - - return ( - { - navigate(toRegisterScreen(), { - state: { from: (location.state as any)?.from }, - }); - }} - onServerConfigChange={() => { - // TODO - console.log("config change (not implemented)"); - }} - // TODO: does this work correctly after SSO login is declined? - pageAfterLogin={pageAfterLogin} - onForgotPasswordClick={() => navigate(toRecoverPasswordScreen())} - /> - ); -}); diff --git a/packages/editor/src/app/routes/ownerAlias.tsx b/packages/editor/src/app/routes/ownerAlias.tsx new file mode 100644 index 000000000..dcd1fc984 --- /dev/null +++ b/packages/editor/src/app/routes/ownerAlias.tsx @@ -0,0 +1,221 @@ +import { observer } from "mobx-react-lite"; +import { useEffect, useMemo, useState } from "react"; +import { useLocation } from "react-router-dom"; +import { uri } from "vscode-lib"; +import { TypeCellIdentifier } from "../../identifiers/TypeCellIdentifier"; +import { + defaultShorthandResolver, + parseFullIdentifierString, + pathToIdentifiers, +} from "../../identifiers/paths/identifierPathHelpers"; +import { DocConnection } from "../../store/DocConnection"; +import ProfileResource from "../../store/ProfileResource"; +import { SessionStore } from "../../store/local/SessionStore"; +import DocumentView from "../documentRenderers/DocumentView"; +import { SupabaseSessionStore } from "../supabase-auth/SupabaseSessionStore"; +import { RouteContext } from "./RouteContext"; + +type Props = { + owner: string; + workspace?: string; + document?: string; + sessionStore: SessionStore; +}; +export const OwnerAliasRoute = observer( + ({ owner, workspace, document, sessionStore }: Props) => { + if (!(sessionStore instanceof SupabaseSessionStore)) { + throw new Error("No session store"); + } + + let location = useLocation(); + + const [aliasResolveStatus, setAliasResolveStatus] = useState< + "loading" | "error" | "not-found" | "loaded" + >("loading"); + + const [ownerDoc, setOwnerDoc] = useState(); + + const alias = sessionStore.aliasCoordinator?.aliases.get(owner!); + const ownerProfileIdentifier = useMemo(() => { + return ( + alias || { + status: aliasResolveStatus, + } + ); + }, [alias, aliasResolveStatus]); + + useEffect(() => { + if (typeof ownerProfileIdentifier !== "string") { + setOwnerDoc(undefined); + return; + } + + const doc = DocConnection.load(ownerProfileIdentifier, sessionStore); + setOwnerDoc(doc); + + return () => { + doc.dispose(); + }; + }, [ownerProfileIdentifier, sessionStore]); + + // TODO: cache in local alias cache + useEffect(() => { + if (!owner) { + throw new Error("No owner"); + } + + const aliasCoordinator = sessionStore.aliasCoordinator; + if (!aliasCoordinator) { + return; + } + + if (typeof ownerProfileIdentifier === "string") { + return; + } + + if (workspace !== "public") { + setAliasResolveStatus("not-found"); + return; + } + + (async () => { + console.log("load"); + const { data, error } = await sessionStore.supabase + .from("workspaces") + .select() + .eq("name", owner) + .eq("is_username", true) + .single(); + + if (error) { + setAliasResolveStatus("error"); + return; + } + + if (!data) { + setAliasResolveStatus("not-found"); + return; + } + + const nanoId = data.document_nano_id; + const id = new TypeCellIdentifier( + uri.URI.from({ + scheme: "typecell", // TODO + authority: "typecell.org", // TODO + path: "/" + nanoId, + }) + ); + aliasCoordinator.aliases.set(owner, id.toString()); + setAliasResolveStatus("loaded"); + })(); + }, [ + owner, + ownerProfileIdentifier, + sessionStore.aliasCoordinator, + sessionStore.supabase, + workspace, + ]); + + if (typeof ownerProfileIdentifier !== "string") { + if (ownerProfileIdentifier.status === "loading") { + return
Loading alias
; + } + + if (ownerProfileIdentifier.status === "not-found") { + return
User not found
; + } + + if (ownerProfileIdentifier.status === "error") { + return
Error loading user
; + } + + if (ownerProfileIdentifier.status === "loaded") { + // edge case where AliasCoordinator is probably initializing + return
Loading alias
; + } + + throw new Error("Unexpected"); + } + + if (!workspace) { + const id = parseFullIdentifierString(ownerProfileIdentifier); + return ( + + + + ); + } + + if (!workspace) { + return
User profile
; + } + + const doc = ownerDoc?.doc; + if (doc === "loading" || !doc) { + return
Loading user
; + } + + if (doc === "not-found") { + console.warn("unexpected, user not found"); + return
User not found
; + } + + const profileDoc = doc.getSpecificType(ProfileResource); + const wsId = profileDoc.workspaces.get(workspace); + + // TODO: hacky + + const sh = "@" + owner; + defaultShorthandResolver.current.addShorthand( + sh, + profileDoc.identifier.toString() + ); + + for (let item of profileDoc.workspaces.keys()) { + const sh = "@" + owner + "/" + item; + + defaultShorthandResolver.current.addShorthand( + sh, + profileDoc.workspaces.get(item)! + ); + } + + if (!wsId) { + return
Workspace not found
; + } + + const parsedIdentifier = parseFullIdentifierString(wsId); + + if (!document) { + return ( + + + + ); + } + + const [id, ...subs] = pathToIdentifiers(location.pathname.substring(1)); + return ( + + + + ); + + // const parsedIdentifier = pathToIdentifier(document, [workspaceId]); + // return ; + } +); diff --git a/packages/editor/src/app/routes/profile.tsx b/packages/editor/src/app/routes/profile.tsx deleted file mode 100644 index 790f5863e..000000000 --- a/packages/editor/src/app/routes/profile.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { useParams } from "react-router-dom"; -import Profile from "../main/components/Profile"; - -export const ProfileRoute = () => { - let params = useParams(); - if (!params.userParam) { - throw new Error("unexpected"); - } - let owner = "@" + params.userParam; - - return ; -}; diff --git a/packages/editor/src/app/routes/register.tsx b/packages/editor/src/app/routes/register.tsx deleted file mode 100644 index bf1981680..000000000 --- a/packages/editor/src/app/routes/register.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { observer } from "mobx-react-lite"; -import qs from "qs"; -import { Navigate, useLocation, useNavigate } from "react-router-dom"; -import { MATRIX_CONFIG } from "../../config/config"; -import { getStoreService } from "../../store/local/stores"; -import Registration from "../matrix-auth/auth/Registration"; -import { ValidatedServerConfig } from "../matrix-auth/auth/util/AutoDiscoveryUtils"; -import { toLoginScreen } from "./routes"; - -function makeRegistrationUrl(params: any) { - let url = - window.location.protocol + "//" + window.location.host + "/register"; - - let keys = Object.keys(params); - - // if any of the params (in our case, is_url) is undefined, don't include it in url - keys = keys.filter((key) => params[key] !== undefined); - - for (let i = 0; i < keys.length; ++i) { - if (i === 0) { - url += "?"; - } else { - url += "&"; - } - const k = keys[i]; - url += k + "=" + encodeURIComponent(params[k]); - } - return url; -} - -export const Register = observer((props: { config: ValidatedServerConfig }) => { - const { matrixAuthStore, sessionStore } = getStoreService(); - const navigate = useNavigate(); - const location = useLocation(); - const params = qs.parse(window.location.search); - - if (params.hs_url && params.hs_url !== MATRIX_CONFIG.hsUrl) { - throw new Error("different homeserver not supported"); - } - - if (params.is_url && params.is_url !== MATRIX_CONFIG.isUrl) { - throw new Error("different identity server not supported"); - } - - const from = (location.state as any)?.from?.pathname || "/"; - let pageAfterLogin = window.location.origin + from; - - if (sessionStore.isLoggedIn) { - return ; - } - - // const email = ThreepidInviteStore.instance.pickBestInvite()?.toEmail; - return ( - { - navigate(toLoginScreen(), { - state: { from: (location.state as any)?.from }, - }); - }} - onServerConfigChange={() => { - // TODO - console.log("config change (not implemented)"); - }} - defaultDeviceDisplayName={"TypeCell web"} - // TODO: does this work correctly after SSO login is declined? - pageAfterLogin={pageAfterLogin} - serverConfig={props.config} - /> - ); -}); diff --git a/packages/editor/src/app/routes/routes.ts b/packages/editor/src/app/routes/routes.ts index a351fe3a4..0da2ac653 100644 --- a/packages/editor/src/app/routes/routes.ts +++ b/packages/editor/src/app/routes/routes.ts @@ -1,6 +1,6 @@ import { Location, NavigateFunction, To } from "react-router-dom"; -import { parseIdentifier } from "../../identifiers"; import { Identifier } from "../../identifiers/Identifier"; +import { identifiersToPath } from "../../identifiers/paths/identifierPathHelpers"; import { BaseResource } from "../../store/BaseResource"; export function OpenNewPageDialog(navigate: NavigateFunction) { @@ -56,15 +56,12 @@ export function toDocument(doc: BaseResource): To { } export function toIdentifier(identifier: Identifier): To { - return { pathname: identifier.toRouteString() }; -} - -export function toIdentifierString(identifier: string): To { - return toIdentifier(parseIdentifier(identifier)); + return { pathname: "/" + identifiersToPath(identifier) }; } export function toNewGuestNotebook(): To { - return toIdentifier(parseIdentifier({ owner: "@typecell", document: "new" })); + return "/TODO"; + // return toIdentifier(parseIdentifier({ owner: "@typecell", document: "new" })); } export function toProfilePage(owner: string): To { diff --git a/packages/editor/src/app/supabase-auth/SupabaseSessionStore.ts b/packages/editor/src/app/supabase-auth/SupabaseSessionStore.ts new file mode 100644 index 000000000..5e80a45c7 --- /dev/null +++ b/packages/editor/src/app/supabase-auth/SupabaseSessionStore.ts @@ -0,0 +1,269 @@ +import { createClient } from "@supabase/supabase-js"; +import { computed, makeObservable, observable, runInAction } from "mobx"; +import { arrays, uri } from "vscode-lib"; +import { SessionStore } from "../../store/local/SessionStore"; +// @ts-ignore +import { uniqueId } from "@typecell-org/common"; +import * as Y from "yjs"; +import type { Database } from "../../../../server/src/@types/schema"; +import { env } from "../../config/env"; +import { TypeCellIdentifier } from "../../identifiers/TypeCellIdentifier"; +import { + DefaultShorthandResolver, + setDefaultShorthandResolver, +} from "../../identifiers/paths/identifierPathHelpers"; +import { BaseResource } from "../../store/BaseResource"; +import ProfileResource from "../../store/ProfileResource"; +import { TypeCellRemote } from "../../store/yjs-sync/remote/TypeCellRemote"; +import { navigateRef } from "../GlobalNavigateRef"; + + +export type SupabaseClientType = ReturnType>; + +const colors = [ + "#958DF1", + "#F98181", + "#FBBC88", + "#FAF594", + "#70CFF8", + "#94FADB", + "#B9F18D", +]; + +/** + * The sessionStore keeps track of user related data + * (e.g.: is the user logged in, what is the user name, etc) + */ +export class SupabaseSessionStore extends SessionStore { + public storePrefix: string = "tc"; + + public readonly supabase: SupabaseClientType; + + private initialized = false; + public userId: string | undefined = undefined; + + public userColor = arrays.getRandomElement(colors)!; + + public user: + | "loading" + | "offlineNoUser" + | { + type: "guest-user"; + supabase: any; + } + | { + type: "user"; + fullUserId: string; + userId: string; + supabase: any; + } = "loading"; + + public get isLoaded() { + return this.user !== "loading" || typeof this.userId === "string"; + } + /** + * returns true if the user is logged in to his own matrix identity. + * returns false if only a guest user or no user is available. + * + * Note that this definition of loggedin is different than in the Matrix-related code, + * in Matrix code (e.g. MatrixAuthStore.loggedIn), a guest user is also considered logged in ("logged in as guest") + */ + public get isLoggedIn() { + return typeof this.user !== "string" && this.user.type === "user"; + } + + /** + * Returns the userId (e.g.: @bret) when logged in, undefined otherwise + */ + public get loggedInUserId() { + return typeof this.user !== "string" && this.user.type === "user" + ? this.user.userId + : undefined; + } + + public logout = async () => { + if (!this.isLoggedIn) { + throw new Error("can't logout when not logged in"); + } + await this.supabase.auth.signOut(); + }; + + public getIdentifierForNewDocument() { + return new TypeCellIdentifier( + uri.URI.from({ + scheme: "typecell", + authority: "typecell.org", + path: "/" + uniqueId.generateId("document"), + }) + ); + } + + constructor(persist: boolean = true) { + super(); + makeObservable(this, { + user: observable.ref, + userId: observable.ref, + isLoggedIn: computed, + isLoaded: computed, + }); + this.supabase = createClient(env.VITE_TYPECELL_SUPABASE_URL, env.VITE_TYPECELL_SUPABASE_ANON_KEY, { + auth: { + persistSession: persist, + }, + }); + this.initializeReactions(); + } + + public async initialize() { + if (this.initialized) { + throw new Error("initialize() called when already initialized"); + } + this.initialized = true; + + try { + const cbData = this.supabase.auth.onAuthStateChange((event, session) => { + this.updateStateFromAuthStore().catch((e) => { + console.error("error initializing sessionstore", e); + }); + }); + this._register({ + dispose: cbData.data.subscription.unsubscribe, + }); + this.updateStateFromAuthStore(); + } catch (err) { + // keep state as "loading" + console.error("error loading session from supabase", err); + } + } + + public async setUsername(username: string) { + if (!this.userId) { + throw new Error("can't set username when not logged in"); + } + + { + const { data } = await this.supabase + .from("workspaces") + .select() + .eq("name", username) + .eq("is_username", true) + .single(); + + if (data) { + return "not-available"; + } + } + + // TODO: first check if username is available? + + const workspaceId = this.getIdentifierForNewDocument(); + { + // TODO: use syncmanager + const ydoc = new Y.Doc(); + const ret = new BaseResource(ydoc, workspaceId); + ret.create("!project"); + const remote = new TypeCellRemote(ydoc, workspaceId, this); + await remote.createAndRetry(); + ret.dispose(); + remote.dispose(); + } + + // TODO: manage aliases + const profileId = this.getIdentifierForNewDocument(); + { + // TODO: use syncmanager + const ydoc = new Y.Doc(); + const ret = new BaseResource(ydoc, profileId); + ret.create("!profile"); + const profile = ret.getSpecificType(ProfileResource); + profile.workspaces.set("public", workspaceId.toString()); + profile.username = username; + const remote = new TypeCellRemote(ydoc, profileId, this); + await remote.createAndRetry(); + ret.dispose(); + remote.dispose(); + } + + const { data, error } = await this.supabase.from("workspaces").insert([ + { + name: username, + owner_user_id: this.userId, + is_username: true, + document_nano_id: profileId.documentId, + }, + ]); + + if (error) { + throw new Error(error.message); + } + + await this.updateStateFromAuthStore(); + } + /** + * Updates the state of sessionStore based on the internal matrixAuthStore.loggedIn + */ + private async updateStateFromAuthStore() { + // TODO: make work in offline mode (save username offline) + // TODO: don't trigger on refresh of other browser window + const session = (await this.supabase.auth.getSession()).data.session; + // TODO: check errors? + + if (session) { + // if the session is the same as previous, and we have a fully initialized user, + // then there's no need to refresh + if ( + this.userId === session.user.id && + this.user !== "loading" && + this.user !== "offlineNoUser" && + this.user.type === "user" + ) { + return; + } + const usernameRes = await this.supabase + .from("workspaces") + .select() + .eq("owner_user_id", session?.user.id) + .eq("is_username", true); + + if (usernameRes.data?.length === 1) { + const username: string = usernameRes.data[0].name; + + runInAction(() => { + setDefaultShorthandResolver(new DefaultShorthandResolver()); // hacky + this.userId = session.user.id; + this.user = { + type: "user", + supabase: this.supabase, + userId: username, + fullUserId: username, + }; + }); + } else { + if (!navigateRef) { + throw new Error("no global navigateRef"); + } + runInAction(() => { + this.userId = session.user.id; + }); + console.log("redirect"); + navigateRef.current?.("/username"); + // runInAction(() => { + // this.user = { + // type: "user", + // supabase: this.supabase, + // userId: "username", + // fullUserId: "username", + // }; + // }); + } + } else { + runInAction(() => { + setDefaultShorthandResolver(new DefaultShorthandResolver()); // hacky + this.user = { + type: "guest-user", + supabase: this.supabase, + }; + }); + } + } +} diff --git a/packages/editor/src/app/supabase-auth/routes/AuthStyles.module.css b/packages/editor/src/app/supabase-auth/routes/AuthStyles.module.css new file mode 100644 index 000000000..4cca45331 --- /dev/null +++ b/packages/editor/src/app/supabase-auth/routes/AuthStyles.module.css @@ -0,0 +1,93 @@ +/* Shared styles by Login.tsx and Registration.tsx */ + +.AuthPage { + width: 100%; + height: 100%; + background-color: rgb(250, 251, 252); +} + +.AuthHeader { + width: 100%; + height: 100px; + padding-top: 15px; +} + +.AuthHeaderLogo { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; +} + +/* .AuthBody { +} */ + +.AuthForm { + position: relative; + border: 1px solid; + border-color: var(--N40); + box-shadow: 0px 4px 8px rgba(9, 30, 66, 0.25), + 0px 0px 1px rgba(9, 30, 66, 0.31); + border-radius: 4; + width: 400px; + margin: 16px auto; + padding: 16px; + background: white; +} + +@media (max-width: 704px) { + .AuthForm { + border: 0; + box-shadow: none; + } + + .AuthPage { + background-color: white; + } +} + +.AuthForm p { + margin: 0px 0 10px 0; +} + +.AuthFormFooter { + color: rgb(107, 119, 140); + padding-top: 16px; + margin-top: 32px; + border-top: 1px solid rgb(213, 216, 222); + font-size: 14px; + text-align: center; + line-height: 20px; +} + +.AuthFooter > div { + justify-content: center; +} + +.AuthButton { + font-weight: bold !important; + margin: 16px 0 0 0; + padding: 10px 0; + height: 40px !important; + line-height: 40px !important; +} + +.SSOButton { + background: white !important; + box-shadow: rgb(0 0 0 / 20%) 1px 1px 5px 0px !important; +} + +.SSOButton:hover { + background-color: rgb(250, 251, 252) !important; +} + +.SSOButton:active { + background-color: rgba(9, 30, 66, 0.25) !important; +} + +.OrSeparator { + text-align: center; + color: rgb(184, 184, 184); + margin-top: 1em; +} diff --git a/packages/editor/src/app/supabase-auth/routes/Login.tsx b/packages/editor/src/app/supabase-auth/routes/Login.tsx new file mode 100644 index 000000000..952872b8b --- /dev/null +++ b/packages/editor/src/app/supabase-auth/routes/Login.tsx @@ -0,0 +1,61 @@ +import { observer } from "mobx-react-lite"; +import { Navigate, useLocation } from "react-router-dom"; + +import { Auth } from "@supabase/auth-ui-react"; +import { + // Import predefined theme + ThemeSupa, +} from "@supabase/auth-ui-shared"; +import { createClient } from "@supabase/supabase-js"; +import { SessionStore } from "../../../store/local/SessionStore"; +import { Logo } from "../../main/components/Logo"; + +import { env } from "../../../config/env"; +import AuthStyles from "./AuthStyles.module.css"; + +const supabase = createClient( + env.VITE_TYPECELL_SUPABASE_URL, + env.VITE_TYPECELL_SUPABASE_ANON_KEY +); + +export const Login = observer((props: { sessionStore: SessionStore }) => { + const { sessionStore } = props; + + const location = useLocation(); + // const navigate = useNavigate(); + + const from = (location.state as any)?.from?.pathname || "/"; + // let pageAfterLogin = window.location.origin + from; + + if (sessionStore.isLoggedIn) { + return ; + } + + const redirectTo = window.location.origin + "/login"; + + return ( +
+
+
+ +
+
+
+
+ + {/*
sdfsdf
*/} +
+
+
+ {/* Powered by Matrix */} +
+
+ ); +}); diff --git a/packages/editor/src/app/supabase-auth/routes/Register.tsx b/packages/editor/src/app/supabase-auth/routes/Register.tsx new file mode 100644 index 000000000..2f60a205a --- /dev/null +++ b/packages/editor/src/app/supabase-auth/routes/Register.tsx @@ -0,0 +1,59 @@ +import { observer } from "mobx-react-lite"; +import { Navigate, useLocation } from "react-router-dom"; + +import { Auth } from "@supabase/auth-ui-react"; +import { + // Import predefined theme + ThemeSupa, +} from "@supabase/auth-ui-shared"; +import { createClient } from "@supabase/supabase-js"; +import { env } from "../../../config/env"; +import { SessionStore } from "../../../store/local/SessionStore"; +import { Logo } from "../../main/components/Logo"; +import AuthStyles from "./AuthStyles.module.css"; + +const supabase = createClient( + env.VITE_TYPECELL_SUPABASE_URL, + env.VITE_TYPECELL_SUPABASE_ANON_KEY +); + +export const Register = observer((props: { sessionStore: SessionStore }) => { + const { sessionStore } = props; + + const location = useLocation(); + // const navigate = useNavigate(); + + const from = (location.state as any)?.from?.pathname || "/"; + // let pageAfterLogin = window.location.origin + from; + + if (sessionStore.isLoggedIn) { + return ; + } + + const redirectTo = window.location.origin + "/register"; + + return ( +
+
+
+ +
+
+
+
+ + {/*
sdfsdf
*/} +
+
+
+ {/* Powered by Matrix */} +
+
+ ); +}); diff --git a/packages/editor/src/app/supabase-auth/routes/Username.tsx b/packages/editor/src/app/supabase-auth/routes/Username.tsx new file mode 100644 index 000000000..84996efdb --- /dev/null +++ b/packages/editor/src/app/supabase-auth/routes/Username.tsx @@ -0,0 +1,127 @@ +import { ButtonGroup, LoadingButton } from "@atlaskit/button"; +import Form, { + ErrorMessage, + Field, + FormFooter, + FormHeader, + HelperMessage, +} from "@atlaskit/form"; +import TextField from "@atlaskit/textfield"; +import { observer } from "mobx-react-lite"; +import { Fragment } from "react"; +import { Navigate, useLocation } from "react-router-dom"; +import { Logo } from "../../main/components/Logo"; +import { SupabaseSessionStore } from "../SupabaseSessionStore"; +import AuthStyles from "./AuthStyles.module.css"; + +export const Username = observer( + (props: { sessionStore: SupabaseSessionStore }) => { + const { sessionStore } = props; + + // const usernameRef = React.useRef(null); + + const location = useLocation(); + // const navigate = useNavigate(); + + const onSubmit = async (data: { username: string }) => { + // const username = usernameRef.current?.value; + try { + if (data.username) { + const ret = await sessionStore.setUsername(data.username); + if (ret === "not-available") { + return { + username: "not-available", + }; + } + } + } catch (e) { + console.error("unknown error setting username", e); + return { + username: "unknown-error", + }; + } + }; + + const from = (location.state as any)?.from?.pathname || "/"; + // let pageAfterLogin = window.location.origin + from; + + if (sessionStore.isLoggedIn) { + return ; + } + + return ( +
+
+
+ +
+
+
+
+ {/*

Please pick a username:

+ + */} + + onSubmit={onSubmit}> + {({ formProps, submitting }) => ( +
+ +

+ Welcome to TypeCell! What username would you like to use? +

+
+ + {({ fieldProps, error }) => ( + + + {!error && ( + + You can use letters and numbers + + )} + {error && error === "not-available" && ( + + This username is already in use, try another one. + + )} + {error && error !== "not-available" && ( + + An unknown error occured while registering your + username. + + )} + + )} + + + + {/* */} + + Continue + + + +
+ )} + + + {/* */} + {/*
sdfsdf
*/} +
+
+
+ {/* Powered by Matrix */} +
+
+ ); + } +); diff --git a/packages/editor/src/app/supabase-auth/routes/permissions/PermissionsDialog.tsx b/packages/editor/src/app/supabase-auth/routes/permissions/PermissionsDialog.tsx new file mode 100644 index 000000000..b304ad5f2 --- /dev/null +++ b/packages/editor/src/app/supabase-auth/routes/permissions/PermissionsDialog.tsx @@ -0,0 +1,36 @@ +import { ModalTransition } from "@atlaskit/modal-dialog"; +import { observer } from "mobx-react-lite"; + +import { Identifier } from "../../../../identifiers/Identifier"; +import { SupabaseSessionStore } from "../../SupabaseSessionStore"; +import PermissionsLoader from "./PermissionsLoader"; + +const PermissionsDialog = observer( + (props: { + isOpen: boolean; + close: () => void; + identifier: Identifier; + sessionStore: SupabaseSessionStore; + }) => { + const { sessionStore } = props; + const user = sessionStore.user; + if (typeof user === "string" || user.type === "guest-user") { + return null; + } + + return ( + + {props.isOpen && ( + + )} + + ); + } +); + +export default PermissionsDialog; diff --git a/packages/editor/src/app/supabase-auth/routes/permissions/PermissionsLoader.tsx b/packages/editor/src/app/supabase-auth/routes/permissions/PermissionsLoader.tsx new file mode 100644 index 000000000..4f56aaef5 --- /dev/null +++ b/packages/editor/src/app/supabase-auth/routes/permissions/PermissionsLoader.tsx @@ -0,0 +1,133 @@ +import Modal, { + ModalBody, + ModalHeader, + ModalTitle, +} from "@atlaskit/modal-dialog"; +import Spinner from "@atlaskit/spinner"; +import { observer } from "mobx-react-lite"; +import { useCallback, useEffect, useState } from "react"; +import { Identifier } from "../../../../identifiers/Identifier"; +import { TypeCellIdentifier } from "../../../../identifiers/TypeCellIdentifier"; +import { SupabaseClientType } from "../../SupabaseSessionStore"; +import PermissionSettings from "./PermissionsSettings"; +import styles from "./PermissionsSettings.module.css"; +import { PermissionData, updatePermissionData } from "./permissionUtils"; + +const PermissionsLoader = observer( + (props: { + identifier: Identifier; + user: string | undefined; + supabaseClient: SupabaseClientType; + closeCallback: () => void; + currentUserId: string; + }) => { + if (!(props.identifier instanceof TypeCellIdentifier)) { + throw new Error("unexpected identifier"); + } + const nanoId = props.identifier.documentId; + + const [internalDocId, setInternalDocId] = useState(); + + const [permissionData, setPermissionData] = useState< + PermissionData | undefined + >(); + + const onSave = useCallback( + async (newData: PermissionData) => { + if (!internalDocId || !permissionData) { + throw new Error("unexpected, no internalDocId or permissionData"); + } + await updatePermissionData( + props.supabaseClient, + internalDocId, + permissionData, + newData + ); + }, + [internalDocId, permissionData, props.supabaseClient] + ); + + useEffect(() => { + async function initReader() { + const doc = await props.supabaseClient + .from("documents") + .select("id,public_access_level") + .eq("nano_id", nanoId); + + if (!doc.data || doc.data.length !== 1) { + return; + } + const permissionData = await props.supabaseClient + .from("document_permissions") + .select() + .eq("document_id", doc.data[0].id); + + const usernamesRet = await props.supabaseClient + .from("workspaces") + .select() + .eq("is_username", true) + .in( + "owner_user_id", + permissionData.data?.map((p) => p.user_id) || [] + ); + const usernamesMap = new Map( + usernamesRet.data?.map((d) => [d.owner_user_id, d.name]) + ); + const entries = + permissionData.data?.map( + (u) => + [ + u.user_id!, + { + user: { + id: u.user_id!, + name: "@" + usernamesMap.get(u.user_id!)!, + nameWithoutAtSign: usernamesMap.get(u.user_id!)!, + }, + permission: u.access_level, + }, + ] as const + ) || []; + + setInternalDocId(doc.data[0].id); + setPermissionData({ + doc: doc.data[0].public_access_level, + users: new Map(entries), + }); + } + initReader(); + return () => { + setPermissionData(undefined); + }; + }, [nanoId, props.identifier, props.supabaseClient]); + + if (!permissionData) { + return ( + // css={{ overflow: "visible" }} + + + Sharing & Permissions + + +
+ +
+
+
+ ); + } + + return ( + + ); + } +); + +export default PermissionsLoader; diff --git a/packages/editor/src/app/supabase-auth/routes/permissions/PermissionsSettings.module.css b/packages/editor/src/app/supabase-auth/routes/permissions/PermissionsSettings.module.css new file mode 100644 index 000000000..d6fd6e576 --- /dev/null +++ b/packages/editor/src/app/supabase-auth/routes/permissions/PermissionsSettings.module.css @@ -0,0 +1,54 @@ +body { + overflow: visible; +} + +.select { + caret-color: transparent; +} + +.remove { + display: inline-block; + height: 2.5rem; + background: #005cc5; +} + +.userRow { + display: flex; + height: 2.5rem; + align-items: center; + column-gap: 0.5rem; + flex-direction: row; +} + +.pickerContainer, +.userInfo { + flex: 4; + height: 2.5rem; +} + +.userInfo { + display: flex; + align-items: center; + column-gap: 0.5rem; +} + +.restrictionSelect { + flex: 1; + min-width: 100px; +} + +.restrictionSelect > div { + height: 100%; +} + +.addButton, +.removeButton { + flex: 1; + min-width: 100px; + height: 100% !important; + line-height: 2.5rem !important; +} + +.body > * { + margin-bottom: 0.5rem; +} diff --git a/packages/editor/src/app/supabase-auth/routes/permissions/PermissionsSettings.tsx b/packages/editor/src/app/supabase-auth/routes/permissions/PermissionsSettings.tsx new file mode 100644 index 000000000..8edc33132 --- /dev/null +++ b/packages/editor/src/app/supabase-auth/routes/permissions/PermissionsSettings.tsx @@ -0,0 +1,240 @@ +import Button, { LoadingButton } from "@atlaskit/button"; +import Modal, { + ModalBody, + ModalFooter, + ModalHeader, + ModalTitle, +} from "@atlaskit/modal-dialog"; +import Select from "@atlaskit/select"; +import { observer } from "mobx-react-lite"; +import { useState } from "react"; +import { SupabaseClientType } from "../../SupabaseSessionStore"; +import styles from "./PermissionsSettings.module.css"; +import UserPermissionRow from "./UserPermissionRow"; +import { SupabaseUserPicker } from "./UserPicker"; +import { + DocPermission, + PermissionData, + docPermissionLabels, + userPermissionLabels, +} from "./permissionUtils"; +import { User } from "./userUtils"; + +const PermissionsSettings = observer( + (props: { + currentUserId: string; + supabaseClient: SupabaseClientType; + + permissionData: PermissionData; + onSave: (newPermissionData: PermissionData) => void; + closeCallback: () => void; + }) => { + const [isSaving, setIsSaving] = useState(false); + + // State for storing & updating the currently selected user from the user picker. + const [newUser, setNewUser] = useState(); + + // State and functions for storing & updating the permission type for the user that is being added. + const [newUserPermission, setNewUserPermission] = + useState("write"); + + const [editingPermissionData, setEditingPermissionData] = + useState({ + doc: props.permissionData.doc, + // deep clone: + users: new Map( + JSON.parse(JSON.stringify(Array.from(props.permissionData.users))) + ), + }); + + function updateDocPermission( + permission: { label: string; value: string } | null + ) { + setEditingPermissionData({ + doc: permission!.value as DocPermission, + users: editingPermissionData.users, + }); + } + + function addUserPermission(user: User, permission: DocPermission) { + // User already in permissions list. + if (editingPermissionData.users.has(user.id)) { + return; + } + + editingPermissionData.users.set(user.id, { + user, + permission, + }); + + setEditingPermissionData({ + doc: editingPermissionData.doc, + users: editingPermissionData.users, + }); + } + + function editUserPermission(userId: string, permission: DocPermission) { + const existingValue = editingPermissionData.users.get(userId); + if (!existingValue) { + throw new Error("editing non existing user permission"); + } + existingValue.permission = permission; + + setEditingPermissionData({ + doc: editingPermissionData.doc, + users: editingPermissionData.users, + }); + } + + function removeUserPermission(user: string) { + editingPermissionData.users.delete(user); + + setEditingPermissionData({ + doc: editingPermissionData.doc, + users: editingPermissionData.users, + }); + } + + function updateSelectedUser(user: User | undefined) { + setNewUser(user); + } + + function updatePermissionType( + value: { label: string; value: string } | null + ) { + setNewUserPermission(value!.value as DocPermission); + } + + // Callback for adding a permission. + function addPermission() { + if (!newUser) { + throw new Error("no user selected"); + } + addUserPermission(newUser, newUserPermission); + } + + function save() { + setIsSaving(true); + + (async () => { + await props.onSave(editingPermissionData); + + setIsSaving(false); + props.closeCallback(); + })(); + } + + return ( + props.closeCallback()}> + + Sharing & Permissions + + +
+ + +
+ {Array.from(editingPermissionData.users.entries()).map( + ([userId, val]) => { + return userId === props.currentUserId ? ( + <> + ) : ( + + ); + } + )} + + )} + +
+ + save()}> + Apply + + + +
+ ); + } +); + +export default PermissionsSettings; diff --git a/packages/editor/src/app/supabase-auth/routes/permissions/UserPermissionRow.tsx b/packages/editor/src/app/supabase-auth/routes/permissions/UserPermissionRow.tsx new file mode 100644 index 000000000..6f33b5427 --- /dev/null +++ b/packages/editor/src/app/supabase-auth/routes/permissions/UserPermissionRow.tsx @@ -0,0 +1,75 @@ +import Button from "@atlaskit/button"; +import Select from "@atlaskit/select"; +import { useState } from "react"; +import Avatar from "react-avatar"; +import styles from "./PermissionsSettings.module.css"; +import { DocPermission, userPermissionLabels } from "./permissionUtils"; +import { User } from "./userUtils"; + +export default function UserPermissionRow(props: { + user: User; + userPermission: DocPermission; + editCallback: (userId: string, permission: DocPermission) => void; + removeCallback: (userId: string) => void; +}) { + // State and functions for storing & updating whether each specific user can read/write to the page. + const [userPermission, setUserPermission] = useState( + props.userPermission + ); + + function edit(permission: { label: string; value: string } | null) { + setUserPermission(permission!.value as DocPermission); + props.editCallback(props.user.id, permission!.value as DocPermission); + } + + function remove(e: any) { + props.removeCallback(props.user.id); + } + console.log("defperm", { + label: userPermissionLabels.get(userPermission)!, + value: userPermission, + }); + return ( +
+
+ +
{props.user.name}
+
+ { + // debugger; + // val.set(e.target.value); + // }} + // value={val.get()} + // // @ts-expect-error + // __tcObservable={val} + // /> + // ); + return ; +}); + +export const InternalInput = observer( + (props: any & { __tcObservable: any }) => { + return ( + { + // debugger; + props.__tcObservable.set(e.target.value); + }} + value={props.__tcObservable.get()} + + // __tcObservable={val} + /> + ); + } +); + +// export let x = ; + +// export let x = ; + +// Insert a map +// + +// Edit map: +// shows form +// diff --git a/packages/editor/src/runtime/executor/lib/jsx.ts b/packages/editor/src/runtime/executor/lib/jsx.ts new file mode 100644 index 000000000..c2df7d59c --- /dev/null +++ b/packages/editor/src/runtime/executor/lib/jsx.ts @@ -0,0 +1,8 @@ +// @ts-expect-error +import { Fragment, jsx as _origJSX, jsxs } from "react/jsx-runtime"; + +function jsx(type: any, props: any, key: any) { + return _origJSX(type, props, key); +} + +export { Fragment, jsx, jsxs }; diff --git a/packages/editor/src/runtime/executor/resolver/LocalResolver.ts b/packages/editor/src/runtime/executor/resolver/LocalResolver.ts index 4e0a3b23c..76688e6cd 100644 --- a/packages/editor/src/runtime/executor/resolver/LocalResolver.ts +++ b/packages/editor/src/runtime/executor/resolver/LocalResolver.ts @@ -23,13 +23,16 @@ async function resolveNestedModule(id: string, mode?: string) { (!mode || mode === "imports/optimized/react.js" || mode === "es2021/react.js" || - mode === "es2022/react.js") + mode === "es2022/react.js" || + mode === "es2022/react.mjs") ) { return react; } if ( - (id === "react" && mode === "imports/unoptimized/jsx-runtime.js") || + (id === "react" && + (mode === "imports/unoptimized/jsx-runtime.js" || + mode === "es2022/jsx-runtime.js")) || id === "react/jsx-runtime" ) { return jsxruntime; @@ -78,7 +81,7 @@ async function resolveNestedModule(id: string, mode?: string) { // workaround for https://github.com/skypackjs/skypack-cdn/issues/242 return await import("@loaders.gl/images"); } - + console.log("return undefined", id, mode); return undefined; } diff --git a/packages/editor/src/runtime/executor/resolver/resolver.ts b/packages/editor/src/runtime/executor/resolver/resolver.ts index 11644e503..83b7037a5 100644 --- a/packages/editor/src/runtime/executor/resolver/resolver.ts +++ b/packages/editor/src/runtime/executor/resolver/resolver.ts @@ -8,9 +8,9 @@ import { SkypackResolver, } from "@typecell-org/engine"; import getExposeGlobalVariables from "../lib/exports"; +import * as jsxRuntime from "../lib/jsx"; import { LocalResolver } from "./LocalResolver"; import { TypeCellCompiledCodeProvider } from "./typecell/TypeCellCompiledCodeProvider"; - // Used for resolving NPM imports const esmshResolver = new ESMshResolver(); const skypackResolver = new SkypackResolver(); @@ -51,7 +51,8 @@ export function getTypeCellResolver( cacheKey: string, createTypeCellCompiledCodeProvider?: ( moduleName: string - ) => TypeCellCompiledCodeProvider + ) => TypeCellCompiledCodeProvider, + loadPlugins?: (obj: any) => void ) { // TODO: probably we can just use a random id here, or refactor this all to use class + local cache const resolveImportNested = async ( @@ -62,15 +63,24 @@ export function getTypeCellResolver( // Resolve the typecell helper library return { module: { - default: getExposeGlobalVariables(documentId), + default: getExposeGlobalVariables( + documentId, + loadPlugins || (() => {}) + ), }, dispose: () => {}, }; + } else if (moduleName === "typecell/jsx-runtime") { + return { + module: jsxRuntime, + dispose: () => {}, + }; } const resolved = await resolveImport( moduleName, cacheKey + "$$" + forModel.path, - createTypeCellCompiledCodeProvider + createTypeCellCompiledCodeProvider, + loadPlugins ); return resolved; @@ -83,9 +93,10 @@ async function resolveImport( cacheKey: string, createTypeCellCompiledCodeProvider?: ( moduleName: string - ) => TypeCellCompiledCodeProvider + ) => TypeCellCompiledCodeProvider, + loadPlugins?: (obj: any) => void ): Promise { - if (!moduleName.startsWith("!@")) { + if (!moduleName.startsWith("!")) { // It's a regular NPM import like `import * as _ from "lodash"`; return importShimResolver.resolveImport(moduleName); } @@ -104,8 +115,15 @@ async function resolveImport( const provider = createTypeCellCompiledCodeProvider(moduleName); const engine = new Engine( - getTypeCellResolver(moduleName, key, createTypeCellCompiledCodeProvider) + getTypeCellResolver( + moduleName, + key, + createTypeCellCompiledCodeProvider, + loadPlugins + ) ); + // debugger; + engine.observableContext.context.__moduleName = moduleName; engine.registerModelProvider(provider); diff --git a/packages/editor/src/runtime/executor/resolver/typecell/TypeCellModuleCompiler.ts b/packages/editor/src/runtime/executor/resolver/typecell/TypeCellModuleCompiler.ts index 04645fd26..3abc966f7 100644 --- a/packages/editor/src/runtime/executor/resolver/typecell/TypeCellModuleCompiler.ts +++ b/packages/editor/src/runtime/executor/resolver/typecell/TypeCellModuleCompiler.ts @@ -1,8 +1,9 @@ import { autorun, untracked } from "mobx"; import type * as monaco from "monaco-editor"; import { parseIdentifier } from "../../../../identifiers"; -import { getTypeCellCodeModel } from "../../../../models/TypeCellCodeModel"; +import { getTypeCellCodeModel } from "../../../../models/YTextTypeCellCodeModel"; import { DocConnection } from "../../../../store/DocConnection"; +import { SessionStore } from "../../../../store/local/SessionStore"; import SourceModelCompiler from "../../../compiler/SourceModelCompiler"; export class TypeCellModuleCompiler extends SourceModelCompiler { @@ -11,16 +12,18 @@ export class TypeCellModuleCompiler extends SourceModelCompiler { constructor( private readonly moduleName: string, - monacoInstance: typeof monaco + monacoInstance: typeof monaco, + sessionStore: SessionStore ) { super(monacoInstance); - if (!moduleName.startsWith("!@")) { + if (!moduleName.startsWith("!")) { throw new Error("invalid module name"); } - const identifier = parseIdentifier(moduleName.substr(1)); + // TODO + const identifier = parseIdentifier(moduleName.substring(1)); - this.connection = DocConnection.load(identifier); + this.connection = DocConnection.load(identifier, sessionStore); const disposeAutorun = autorun(() => { const cells = this.connection.tryDoc?.doc.cells; diff --git a/packages/editor/src/runtime/extensions/visualizer/TypeChecker.test.ts b/packages/editor/src/runtime/extensions/visualizer/TypeChecker.test.ts index 4ac5a3256..ca7c4884b 100644 --- a/packages/editor/src/runtime/extensions/visualizer/TypeChecker.test.ts +++ b/packages/editor/src/runtime/extensions/visualizer/TypeChecker.test.ts @@ -3,7 +3,7 @@ import * as monaco from "monaco-editor/esm/vs/editor/editor.api.js"; import "monaco-editor/esm/vs/language/typescript/monaco.contribution.js"; import { expect, it } from "vitest"; import * as Y from "yjs"; -import { TypeCellCodeModel } from "../../../models/TypeCellCodeModel"; +import { YTextTypeCellCodeModel } from "../../../models/YTextTypeCellCodeModel"; import SourceModelCompiler from "../../compiler/SourceModelCompiler"; import { setMonacoDefaults } from "../../editor"; import setupTypecellTypeResolver from "../../editor/languages/typescript/typecellTypeResolver"; @@ -35,15 +35,15 @@ it( //monaco.editor.createModel("// tesdft", "typescript"); - let m1 = new TypeCellCodeModel( - "!@mx://mx.typecell.org/@owner/doc/1.cell.tsx", + let m1 = new YTextTypeCellCodeModel( + "!@mx:mx.typecell.org/@owner/doc/1.cell.tsx", "typescript", m1Code, monaco ); - let m2 = new TypeCellCodeModel( - "!@mx://mx.typecell.org/@owner/doc/2.cell.tsx", + let m2 = new YTextTypeCellCodeModel( + "!@mx:mx.typecell.org/@owner/doc/2.cell.tsx", "typescript", m2Code, monaco @@ -59,7 +59,7 @@ it( await new Promise((resolve) => setTimeout(resolve, 1000)); const typeChecker = new TypeChecker( - "mx://mx.typecell.org/@owner/doc", + "mx:mx.typecell.org/@owner/doc", monaco ); const visualizers = await typeChecker.findMatchingVisualizers(m1); diff --git a/packages/editor/src/runtime/extensions/visualizer/VisualizerExtension.ts b/packages/editor/src/runtime/extensions/visualizer/VisualizerExtension.ts index 301294fbb..588ab012d 100644 --- a/packages/editor/src/runtime/extensions/visualizer/VisualizerExtension.ts +++ b/packages/editor/src/runtime/extensions/visualizer/VisualizerExtension.ts @@ -1,5 +1,5 @@ import type * as monaco from "monaco-editor"; -import { lifecycle, event } from "vscode-lib"; +import { event, lifecycle } from "vscode-lib"; import { CompiledCodeModel } from "../../../models/CompiledCodeModel"; import SourceModelCompiler from "../../compiler/SourceModelCompiler"; import { TypeChecker } from "./TypeChecker"; @@ -7,10 +7,7 @@ import { TypeChecker } from "./TypeChecker"; export type VisualizersByPath = { [key: string]: string[] }; export class VisualizerExtension extends lifecycle.Disposable { - private readonly typeChecker = new TypeChecker( - this.documentId, - this.monacoInstance - ); + private readonly typeChecker: TypeChecker; private readonly _onUpdateVisualizers: event.Emitter = this._register(new event.Emitter()); @@ -24,6 +21,7 @@ export class VisualizerExtension extends lifecycle.Disposable { private readonly monacoInstance: typeof monaco ) { super(); + this.typeChecker = new TypeChecker(this.documentId, this.monacoInstance); compiler.compiledModels.forEach((m) => this.registerModel(m)); this._register( compiler.onDidCreateCompiledModel((m) => { diff --git a/packages/editor/src/store/BackgroundSyncer.browsertest.ts b/packages/editor/src/store/BackgroundSyncer.browsertest.ts new file mode 100644 index 000000000..ea8471e1a --- /dev/null +++ b/packages/editor/src/store/BackgroundSyncer.browsertest.ts @@ -0,0 +1,106 @@ +/* eslint-disable @typescript-eslint/no-unused-expressions */ +import { HocuspocusProviderWebsocket } from "@hocuspocus/provider"; + +import { enableMobxBindings } from "@syncedstore/yjs-reactive-bindings"; +import { expect } from "chai"; +import * as mobx from "mobx"; +import { when } from "mobx"; +import { async } from "vscode-lib"; +import { createWsProvider } from "../../../../packages/server/src/supabase/test/supabaseTestUtil"; +import { loginAsNewRandomUser } from "../../tests/util/loginUtil"; +import { SupabaseSessionStore } from "../app/supabase-auth/SupabaseSessionStore"; +import { DocConnection } from "./DocConnection"; +import { TypeCellRemote } from "./yjs-sync/remote/TypeCellRemote"; + +async function initSessionStore(name: string) { + const sessionStore = new SupabaseSessionStore(false); + await sessionStore.initialize(); + + await loginAsNewRandomUser(sessionStore, name); + + await when(() => !!sessionStore.coordinators); + await when( + () => sessionStore.coordinators?.userPrefix === sessionStore.userPrefix + ); + return sessionStore; +} + +describe("BackgroundSyncer tests", () => { + let sessionStoreAlice: SupabaseSessionStore; + let sessionStoreBob: SupabaseSessionStore; + let wsProvider: HocuspocusProviderWebsocket; + + before(async () => { + enableMobxBindings(mobx); + }); + + beforeEach(async () => { + wsProvider = createWsProvider("ws://localhost:1234"); + + // initialize the main user we're testing + // await coordinator.initialize(); + + sessionStoreAlice = await initSessionStore("alice"); + sessionStoreBob = await initSessionStore("bob"); + }); + + afterEach(async () => { + await sessionStoreAlice.supabase.auth.signOut(); + sessionStoreAlice.dispose(); + sessionStoreAlice = undefined as any; + await sessionStoreBob.supabase.auth.signOut(); + sessionStoreBob.dispose(); + sessionStoreBob = undefined as any; + wsProvider.destroy(); + }); + + /** + * This test is not directly related to backgroundsyncer, but makes sure that changes to a ydoc are persisted even if we immediately call dispose() + */ + it("reloading a doc still has changes", async () => { + const doc = await DocConnection.create(sessionStoreAlice); + doc.ydoc.getMap("test").set("hello", "world"); + doc.dispose(); + + expect(sessionStoreAlice.documentCoordinator?.documents.size).to.eq(2); + expect(DocConnection.get(doc.identifier, sessionStoreAlice)).to.be + .undefined; + + const reload = await DocConnection.load(doc.identifier, sessionStoreAlice); + const reloadedDoc = await reload.waitForDoc(); + expect(reloadedDoc.ydoc.getMap("test").get("hello")).to.eq("world"); + }); + + it("creates document remotely that was created offline earlier", async () => { + TypeCellRemote.Offline = true; + const doc = await DocConnection.create(sessionStoreAlice); + doc.ydoc.getMap("test").set("hello", "world"); + doc.dispose(); + + await async.timeout(1000); + + // validate that document is kept around by background syncer + expect( + sessionStoreAlice.coordinators?.backgroundSyncer?.numberOfDocumentsSyncing + ).to.eq(2); + + [...sessionStoreAlice.documentCoordinator!.documents.values()].forEach( + (doc) => { + expect(doc.exists_at_remote).to.be.false; + } + ); + + TypeCellRemote.Offline = false; + + await when( + () => + sessionStoreAlice.coordinators?.backgroundSyncer + ?.numberOfDocumentsSyncing === 0 + ); + [...sessionStoreAlice.documentCoordinator!.documents.values()].forEach( + (doc) => { + expect(doc.exists_at_remote).to.be.true; + } + ); + }); +}); diff --git a/packages/editor/src/store/BackgroundSyncer.ts b/packages/editor/src/store/BackgroundSyncer.ts new file mode 100644 index 000000000..5c55f185b --- /dev/null +++ b/packages/editor/src/store/BackgroundSyncer.ts @@ -0,0 +1,78 @@ +import { ObservableSet, autorun } from "mobx"; +import { lifecycle } from "vscode-lib"; +import { DocConnection } from "./DocConnection"; +import { SessionStore } from "./local/SessionStore"; +import { DocumentCoordinator } from "./yjs-sync/DocumentCoordinator"; + +export class BackgroundSyncer extends lifecycle.Disposable { + private initialized = false; + private loadedConnections = new Map(); + private identifiersToSync = new ObservableSet(); + + public get numberOfDocumentsSyncing() { + return this.identifiersToSync.size; + } + + constructor( + private readonly coordinator: DocumentCoordinator, + private readonly sessionStore: SessionStore + ) { + super(); + this._register({ + dispose: () => { + for (let doc of this.loadedConnections.values()) { + doc.dispose(); + } + }, + }); + } + + public async initialize() { + if (this.initialized) { + throw new Error("already initialized"); + } + this.initialized = true; + + const disposeAutorun = autorun(() => { + const ids: string[] = []; + this.coordinator.documents.forEach((docInfo, docId) => { + if (docInfo.needs_save_since || !docInfo.exists_at_remote) { + ids.push(docId); + } + }); + + setTimeout(() => { + // see which resources we need to sync + for (let id of ids) { + if (!this.identifiersToSync.has(id)) { + console.log("bg syncer load", id); + this.identifiersToSync.add(id); + // we simply load the resource (DocConnection). It will create a SyncManager if there isn't one already, and start syncing automatically + this.loadedConnections.set( + id, + DocConnection.load(id, this.sessionStore) + ); + } + } + + // cleanup already synced resources + for (let id of this.identifiersToSync) { + if (!ids.includes(id)) { + // cleanup + console.log("bg syncer unload", id); + this.identifiersToSync.delete(id); + const connection = this.loadedConnections.get(id)!; + connection.dispose(); + this.loadedConnections.delete(id); + } + } + }, 0); // settimeout is needed because otherwise it conflicts with creation in DocumentManager - this is a bit ugly + + this._register({ + dispose: () => { + disposeAutorun(); + }, + }); + }); + } +} diff --git a/packages/editor/src/store/BaseResource.test.ts b/packages/editor/src/store/BaseResource.test.ts new file mode 100644 index 000000000..a96772b78 --- /dev/null +++ b/packages/editor/src/store/BaseResource.test.ts @@ -0,0 +1,191 @@ +/** + * @vitest-environment jsdom + */ + +import { enableMobxBindings } from "@syncedstore/yjs-reactive-bindings"; +import * as mobx from "mobx"; +import { beforeEach, describe, expect, it } from "vitest"; +import { async, uri } from "vscode-lib"; +import * as Y from "yjs"; +import { Identifier } from "../identifiers/Identifier"; +import { + BaseResource, + UnimplementedBaseResourceExternalManager, +} from "./BaseResource"; +import { InboxResource } from "./InboxResource"; +import { InboxValidator } from "./InboxValidatorStore"; +import { ChildReference } from "./referenceDefinitions/child"; +enableMobxBindings(mobx); +type Username = string; +type DocId = string; + +type User = { + name: Username; + docs: Record< + DocId, + { + ydoc: Y.Doc; + resource: BaseResource; + resourceAsInbox: InboxResource | undefined; + validator: InboxValidator | undefined; + } + >; + allowedToWriteDocs: Set; +}; + +class TestIdentifier extends Identifier { + constructor(public readonly id: string) { + super(["test"], uri.URI.parse("test://test/" + id)); + } +} + +function syncDocFromUserToUser(fromUser: User, toUser: User, docId: DocId) { + if (!fromUser.allowedToWriteDocs.has(docId)) { + console.warn("skip syncing doc because user is not allowed to write"); + return; + } + const doc1 = fromUser.docs[docId]; + const doc2 = toUser.docs[docId]; + const syncDoc1 = Y.encodeStateAsUpdate(doc1.ydoc); + Y.applyUpdate(doc2.ydoc, syncDoc1); +} + +function syncAllDocsFromUserToUser( + fromUser: User, + toUser: User, + exclude?: DocId[] +) { + for (const docId of Object.keys(fromUser.docs)) { + if (exclude && exclude.includes(docId)) { + continue; + } + syncDocFromUserToUser(fromUser, toUser, docId); + } +} + +function createDocAndAllowAccess(forUsers: User[], docId: DocId) { + for (const user of forUsers) { + // create inbox + const inboxDoc = new Y.Doc(); + user.allowedToWriteDocs.add(docId + "-inbox"); + const inboxBaseResource = new BaseResource( + inboxDoc, + new TestIdentifier(docId + "-inbox") + ); + inboxBaseResource.create("!inbox"); + const resourceAsInbox = inboxBaseResource.getSpecificType( + InboxResource as any + ); + resourceAsInbox.inboxTarget = "test:test/" + docId; + user.docs[docId + "-inbox"] = { + resourceAsInbox, + resource: inboxBaseResource, + ydoc: inboxDoc, + validator: undefined, + }; + + // create main doc + const ydoc = new Y.Doc(); + const manager: any = { + loadInboxResource: async (id: TestIdentifier) => { + // const testIdentifier = new TestIdentifier(id.toString()); + const inbox = user.docs[id.id + "-inbox"].resourceAsInbox; + if (!inbox) { + throw new Error("can't resolve inbox id " + id); + } + return inbox; + }, + }; + manager.prototype = UnimplementedBaseResourceExternalManager; + const resource = new BaseResource(ydoc, new TestIdentifier(docId), manager); + + const validator = new InboxValidator( + resourceAsInbox!, + ChildReference, + async (idStr) => { + // hacky + const testIdentifier = uri.URI.parse(idStr.replace("test:", "test://")); + const docId = testIdentifier.path.substring(1); + return user.docs[docId].resource; + } + ); + + user.docs[docId] = { + resourceAsInbox: undefined, + resource, + ydoc, + validator, + }; + user.allowedToWriteDocs.add(docId); + } +} + +describe("links", () => { + let user1: User; + let user2: User; + + beforeEach(() => { + user1 = { + name: "user1", + docs: {}, + allowedToWriteDocs: new Set(), + }; + user2 = { + name: "user2", + docs: {}, + allowedToWriteDocs: new Set(), + }; + }); + + it("syncs info two-way", () => { + createDocAndAllowAccess([user1, user2], "doc1"); + + user1.docs.doc1.ydoc.getMap("test").set("hello", "world"); + expect(user2.docs.doc1.ydoc.getMap("test").get("hello")).toBeUndefined(); + syncAllDocsFromUserToUser(user1, user2); + expect(user2.docs.doc1.ydoc.getMap("test").get("hello")).toBe("world"); + + user2.docs.doc1.ydoc.getMap("test").set("hello", "world2"); + expect(user1.docs.doc1.ydoc.getMap("test").get("hello")).toBe("world"); + syncAllDocsFromUserToUser(user2, user1); + expect(user1.docs.doc1.ydoc.getMap("test").get("hello")).toBe("world2"); + }); + + it("does not sync if user is not allowed to write", () => { + createDocAndAllowAccess([user1, user2], "doc1"); + user1.allowedToWriteDocs.delete("doc1"); + + user1.docs.doc1.ydoc.getMap("test").set("hello", "world"); + expect(user2.docs.doc1.ydoc.getMap("test").get("hello")).toBeUndefined(); + syncAllDocsFromUserToUser(user1, user2); + expect(user2.docs.doc1.ydoc.getMap("test").get("hello")).toBeUndefined(); + }); + + it("adds a ref", async () => { + createDocAndAllowAccess([user1, user2], "doc1"); + createDocAndAllowAccess([user1, user2], "doc2"); + + await user1.docs.doc1.resource.addRef( + ChildReference, + new TestIdentifier("doc2") + ); + + expect(user1.docs.doc1.resource.getRefs(ChildReference).length).toBe(1); + expect(user2.docs.doc1.resource.getRefs(ChildReference).length).toBe(0); + syncAllDocsFromUserToUser(user1, user2, ["doc2-inbox"]); + expect(user2.docs.doc1.resource.getRefs(ChildReference).length).toBe(1); + + await new Promise((resolve) => setImmediate(resolve)); // allow autorun to fire + + await async.timeout(100); + + expect(user1.docs.doc2.validator!.validRefMessages.length).toBe(1); + expect(user2.docs.doc2.validator!.validRefMessages.length).toBe(0); + + syncAllDocsFromUserToUser(user2, user1); + + await new Promise((resolve) => setImmediate(resolve)); // allow autorun to fire + + expect(user2.docs.doc2.validator!.validRefMessages.length).toBe(0); + }); +}); diff --git a/packages/editor/src/store/BaseResource.ts b/packages/editor/src/store/BaseResource.ts index 783d04ad4..358690d85 100644 --- a/packages/editor/src/store/BaseResource.ts +++ b/packages/editor/src/store/BaseResource.ts @@ -1,64 +1,99 @@ import { makeYDocObservable } from "@syncedstore/yjs-reactive-bindings"; import { generateKeyBetween } from "fractional-indexing"; import type * as Y from "yjs"; +import { createID, getState } from "yjs"; import { Identifier } from "../identifiers/Identifier"; -import type { DocConnection } from "./DocConnection"; import { DocumentResource } from "./DocumentResource"; +import { InboxResource } from "./InboxResource"; import { - createRef, - getHashForReference, Ref, ReferenceDefinition, + createRef, + getHashForReference, validateRef, } from "./Ref"; +import { Remote } from "./yjs-sync/remote/Remote"; -export type BaseResourceConnection = { - identifier: Identifier; +export type BaseResourceExternalManager = { dispose: () => void; - /** @internal */ - webrtcProvider: { awareness: any } | undefined; // TODO + awareness: any | undefined; needsFork: boolean; + loadInboxResource: (forIdentifier: Identifier) => Promise; + fork(): Promise; + revert(): Promise; + remote: Remote | undefined; }; + +export const UnimplementedBaseResourceExternalManager: BaseResourceExternalManager = + { + dispose: () => {}, + get awareness() { + throw new Error("Not implemented"); + }, + get needsFork(): boolean { + throw new Error("Not implemented"); + }, + get loadInboxResource(): any { + throw new Error("Not implemented"); + }, + fork(): Promise { + throw new Error("Not implemented"); + }, + revert(): Promise { + throw new Error("Not implemented"); + }, + get remote(): Remote { + throw new Error("Not implemented"); + }, + }; + /** * A resource is an entity definied by a unique id. * All entities extend from BaseResource, which provides support for id, type, and references */ export class BaseResource { - private readonly _identifier: Identifier; - - /** @internal */ - public readonly connection?: DocConnection; - /** @internal */ public constructor( - /** @internal */ protected readonly ydoc: Y.Doc, - connectionOrIdentifier: DocConnection | Identifier + /** @internal */ public readonly ydoc: Y.Doc, + public readonly identifier: Identifier, + private readonly manager: BaseResourceExternalManager = UnimplementedBaseResourceExternalManager ) { makeYDocObservable(ydoc); - if ((connectionOrIdentifier as any).identifier) { - this.connection = connectionOrIdentifier as DocConnection; - this._identifier = this.connection.identifier; - } else { - this._identifier = connectionOrIdentifier as any; - } } - public get identifier() { - return this._identifier; + /** @internal */ + public get title() { + return this.ydoc.getMap("meta").get("title") as string | undefined; + // return this.ydoc.getText("title"); } public get id() { - return this._identifier.toString(); + return this.identifier.toString(); + } + + public get needsFork() { + return false; // this.manager.needsFork; } public get type(): string { return this.ydoc.getMap("meta").get("type") as any; } - // TODO: do / how do we want to expose this? /** @internal */ - public get webrtcProvider() { - return this.connection?.webrtcProvider; + public get awareness() { + return this.manager.awareness; + } + + public fork() { + return this.manager.fork(); + } + + public revert() { + return this.manager.revert(); + } + + public get remote() { + return this.manager.remote; } /** @@ -77,7 +112,8 @@ export class BaseResource { public getSpecificType( constructor: new ( doc: Y.Doc, - connection: BaseResourceConnection | Identifier + identifier: Identifier, + manager: BaseResourceExternalManager ) => T ): T { if (this._specificType && !(this._specificType instanceof constructor)) { @@ -86,7 +122,7 @@ export class BaseResource { this._specificType = this._specificType || - new constructor(this.ydoc, this.connection || this.identifier); + new constructor(this.ydoc, this.identifier, this.manager); return this._specificType; } @@ -101,8 +137,8 @@ export class BaseResource { return map; } - public getRefs(definition: ReferenceDefinition) { - const ret: Ref[] = []; // TODO: type + public getRefs(definition: T) { + const ret: Ref[] = []; // TODO: type // this.ydoc.getMap("refs").forEach((val, key) => { // this.ydoc.getMap("refs").delete(key); // }); @@ -129,108 +165,113 @@ export class BaseResource { return ret; } - public getRef(definition: ReferenceDefinition, key: string) { + public getRef(definition: ReferenceDefinition, targetId: string) { + const key = getHashForReference(definition, targetId); + return this.getRefByKey(definition, key); + } + + public getRefByKey(definition: ReferenceDefinition, key: string) { const ref = this._refs.get(key); - if (ref && !validateRef(ref, definition)) { + if (!ref) { + return undefined; + } + if (!validateRef(ref, definition)) { throw new Error("unexpected"); // ref with key exists, but doesn't conform to definition } return ref; } - public removeRef(definition: ReferenceDefinition, targetId: string) { - this._refs.delete(getHashForReference(definition, targetId)); + public removeRef(definition: ReferenceDefinition, targetId: Identifier) { + this._refs.delete(getHashForReference(definition, targetId.toString())); // TODO: delete reverse? } public moveRef( definition: ReferenceDefinition, - targetId: string, + targetId: Identifier, index: number ) { - const key = getHashForReference(definition, targetId); - let existing = this.getRef(definition, key); + const key = getHashForReference(definition, targetId.toString()); + let existing = this.getRefByKey(definition, key); if (!existing) { throw new Error("ref not found"); } - if ( - definition.relationship.type === "unique" || - !definition.relationship.sorted - ) { + if (definition.relationship === "unique" || !definition.sorted) { throw new Error("called moveRef on non sorted definition"); } - const refs = this.getRefs(definition); + const refs = this.getRefs(definition).filter( + (r) => r.target !== targetId.toString() + ); + const sortKey = generateKeyBetween( index === 0 ? null : refs[index - 1].sortKey || null, index >= refs.length ? null : refs[index].sortKey || null ); - this._refs.set(key, createRef(definition, targetId, sortKey)); - } - - // public ensureRef( - // definition: ReferenceDefinition, - // targetId: string, - // index?: number, - // checkReverse = true - // ) { - // // const ref = new Ref(definition, targetId); - - // const key = getHashForReference(definition, targetId); - // let existing = this.getRef(definition, key); // TODO: this doesn't work distributed + reverseDoc?, because maybe this document isn't synced - // if (existing) { - // // The document already has this relationship - // if (existing.target !== targetId) { - // // The relationship that exists is different, remove the reverse relationship - // const doc = DocConnection.load(existing.target); // TODO: unload document - - // // TODO ! - // doc.tryDoc!.removeRef(reverseReferenceDefinition(definition), this.id); - // } - // } - // // Add the relationship - // let sortKey: string | undefined; - - // if ( - // definition.relationship.type === "many" && - // definition.relationship.sorted - // ) { - // const refs = this.getRefs(definition).filter( - // (r) => r.target !== targetId - // ); - // if (index === undefined) { - // // append as last item - // sortKey = generateKeyBetween(refs.pop()?.sortKey || null, null); - // } else { - // let sortKeyA = index === 0 ? null : refs[index - 1].sortKey || null; - // let sortKeyB = - // index >= refs.length ? null : refs[index].sortKey || null; - // if (sortKeyA === sortKeyB && sortKeyA !== null) { - // console.warn("unexpected"); - // sortKeyB = null; - // } - // sortKey = generateKeyBetween(sortKeyA, sortKeyB); - // } - // } - - // this._refs.set(key, createRef(definition, targetId, sortKey)); - // if (checkReverse) { - // // Add the reverse relationship - // const reverseDoc = DocConnection.load(targetId); // TODO: unload document - // // TODO ! - // reverseDoc.tryDoc!.ensureRef( - // reverseReferenceDefinition(definition), - // this.id, - // undefined, - // false - // ); - // } - // } + this._refs.set(key, createRef(definition, targetId.toString(), sortKey)); + } + + // TODO: should not be async + public async addRef( + definition: ReferenceDefinition, + targetId: Identifier, + index?: number, + addToTargetInbox = true + ) { + let sortKey: string | undefined; + + if (definition.relationship === "many" && definition.sorted) { + const refs = this.getRefs(definition).filter( + (r) => r.target !== targetId.toString() + ); + if (index === undefined) { + // append as last item + sortKey = generateKeyBetween(refs.pop()?.sortKey || null, null); + } else { + let sortKeyA = index === 0 ? null : refs[index - 1].sortKey || null; + let sortKeyB = + index >= refs.length ? null : refs[index].sortKey || null; + if (sortKeyA === sortKeyB && sortKeyA !== null) { + console.warn("unexpected"); + sortKeyB = null; + } + sortKey = generateKeyBetween(sortKeyA, sortKeyB); + } + } else if (typeof index !== "undefined") { + throw new Error("called addRef with index on non sorted definition"); + } + const key = getHashForReference(definition, targetId.toString()); + const ref = createRef(definition, targetId.toString(), sortKey); + + if (addToTargetInbox) { + const nextId = createID( + this.ydoc.clientID, + getState(this.ydoc.store, this.ydoc.clientID) + ); + + const inbox = await this.manager.loadInboxResource(targetId); + + inbox.inbox.push([ + { + message_type: "ref", + id: ref.id, + namespace: ref.namespace, + type: ref.type, + source: this.id, + clock: nextId.client + ":" + nextId.clock, + }, + ]); + + inbox.dispose(); + } + this._refs.set(key, ref); + } public dispose() { // This should always only dispose the connection // BaseResource is not meant to manage other resources, // because BaseResource can be initiated often (in YDocConnection.load), and is not cached - this.connection?.dispose(); + this.manager.dispose(); } } diff --git a/packages/editor/src/store/DocConnection.browsertest.ts b/packages/editor/src/store/DocConnection.browsertest.ts new file mode 100644 index 000000000..4f8e95bac --- /dev/null +++ b/packages/editor/src/store/DocConnection.browsertest.ts @@ -0,0 +1,126 @@ +/* eslint-disable @typescript-eslint/no-unused-expressions */ +import { HocuspocusProviderWebsocket } from "@hocuspocus/provider"; + +import { enableMobxBindings } from "@syncedstore/yjs-reactive-bindings"; +import { expect } from "chai"; +import * as mobx from "mobx"; +import { when } from "mobx"; +import { async } from "vscode-lib"; +import { createWsProvider } from "../../../../packages/server/src/supabase/test/supabaseTestUtil"; +import { loginAsNewRandomUser } from "../../tests/util/loginUtil"; +import { SupabaseSessionStore } from "../app/supabase-auth/SupabaseSessionStore"; +import { DocConnection } from "./DocConnection"; +import { InboxValidator } from "./InboxValidatorStore"; +import { ForkReference } from "./referenceDefinitions/fork"; + +async function initSessionStore(name: string) { + const sessionStore = new SupabaseSessionStore(false); + await sessionStore.initialize(); + + await loginAsNewRandomUser(sessionStore, name); + + await when(() => !!sessionStore.coordinators); + await when( + () => sessionStore.coordinators?.userPrefix === sessionStore.userPrefix + ); + return sessionStore; +} + +describe("DocConnection tests", () => { + let sessionStoreAlice: SupabaseSessionStore; + let sessionStoreBob: SupabaseSessionStore; + let wsProvider: HocuspocusProviderWebsocket; + + before(async () => { + enableMobxBindings(mobx); + }); + + beforeEach(async () => { + wsProvider = createWsProvider("ws://localhost:1234"); + + // initialize the main user we're testing + // await coordinator.initialize(); + + sessionStoreAlice = await initSessionStore("alice"); + sessionStoreBob = await initSessionStore("bob"); + }); + + afterEach(async () => { + await sessionStoreAlice.supabase.auth.signOut(); + sessionStoreAlice.dispose(); + sessionStoreAlice = undefined as any; + await sessionStoreBob.supabase.auth.signOut(); + sessionStoreBob.dispose(); + sessionStoreBob = undefined as any; + wsProvider.destroy(); + }); + + it("bob cannot modify doc by alice", async () => { + const doc = await DocConnection.create(sessionStoreAlice); + doc.ydoc.getMap("test").set("hello", "world"); + + await when(() => doc.remote?.status === "loaded"); + + const bobDoc = await DocConnection.load(doc.identifier, sessionStoreBob); + const bobResource = await bobDoc.waitForDoc(); + expect(bobResource.ydoc.getMap("test").get("hello")).to.equal("world"); + + bobResource.ydoc.getMap("test").set("hello", "from bob"); + + // even after waiting 1s, the change should not be visible + await async.timeout(1000); + expect(doc.ydoc.getMap("test").get("hello")).to.equal("world"); + }); + + it("can fork a modified read-only doc", async () => { + const doc = await DocConnection.create(sessionStoreAlice); + doc.ydoc.getMap("test").set("hello", "world"); + + await when(() => doc.remote!.status === "loaded"); + + const bobDoc = await DocConnection.load(doc.identifier, sessionStoreBob); + let bobResource = await bobDoc.waitForDoc(); + expect(bobResource.ydoc.getMap("test").get("hello")).to.equal("world"); + + bobResource.ydoc.getMap("test").set("hello", "from bob"); + + // even after waiting 1s, the change should not be visible + await async.timeout(1000); + expect(doc.ydoc.getMap("test").get("hello")).to.equal("world"); + + expect(bobResource.needsFork).to.be.true; + + await async.timeout(1000); + + const fork = await bobResource.fork(); + + // await new Promise((resolve) => setTimeout(resolve, 1000)); + expect(fork.ydoc.getMap("test").get("hello")).to.equal("from bob"); + + bobResource = await bobDoc.waitForDoc(); // TODO: we should be able to keep using the old resource + // expect(bobResource.ydoc.getMap("test").get("hello")).to.equal("world"); TODO + + expect(fork.getRefs(ForkReference)).to.have.length(1); + + await async.timeout(1000); + + // TODO: convoluted API + const r = await DocConnection.loadInboxResource( + doc.identifier, + sessionStoreAlice + ); + + // console.log("inbox", r.identifier.toString(), r.ydoc.toJSON()); + + const validator = new InboxValidator(r, ForkReference, (id) => { + const doc = DocConnection.load(id, sessionStoreAlice); + return doc.waitForDoc(); + }); + await async.timeout(1000); // TODO + await when(() => validator.validRefMessages.length > 0); + expect(validator.validRefMessages).to.have.length(1); + expect(validator.validRefMessages[0].source).to.equal( + fork.identifier.toString() + ); + }); +}); diff --git a/packages/editor/src/store/DocConnection.ts b/packages/editor/src/store/DocConnection.ts index 2ee3ffe53..502d38e0c 100644 --- a/packages/editor/src/store/DocConnection.ts +++ b/packages/editor/src/store/DocConnection.ts @@ -1,5 +1,5 @@ -import { createMatrixRoom } from "matrix-crdt"; import { + ObservableMap, computed, makeObservable, observable, @@ -8,26 +8,18 @@ import { when, } from "mobx"; import { lifecycle } from "vscode-lib"; -import { MatrixClientPeg } from "../app/matrix-auth/MatrixClientPeg"; import { BaseResource } from "./BaseResource"; -import { uri } from "vscode-lib"; import * as Y from "yjs"; -import { parseIdentifier, tryParseIdentifier } from "../identifiers"; -import { FileIdentifier } from "../identifiers/FileIdentifier"; -import { GithubIdentifier } from "../identifiers/GithubIdentifier"; -import { HttpsIdentifier } from "../identifiers/HttpsIdentifier"; +import { parseIdentifier } from "../identifiers"; import { Identifier } from "../identifiers/Identifier"; -import { MatrixIdentifier } from "../identifiers/MatrixIdentifier"; -import { getStoreService } from "./local/stores"; -import FetchSyncManager from "./yjs-sync/FetchSyncManager"; -import { YDocFileSyncManager } from "./yjs-sync/FilebridgeSyncManager"; -import GithubSyncManager from "./yjs-sync/GithubSyncManager"; -import { existsLocally, getIDBIdentifier } from "./yjs-sync/IDBHelper"; +import { TypeCellIdentifier } from "../identifiers/TypeCellIdentifier"; +import { InboxResource } from "./InboxResource"; +import { SessionStore } from "./local/SessionStore"; +import { ForkReference } from "./referenceDefinitions/fork"; import { SyncManager } from "./yjs-sync/SyncManager"; -import { YDocSyncManager } from "./yjs-sync/YDocSyncManager"; -const cache = new Map(); +const cache = new ObservableMap(); /** * Encapsulates a Y.Doc and exposes the Resource the Y.Doc represents @@ -37,55 +29,18 @@ export class DocConnection extends lifecycle.Disposable { private _refCount = 0; /** @internal */ - private manager: SyncManager | undefined = undefined; - private _baseResourceCache: - | undefined - | { - baseResource: BaseResource; - doc: Y.Doc; - }; - - // TODO: move to YDocSyncManager? - private clearAndInitializeManager(forkSourceIdentifier?: Identifier) { - runInAction(() => { - const sessionStore = getStoreService().sessionStore; - sessionStore.enableGuest(); - this._baseResourceCache = undefined; - this.manager?.dispose(); - this.manager = undefined; - if (this.identifier instanceof FileIdentifier) { - this.manager = new YDocFileSyncManager(this.identifier); - this.manager.initialize(); - } else if (this.identifier instanceof GithubIdentifier) { - this.manager = new GithubSyncManager(this.identifier); - this.manager.initialize(); - } else if (this.identifier instanceof HttpsIdentifier) { - this.manager = new FetchSyncManager(this.identifier); - this.manager.initialize(); - } else if (this.identifier instanceof MatrixIdentifier) { - if (typeof sessionStore.user !== "string") { - this.manager = new YDocSyncManager( - this.identifier, - sessionStore.user.matrixClient, - sessionStore.user.type === "matrix-user" - ? sessionStore.user.userId - : undefined, - forkSourceIdentifier - ); - this.manager.initialize(); - } - } else { - throw new Error("unsupported identifier"); - } - }); - } + private manager: SyncManager | undefined; + private _baseResourceCache: undefined | BaseResource; protected constructor( public readonly identifier: Identifier, - forkSourceIdentifier?: Identifier + syncManager: SyncManager, + private readonly sessionStore: SessionStore ) { super(); + this.manager = syncManager; + // add "manager" to satisfy TS as it's a private field // https://mobx.js.org/observable-state.html#limitations makeObservable(this, { @@ -95,16 +50,26 @@ export class DocConnection extends lifecycle.Disposable { manager: observable.ref, }); - let forked = false; const dispose = reaction( - () => getStoreService().sessionStore.user, - () => { - this.clearAndInitializeManager( - forked ? undefined : forkSourceIdentifier - ); - forked = true; + () => this.sessionStore.documentCoordinator, + async () => { + // console.log( + // "sessionstore change", + // this.sessionStore.documentCoordinator + // ); + + this._baseResourceCache = undefined; + this.manager?.dispose(); + let newManager: SyncManager | undefined = undefined; + + if (sessionStore.user && sessionStore.documentCoordinator) { + newManager = SyncManager.load(identifier, this.sessionStore); + } + runInAction(() => { + this.manager = newManager; + }); }, - { fireImmediately: true } + { fireImmediately: false } ); this._register({ @@ -124,17 +89,13 @@ export class DocConnection extends lifecycle.Disposable { } /** @internal */ - public get webrtcProvider() { - return this.manager; + public get awareness() { + // console.log("awareness", this.manager?.awareness); + return this.manager?.awareness; } - /** @internal */ - public get matrixProvider() { - if (this.manager instanceof YDocSyncManager) { - return this.manager.matrixProvider; - } else { - throw new Error("not supported"); - } + public get remote() { + return this.manager?.remote; } public get needsFork() { @@ -155,79 +116,99 @@ export class DocConnection extends lifecycle.Disposable { * @type {("loading" | "not-found" | BaseResource)} * @memberof DocConnection */ - public get doc() { + public get doc(): "loading" | "not-found" | BaseResource { if (!this.manager) { return "loading" as "loading"; } - const ydoc = this.manager.doc; + const ydoc = this.manager.docOrStatus; if (typeof ydoc === "string") { return ydoc; } - if (!this._baseResourceCache || this._baseResourceCache.doc !== ydoc) { - this._baseResourceCache = { - doc: ydoc, - baseResource: new BaseResource(ydoc, this), - }; + if (!this._baseResourceCache || this._baseResourceCache.ydoc !== ydoc) { + this._baseResourceCache = new BaseResource(ydoc, this.identifier, this); } - return this._baseResourceCache.baseResource; + return this._baseResourceCache; } public async revert() { - if (!(this.manager instanceof YDocSyncManager)) { - throw new Error("revert() only supported on YDocSyncManager"); - } - const manager = this.manager; - if (!manager) { - throw new Error("revert() called without manager"); - } - await manager.deleteLocalChanges(); - this.clearAndInitializeManager(); + const manager = await this.manager!.clearAndReload(); + runInAction(() => { + this.manager = manager; + }); } // TODO: fork github or file sources public async fork() { - if (!getStoreService().sessionStore.loggedInUserId) { - throw new Error("not logged in"); + if (!this.sessionStore.loggedInUserId) { + throw new Error("fork, but not logged in"); + } + + const doc = this.tryDoc; + if (!doc) { + throw new Error("fork, but no doc"); } - let tryN = 1; - - do { - // TODO - if (!(this.identifier instanceof MatrixIdentifier)) { - throw new Error("not implemented"); - } - // TODO: test - const newIdentifier = new MatrixIdentifier( - uri.URI.from({ - scheme: this.identifier.uri.scheme, - // TODO: use user authority, - path: - getStoreService().sessionStore.loggedInUserId + - "/" + - this.identifier.document + - (tryN > 1 ? "-" + tryN : ""), - }) + const connection = await DocConnection.createNewDocConnection( + this.sessionStore.getIdentifierForNewDocument(), + this.sessionStore, + doc.ydoc + ); + + await this.revert(); + + const forkDoc = await connection.waitForDoc(); + + await forkDoc.addRef(ForkReference, this.identifier); + return forkDoc; + } + + private static async createNewDocConnection( + identifier: Identifier, + sessionStore: SessionStore, + forkSource?: Y.Doc, + isInbox = false + ) { + const cacheKey = DocConnection.getCacheKey(sessionStore, identifier); + if (cache.has(cacheKey)) { + throw new Error("unexpected, doc already in cache"); + } + + if (!isInbox && identifier.toString().endsWith("/.inbox")) { + throw new Error("unexpected, inbox identifier"); + } + + if (!isInbox) { + const inboxIdentifier = parseIdentifier( + identifier.toString() + "/.inbox" + ); + const inboxConnection = await DocConnection.createNewDocConnection( + inboxIdentifier, + sessionStore, + undefined, + true ); - const result = await DocConnection.create(newIdentifier, this.identifier); + const doc = await inboxConnection.waitForDoc(); + doc.create("!inbox"); + doc.ydoc.getMap("inboxmeta").set("target", identifier.toString()); // TODO - // TODO: store fork info in document + // we can dispose immediately, bg manager is responsible for syncing the change + inboxConnection.dispose(); + } - if (result === "invalid-identifier") { - throw new Error("unexpected invalid-identifier when forking"); - } + const manager = SyncManager.create(identifier, sessionStore, forkSource); - if (result !== "already-exists") { - if (result instanceof BaseResource) { - } - return result; - } - tryN++; - } while (true); + const connection = new DocConnection( + manager.identifier, + manager, + sessionStore + ); + cache.set(cacheKey, connection); + connection.addRef(); + return connection; } public async waitForDoc() { @@ -241,82 +222,80 @@ export class DocConnection extends lifecycle.Disposable { return doc; } - // public async reinitialize() { - // console.log("reinitialize", this.identifier.id); - // runInAction(() => { - // this.doc = "loading"; - // }); - // this.manager.dispose(); - // await this.initializeNoCatch(); - // } - - public static async create( - id: string | { owner: string; document: string }, - forkSourceIdentifier?: Identifier - ) { - const sessionStore = getStoreService().sessionStore; - if (!sessionStore.loggedInUserId) { - throw new Error("no user available on create document"); - } - const identifier = tryParseIdentifier(id); + public loadInboxResource = (id: Identifier) => + DocConnection.loadInboxResource(id, this.sessionStore); - if (identifier === "invalid-identifier") { - return identifier; + public static async loadInboxResource( + id: Identifier, + sessionStore: SessionStore + ): Promise { + if (!(id instanceof TypeCellIdentifier)) { + throw new Error( + "unimplemented, only typecellidentifier supported for loadInboxResource" + ); } - - if (!(identifier instanceof MatrixIdentifier)) { - throw new Error("invalid identifier"); + if (id.toString().endsWith("/.inbox")) { + throw new Error("unexpected, inbox identifier"); } + // console.log("loadInboxResource", id.toString() + "/.inbox"); + const doc = DocConnection.load( + parseIdentifier(id.toString() + "/.inbox"), + sessionStore + ); + const ret = await doc.waitForDoc(); + const inbox = ret.getSpecificType(InboxResource as any); + return inbox; + } - // TODO: check authority - if (identifier.owner !== sessionStore.loggedInUserId) { - throw new Error("not authorized to create this document"); + // TODO: async or not? + public static async create(sessionStore: SessionStore) { + if (!sessionStore.loggedInUserId) { + // Note: can happen on sign up + console.warn( + "DocConnection: no loggedInUserId available on create document" + ); } - if ( - await existsLocally( - getIDBIdentifier(identifier.toString(), sessionStore.loggedInUserId) - ) - ) { - return "already-exists"; - } + const identifier = sessionStore.getIdentifierForNewDocument(); - // TODO (security): user2 can create a room @user1/doc - const remoteResult = await createMatrixRoom( - MatrixClientPeg.get(), - identifier.roomName, - "public-read" + // TODO: async or not? + const connection = await DocConnection.createNewDocConnection( + identifier, + sessionStore ); - if (remoteResult === "already-exists") { - return remoteResult; - } + return connection.waitForDoc(); + } - if (remoteResult === "offline" || remoteResult.status === "ok") { - // TODO: add to pending if "offline" - if (remoteResult === "offline") { - // create local-first - } - const connection = await DocConnection.load(id, forkSourceIdentifier); - return connection.waitForDoc(); + public static get( + identifier: string | Identifier, + sessionStore: SessionStore + ) { + if (!(identifier instanceof Identifier)) { + identifier = parseIdentifier(identifier); } - return remoteResult; + let connection = cache.get( + DocConnection.getCacheKey(sessionStore, identifier) + ); + return connection; } public static load( - identifier: string | { owner: string; document: string } | Identifier, - forkSourceIdentifier?: Identifier + identifier: string | Identifier, + sessionStore: SessionStore ) { - // TODO if (!(identifier instanceof Identifier)) { identifier = parseIdentifier(identifier); } - let connection = cache.get(identifier.toString()); + const cacheKey = DocConnection.getCacheKey(sessionStore, identifier); + let connection = cache.get(cacheKey); if (!connection) { - connection = new DocConnection(identifier, forkSourceIdentifier); - cache.set(identifier.toString(), connection); + const syncManager = SyncManager.load(identifier, sessionStore); + + connection = new DocConnection(identifier, syncManager, sessionStore); + cache.set(cacheKey, connection); } connection.addRef(); return connection; @@ -339,9 +318,19 @@ export class DocConnection extends lifecycle.Disposable { this._baseResourceCache = undefined; this.manager?.dispose(); - this.manager = undefined; - cache.delete(this.identifier.toString()); + cache.delete(this.getCacheKey()); this.disposed = true; } } + + private getCacheKey() { + return DocConnection.getCacheKey(this.sessionStore, this.identifier); + } + + private static getCacheKey( + sessionStore: SessionStore, + identifier: Identifier + ) { + return sessionStore.userPrefix + identifier.toString(); + } } diff --git a/packages/editor/src/store/DocumentResource.ts b/packages/editor/src/store/DocumentResource.ts index cf32e0e09..3f9b3941a 100644 --- a/packages/editor/src/store/DocumentResource.ts +++ b/packages/editor/src/store/DocumentResource.ts @@ -1,24 +1,59 @@ import * as _ from "lodash"; import type * as Y from "yjs"; +import { Identifier } from "../identifiers/Identifier"; import { CellListModel } from "../models/CellListModel"; -import { BaseResource } from "./BaseResource"; -import { DocConnection } from "./DocConnection"; +import { CellModel } from "../models/CellModel"; +import { + BaseResource, + BaseResourceExternalManager, + UnimplementedBaseResourceExternalManager, +} from "./BaseResource"; /** * A resource with multiple cells, used for either the Notebook or Richtext built-in types */ export class DocumentResource extends BaseResource { /** @internal */ - constructor(ydoc: Y.Doc, connection: DocConnection) { - super(ydoc, connection); + constructor( + ydoc: Y.Doc, + identifier: Identifier, + manager: BaseResourceExternalManager = UnimplementedBaseResourceExternalManager + ) { + super(ydoc, identifier, manager); if (this.type !== "!notebook" && this.type !== "!richtext") { throw new Error("invalid type for DocumentResource"); } } - /** @internal */ - public get title(): Y.Text { - return this.ydoc.getText("title"); + public get title(): string | undefined { + const baseTitle = super.title; + if (baseTitle) { + return baseTitle; + } + + if (this.type === "!richtext") { + if ( + (this.data.firstChild as any)?.firstChild?.firstChild?.nodeName === + "heading" + ) { + //hacky + return (this.data.firstChild as any)?.firstChild?.firstChild?.firstChild + ?.toString() + .trim(); + } + return undefined; + } + let cell = this.cells[0]; + if (!cell || cell.language !== "markdown") { + return undefined; + } + + const match = cell.code.toJSON().match(/^# (.*)$/m); + if (match) { + return match[1].trim(); + } + + return undefined; } /** @internal */ @@ -41,6 +76,22 @@ export class DocumentResource extends BaseResource { } public get cells() { + if (this.type === "!richtext") { + return this.blockCells; + } return this.cellList.cells; } + + public get blockCells(): CellModel[] { + const container = this.data.firstChild! as Y.XmlElement; + + const codeBlocks = container.toArray().filter((val) => { + return (val as any).firstChild?.nodeName === "codeNode"; + }) as Y.XmlElement[]; + + return codeBlocks.map((codeBlock) => { + const id = codeBlock.getAttribute("id"); + return new CellModel(this.id, codeBlock.firstChild as Y.XmlElement, id); + }); + } } diff --git a/packages/editor/src/store/InboxResource.ts b/packages/editor/src/store/InboxResource.ts new file mode 100644 index 000000000..3c7c66004 --- /dev/null +++ b/packages/editor/src/store/InboxResource.ts @@ -0,0 +1,93 @@ +import * as Y from "yjs"; +import { Identifier } from "../identifiers/Identifier"; +import { + BaseResource, + BaseResourceExternalManager, + UnimplementedBaseResourceExternalManager, +} from "./BaseResource"; +import { ReferenceDefinition } from "./Ref"; + +export type RefInboxMessage = { + message_type: "ref"; + id: string; + namespace: T["namespace"]; + type: T["type"]; + source: string; + clock: string; +}; + +// TODO: make sure inbox is an append-only array +export class InboxResource extends BaseResource { + /** @internal */ + constructor( + ydoc: Y.Doc, + identifier: Identifier, + manager: BaseResourceExternalManager = UnimplementedBaseResourceExternalManager + ) { + super(ydoc, identifier, manager); + if (this.type !== "!inbox") { + throw new Error("invalid type for InboxResource: " + this.type); + } + } + + public get inboxTarget() { + const ret = this.ydoc.getMap("inboxmeta").get("target"); + if (typeof ret !== "string" || !ret) { + throw new Error("invalid inbox target"); + } + return ret; + } + + public set inboxTarget(target: string) { + if (this.ydoc.getMap("inboxmeta").get("target")) { + // TODO: listen for this and prevent updates that do this + throw new Error("cannot change inbox target"); + } + this.ydoc.getMap("inboxmeta").set("target", target); + } + + /** @internal */ + public get inbox(): Y.Array> { + return this.ydoc.getArray("inbox"); + } + + public getRefMessages(referenceDefinition: T) { + const messages: RefInboxMessage[] = []; + + this.inbox.forEach((item: { [key: string]: unknown }) => { + if (item.message_type !== "ref") { + return; + } + + if (item.namespace !== referenceDefinition.namespace) { + return; + } + + if (item.type !== referenceDefinition.type) { + return; + } + + if (typeof item.id !== "string" || !item.id) { + return; + } + + if (typeof item.source !== "string" || !item.source) { + return; + } + + if (typeof item.clock !== "string" || !item.clock) { + return; + } + + messages.push({ + message_type: item.message_type, + id: item.id, + namespace: item.namespace, + type: item.type, + source: item.source, + clock: item.clock, + }); + }); + return messages; + } +} diff --git a/packages/editor/src/store/InboxValidatorStore.ts b/packages/editor/src/store/InboxValidatorStore.ts new file mode 100644 index 000000000..040a5f1b4 --- /dev/null +++ b/packages/editor/src/store/InboxValidatorStore.ts @@ -0,0 +1,163 @@ +import { autorun } from "mobx"; +import { lifecycle } from "vscode-lib"; +import * as Y from "yjs"; +import { UnreachableCaseError } from "../util/UnreachableCaseError"; +import { BaseResource } from "./BaseResource"; +import { InboxResource, RefInboxMessage } from "./InboxResource"; +import { ReferenceDefinition } from "./Ref"; + +/* + * References are bi-directional links between documents. + * They are stored in one Resource (the source) and point to another Resource (the target). + * Any document also has a public append-only inbox where other documents can send messages. + * This inbox is used to store "back"-references. + * + * This system is used so that access control is governed by the source document, but anyone can post "backreferences" to a target document + + * This class is responsible for validating ref-messages (backreferences) in the public inbox of a resource. + * + * It validates messages by: + * - checking if the message type / reference is valid + * - loading the source document where the ref should be stored, and wait to make sure that it's up to date (has the document "update" indicated by the clock in the message) + * - checking if the source document has the ref was indicated by the message + * + * An invalid message can either be caused by: + * - a malformated message + * - an "illegal message": a message was posted to the inbox, but the original ref was not ("legally") created + * - a subsumed message: the original ref doesn't exist anymore or has been replaced + * */ +export class InboxValidator< + T extends ReferenceDefinition +> extends lifecycle.Disposable { + // 3 message states: valid, invalid, pending + // - a message cannot transition from invalid to any other state + // - a message can transition from pending to valid or invalid + // - a message can transition from valid to invalid, for example if a reference has been changed / removed + + private readonly invalidMessages = new Set(); + private readonly validMessages = new Set(); + private readonly pendingMessages = new Set(); + + // TODO: store this somewhere locally + private readonly seenMessages = new Set(); + + private readonly documentDisposers = new Map void>(); + + /** @internal */ + constructor( + private readonly inbox: InboxResource, + private referenceDefinition: T, + loader: (idString: string) => Promise + ) { + super(); + const dispose = autorun(() => { + this.allRefMessages.forEach(async (message) => { + // console.log("message", message); + if (this.seenMessages.has(message.id)) { + return; + } + this.seenMessages.add(message.id); + this.pendingMessages.add(message.id); + + const resource = await loader(message.source); + const handler = () => { + this.updateMessageStateFromResource(message, resource); + }; + resource.ydoc.on("update", handler); + handler(); // initial check + this.documentDisposers.set(message.id, () => { + resource.ydoc.off("update", handler); + resource.dispose(); + }); + }); + }); + + this._register({ + dispose, + }); + + this._register({ + dispose: () => { + this.documentDisposers.forEach((dispose) => dispose()); + }, + }); + } + + private updateMessageStateFromResource( + message: RefInboxMessage, + resource: BaseResource + ) { + if (this.invalidMessages.has(message.id)) { + throw new Error("invalid should not be checked anymore"); + } + + const result = this.ValidateRefMessage(message, resource); + if (result === true) { + // transition from pending to valid + // or keep from valid to valid (in case it was already validated the lines below are no-ops) + this.validMessages.add(message.id); + this.pendingMessages.delete(message.id); + } else if (result === "wait") { + // do nothing + } else if (result === false) { + // transition from pending or valid to invalid + this.invalidMessages.add(message.id); + this.pendingMessages.delete(message.id); + this.validMessages.delete(message.id); + this.documentDisposers.get(message.id)?.(); + this.documentDisposers.delete(message.id); + } else { + throw new UnreachableCaseError(result); + } + } + + private ValidateRefMessage( + message: RefInboxMessage, + resource: BaseResource + ) { + if (message.message_type !== "ref") { + throw new Error("invalid inbox message (ref)"); + } + const [client, clock] = message.clock.split(":"); + let clockNum = parseInt(clock); + let clientNum = parseInt(client); + if (isNaN(clockNum) || isNaN(clientNum)) { + throw new Error("invalid inbox message (clock / client)"); + } + + const state = Y.getState(resource.ydoc.store, clientNum); + if (state < clockNum) { + // we need to wait for the document to be updated + console.log("wait"); + return "wait"; + } + + const ref = resource.getRef( + this.referenceDefinition, + this.inbox.inboxTarget + ); + if (!ref || ref.target !== this.inbox.inboxTarget) { + // console.log("invalid", ref?.target, this.inbox.inboxTarget); + return false; + } + // console.log("valid", ref.target, this.inbox.inboxTarget); + return true; + } + + /** + * This is the list of all ref messages of type referenceDefinition that are currently in the inbox. + */ + private get allRefMessages() { + // console.log("serialize", this.inbox.ydoc.toJSON()); + return this.inbox.getRefMessages(this.referenceDefinition); + } + + /** + * This is the list of all ref messages of type referenceDefinition that are in the inbox and are valid + */ + public get validRefMessages() { + return this.allRefMessages.filter((item) => + this.validMessages.has(item.id) + ); + } +} diff --git a/packages/editor/src/store/PluginResource.ts b/packages/editor/src/store/PluginResource.ts index e4d042ac2..3e0080ee3 100644 --- a/packages/editor/src/store/PluginResource.ts +++ b/packages/editor/src/store/PluginResource.ts @@ -1,7 +1,11 @@ import type * as Y from "yjs"; import { NotebookCellModel } from "../app/documentRenderers/notebook/NotebookCellModel"; import { Identifier } from "../identifiers/Identifier"; -import { BaseResource, BaseResourceConnection } from "./BaseResource"; +import { + BaseResource, + BaseResourceExternalManager, + UnimplementedBaseResourceExternalManager, +} from "./BaseResource"; /** * A Resource defining a plugin. Plugins have a description and a single cell with code, @@ -9,8 +13,12 @@ import { BaseResource, BaseResourceConnection } from "./BaseResource"; */ export default class PluginResource extends BaseResource { /** @internal */ - constructor(ydoc: Y.Doc, connection: BaseResourceConnection | Identifier) { - super(ydoc, connection as any); // TODO + constructor( + ydoc: Y.Doc, + identifier: Identifier, + manager: BaseResourceExternalManager = UnimplementedBaseResourceExternalManager + ) { + super(ydoc, identifier, manager); if (this.type !== "!plugin") { throw new Error("invalid type for PluginResource"); } diff --git a/packages/editor/src/store/ProfileResource.ts b/packages/editor/src/store/ProfileResource.ts new file mode 100644 index 000000000..38434c305 --- /dev/null +++ b/packages/editor/src/store/ProfileResource.ts @@ -0,0 +1,43 @@ +import type * as Y from "yjs"; +import { Identifier } from "../identifiers/Identifier"; +import { + BaseResource, + BaseResourceExternalManager, + UnimplementedBaseResourceExternalManager, +} from "./BaseResource"; + +/** + * A Resource defining a user / organization profile + */ +export default class ProfileResource extends BaseResource { + /** @internal */ + constructor( + ydoc: Y.Doc, + identifier: Identifier, + manager: BaseResourceExternalManager = UnimplementedBaseResourceExternalManager + ) { + super(ydoc, identifier, manager); + if (this.type !== "!profile") { + throw new Error("invalid type for ProfileResource"); + } + } + + public get username(): string { + return this.ydoc.getMap("profile").get("username") as string; + } + + public set username(value: string) { + this.ydoc.getMap("profile").set("username", value); + } + + public get title(): string { + return "@" + this.username; + } + + // TODO: if profile is public, then we can currently see the names of all workspaces + public get workspaces() { + const ret = this.ydoc.getMap("workspaces"); + + return ret; + } +} diff --git a/packages/editor/src/store/ProjectResource.ts b/packages/editor/src/store/ProjectResource.ts index d7a2774b1..a67cbeada 100644 --- a/packages/editor/src/store/ProjectResource.ts +++ b/packages/editor/src/store/ProjectResource.ts @@ -1,6 +1,10 @@ import type * as Y from "yjs"; import { Identifier } from "../identifiers/Identifier"; -import { BaseResource, BaseResourceConnection } from "./BaseResource"; +import { + BaseResource, + BaseResourceExternalManager, + UnimplementedBaseResourceExternalManager, +} from "./BaseResource"; /** * A Resource defining a project directory @@ -9,9 +13,10 @@ export default class ProjectResource extends BaseResource { /** @internal */ constructor( ydoc: Y.Doc, - connectionOrIdentifier: BaseResourceConnection | Identifier + identifier: Identifier, + manager: BaseResourceExternalManager = UnimplementedBaseResourceExternalManager ) { - super(ydoc, connectionOrIdentifier as any); // TODO + super(ydoc, identifier, manager); if (this.type !== "!project") { throw new Error("invalid type for PluginResource"); } diff --git a/packages/editor/src/store/Ref.ts b/packages/editor/src/store/Ref.ts index 961781079..2a206de2c 100644 --- a/packages/editor/src/store/Ref.ts +++ b/packages/editor/src/store/Ref.ts @@ -1,36 +1,56 @@ +import { generateId } from "@typecell-org/common/src/uniqueId"; import { hash } from "../util/hash"; -export function createRef( - definition: ReferenceDefinition, +export function createRef( + definition: T, targetId: string, sortKey?: string -): Ref { - if ( - definition.relationship.type === "many" && - definition.relationship.sorted && - !sortKey - ) { +): Ref { + if (definition.relationship === "many" && definition.sorted && !sortKey) { throw new Error("expected sortKey"); } - return { - namespace: definition.namespace, - type: definition.type, - target: targetId, - sortKey, - }; + if (definition.relationship === "unique" || !definition.sorted) { + if (sortKey) { + throw new Error("unexpected sortKey"); + } + let ref: Ref = { + id: generateId("reference"), + namespace: definition.namespace, + type: definition.type, + target: targetId, + } as any; // TODO: fix type + return ref; + } else { + if (!sortKey) { + throw new Error("expected sortKey"); + } + let ref: Ref = { + id: generateId("reference"), + namespace: definition.namespace, + type: definition.type, + target: targetId, + sortKey, + } as any; // TODO: fix type + return ref; + } } -export type Ref = { - namespace: string; - type: string; +export type Ref = { + id: string; + namespace: T["namespace"]; + type: T["type"]; target: string; - sortKey?: string; + sortKey: T extends ManyReferenceDefinition + ? T["sorted"] extends true + ? string + : never + : never; }; -export function validateRef( +export function validateRef( obj: any, - referenceDefinition?: ReferenceDefinition -): obj is Ref { + referenceDefinition?: T +): obj is Ref { if (!obj.namespace || !obj.target || !obj.type) { throw new Error("invalid ref"); } @@ -42,8 +62,8 @@ export function validateRef( throw new Error("reference not matching definition"); } if ( - referenceDefinition.relationship.type === "many" && - referenceDefinition.relationship.sorted + referenceDefinition.relationship === "many" && + referenceDefinition.sorted ) { if (!obj.sortKey) { throw new Error("no sortkey found"); @@ -57,19 +77,25 @@ export function validateRef( return true; } -export function getSortedRef(obj: { +export type UniqueReferenceDefinition = { + /** + * Owner of the schema + * e.g.: "@yousefed/document" + */ namespace: string; + /** + * Type of the relation + * e.g.: "child", "parent", "mention" + */ type: string; - target: string; - sortKey: string; -}) { - if (!obj.namespace || !obj.target || !obj.type || !obj.sortKey) { - throw new Error("invalid ref"); - } - return obj; -} -export type ReferenceDefinition = { + /* + * a document can have only have a reference of this type to a single document + */ + relationship: "unique"; +}; + +export type ManyReferenceDefinition = { /** * Owner of the schema * e.g.: "@yousefed/document" @@ -81,23 +107,21 @@ export type ReferenceDefinition = { */ type: string; - /** - * e.g.: - * - "parent" is unique, a document can only have 1 parent - * - "child" is not unique, a document can have multiple parents + /* + * a document can have multiple references of this type to different documents */ - relationship: { type: "unique" } | { type: "many"; sorted: boolean }; + relationship: "many"; - /** - * Information needed to get the Reference stored in the "other" document - * (e.g., map from "child" to "parent" and vice versa) + /* + * if true, the references are sorted by a sortKey fractional index */ - reverseInfo: { - relationship: { type: "unique" } | { type: "many"; sorted: boolean }; - type: string; - }; + sorted: boolean; }; +export type ReferenceDefinition = + | UniqueReferenceDefinition + | ManyReferenceDefinition; + export function getHashForReference( definition: ReferenceDefinition, targetId: string @@ -105,7 +129,7 @@ export function getHashForReference( // uniqueness by namespace + type let hashcode = hash(definition.namespace) ^ hash(definition.type); - if (definition.relationship.type === "many") { + if (definition.relationship === "many") { // If many of the namspace/type relations can exists // add uniqueness by targetId hashcode = hashcode ^ hash(targetId); @@ -113,32 +137,45 @@ export function getHashForReference( return hashcode + ""; } -export function reverseReferenceDefinition( - definition: ReferenceDefinition +// export function reverseReferenceDefinition( +// definition: ReferenceDefinition +// ): ReferenceDefinition { +// return { +// ...definition, +// ...definition.reverseInfo, +// reverseInfo: { +// type: definition.type, +// relationship: definition.relationship, + +// }, +// }; +// } + +export function createOneToManyReferenceDefinition( + namespace: string, + type: string ): ReferenceDefinition { return { - ...definition, - ...definition.reverseInfo, - reverseInfo: { - type: definition.type, - relationship: definition.relationship, - }, + namespace, + type, + relationship: "unique", }; } -export function createOneToManyReferenceDefinition( +export function createManyToManyReferenceDefinition( namespace: string, type: string, - reverseType: string, + // reverseType: string, sorted: boolean ): ReferenceDefinition { return { namespace, type, - relationship: { type: "many", sorted }, - reverseInfo: { - type: reverseType, - relationship: { type: "unique" }, - }, + relationship: "many", + sorted, + // reverseInfo: { + // type: reverseType, + // relationship: { type: "many" }, + // }, }; } diff --git a/packages/editor/src/store/local/SessionStore.ts b/packages/editor/src/store/local/SessionStore.ts index 20f962590..c486b8b86 100644 --- a/packages/editor/src/store/local/SessionStore.ts +++ b/packages/editor/src/store/local/SessionStore.ts @@ -1,41 +1,37 @@ -import { MatrixClient } from "matrix-js-sdk"; -import { computed, makeObservable, observable, runInAction } from "mobx"; -import { arrays, lifecycle } from "vscode-lib"; -import { MatrixAuthStore } from "../../app/matrix-auth/MatrixAuthStore"; -import { MatrixClientPeg } from "../../app/matrix-auth/MatrixClientPeg"; -import { getUserFromMatrixId } from "../../util/userIds"; - -const colors = [ - "#958DF1", - "#F98181", - "#FBBC88", - "#FAF594", - "#70CFF8", - "#94FADB", - "#B9F18D", -]; +import { + computed, + makeObservable, + observable, + reaction, + runInAction, +} from "mobx"; +import { lifecycle } from "vscode-lib"; +import { Identifier } from "../../identifiers/Identifier"; +import { BackgroundSyncer } from "../BackgroundSyncer"; +import { AliasCoordinator } from "../yjs-sync/AliasCoordinator"; +import { DocumentCoordinator } from "../yjs-sync/DocumentCoordinator"; /** * The sessionStore keeps track of user related data * (e.g.: is the user logged in, what is the user name, etc) */ -export class SessionStore extends lifecycle.Disposable { - private initialized = false; - public userColor = arrays.getRandomElement(colors)!; +export abstract class SessionStore extends lifecycle.Disposable { + public abstract storePrefix: string; - public user: + public abstract userColor: string; + + // MUST be implemented as Observable + public abstract user: | "loading" | "offlineNoUser" | { type: "guest-user"; - matrixClient: MatrixClient; } | { - type: "matrix-user"; + type: "user"; fullUserId: string; userId: string; - matrixClient: MatrixClient; - } = "loading"; + }; /** * returns a logged in user or a guest user when available @@ -46,115 +42,106 @@ export class SessionStore extends lifecycle.Disposable { } /** - * returns true if the user is logged in to his own matrix identity. + * returns true if the user is logged in to his / her own identity. * returns false if only a guest user or no user is available. * - * Note that this definition of loggedin is different than in the Matrix-related code, - * in Matrix code (e.g. MatrixAuthStore.loggedIn), a guest user is also considered logged in ("as guest") + * MUST be implemented as Observable (computed) */ - public get isLoggedIn() { - return typeof this.user !== "string" && this.user.type === "matrix-user"; - } + public abstract get isLoggedIn(): boolean; + + public abstract get isLoaded(): boolean; /** * Returns the userId (e.g.: @bret) when logged in, undefined otherwise */ - public get loggedInUserId() { - return typeof this.user !== "string" && this.user.type === "matrix-user" - ? this.user.userId - : undefined; - } + public abstract get loggedInUserId(): string | undefined; - public logout = async () => { - if (!this.isLoggedIn) { - throw new Error("can't logout when not logged in"); - } - await this.matrixAuthStore.logout(); + public abstract logout: () => Promise; - // after logging out, call initialize() to sign in as a guest - await this.matrixAuthStore.initialize(true); - }; + public abstract initialize(): Promise; - constructor(private matrixAuthStore: MatrixAuthStore) { + public abstract getIdentifierForNewDocument(): Identifier; + + constructor() { super(); makeObservable(this, { - user: observable.ref, - isLoggedIn: computed, + documentCoordinator: computed, + aliasCoordinator: computed, + userPrefix: computed, + coordinators: observable.ref, }); } - // TODO: should be a reaction to prevent calling twice? - public async enableGuest() { - if (!this.initialized) { - throw new Error( - "enableGuest should only be called after being initialized" - ); - } - - if (this.user === "offlineNoUser") { - await this.matrixAuthStore.initialize(true); - } - } + protected initializeReactions() { + const dispose = reaction( + () => this.userPrefix, + () => { + // console.log(new Date(), "change coordinators", this.userPrefix, "\n\n"); + const userPrefix = this.userPrefix; + if (this.coordinators?.userPrefix === userPrefix) { + return; + } - public async initialize() { - if (this.initialized) { - throw new Error("initialize() called when already initialized"); - } - try { - // returns true when: - // - successfully created / restored a user (or guest) - // returns false when: - // - failed restore / create user (e.g.: wanted to register a guest, but offline) - // throws error when: - // - unexpected - await this.matrixAuthStore.initialize(false); - // catch future login state changes triggered by the sdk - this._register( - this.matrixAuthStore.onLoggedInChanged(() => { - this.updateStateFromAuthStore().catch((e) => { - console.error("error initializing sessionstore", e); + this.coordinators?.coordinator.dispose(); + this.coordinators?.aliasStore.dispose(); + this.coordinators?.backgroundSyncer.dispose(); + runInAction(() => { + this.coordinators = undefined; + }); + + if (!userPrefix) { + return; + } + + (async () => { + const coordinator = new DocumentCoordinator(userPrefix); + const coordinators = { + userPrefix, + coordinator: coordinator, + aliasStore: new AliasCoordinator(userPrefix), + backgroundSyncer: new BackgroundSyncer(coordinator, this), + }; + await coordinators.coordinator.initialize(); + await coordinators.aliasStore.initialize(); + await coordinators.backgroundSyncer.initialize(); + runInAction(() => { + if (this.userPrefix === userPrefix) { + // console.log("set coordinators", userPrefix); + this.coordinators = coordinators; + } }); - }) - ); - this.updateStateFromAuthStore(); - - this.initialized = true; - } catch (err) { - // keep state as "loading" - console.error("error loading session from matrix", err); - } + })(); + }, + { fireImmediately: true } + ); + + this._register({ + dispose, + }); } - /** - * Updates the state of sessionStore based on the internal matrixAuthStore.loggedIn - */ - private async updateStateFromAuthStore() { - if (this.matrixAuthStore.loggedIn) { - const matrixClient = MatrixClientPeg.get(); + public get userPrefix() { + return typeof this.user === "string" + ? undefined + : this.user.type === "guest-user" + ? `user-${this.storePrefix}-guest` + : `user-${this.storePrefix}-${this.user.fullUserId}`; + } - if (matrixClient.isGuestAccount) { - runInAction(() => { - this.user = { - type: "guest-user", - matrixClient, - }; - }); - } else { - // signed in as a real user - runInAction(() => { - this.user = { - type: "matrix-user", - matrixClient, - userId: getUserFromMatrixId(matrixClient.getUserId() as string) - .localUserId, - fullUserId: matrixClient.getUserId(), // TODO: nicer to remove make userId represent the full matrix id instead of having a separate property - }; - }); + public coordinators: + | { + userPrefix: string; + coordinator: DocumentCoordinator; + aliasStore: AliasCoordinator; + backgroundSyncer: BackgroundSyncer; } - } else { - runInAction(() => { - this.user = "offlineNoUser"; - }); - } + | undefined = undefined; + + public get documentCoordinator() { + return this.coordinators?.coordinator; + } + + public get aliasCoordinator() { + return this.coordinators?.aliasStore; } } diff --git a/packages/editor/src/store/local/navigationStore.ts b/packages/editor/src/store/local/navigationStore.ts deleted file mode 100644 index 793d364e4..000000000 --- a/packages/editor/src/store/local/navigationStore.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IObservableArray, makeObservable, observable } from "mobx"; -import { SessionStore } from "./SessionStore"; - -export class NavigationStore { - // See MenuPortal.tsx for explanation - public menuPortalChildren: { children: IObservableArray }[] = []; - - constructor(private sessionStore: SessionStore) { - makeObservable(this, { - menuPortalChildren: observable.shallow, - }); - } -} diff --git a/packages/editor/src/store/local/pluginStore.ts b/packages/editor/src/store/local/pluginStore.ts deleted file mode 100644 index 66666f6fb..000000000 --- a/packages/editor/src/store/local/pluginStore.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { observable } from "mobx"; -import { DocConnection } from "../DocConnection"; -import PluginResource from "../PluginResource"; - -class PluginStore { - private _plugins = observable.map(undefined, { - deep: false, - }); - - // constructor() { - // makeObservable(this, { - // plugins: observable.shallow, - // }); - // } - - public loadPlugin(id: string) { - if (!this._plugins.has(id)) { - this._plugins.set(id, DocConnection.load(id)); - } - } - - public get plugins() { - const ret = new Set(); - this._plugins.forEach((val) => { - const doc = val.tryDoc; - if (!doc) { - // loading - return; - } - if (doc.type) { - if (doc.type === "!plugin") { - ret.add(doc.getSpecificType(PluginResource)!); - } else { - throw new Error("unexpected, loaded plugin document of wrong type"); - } - } - }); - return ret; - } -} - -export const pluginStore = new PluginStore(); -// pluginStore.loadPlugin("@yousefed/projectplugin"); diff --git a/packages/editor/src/store/local/stores.ts b/packages/editor/src/store/local/stores.ts deleted file mode 100644 index 040bed5c7..000000000 --- a/packages/editor/src/store/local/stores.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { MatrixAuthStore } from "../../app/matrix-auth/MatrixAuthStore"; -import { NavigationStore } from "./navigationStore"; -import { SessionStore } from "./SessionStore"; - -class StoreService { - public matrixAuthStore = new MatrixAuthStore(); - public sessionStore = new SessionStore(this.matrixAuthStore); - public navigationStore = new NavigationStore(this.sessionStore); -} - -let storeService: StoreService | undefined; - -export async function initializeStoreService() { - storeService = new StoreService(); - await storeService.sessionStore.initialize(); -} - -export function getStoreService() { - if (!storeService) { - throw new Error("store service not initialized"); - } - return storeService; -} - -// autorun(() => { -// YDocSyncManager.matrixClient = -// typeof sessionStore.user === "string" -// ? undefined -// : sessionStore.user.matrixClient; -// }); diff --git a/packages/editor/src/store/referenceDefinitions/child.ts b/packages/editor/src/store/referenceDefinitions/child.ts new file mode 100644 index 000000000..670bb33ff --- /dev/null +++ b/packages/editor/src/store/referenceDefinitions/child.ts @@ -0,0 +1,7 @@ +import { createManyToManyReferenceDefinition } from "../Ref"; + +export const ChildReference = createManyToManyReferenceDefinition( + "typecell", + "hasChild", + true +); diff --git a/packages/editor/src/store/referenceDefinitions/fork.ts b/packages/editor/src/store/referenceDefinitions/fork.ts new file mode 100644 index 000000000..ad9234287 --- /dev/null +++ b/packages/editor/src/store/referenceDefinitions/fork.ts @@ -0,0 +1,6 @@ +import { createOneToManyReferenceDefinition } from "../Ref"; + +export const ForkReference = createOneToManyReferenceDefinition( + "typecell", + "forkOf" +); diff --git a/packages/editor/src/store/yjs-sync/AliasCoordinator.ts b/packages/editor/src/store/yjs-sync/AliasCoordinator.ts new file mode 100644 index 000000000..23c774923 --- /dev/null +++ b/packages/editor/src/store/yjs-sync/AliasCoordinator.ts @@ -0,0 +1,37 @@ +import { makeYDocObservable } from "@syncedstore/yjs-reactive-bindings"; +import { lifecycle } from "vscode-lib"; +import { IndexeddbPersistence } from "y-indexeddb"; +import * as Y from "yjs"; + +export class AliasCoordinator extends lifecycle.Disposable { + private readonly doc: Y.Doc; + private readonly indexedDBProvider: IndexeddbPersistence; + + constructor(private readonly userId: string) { + super(); + this.doc = new Y.Doc(); + makeYDocObservable(this.doc); + this.indexedDBProvider = new IndexeddbPersistence( + userId + "-aliases", + this.doc + ); + + this._register({ + dispose: () => { + this.doc.destroy(); + }, + }); + } + + public async initialize() { + await this.indexedDBProvider.whenSynced; + } + + public get aliases() { + if (!this.indexedDBProvider.synced) { + console.warn("aliases not initialized"); + // throw new Error("not initialized"); + } + return this.doc.getMap("aliases"); + } +} diff --git a/packages/editor/src/store/yjs-sync/DocumentCoordinator.ts b/packages/editor/src/store/yjs-sync/DocumentCoordinator.ts new file mode 100644 index 000000000..e9828b111 --- /dev/null +++ b/packages/editor/src/store/yjs-sync/DocumentCoordinator.ts @@ -0,0 +1,229 @@ +import { makeYDocObservable } from "@syncedstore/yjs-reactive-bindings"; +import { lifecycle } from "vscode-lib"; +import { IndexeddbPersistence } from "y-indexeddb"; +import * as Y from "yjs"; +import { Identifier } from "../../identifiers/Identifier"; + +export type LocalDoc = { + ydoc: Y.Doc; + meta: DocumentInfo; + idbProvider: IndexeddbPersistence; +}; + +export type DocumentInfo = { + id: string; + created_at: Date; + create_source: "local" | "remote"; + exists_at_remote: boolean; + needs_save_since: Date | undefined; +}; + +export class DocumentCoordinator extends lifecycle.Disposable { + private loadedDocuments = new Map(); + + private readonly doc: Y.Doc; + private readonly indexedDBProvider: IndexeddbPersistence; + + constructor(private readonly userId: string) { + super(); + this.doc = new Y.Doc(); + makeYDocObservable(this.doc); + this.indexedDBProvider = new IndexeddbPersistence( + userId + "-coordinator", + this.doc + ); + + this._register({ + dispose: () => { + this.doc.destroy(); + }, + }); + } + + public async initialize() { + await this.indexedDBProvider.whenSynced; + } + + /** + * Return all info on documents that we have in our local-first storage + */ + public get documents() { + if (!this.indexedDBProvider.synced) { + throw new Error("not initialized"); + } + return this.doc.getMap("documents"); + } + + /** + * Create and register a new document in our local store + */ + public async createDocument( + identifier: Identifier, + targetYDoc: Y.Doc + ): Promise { + const idStr = identifier.toString(); + if (!this.indexedDBProvider.synced) { + throw new Error("not initialized"); + } + if (this.documents.has(idStr) || this.loadedDocuments.has(idStr)) { + throw new Error("createDocument: document already exists"); + } + + const meta: DocumentInfo = { + id: idStr, + created_at: new Date(), + create_source: "local", + needs_save_since: new Date(), + exists_at_remote: false, + }; + + this.documents.set(idStr, meta); + + const ret = this.loadDocument(identifier, targetYDoc); + if (ret === "not-found") { + // can't happen, because it's just been created + throw new Error("createDocument: document not found"); + } + return ret; + } + + /** + * Create a document in local storage that has been retrieved from a Remote + */ + public createDocumentFromRemote( + identifier: Identifier, + targetYDoc: Y.Doc + ): LocalDoc { + const idStr = identifier.toString(); + if (!this.indexedDBProvider.synced) { + throw new Error("not initialized"); + } + if (this.documents.has(idStr) || this.loadedDocuments.has(idStr)) { + throw new Error("createDocument: document already exists"); + } + + const meta: DocumentInfo = { + id: idStr, + created_at: new Date(), + create_source: "remote", + needs_save_since: undefined, + exists_at_remote: true, + }; + + this.documents.set(idStr, meta); + + const ret = this.loadDocument(identifier, targetYDoc); + if (ret === "not-found") { + // can't happen, because it's just been created + throw new Error("createDocumentFromRemote: document not found"); + } + return ret; + } + + /** + * Load a local document if we have it in local storage + * Otherwise return "not-found" + */ + public loadDocument( + identifier: Identifier, + targetYDoc: Y.Doc + ): LocalDoc | "not-found" { + const idStr = identifier.toString(); + if (!this.indexedDBProvider.synced) { + throw new Error("not initialized"); + } + + if (this.loadedDocuments.has(idStr)) { + // we expect loadDocument only to be called once per document + throw new Error("loadDocument: document already loaded"); + } + + const meta = this.documents.get(idStr); + + if (!meta) { + return "not-found"; + } + + targetYDoc.on("update", (_update, origin) => { + // for indexeddb, origin is null + // for typecell (hocuspocus) or matrix, origin has .isRemote = true + if (!origin || origin.isRemote) { + return; + } + // mark change + const meta = this.documents.get(idStr); + + if (!meta) { + throw new Error("document meta not found"); + } + + if (meta.needs_save_since === undefined) { + meta.needs_save_since = new Date(); + this.documents.set(idStr, meta); + } + }); + + const idbProvider = new IndexeddbPersistence( + this.userId + "-doc-" + idStr, + targetYDoc + ); + + const doc: LocalDoc = { + ydoc: targetYDoc, + meta, + idbProvider, + }; + + targetYDoc.on("destroy", () => { + this.loadedDocuments.delete(idStr); + }); + + this.loadedDocuments.set(idStr, doc); + return doc; + } + + /** + * Delete a document from our local storage + */ + public async deleteLocal(identifier: Identifier) { + const idStr = identifier.toString(); + if (!this.indexedDBProvider.synced) { + throw new Error("not initialized"); + } + + const localDoc = this.loadedDocuments.get(idStr); + + if (!localDoc) { + // we expect loadDocument only to be called once per document + throw new Error("loadDocument: document already loaded"); + } + + await localDoc.idbProvider.clearData(); + + this.loadedDocuments.delete(idStr); + this.documents.delete(idStr); + } + + public async markSynced(localDoc: LocalDoc) { + localDoc.meta.needs_save_since = undefined; + this.documents.set(localDoc.meta.id, localDoc.meta); + } + + public async markCreated(localDoc: LocalDoc) { + localDoc.meta.exists_at_remote = true; + this.documents.set(localDoc.meta.id, localDoc.meta); + } +} + +/* +TODO: +- what if open in multiple tabs? can ydoc change? + +- service that listens for documents that need to be synced +- on creating a doc -> create locally, then sync +--> this might be handled automatically +- on opening a doc -> always sync +- on loading a doc -> load from remote, then sync to local + + +*/ diff --git a/packages/editor/src/store/yjs-sync/FetchSyncManager.ts b/packages/editor/src/store/yjs-sync/FetchSyncManager.ts deleted file mode 100644 index 03d86e0c3..000000000 --- a/packages/editor/src/store/yjs-sync/FetchSyncManager.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { makeObservable, observable, runInAction } from "mobx"; -import { lifecycle, strings } from "vscode-lib"; - -import * as Y from "yjs"; -import { HttpsIdentifier } from "../../identifiers/HttpsIdentifier"; -import { markdownToYDoc } from "../../integrations/markdown/import"; -import ProjectResource from "../ProjectResource"; -import { SyncManager } from "./SyncManager"; - -export default class FetchSyncManager - extends lifecycle.Disposable - implements SyncManager -{ - public canWrite: boolean = true; // always initialize as true until the user starts trying to make changes - - public doc: "loading" | "not-found" | Y.Doc = "loading"; - - public readonly awareness: any = undefined; - - public constructor(private identifier: HttpsIdentifier) { - super(); - makeObservable(this, { - doc: observable.ref, - canWrite: observable.ref, - }); - } - - private documentUpdateListener = async (update: any, origin: any) => { - if (origin === this) { - // these are updates that came in from MatrixProvider - return; - } - if (origin?.provider) { - // update from peer (e.g.: webrtc / websockets). Peer is responsible for sending to Matrix - return; - } - runInAction(() => (this.canWrite = false)); - }; - - public async initialize() { - try { - await this.initializeNoCatch(); - } catch (e) { - console.error(e); - throw e; - } - } - - private async getNewYDocFromDir(objects: string[]) { - const newDoc = new Y.Doc(); - newDoc.getMap("meta").set("type", "!project"); - const project = new ProjectResource(newDoc, this.identifier); - objects.forEach((object) => { - if (object.endsWith(".md")) { - project.files.set(object, {}); - } - }); - return newDoc; - } - - private async getNewYDocFromFetch() { - if (this.identifier.uri.path.endsWith(".json")) { - const json = await (await fetch(this.identifier.uri.toString())).json(); - return this.getNewYDocFromDir(json); - } else if (this.identifier.uri.path.endsWith(".md")) { - const contents = await ( - await fetch(this.identifier.uri.toString()) - ).text(); - return markdownToYDoc(contents); - } else { - // TODO: this is hacky. We should use json from parent route instead. Revise routing? - const [root, ...remainders] = strings - .trim(this.identifier.uri.path, "/") - .split("/"); - const index = this.identifier.uri.with({ path: root + "/index.json" }); - let json = (await (await fetch(index.toString())).json()) as string[]; - - const prefix = remainders.join("/") + "/"; - json = json.filter((path) => path.startsWith(prefix)); - json = json.map((path) => path.substring(prefix.length)); - - if (!json.length) { - return "not-found" as "not-found"; - } - return this.getNewYDocFromDir(json); - } - } - - private async initializeNoCatch() { - try { - const docData = await this.getNewYDocFromFetch(); - if (docData === "not-found") { - this.doc = "not-found"; - return; - } - this.doc = docData; - // this.doc.on("update", this.documentUpdateListener); - } catch (e) { - console.error(e); - this.doc = "loading"; // TODO: error state? - } - } - - public dispose() { - super.dispose(); - if (typeof this.doc !== "string") { - this.doc.off("update", this.documentUpdateListener); - } - this.doc = "loading"; - } - - public on() {} -} diff --git a/packages/editor/src/store/yjs-sync/FilebridgeSyncManager.ts b/packages/editor/src/store/yjs-sync/FilebridgeSyncManager.ts deleted file mode 100644 index 818955202..000000000 --- a/packages/editor/src/store/yjs-sync/FilebridgeSyncManager.ts +++ /dev/null @@ -1,189 +0,0 @@ -import { readFile, saveFile, Watcher } from "filebridge-client"; -import * as _ from "lodash"; -import { makeObservable, observable } from "mobx"; -import { lifecycle, strings } from "vscode-lib"; -import * as Y from "yjs"; -import { FileIdentifier } from "../../identifiers/FileIdentifier"; -import { xmlFragmentToMarkdown } from "../../integrations/markdown/export"; -import { markdownToYDoc } from "../../integrations/markdown/import"; -import ProjectResource from "../ProjectResource"; -import { SyncManager } from "./SyncManager"; - -function isEmptyDoc(doc: Y.Doc) { - return areDocsEqual(doc, new Y.Doc()); -} - -// NOTE: only changes in doc xml fragment are checked -function areDocsEqual(doc1: Y.Doc, doc2: Y.Doc) { - return _.eq( - (doc1.getXmlFragment("doc").toJSON() as string).replaceAll( - /block-id=".*"/g, - "" - ), - (doc2.getXmlFragment("doc").toJSON() as string).replaceAll( - /block-id=".*"/g, - "" - ) - ); -} - -/** - * Given an identifier, manages local + remote syncing of a Y.Doc - */ -export class YDocFileSyncManager - extends lifecycle.Disposable - implements SyncManager -{ - private _ydoc: Y.Doc; - private watcher: Watcher | undefined; - - public canWrite = true; - - /** - * Get the managed "doc". Returns: - * - a Y.Doc encapsulating the loaded doc if available - * - "not-found" if the document doesn't exist locally / remote - * - "loading" if we're still loading the document - * - * (mobx observable) - * - * @type {("loading" | "not-found" | Y.Doc)} - * @memberof DocConnection - */ - public doc: "loading" | "not-found" | Y.Doc = "loading"; - - public readonly awareness: any = undefined; - - public constructor(public readonly identifier: FileIdentifier) { - super(); - makeObservable(this, { - doc: observable.ref, - canWrite: observable.ref, - }); - - console.log("new docconnection", this.identifier.toString()); - this._ydoc = new Y.Doc({ guid: this.identifier.toString() }); - } - - private async getNewYDocFromDir() { - const pathWithTrailingSlash = this.identifier.path - ? strings.trim(this.identifier.path, "/") + "/" - : ""; - - const newDoc = new Y.Doc(); - newDoc.getMap("meta").set("type", "!project"); - const project = new ProjectResource(newDoc, this.identifier); - - this.watcher = this._register( - new Watcher(pathWithTrailingSlash + "**/*.md") - ); - this._register( - this.watcher.onWatchEvent(async (e) => { - let path = e.path; - if (pathWithTrailingSlash && !path.startsWith(pathWithTrailingSlash)) { - throw new Error("file returned with invalid path"); - } - path = path.substring(pathWithTrailingSlash.length); - if (e.event === "add") { - project.files.set(path, {}); - } else if (e.event === "unlink") { - project.files.delete(path); - } - }) - ); - this._ydoc = this.doc = newDoc; - return newDoc; - } - - private async getNewYDocFromId() { - const ret = await readFile(fetch, this.identifier.path); - if (ret.type === "file") { - await this.getNewYDocFromFile(ret.contents); - } else { - await this.getNewYDocFromDir(); - } - } - - private async getNewYDocFromFile(contents: string) { - const newDoc = markdownToYDoc(contents); - - if (isEmptyDoc(this._ydoc)) { - const update = Y.encodeStateAsUpdate(newDoc); - Y.applyUpdate(this._ydoc, update); - this.doc = this._ydoc; - } else { - if (!areDocsEqual(this._ydoc, newDoc)) { - this._ydoc.destroy(); - this._ydoc = this.doc = newDoc; - } - } - this._ydoc.on("update", this.documentUpdateListener); - - this.watcher = this._register(new Watcher(this.identifier.path)); - - this._register( - this.watcher.onWatchEvent(async (event) => { - if (event.event !== "change") { - // TODO: support onlink - return; - } - const file = await readFile(fetch, this.identifier.path); - - if (file.type !== "file") { - throw new Error("unexpected"); - } - const docData = await this.getNewYDocFromFile(file.contents); - if (!areDocsEqual(this._ydoc, docData)) { - this._ydoc.destroy(); - this._ydoc = this.doc = docData; - this._ydoc.on("update", this.documentUpdateListener); - } - }) - ); - return newDoc; - } - - private getFileFromYDoc(doc: Y.Doc) { - // const contents = await readFile(this.identifier.path); - // const nbData = markdownToNotebook(contents); - if (doc.getMap("meta").get("type") !== "!notebook") { - throw new Error("invalid type"); - } - - let xml = doc.getXmlFragment("doc"); - - return xmlFragmentToMarkdown(xml); - } - - private documentUpdateListener = async (update: any, origin: any) => { - if (origin === this) { - // these are updates that came in from MatrixProvider - return; - } - if (origin?.provider) { - // update from peer (e.g.: webrtc / websockets). Peer is responsible for sending to Matrix - return; - } - await saveFile( - fetch, - this.identifier.path, - this.getFileFromYDoc(this._ydoc) - ); - }; - - public async initialize() { - try { - await this.getNewYDocFromId(); - } catch (e) { - console.error(e); - this.doc = "not-found"; - } - } - - public dispose() { - super.dispose(); - this._ydoc.off("update", this.documentUpdateListener); - } - - public on() {} -} diff --git a/packages/editor/src/store/yjs-sync/IDBHelper.ts b/packages/editor/src/store/yjs-sync/IDBHelper.ts index 57e8f0600..1d495cc9d 100644 --- a/packages/editor/src/store/yjs-sync/IDBHelper.ts +++ b/packages/editor/src/store/yjs-sync/IDBHelper.ts @@ -1,6 +1,6 @@ import { IndexeddbPersistence } from "y-indexeddb"; -export async function existsLocally(idbIdentifier: string) { +export async function existsLocally(idbIdentifier: string): Promise { const exists = (await (window.indexedDB as any).databases()) .map((db: IDBDatabase) => db.name) .includes(idbIdentifier); diff --git a/packages/editor/src/store/yjs-sync/SyncManager.browsertest.ts b/packages/editor/src/store/yjs-sync/SyncManager.browsertest.ts new file mode 100644 index 000000000..b33da77a4 --- /dev/null +++ b/packages/editor/src/store/yjs-sync/SyncManager.browsertest.ts @@ -0,0 +1,344 @@ +/* eslint-disable @typescript-eslint/no-unused-expressions */ +import { HocuspocusProviderWebsocket } from "@hocuspocus/provider"; +import { enableMobxBindings } from "@syncedstore/yjs-reactive-bindings"; +import { uniqueId } from "@typecell-org/common"; +import { expect } from "chai"; +import * as mobx from "mobx"; +import { when } from "mobx"; +import { async } from "vscode-lib"; +import * as Y from "yjs"; +import { + createDocument, + createHPProvider, + createRandomUser, + createWsProvider, +} from "../../../../../packages/server/src/supabase/test/supabaseTestUtil"; +import { loginAsNewRandomUser } from "../../../tests/util/loginUtil"; +import { SupabaseSessionStore } from "../../app/supabase-auth/SupabaseSessionStore"; +import { env } from "../../config/env"; +import { parseIdentifier } from "../../identifiers"; +import { SyncManager } from "./SyncManager"; +import { TypeCellRemote } from "./remote/TypeCellRemote"; + +/** + * Helper function that creates a doc in the backend and loads it into a SyncManager + */ +export async function createDocInBackendAndLoad( + user: Awaited>, + wsProvider: HocuspocusProviderWebsocket, + sessionStore: SupabaseSessionStore, + publicAccessLevel: "read" | "write" | "no-access" = "write" +) { + // const user = await createRandomUser("backend-user"); + + // initialize another user and doc directly via hocuspocus + const backendYDoc = new Y.Doc(); + + // const wsProvider = createWsProvider(); + + const doc = await createDocument(user.user!.id, "", publicAccessLevel); + const ret = await user.supabase.from("documents").insert(doc).select(); + + expect(ret.error).null; + + const provider = createHPProvider( + doc.nano_id, + backendYDoc, + user.session?.access_token + "$" + user.session?.refresh_token, + wsProvider + ); + + const identifier = parseIdentifier(doc.nano_id); + + // set some initial data + backendYDoc.getMap("mymap").set("hello", "world"); + + // load document with SyncManager + const manager = SyncManager.load(identifier, sessionStore); + + return { user, doc, backendYDoc, manager, identifier }; +} + +export async function createDocInBackendAndWaitForLoad( + user: Awaited>, + wsProvider: HocuspocusProviderWebsocket, + sessionStore: SupabaseSessionStore, + publicAccessLevel: "read" | "write" | "no-access" = "write" +) { + const ret = await createDocInBackendAndLoad( + user, + wsProvider, + sessionStore, + + publicAccessLevel + ); + + expect(ret.manager.docOrStatus).eq("loading"); + + const manager = await ret.manager.waitTillLoaded(); + + // wait till initial data came in + await when( + () => manager.state.localDoc.ydoc.getMap("mymap").get("hello") === "world" + ); + + return { ...ret, manager }; +} + +// /** +// * Helper function to wait for a MobX dependent condition to eventually succeed +// */ +// async function whenExpect(condition: () => Chai.Assertion) { +// return await when(() => { +// try { +// condition(); +// } catch (e) { +// return false; +// } +// return true; +// }); +// } + +describe("SyncManager tests", () => { + let sessionStore: SupabaseSessionStore; + let alice: Awaited>; + let wsProvider: HocuspocusProviderWebsocket; + + before(async () => { + enableMobxBindings(mobx); + alice = await createRandomUser("alice", env); + }); + + beforeEach(async () => { + TypeCellRemote.Offline = false; + wsProvider = createWsProvider("ws://localhost:1234"); + + // initialize the main user we're testing + // await coordinator.initialize(); + + sessionStore = new SupabaseSessionStore(); + await sessionStore.initialize(); + + await loginAsNewRandomUser(sessionStore, "testuser"); + + // console.log("when", sessionStore.coordinators, sessionStore.userPrefix); + await when(() => !!sessionStore.coordinators); + }); + + afterEach(async () => { + await sessionStore.supabase.auth.signOut(); + sessionStore.dispose(); + sessionStore = undefined as any; + wsProvider.destroy(); + }); + + it("can load an unknown remote document online", async () => { + const { manager } = await createDocInBackendAndWaitForLoad( + alice, + wsProvider, + sessionStore + ); + + expect(manager.state.localDoc.meta.create_source).eq("remote"); + }); + + it("cannot load an unknown remote document offline", async () => { + // TODO: would be nicer to force browser to go offline + TypeCellRemote.Offline = true; + + let { manager } = await createDocInBackendAndLoad( + alice, + wsProvider, + sessionStore + ); + expect(manager.docOrStatus).eq("loading"); + + // validate loading doesn't work, by waiting 1s and validate status is still loading + await async.timeout(1000); + expect(manager.docOrStatus).eq("loading"); + + // go online + TypeCellRemote.Offline = false; + + // validate loading + let loadedManager = await manager.waitTillLoaded(); + + // validate syncing + expect(loadedManager.state.localDoc.ydoc.getMap("mymap").get("hello")).eq( + "world" + ); + + expect(loadedManager.state.localDoc.meta.create_source).eq("remote"); + }); + + it("can load a known remote document", async () => { + const { manager, identifier } = await createDocInBackendAndWaitForLoad( + alice, + wsProvider, + sessionStore + ); + + // dispose + manager.dispose(); + + // load document + const manager2 = SyncManager.load(identifier, sessionStore); + let loadedManager2 = await manager2.waitTillLoaded(); + + // validate syncing + expect(loadedManager2.state.localDoc.ydoc.getMap("mymap").get("hello")).eq( + "world" + ); + + expect(loadedManager2.state.localDoc.meta.create_source).eq("remote"); + manager2.dispose(); + }); + + it("can load a known remote document offline", async () => { + const { manager, identifier } = await createDocInBackendAndWaitForLoad( + alice, + wsProvider, + sessionStore + ); + + // dispose + manager.dispose(); + + // go offline + TypeCellRemote.Offline = true; + + // load document + const manager2 = SyncManager.load(identifier, sessionStore); + const loadedManager2 = await manager2.waitTillLoaded(); + + // validate syncing + expect(loadedManager2.state.localDoc.ydoc.getMap("mymap").get("hello")).eq( + "world" + ); + + expect(loadedManager2.state.localDoc.meta.create_source).eq("remote"); + manager2.dispose(); + }); + + it("can create a new document", async () => { + const id = parseIdentifier(uniqueId.generateId("document")); + // create document + const manager = SyncManager.create(id, sessionStore); + + const loadedManager = await manager.waitTillLoaded(); + loadedManager.state.localDoc.ydoc.getMap("mymap").set("hello", "world"); + + await async.timeout(100); // write data + + manager.dispose(); + + // TODO: both managers could load from local, so this is not a valid test + // validate syncing + const manager2 = SyncManager.load(id, sessionStore); + + const loadedManager2 = await manager2.waitTillLoaded(); + + expect(loadedManager2.state.localDoc.ydoc.getMap("mymap").get("hello")).eq( + "world" + ); + manager2.dispose(); + }); + + it("can create a new document offline", async () => { + // go offline + TypeCellRemote.Offline = true; + + // create document + + const id = parseIdentifier(uniqueId.generateId("document")); + const manager = SyncManager.create(id, sessionStore); + const loadedManager = await manager.waitTillLoaded(); + + loadedManager.state.localDoc.ydoc.getMap("mymap").set("hello", "world"); + + manager.dispose(); + + // go online + // validate syncing + const manager2 = SyncManager.load(id, sessionStore); + const loadedManager2 = await manager2.waitTillLoaded(); + + expect(loadedManager2.state.localDoc.ydoc.getMap("mymap").get("hello")).eq( + "world" + ); + manager2.dispose(); + }); + + it("can clear local status and reload", async () => { + const { manager, backendYDoc } = await createDocInBackendAndWaitForLoad( + alice, + wsProvider, + sessionStore, + "read" + ); + + manager.state.localDoc.ydoc.getMap("mymap").set("hello", "world2"); + + // read only, so other doc shouldn't change even after waiting 1s + await async.timeout(1000); + expect(backendYDoc.getMap("mymap").get("hello")).eq("world"); + + // local doc should still reflect change + expect(manager.state.localDoc.ydoc.getMap("mymap").get("hello")).eq( + "world2" + ); + + const manager2 = await manager.clearAndReload(); + const loadedManager2 = await manager2.waitTillLoaded(); + + expect(backendYDoc.getMap("mymap").get("hello")).eq("world"); + expect(loadedManager2.state.localDoc.ydoc.getMap("mymap").get("hello")).eq( + "world" + ); + manager2.dispose(); + manager.dispose(); + }); + + it("can fork a document", async () => { + const { manager, backendYDoc } = await createDocInBackendAndWaitForLoad( + alice, + wsProvider, + sessionStore, + "read" + ); + + manager.state.localDoc.ydoc.getMap("mymap").set("hello", "world2"); + + // read only, so other doc shouldn't change even after waiting 1s + await async.timeout(1000); + expect(backendYDoc.getMap("mymap").get("hello")).eq("world"); + + expect(manager.state.localDoc.ydoc.getMap("mymap").get("hello")).eq( + "world2" + ); + + // fork to a new doc + const forkManager = await SyncManager.create( + parseIdentifier(uniqueId.generateId("document")), + sessionStore, + manager.state.localDoc.ydoc + ); + + // revert existing doc + const newManager = await manager.clearAndReload(); + + const forkManagerLoaded = await forkManager.waitTillLoaded(); + const newManagerLoaded = await newManager.waitTillLoaded(); + + expect(backendYDoc.getMap("mymap").get("hello")).eq("world"); + expect( + forkManagerLoaded.state.localDoc.ydoc.getMap("mymap").get("hello") + ).eq("world2"); + expect( + newManagerLoaded.state.localDoc.ydoc.getMap("mymap").get("hello") + ).eq("world"); + manager.dispose(); + forkManager.dispose(); + newManager.dispose(); + }); +}); diff --git a/packages/editor/src/store/yjs-sync/SyncManager.ts b/packages/editor/src/store/yjs-sync/SyncManager.ts index c53838090..5360a14d9 100644 --- a/packages/editor/src/store/yjs-sync/SyncManager.ts +++ b/packages/editor/src/store/yjs-sync/SyncManager.ts @@ -1,12 +1,375 @@ +import { + autorun, + computed, + makeObservable, + observable, + runInAction, + when, +} from "mobx"; import { lifecycle } from "vscode-lib"; +import { IndexeddbPersistence } from "y-indexeddb"; import * as Y from "yjs"; +import { FileIdentifier } from "../../identifiers/FileIdentifier"; +import { GithubIdentifier } from "../../identifiers/GithubIdentifier"; +import { HttpsIdentifier } from "../../identifiers/HttpsIdentifier"; +import { Identifier } from "../../identifiers/Identifier"; +import { MatrixIdentifier } from "../../identifiers/MatrixIdentifier"; +import { TypeCellIdentifier } from "../../identifiers/TypeCellIdentifier"; +import { LocalDoc } from "./DocumentCoordinator"; +import FetchRemote from "./remote/FetchRemote"; +import { FilebridgeRemote } from "./remote/FilebridgeRemote"; +import GithubRemote from "./remote/GithubRemote"; +// import { MatrixRemote } from "./remote/MatrixRemote"; +import { makeYDocObservable } from "@syncedstore/yjs-reactive-bindings"; +import { SupabaseSessionStore } from "../../app/supabase-auth/SupabaseSessionStore"; +import { SessionStore } from "../local/SessionStore"; +import { Remote } from "./remote/Remote"; +import { TypeCellRemote } from "./remote/TypeCellRemote"; -export type SyncManager = lifecycle.IDisposable & { - readonly doc: "loading" | "not-found" | Y.Doc; - get canWrite(): boolean; +type SyncingSyncManager = SyncManager & { + state: { + status: "syncing"; + localDoc: LocalDoc; + }; +}; - initialize(): Promise; +export class SyncManager extends lifecycle.Disposable { + private initializeCalled = false; + private disposed = false; + private readonly ydoc: Y.Doc; - awareness: any; - on: () => void; -}; + public state: + | { status: "loading" } + | { + status: "syncing"; + localDoc: LocalDoc; + } = { status: "loading" }; + + public get docOrStatus() { + const remoteStatus = this.remote.status; + if (this.state.status === "loading") { + if (remoteStatus === "loaded") { + // throw new Error("not possible"); // TODO: is this safe? + console.error( + "should not be possible, doc status 'loading', but remote 'loaded'" + ); + return "loading"; + } + return remoteStatus; + } + return this.state.localDoc.ydoc; + } + + public get awareness() { + return this.remote.awareness; + } + + /** @internal */ + public indexedDBProvider: IndexeddbPersistence | undefined; + public readonly remote: Remote; + constructor( + public readonly identifier: Identifier, + // private readonly localDoc: LocalDoc | undefined, + private readonly sessionStore: SessionStore + ) { + super(); + // if (localDoc) { + // this.doc = { + // status: "syncing", + // localDoc: localDoc, + // }; + // } else { + // this.doc = { + // status: "loading", + // ydoc: new Y.Doc({ guid: this.identifier.toString() }), + // }; + // } + + this.ydoc = new Y.Doc({ guid: this.identifier.toString() }); + makeYDocObservable(this.ydoc); + makeObservable(this, { + state: observable.ref, + docOrStatus: computed, + }); + + this.remote = this.remoteForIdentifier(identifier); + + const disposeAutorun = autorun(() => { + if (this.remote instanceof TypeCellRemote) { + const unsyncedChanges = this.remote.unsyncedChanges; + if (this.remote.status !== "loaded") { + return; // don't update sync status if remote has not initialized sync yet + } + if (unsyncedChanges === 0) { + if (!this.sessionStore.documentCoordinator) { + throw new Error( + "no documentCoordinator. logged out while syncing?" + ); + } + if (this.state.status === "loading") { + throw new Error("not possible"); + } + this.sessionStore.documentCoordinator.markSynced(this.state.localDoc); + } + } + }); + + this._register({ + dispose: () => { + disposeAutorun(); + }, + }); + this._register({ + dispose: () => { + this.ydoc.destroy(); + }, + }); + this._register(this.remote); + this._register({ + dispose: () => (this.disposed = true), + }); + } + + get canWrite(): boolean { + return this.remote.canWrite; + } + + private remoteForIdentifier(identifier: Identifier): Remote { + if (identifier instanceof FileIdentifier) { + return new FilebridgeRemote(this.ydoc, identifier); + } else if (identifier instanceof GithubIdentifier) { + return new GithubRemote(this.ydoc, identifier); + } else if (identifier instanceof HttpsIdentifier) { + return new FetchRemote(this.ydoc, identifier); + } else if (identifier instanceof MatrixIdentifier) { + throw new Error("nope"); + // return new MatrixRemote(this.ydoc, identifier); + } else if (identifier instanceof TypeCellIdentifier) { + if (!(this.sessionStore instanceof SupabaseSessionStore)) { + // TODO: should this be possible? + throw new Error( + "can't load from supabase without supabasesessionstore" + ); + } + return new TypeCellRemote(this.ydoc, identifier, this.sessionStore); + } else { + throw new Error("unsupported identifier"); + } + } + + public async startSyncing() { + if (this.state.status !== "syncing") { + throw new Error("not syncing"); + } + if (!this.state.localDoc.meta.exists_at_remote) { + await this.remote.createAndRetry(); + + if (!this.sessionStore.documentCoordinator) { + throw new Error("no documentCoordinator. logged out while syncing?"); + } + this.sessionStore.documentCoordinator.markCreated(this.state.localDoc); + } + this.remote.startSyncing(); + // listen for events + } + + private async loadFromRemote() { + await this.remote.startSyncing(); + await when(() => this.remote.status === "loaded"); + + if (!this.sessionStore.documentCoordinator) { + throw new Error( + "no documentCoordinator. logged out while loadFromRemote?" + ); + } + + if (this.disposed) { + return; + } + + const localDoc = + this.sessionStore.documentCoordinator.createDocumentFromRemote( + this.identifier, + this.ydoc + ); + + runInAction(() => { + this.state = { + status: "syncing", + localDoc, + }; + }); + + // on sync add to store + // listen for events + } + + private async create(forkSource?: Y.Doc) { + if (this.initializeCalled) { + throw new Error("load() called when already initialized"); + } + this.initializeCalled = true; + + if (!this.sessionStore.documentCoordinator) { + throw new Error("no documentCoordinator. logged out while creating?"); + } + + if (forkSource) { + Y.applyUpdateV2(this.ydoc, Y.encodeStateAsUpdateV2(forkSource)); + } + + const doc = await this.sessionStore.documentCoordinator.createDocument( + this.identifier, + this.ydoc + ); + + if (this.disposed) { + return; + } + + runInAction(() => { + this.state = { + status: "syncing", + localDoc: doc, + }; + }); + return this.startSyncing(); + } + + private async load() { + if (this.initializeCalled) { + throw new Error("load() called when already initialized"); + } + this.initializeCalled = true; + if (!this.sessionStore.documentCoordinator) { + throw new Error("logged out while loading"); + } + const doc = this.sessionStore.documentCoordinator.loadDocument( + this.identifier, + this.ydoc + ); + + if (doc === "not-found") { + // the document did not exist locally + return this.loadFromRemote(); + } else { + // the document was previously loaded (and exists in the local cache) + + // TODO: catch when doc didn't exist locally + await doc.idbProvider.whenSynced; + // console.log("done synced", doc.ydoc.toJSON()); + runInAction(() => { + this.state = { + status: "syncing", + localDoc: doc, + }; + }); + return this.startSyncing(); + } + } + + public async clearAndReload() { + if (this.disposed) { + throw new Error("clearAndReload: already disposed"); + } + + if (!this.sessionStore.documentCoordinator) { + throw new Error("logged out while clearAndReload"); + } + await this.sessionStore.documentCoordinator.deleteLocal(this.identifier); + this.dispose(); + + return SyncManager.load(this.identifier, this.sessionStore); + } + + public dispose() { + console.log("SyncManager dispose", this.identifier.toString()); + setTimeout(() => { + this.ydoc.destroy(); + }, 0); + + this.disposed = true; + super.dispose(); + } + + public async waitTillLoaded() { + await when(() => this.state.status === "syncing"); + return this as SyncingSyncManager; + } + + public static create( + identifier: Identifier, + sessionStore: SessionStore, + forkSource?: Y.Doc + ) { + // create locally + // start syncing: + // - periodically "create" when not created + // - sync when created, update values in coordinator + + console.log("SyncManager create", identifier.toString()); + + const manager = new SyncManager(identifier, sessionStore); + + manager.create(forkSource).catch((e) => { + console.error("error in SyncManager.create", e); + }); + + return manager; + } + + public static load(identifier: Identifier, sessionStore: SessionStore) { + // IF not existing + // - load from remote + // - create locally + // - start syncing, update values in coordinator + + // IF existing + // - load from coordinator + // - start syncing, update values in coordinator + + console.log("SyncManager load", identifier.toString()); + let manager = new SyncManager(identifier, sessionStore); + manager.load().catch((e) => { + console.error("error in SyncManager.load", e); + }); + // TODO: don't return synced when idb is still loading + + return manager; + } +} + +/* + +DocConnection: manages cache of documents by identifier +SyncManager: manages syncing of a single document with localcache and remote +Remote: manages syncing with a single remote + +Create: +- DocConnection.create(identifier) +- SyncManager.create(identifier) + -> creates locally + -> creates remote +- Remote.canCreate, Remote.create(identifier) + +Load: +- DocConnection.load(identifier) + + + +- status of syncing (last sync time) +- delete / create offline +- make changes offline and sync later +- fork +- guest copy +- ids and aliases +- login / logout + + + +- User loads @user/document +- Maps to mx://mx.typecell.org/@user/document +- Loads from indexeddb +- Starts syncing with mx://mx.typecell.org/@user/document + +*/ diff --git a/packages/editor/src/store/yjs-sync/YDocSyncManager.ts b/packages/editor/src/store/yjs-sync/YDocSyncManager.ts deleted file mode 100644 index 377117130..000000000 --- a/packages/editor/src/store/yjs-sync/YDocSyncManager.ts +++ /dev/null @@ -1,244 +0,0 @@ -import { MatrixProvider } from "matrix-crdt"; -import { MatrixClient } from "matrix-js-sdk"; -import { createAtom, makeObservable, observable, runInAction } from "mobx"; -import { lifecycle } from "vscode-lib"; -import { IndexeddbPersistence } from "y-indexeddb"; -import * as awarenessProtocol from "y-protocols/awareness"; -import * as Y from "yjs"; -import { getTestFlags } from "../../config/config"; -import { Identifier } from "../../identifiers/Identifier"; -import { MatrixIdentifier } from "../../identifiers/MatrixIdentifier"; -import { existsLocally, getIDBIdentifier, waitForIDBSynced } from "./IDBHelper"; -import { SyncManager } from "./SyncManager"; -/** - * Given an identifier, manages local + remote syncing of a Y.Doc - */ -export class YDocSyncManager - extends lifecycle.Disposable - implements SyncManager -{ - private readonly _ydoc: Y.Doc; - private initializeCalled = false; - private _canWriteAtom = createAtom("_canWrite"); - - public readonly awareness: awarenessProtocol.Awareness; - public readonly idbIdentifier: string; - - public get canWrite() { - this._canWriteAtom.reportObserved(); - if (!this.matrixProvider) { - return true; - } - return this.matrixProvider.canWrite; - } - - /** @internal */ - public matrixProvider: MatrixProvider | undefined; - - /** @internal */ - public webrtcProvider: { awareness: any } | undefined; - - /** @internal */ - public indexedDBProvider: IndexeddbPersistence | undefined; - - /** - * Get the managed "doc". Returns: - * - a Y.Doc encapsulating the loaded doc if available - * - "not-found" if the document doesn't exist locally / remote - * - "loading" if we're still loading the document - * - * (mobx observable) - * - * @type {("loading" | "not-found" | Y.Doc)} - * @memberof DocConnection - */ - public doc: "loading" | "not-found" | Y.Doc = "loading"; - - public constructor( - public readonly identifier: MatrixIdentifier, - private readonly mxClient: MatrixClient, - private readonly userId: string | undefined, - private readonly forkSourceIdentifier?: Identifier - ) { - super(); - this.idbIdentifier = getIDBIdentifier( - this.identifier.toString(), - this.userId - ); - makeObservable(this, { - doc: observable.ref, - }); - - this._ydoc = new Y.Doc({ guid: this.identifier.toString() }); - this.awareness = new awarenessProtocol.Awareness(this._ydoc); - } - - public async initialize() { - try { - if (this.initializeCalled) { - throw new Error("already called initialize() on YDocSyncManager"); - } - this.initializeCalled = true; - await this.initializeNoCatch(); - } catch (e) { - console.error(e); - throw e; - } - } - - private async applyChangesFromAndDeleteSource(idbIdentifier: string) { - const guestIndexedDBProvider = new IndexeddbPersistence( - idbIdentifier, - this._ydoc - ); - await waitForIDBSynced(guestIndexedDBProvider); - await guestIndexedDBProvider.clearData(); - } - - /** - * scenario 1: - * - not signed in (guest) - * - makes changes to @user1/doc, these are saved in guest-@user1/doc - * - signs in as @user2: changes from guest-@user1/doc need to move to u-@user2-@user1/doc - * - * scenario 2: - * - signed in as @user2 - * - makes changes to @user1/doc, these are saved to u-@user2-@user1/doc - * - forks, u-@user2-@user1/doc needs to move to u-@user2-@user2/doc - */ - private async initLocalProviders() { - if (this.indexedDBProvider) { - throw new Error("already has indexedDBProvider"); - } - - this.indexedDBProvider = new IndexeddbPersistence( - this.idbIdentifier, - this._ydoc - ); - - await waitForIDBSynced(this.indexedDBProvider); - - // scenario 1 - if (this.userId) { - const guestIDB = getIDBIdentifier(this.identifier.toString(), undefined); - if (await existsLocally(guestIDB)) { - console.log("copying guest idb"); - await this.applyChangesFromAndDeleteSource(guestIDB); - } - } - - // scenario 2 - if (this.forkSourceIdentifier) { - if (!this.userId) { - throw new Error("unexpected, forkSource but no userId"); - } - const idbId = getIDBIdentifier( - this.forkSourceIdentifier.toString(), - this.userId - ); - if (!existsLocally(idbId)) { - throw new Error("fork source not found"); - } - await this.applyChangesFromAndDeleteSource(idbId); - } - - if (this.webrtcProvider) { - throw new Error("already has webrtcProvider"); - } - runInAction(() => { - this.doc = this._ydoc; - }); - } - - public async deleteLocalChanges() { - if (!this.indexedDBProvider) { - throw new Error("deleteLocalChanges() called without indexedDBProvider"); - } - await this.indexedDBProvider.clearData(); - this.indexedDBProvider.destroy(); - this.indexedDBProvider = undefined; - } - - private async initializeNoCatch() { - // const mxClient = YDocSyncManager.matrixClient; - // if (!mxClient) { - // throw new Error("no matrix client available"); - // } - const alreadyLocal = await existsLocally(this.idbIdentifier); - - if (typeof this.doc !== "string") { - throw new Error("already loaded"); - } - - if (alreadyLocal) { - // For alreadyLocal, - // we await here to first load indexeddb, and then later sync with remote providers - // This way, when we set up MatrixProvider, we also have an initial state - // and can detect whether any local changes need to be synced to the remote (matrix) - await this.initLocalProviders(); - } - - this.matrixProvider = this._register( - new MatrixProvider( - this._ydoc, - this.mxClient, - { - type: "alias", - alias: - "#" + - this.identifier.roomName + - ":" + - this.identifier.uri.authority, - }, - getTestFlags().disableWebRTC ? undefined : this.awareness, - { - enableExperimentalWebrtcSync: !getTestFlags().disableWebRTC, - translator: { - updatesAsRegularMessages: false, - updateEventType: "org.typecell.doc_update", - snapshotEventType: "org.typecell.doc_snapshot", - }, - } - ) - ); - - this.matrixProvider.initialize(); - this._canWriteAtom.reportChanged(); - - this._register( - this.matrixProvider.onCanWriteChanged(() => { - this._canWriteAtom.reportChanged(); - }) - ); - - this._register( - this.matrixProvider.onDocumentAvailable(() => { - if (!this.indexedDBProvider) { - this.initLocalProviders(); - } - }) - ); - - this._register( - this.matrixProvider.onDocumentUnavailable(() => { - // TODO: tombstone? - runInAction(() => { - this.doc = "not-found"; - }); - this.indexedDBProvider?.destroy(); - this.indexedDBProvider = undefined; - this.webrtcProvider = undefined; - }) - ); - } - - public dispose() { - super.dispose(); - this.indexedDBProvider?.destroy(); - this.indexedDBProvider = undefined; - this.webrtcProvider = undefined; - this.matrixProvider = undefined; - } - - public on() {} -} diff --git a/packages/editor/src/store/yjs-sync/remote/FetchRemote.ts b/packages/editor/src/store/yjs-sync/remote/FetchRemote.ts new file mode 100644 index 000000000..0f2fe937c --- /dev/null +++ b/packages/editor/src/store/yjs-sync/remote/FetchRemote.ts @@ -0,0 +1,148 @@ +import { makeObservable, observable, runInAction } from "mobx"; +import { path, strings } from "vscode-lib"; + +import _ from "lodash"; +import * as Y from "yjs"; +import { filesToTreeNodes } from "../../../app/documentRenderers/project/directoryNavigation/treeNodeUtil"; +import { HttpsIdentifier } from "../../../identifiers/HttpsIdentifier"; +import { getIdentifierWithAppendedPath } from "../../../identifiers/paths/identifierPathHelpers"; +import { markdownToYDoc } from "../../../integrations/markdown/import"; +import ProjectResource from "../../ProjectResource"; +import { ChildReference } from "../../referenceDefinitions/child"; +import { Remote } from "./Remote"; + +export default class FetchRemote extends Remote { + private disposed = false; + protected id: string = "fetch"; + public canCreate: boolean = false; + + public canWrite: boolean = true; // always initialize as true until the user starts trying to make changes + + public get awareness() { + return undefined; + } + + public constructor( + _ydoc: Y.Doc, + private readonly identifier: HttpsIdentifier + ) { + super(_ydoc); + makeObservable(this, { + canWrite: observable.ref, + }); + } + + private documentUpdateListener = async (update: any, origin: any) => { + if (origin === this) { + // these are updates that came in from this provider + return; + } + if (origin?.provider) { + // remote update + return; + } + runInAction(() => (this.canWrite = false)); + }; + + public async initialize() { + try { + await this.initializeNoCatch(); + } catch (e) { + console.error(e); + throw e; + } + } + + private async getNewYDocFromDir(objects: string[]) { + const newDoc = new Y.Doc(); + newDoc.getMap("meta").set("type", "!project"); + const project = new ProjectResource(newDoc, this.identifier); // TODO + + const tree = filesToTreeNodes( + objects.map((object) => ({ fileName: object })) + ); + + tree.forEach((node) => { + const id = getIdentifierWithAppendedPath(this.identifier, node.fileName); + + project.addRef(ChildReference, id, undefined, false); + }); + + return newDoc; + } + + private fetchIndex = _.memoize(async (path: string) => { + return (await (await fetch(path)).json()) as string[]; + }); + + private async getNewYDocFromFetch() { + if (this.identifier.uri.path.endsWith(".json")) { + const json = await this.fetchIndex(this.identifier.uri.toString()); + return this.getNewYDocFromDir(json); + } else if (this.identifier.uri.path.endsWith(".md")) { + const contents = await ( + await fetch(this.identifier.uri.toString()) + ).text(); + + return markdownToYDoc(contents, path.basename(this.identifier.uri.path)); + } else { + // TODO: this is hacky. We should use json from parent route instead. Revise routing? + + const [root, ...remainders] = strings + .trim(this.identifier.uri.path, "/") + .split("/"); + const index = this.identifier.uri.with({ path: root + "/index.json" }); + + let json = await this.fetchIndex(index.toString()); + + const prefix = remainders.join("/") + "/"; + json = json.filter((path) => path.startsWith(prefix)); + json = json.map((path) => path.substring(prefix.length)); + if (!json.length) { + return "not-found" as "not-found"; + } + return this.getNewYDocFromDir(json); + } + } + + private async initializeNoCatch() { + try { + const docData = await this.getNewYDocFromFetch(); + if (this.disposed) { + console.warn("already disposed"); + return; + } + if (docData === "not-found") { + runInAction(() => { + this.status = "not-found"; + }); + return; + } + runInAction(() => { + this.status = "loaded"; + const update = Y.encodeStateAsUpdateV2(docData); + Y.applyUpdateV2(this._ydoc, update, this); + }); + this._ydoc.on("update", this.documentUpdateListener); + this._register({ + dispose: () => { + this._ydoc.off("update", this.documentUpdateListener); + }, + }); + } catch (e) { + console.error(e); + runInAction(() => { + this.status = "loading"; + }); // TODO: error state? + } + } + + public startSyncing(): Promise { + return this.initialize(); + } + + public dispose() { + this.disposed = true; + super.dispose(); + } +} diff --git a/packages/editor/src/store/yjs-sync/remote/FilebridgeRemote.ts b/packages/editor/src/store/yjs-sync/remote/FilebridgeRemote.ts new file mode 100644 index 000000000..7941ba1a7 --- /dev/null +++ b/packages/editor/src/store/yjs-sync/remote/FilebridgeRemote.ts @@ -0,0 +1,239 @@ +import { readFile, saveFile, Watcher } from "filebridge-client"; +import * as _ from "lodash"; +import { makeObservable, observable, runInAction } from "mobx"; +import { path, strings } from "vscode-lib"; +import * as Y from "yjs"; +import { filesToTreeNodes } from "../../../app/documentRenderers/project/directoryNavigation/treeNodeUtil"; +import { FileIdentifier } from "../../../identifiers/FileIdentifier"; +import { getIdentifierWithAppendedPath } from "../../../identifiers/paths/identifierPathHelpers"; +import { xmlFragmentToMarkdown } from "../../../integrations/markdown/export"; +import { markdownToXmlFragment } from "../../../integrations/markdown/import"; +import ProjectResource from "../../ProjectResource"; +import { ChildReference } from "../../referenceDefinitions/child"; +import { Remote } from "./Remote"; + +function isEmptyDoc(doc: Y.Doc) { + return areDocsEqual(doc, new Y.Doc()); +} + +// NOTE: only changes in doc xml fragment are checked +function areFragmentsEqual(fragment1: Y.XmlFragment, fragment2: Y.XmlFragment) { + return _.eq( + (fragment1.toJSON() as string).replaceAll(/block-id=".*"/g, ""), + (fragment2.toJSON() as string).replaceAll(/block-id=".*"/g, "") + ); +} + +function areDocsEqual(doc1: Y.Doc, doc2: Y.Doc) { + return areFragmentsEqual( + doc1.getXmlFragment("doc"), + doc2.getXmlFragment("doc") + ); +} + +/** + * Given an identifier, manages local + remote syncing of a Y.Doc + */ +export class FilebridgeRemote extends Remote { + private disposed = false; + protected id: string = "filebridge"; + public canCreate: boolean = false; + private watcher: Watcher | undefined; + + public canWrite = true; + + public get awareness() { + return undefined; + } + + public constructor( + _ydoc: Y.Doc, + private readonly identifier: FileIdentifier + ) { + super(_ydoc); + makeObservable(this, { + canWrite: observable.ref, + }); + } + + private documentsByPath = new Set(); + + private async updateYDocFromDir() { + const pathWithTrailingSlash = this.identifier.path + ? strings.trim(this.identifier.path, "/") + "/" + : ""; + + this._ydoc.getMap("meta").set("type", "!project"); + if (this.identifier.path) { + this._ydoc + .getMap("meta") + .set("title", path.basename(this.identifier.path)); + } + const project = new ProjectResource(this._ydoc, this.identifier); // TODO + + this.watcher = this._register( + new Watcher(pathWithTrailingSlash + "**/*.md") + ); + this._register( + this.watcher.onWatchEvent(async (e) => { + let path = e.path; + if (pathWithTrailingSlash && !path.startsWith(pathWithTrailingSlash)) { + throw new Error("file returned with invalid path"); + } + path = path.substring(pathWithTrailingSlash.length); + + const oldDocs = [...this.documentsByPath]; + const oldTree = filesToTreeNodes( + Array.from(oldDocs).map((p) => ({ fileName: p })) + ); + + if (e.event === "add") { + // project.addRef(ChildReference); + this.documentsByPath.add(path); + } else if (e.event === "unlink") { + this.documentsByPath.delete(path); + const id = getIdentifierWithAppendedPath(this.identifier, path); + // TODO: check if this works + project.removeRef(ChildReference, id); + } + + const tree = filesToTreeNodes( + Array.from(this.documentsByPath).map((p) => ({ fileName: p })) + ); + + oldTree.forEach((node) => { + if (!tree.find((n) => n.fileName === node.fileName)) { + const id = getIdentifierWithAppendedPath( + this.identifier, + node.fileName + ); + project.removeRef(ChildReference, id); + } + }); + + tree.forEach((node) => { + const id = getIdentifierWithAppendedPath( + this.identifier, + node.fileName + ); + + project.addRef(ChildReference, id, undefined, false); + }); + }) + ); + } + + private async updateYDocFromId() { + const ret = await readFile( + fetch, + this.identifier.uri.path, + "http://" + this.identifier.uri.authority + ); + if (this.disposed) { + return; + } + if (ret.type === "file") { + this._ydoc.on("update", this.documentUpdateListener); + this._register({ + dispose: () => this._ydoc.off("update", this.documentUpdateListener), + }); + await this.updateYDocFromContents( + ret.contents, + path.basename(this.identifier.uri.path) + ); + await this.updateYDocFromFile(); + } else { + await this.updateYDocFromDir(); + } + runInAction(() => { + this.status = "loaded"; + }); + } + + private async updateYDocFromContents(contents: string, title?: string) { + this._ydoc.getMap("meta").set("type", "!notebook"); + this._ydoc.getMap("meta").set("title", title); + const newXml = markdownToXmlFragment(contents, undefined); + + const fragment = this._ydoc.getXmlFragment("doc"); + + if (!areFragmentsEqual(fragment, newXml)) { + const update = Y.encodeStateAsUpdateV2(newXml.doc!); + Y.applyUpdateV2(this._ydoc, update, this); + } + } + + private async updateYDocFromFile() { + this.watcher = this._register( + new Watcher(this.identifier.path, "ws://" + this.identifier.uri.authority) + ); + + this._register( + this.watcher.onWatchEvent(async (event) => { + if (event.event !== "change") { + // TODO: support onlink + return; + } + const file = await readFile( + fetch, + this.identifier.path, + "http://" + this.identifier.uri.authority + ); + + if (file.type !== "file") { + throw new Error("unexpected"); + } + await this.updateYDocFromContents(file.contents); + }) + ); + } + + private getFileFromYDoc(doc: Y.Doc) { + // const contents = await readFile(this.identifier.path); + // const nbData = markdownToNotebook(contents); + if (doc.getMap("meta").get("type") !== "!notebook") { + throw new Error("invalid type"); + } + + let xml = doc.getXmlFragment("doc"); + + return xmlFragmentToMarkdown(xml); + } + + private documentUpdateListener = async (update: any, origin: any) => { + if (origin === this) { + // these are updates that came in from this provider + return; + } + if (origin?.provider) { + // remote update + return; + } + await saveFile( + fetch, + this.identifier.path, + this.getFileFromYDoc(this._ydoc), + "http://" + this.identifier.uri.authority + ); + }; + + public startSyncing(): Promise { + return this.initialize(); + } + + public async initialize() { + try { + await this.updateYDocFromId(); + } catch (e) { + console.error(e); + runInAction(() => { + this.status = "not-found"; + }); + } + } + + public dispose() { + this.disposed = true; + super.dispose(); + } +} diff --git a/packages/editor/src/store/yjs-sync/GithubSyncManager.ts b/packages/editor/src/store/yjs-sync/remote/GithubRemote.ts similarity index 54% rename from packages/editor/src/store/yjs-sync/GithubSyncManager.ts rename to packages/editor/src/store/yjs-sync/remote/GithubRemote.ts index 60c30067c..7e14df9c7 100644 --- a/packages/editor/src/store/yjs-sync/GithubSyncManager.ts +++ b/packages/editor/src/store/yjs-sync/remote/GithubRemote.ts @@ -1,37 +1,43 @@ import { makeObservable, observable, runInAction } from "mobx"; -import { lifecycle } from "vscode-lib"; import * as Y from "yjs"; -import { GithubIdentifier } from "../../identifiers/GithubIdentifier"; -import { getFileOrDirFromGithub } from "../../integrations/github/github"; -import { markdownToYDoc } from "../../integrations/markdown/import"; -import ProjectResource from "../ProjectResource"; -import { SyncManager } from "./SyncManager"; +import { GithubIdentifier } from "../../../identifiers/GithubIdentifier"; +import { getFileOrDirFromGithub } from "../../../integrations/github/github"; +import { markdownToYDoc } from "../../../integrations/markdown/import"; +import ProjectResource from "../../ProjectResource"; +import { Remote } from "./Remote"; -export default class GithubSyncManager - extends lifecycle.Disposable - implements SyncManager -{ - public canWrite: boolean = true; // always initialize as true until the user starts trying to make changes +export default class GithubRemote extends Remote { + private disposed = false; + protected id: string = "github"; + public canCreate: boolean = false; - public doc: "loading" | "not-found" | Y.Doc = "loading"; + public canWrite: boolean = true; // always initialize as true until the user starts trying to make changes - public readonly awareness: any = undefined; + public get awareness() { + return undefined; + } - public constructor(private identifier: GithubIdentifier) { - super(); + public constructor( + _ydoc: Y.Doc, + private readonly identifier: GithubIdentifier + ) { + super(_ydoc); makeObservable(this, { - doc: observable.ref, canWrite: observable.ref, }); } + public startSyncing(): Promise { + return this.initialize(); + } + private documentUpdateListener = async (update: any, origin: any) => { if (origin === this) { - // these are updates that came in from MatrixProvider + // these are updates that came in from this provider return; } if (origin?.provider) { - // update from peer (e.g.: webrtc / websockets). Peer is responsible for sending to Matrix + // remote update return; } runInAction(() => (this.canWrite = false)); @@ -51,7 +57,7 @@ export default class GithubSyncManager ) { const newDoc = new Y.Doc(); newDoc.getMap("meta").set("type", "!project"); - const project = new ProjectResource(newDoc, this.identifier); + const project = new ProjectResource(newDoc, this.identifier); // TODO tree.forEach((object) => { if (object.type === "blob" && object.path?.endsWith(".md")) { project.files.set(object.path, {}); @@ -79,25 +85,39 @@ export default class GithubSyncManager private async initializeNoCatch() { try { const docData = await this.getNewYDocFromGithub(); + if (this.disposed) { + console.warn("already disposed"); + return; + } + if (docData === "not-found") { - this.doc = "not-found"; + runInAction(() => { + this.status = "not-found"; + }); return; } - this.doc = docData; - this.doc.on("update", this.documentUpdateListener); + runInAction(() => { + this.status = "loaded"; + const update = Y.encodeStateAsUpdateV2(docData); + Y.applyUpdateV2(this._ydoc, update, this); + }); + + this._ydoc.on("update", this.documentUpdateListener); + this._register({ + dispose: () => { + this._ydoc.off("update", this.documentUpdateListener); + }, + }); } catch (e) { console.error(e); - this.doc = "loading"; // TODO: error state? + runInAction(() => { + this.status = "not-found"; // TODO: error state? + }); } } public dispose() { + this.disposed = true; super.dispose(); - if (typeof this.doc !== "string") { - this.doc.off("update", this.documentUpdateListener); - } - this.doc = "loading"; } - - public on() {} } diff --git a/packages/editor/src/store/yjs-sync/remote/MatrixRemote.ts b/packages/editor/src/store/yjs-sync/remote/MatrixRemote.ts new file mode 100644 index 000000000..a9d18de71 --- /dev/null +++ b/packages/editor/src/store/yjs-sync/remote/MatrixRemote.ts @@ -0,0 +1,167 @@ +import { createMatrixRoom, MatrixProvider } from "matrix-crdt"; +import { createAtom, runInAction } from "mobx"; +import { Awareness } from "y-protocols/awareness"; +import * as Y from "yjs"; +import { MatrixClientPeg } from "../../../app/matrix-auth/MatrixClientPeg"; +import { MatrixSessionStore } from "../../../app/matrix-auth/MatrixSessionStore"; +import { getTestFlags } from "../../../config/config"; +import { MatrixIdentifier } from "../../../identifiers/MatrixIdentifier"; +import { Remote } from "./Remote"; + +export class MatrixRemote extends Remote { + protected id: string = "matrix"; + // public doc: "loading" | "not-found" | Y.Doc = "loading"; + public matrixProvider: MatrixProvider | undefined; + private _canWriteAtom = createAtom("_canWrite"); + private disposed = false; + + protected _awareness: Awareness | undefined; + + public get awareness(): Awareness | undefined { + return this._awareness; + } + + constructor( + _ydoc: Y.Doc, + private readonly identifier: MatrixIdentifier, + private readonly sessionStore: MatrixSessionStore + ) { + super(_ydoc); + if (!(identifier instanceof MatrixIdentifier)) { + throw new Error("invalid identifier"); + } + } + + public get canWrite() { + this._canWriteAtom.reportObserved(); + if (!this.matrixProvider) { + return true; + } + return this.matrixProvider.canWrite; + } + + public get canCreate() { + return true; + } + + public async create() { + if (!this.sessionStore.loggedInUserId) { + throw new Error("no user available on create document"); + } + + // TODO: check authority + if (this.identifier.owner !== this.sessionStore.loggedInUserId) { + throw new Error("not authorized to create this document"); + } + + // // TODO (security): user2 can create a room @user1/doc + const remoteResult = await createMatrixRoom( + MatrixClientPeg.get(), + this.identifier.roomName, + "public-read" + ); + if (remoteResult === "offline") { + // TODO + throw new Error("to be implemented"); + } + if (remoteResult === "already-exists") { + return "already-exists"; + } + return remoteResult.status; // TODO + } + + public async startSyncing() { + if (this.disposed) { + console.warn("already disposed"); + return; + } + const matrixSessionStore = this.sessionStore; + matrixSessionStore.enableGuest(); + const user = matrixSessionStore.user; + if (typeof user === "string") { + throw new Error("no user"); + } + console.log("matrix listen"); + this._awareness = new Awareness(this._ydoc); + + this.matrixProvider = this._register( + new MatrixProvider( + this._ydoc, + user.matrixClient, // TODO + { + type: "alias", + alias: + "#" + + this.identifier.roomName + + ":" + + this.identifier.uri.authority, + }, + getTestFlags().disableWebRTC ? undefined : this.awareness, + { + enableExperimentalWebrtcSync: !getTestFlags().disableWebRTC, + translator: { + updatesAsRegularMessages: false, + updateEventType: "org.typecell.doc_update", + snapshotEventType: "org.typecell.doc_snapshot", + }, + } + ) + ); + (this.matrixProvider as any).isRemote = true; + this.matrixProvider.initialize(); + this._canWriteAtom.reportChanged(); + + this._register( + this.matrixProvider.onCanWriteChanged(() => { + this._canWriteAtom.reportChanged(); + }) + ); + + this._register( + this.matrixProvider.onDocumentAvailable(() => { + console.log("doc available"); + runInAction(() => { + this.status = "loaded"; + }); + }) + ); + + this._register( + this.matrixProvider.onDocumentUnavailable(() => { + runInAction(() => { + this.status = "not-found"; + }); + }) + ); + + this._register(this.matrixProvider); + this._register({ + dispose: () => this.awareness?.destroy(), + }); + } + + public dispose(): void { + this.disposed = true; + super.dispose(); + } +} + +// SyncManager: holds a doc and responsible for loading / creating + syncing to local + +// Remote, responsible for: +// caching sync / create / delete operations that were made offline +// - executing those when back online +// later: periodically updating docs from remote (e.g.: when user is offline) + +/** + * test: + * - create doc alias "B" online + * - create doc alias "A" online + * - clear storage + * - create doc alias "A" offline + * - make "A" child of "B" + * - Go online + * - "A" should be renamed to "A-1" + * - "A-1" should be child of "B" + * + */ diff --git a/packages/editor/src/store/yjs-sync/remote/Remote.ts b/packages/editor/src/store/yjs-sync/remote/Remote.ts new file mode 100644 index 000000000..fb239afe0 --- /dev/null +++ b/packages/editor/src/store/yjs-sync/remote/Remote.ts @@ -0,0 +1,93 @@ +import { makeObservable, observable } from "mobx"; +import { async, lifecycle } from "vscode-lib"; + +import { Awareness } from "y-protocols/awareness"; +import * as Y from "yjs"; +export abstract class Remote extends lifecycle.Disposable { + public status: "loading" | "not-found" | "loaded" = "loading"; // TODO: make this a getter + // public replacementDoc: Y.Doc | undefined; + + protected abstract readonly id: string; + // protected readonly pendingOperationsDoc: Y.Doc; + public abstract canCreate: boolean; + public abstract get canWrite(): boolean; + public abstract get awareness(): Awareness | undefined; + + constructor(protected readonly _ydoc: Y.Doc) { + super(); + // this.pendingOperationsDoc = new Y.Doc(); + // should be user scoped + // new IndexeddbPersistence(this.id, this.pendingOperationsDoc); + makeObservable(this, { + status: observable.ref, + // replacementDoc: observable.ref, + }); + } + + public abstract startSyncing(): Promise; + + protected create(): Promise<"already-exists" | "ok" | "error"> { + throw new Error("not implemented"); + } + + public async createAndRetry() { + if (this.status === "loaded") { + throw new Error("already loaded"); + } + + if (!this.canCreate) { + throw new Error("cannot create"); + } + + let cleanup = { + cancel: () => {}, + }; + + this._register({ + dispose: () => cleanup.cancel(), + }); + + while (true) { + let retryTimeout = 10000; + try { + const ret = await this.create(); + if (ret !== "error") { + break; + } + } catch (e) { + if (e?.toString()?.includes("fake-offline")) { + // hacky, for testing purposes + retryTimeout = 100; + } + console.error("error in remote.create ", e); + } + + const p = async.timeout(retryTimeout); + cleanup.cancel = p.cancel; + await p; + } + } +} +/* +TODO: test, for providers +- do we retrying creating when offline -> online +- do we keep retrying sync when offline -> online +- do we keep retrying load when offline -> online + + +// SyncManager: holds a doc and responsible for loading / creating + syncing to local + +// Remote, responsible for: +// caching sync / create / delete operations that were made offline +// - executing those when back online +// later: periodically updating docs from remote (e.g.: when user is offline) + +// last synced at +// last modified at +// created at (local) +// created at (remote) +// TODO: delete + +// of per remote? +// - last synced at +*/ diff --git a/packages/editor/src/store/yjs-sync/remote/TypeCellRemote.ts b/packages/editor/src/store/yjs-sync/remote/TypeCellRemote.ts new file mode 100644 index 000000000..a61c96f73 --- /dev/null +++ b/packages/editor/src/store/yjs-sync/remote/TypeCellRemote.ts @@ -0,0 +1,248 @@ +import { + HocuspocusProvider, + HocuspocusProviderWebsocket, +} from "@hocuspocus/provider"; +import { + computed, + createAtom, + makeObservable, + observable, + runInAction, +} from "mobx"; +import { uuid } from "vscode-lib"; +import * as awarenessProtocol from "y-protocols/awareness"; +import * as Y from "yjs"; +import { SupabaseSessionStore } from "../../../app/supabase-auth/SupabaseSessionStore"; +import { env } from "../../../config/env"; +import { TypeCellIdentifier } from "../../../identifiers/TypeCellIdentifier"; +import { Remote } from "./Remote"; + +let wsProviders = new Map(); + +function toHex(arr: Uint8Array) { + return [...arr].map((x) => x.toString(16).padStart(2, "0") as any).join(""); +} + +function getWSProvider(session: SupabaseSessionStore) { + if (!session.userPrefix) { + throw new Error("no user available on create document"); + } + let wsProvider = wsProviders.get(session.userPrefix); + if (!wsProvider) { + console.log("new ws provider"); + wsProvider = new HocuspocusProviderWebsocket({ + url: env.VITE_TYPECELL_BACKEND_WS_URL, + // WebSocketPolyfill: ws, + onConnect() { + // console.log("connected"); + }, + }); + if (TypeCellRemote.Offline) { + wsProvider.disconnect(); + } + wsProviders.set(session.userPrefix, wsProvider); + } + return wsProvider; +} + +export class TypeCellRemote extends Remote { + protected id: string = "typecell"; + + private hocuspocusProvider: HocuspocusProvider | undefined; + private _awarenessAtom = createAtom("_awarenessAtom"); + private _canWriteAtom = createAtom("_canWrite"); + private disposed = false; + + public unsyncedChanges = 0; + + // TODO: set to true and run tests + private static _offline = false; + + public static get Offline() { + return this._offline; + } + + public static set Offline(val: boolean) { + if (val) { + wsProviders.forEach((wsProvider) => { + wsProvider?.disconnect(); + }); + } else { + wsProviders.forEach((wsProvider) => { + wsProvider?.connect(); + }); + } + this._offline = val; + } + + constructor( + _ydoc: Y.Doc, + private readonly identifier: TypeCellIdentifier, + private readonly sessionStore: SupabaseSessionStore + ) { + super(_ydoc); + if (!(identifier instanceof TypeCellIdentifier)) { + throw new Error("invalid identifier"); + } + makeObservable(this, { + unsyncedChanges: observable.ref, + canWrite: computed, + }); + } + + public get awareness(): awarenessProtocol.Awareness | undefined { + this._awarenessAtom.reportObserved(); + return this.hocuspocusProvider?.awareness; + } + + public get canWrite() { + return this.unsyncedChanges === 0; + // this._canWriteAtom.reportObserved(); + // if (!this.hocuspocusProvider) { + // return true; + // } + // return true; + // // TODO + // // return this.hocuspocusProvider.canWrite; + } + + public get canCreate() { + return true; + } + + public async create() { + const sessionStore = this.sessionStore; + + if (!sessionStore.userId) { + return "error"; + // throw new Error("no user available on create document"); + } + + if (!sessionStore.loggedInUserId) { + console.warn("no loggedInUserId available on create document"); + } + + const date = JSON.stringify(new Date()); + const data = Y.encodeStateAsUpdate(this._ydoc); + const doc = { + id: uuid.generateUuid(), + created_at: date, + updated_at: date, + data: "\\x" + toHex(data), + nano_id: this.identifier.documentId, + public_access_level: this.identifier.documentId.endsWith("/.inbox") + ? "write" + : "read", // TODO: shouldn't be hardcoded here + user_id: sessionStore.userId, + } as const; + + if (TypeCellRemote.Offline) { + throw new Error("fake-offline"); + } + console.log( + "insert doc", + (await sessionStore.supabase.auth.getSession()).data.session?.user.id, + doc + ); + const ret = await sessionStore.supabase + .from("documents") + .insert(doc) + .select(); + + if (ret.error) { + console.error(ret.error); + return "error"; + } + // TODO: already exists + return "ok"; + } + + public async startSyncing() { + if (this.disposed) { + console.warn("already disposed"); + return; + } + + const user = this.sessionStore.user; + if (typeof user === "string") { + throw new Error("no user"); + } + + const session = (await this.sessionStore.supabase.auth.getSession()).data + .session; + const token = session + ? session.access_token + "$" + session.refresh_token + : "guest"; + + if (this.disposed) { + console.warn("already disposed"); + return; + } + + // console.log("token", token); + const hocuspocusProvider = new HocuspocusProvider({ + name: this.identifier.documentId, + document: this._ydoc, + token, + websocketProvider: getWSProvider(this.sessionStore), + broadcast: false, + + onSynced: () => { + runInAction(() => { + this.unsyncedChanges = hocuspocusProvider.unsyncedChanges; + this.status = "loaded"; + }); + }, + onAuthenticationFailed: (data) => { + runInAction(() => { + console.warn("auth failed", data); + this.status = "not-found"; + }); + }, + }); + (hocuspocusProvider as any).isRemote = true; + + hocuspocusProvider.on("unsyncedChanges", () => { + runInAction(() => { + this.unsyncedChanges = hocuspocusProvider.unsyncedChanges; + }); + }); + this.hocuspocusProvider = hocuspocusProvider; + + this._register({ + dispose: () => hocuspocusProvider.destroy(), + }); + console.log("start"); + this._awarenessAtom.reportChanged(); + // this._canWriteAtom.reportChanged(); + // this.hocuspocusProvider?.on(""); + } + // `this._register( + // this.matrixProvider.onCanWriteChanged(() => { + // this._canWriteAtom.reportChanged(); + // }) + // ); + + // this._register( + // this.matrixProvider.onDocumentAvailable(() => { + // console.log("doc available"); + // runInAction(() => { + // this.status = "loaded"; + // }); + // }) + // ); + + // this._register( + // this.matrixProvider.onDocumentUnavailable(() => { + // runInAction(() => { + // this.status = "not-found"; + // }); + // }) + // ); + // }` + + public dispose(): void { + this.disposed = true; + super.dispose(); + } +} diff --git a/packages/editor/src/styles/index.css b/packages/editor/src/styles/index.css index 43642bc6d..d69ba5a6d 100644 --- a/packages/editor/src/styles/index.css +++ b/packages/editor/src/styles/index.css @@ -9,6 +9,14 @@ html { box-sizing: border-box; } +[data-is-sidebar-dragging="true"] iframe { + pointer-events: none !important; +} + +[data-resize-button="true"] > div { + display: none; /* disable extra margin around the resize button */ +} + *, *::before, *::after { @@ -73,8 +81,6 @@ h6 { position: absolute; } - - /* Some generic layout classes */ .row { display: flex; @@ -569,3 +575,8 @@ see https://atlassian.design/foundations/color for more info */ :focus { outline: none; } + +.tippy-svg-arrow { + /* TODO: module.css */ + fill: #f4f5f7; +} diff --git a/packages/editor/tests/end-to-end/collaboration/oneWay.spec.ts b/packages/editor/tests/end-to-end/collaboration/oneWay.spec.ts index 24908a243..23074f415 100644 --- a/packages/editor/tests/end-to-end/collaboration/oneWay.spec.ts +++ b/packages/editor/tests/end-to-end/collaboration/oneWay.spec.ts @@ -1,4 +1,4 @@ -import { Page } from "@playwright/test"; +import { Page, expect } from "@playwright/test"; import { test } from "../setup/fixtures"; import { createNotebook, @@ -32,9 +32,7 @@ test.beforeEach(async ({ disableWebRTC }) => { // Press a with modifiers await pageAlice.press(writeEditorSelector, "Meta+a"); await pageAlice.fill(writeEditorSelector, "helloworld"); - await pageBob.waitForSelector("text=helloworld", { - timeout: disableWebRTC ? 5000 : 2000, - }); + await expect(pageBob.locator("text=helloworld")).toBeAttached(); }); // at the end of each test, set text to "done" and wait until both are synced @@ -44,9 +42,7 @@ test.afterEach(async ({ disableWebRTC }) => { // Press a with modifiers await pageAlice.press(writeEditorSelector, "Meta+a"); await pageAlice.fill(writeEditorSelector, "done"); - await pageBob.waitForSelector("text=done", { - timeout: disableWebRTC ? 5000 : 2000, - }); + await expect(pageBob.locator("text=done")).toBeAttached(); }); test("selection syncs from Alice to Bob", async ({ @@ -84,18 +80,19 @@ test("changes sync from Alice to Bob", async ({ bobContext, disableWebRTC, }) => { - await testEditSync(pageAlice, pageBob, disableWebRTC ? 5000 : 2000); + await testEditSync(pageAlice, pageBob); // select content // TODO: consistent username + colors for screenshots // expect(await pageBob.screenshot()).toMatchSnapshot("sync-selection.bob.png"); }); -test("changes don't sync from Bob to Alice", async ({ +// TODO: readd when forking is fixed +test.skip("changes don't sync from Bob to Alice", async ({ aliceContext, bobContext, disableWebRTC, }) => { - await testEditSync(pageBob, pageAlice, disableWebRTC ? 5000 : 2000, false); + await testEditSync(pageBob, pageAlice, false); // select content // TODO: consistent username + colors for screenshots // expect(await pageBob.screenshot()).toMatchSnapshot("sync-selection.bob.png"); diff --git a/packages/editor/tests/end-to-end/collaboration/twoWay-private.spec.ts b/packages/editor/tests/end-to-end/collaboration/twoWay-private.spec.ts index 2c765001a..cb9716181 100644 --- a/packages/editor/tests/end-to-end/collaboration/twoWay-private.spec.ts +++ b/packages/editor/tests/end-to-end/collaboration/twoWay-private.spec.ts @@ -1,7 +1,8 @@ -import { Page } from "@playwright/test"; +import { Page, expect } from "@playwright/test"; import { test } from "../setup/fixtures"; import { createNotebook, + readEditorSelector, selectionSyncs, testEditSync, writeEditorSelector, @@ -33,6 +34,10 @@ test.beforeAll(async ({ aliceContext, bobContext, bobUser }) => { await pageAlice.click('button:has-text("Add")'); await pageAlice.click('button:has-text("Apply")'); + + // TODO: would be nice to have a way to apply permissions on the fly with hocuspocus + await pageBob.reload(); + await expect(pageBob.locator(readEditorSelector)).toBeAttached(); }); test.afterAll(() => { @@ -48,9 +53,7 @@ test.beforeEach(async ({ disableWebRTC }) => { await pageAlice.press(writeEditorSelector, "Meta+a"); await pageAlice.fill(writeEditorSelector, "helloworld"); - await pageBob.waitForSelector("text=helloworld", { - timeout: disableWebRTC ? 5000 : 2000, - }); + await expect(pageBob.locator("text=helloworld")).toBeAttached(); }); // at the end of each test, set text to "done" and wait until both are synced @@ -61,9 +64,7 @@ test.afterEach(async ({ disableWebRTC }) => { await pageAlice.press(writeEditorSelector, "Meta+a"); await pageAlice.fill(writeEditorSelector, "done"); - await pageBob.waitForSelector("text=done", { - timeout: disableWebRTC ? 5000 : 2000, - }); + await expect(pageBob.locator("text=done")).toBeAttached(); }); test("selection syncs from Alice to Bob", async ({ @@ -101,7 +102,7 @@ test("changes sync from Alice to Bob", async ({ bobContext, disableWebRTC, }) => { - await testEditSync(pageAlice, pageBob, disableWebRTC ? 5000 : 2000); + await testEditSync(pageAlice, pageBob); // select content // TODO: consistent username + colors for screenshots // expect(await pageBob.screenshot()).toMatchSnapshot("sync-selection.bob.png"); @@ -112,7 +113,7 @@ test("changes sync from Bob to Alice", async ({ bobContext, disableWebRTC, }) => { - await testEditSync(pageBob, pageAlice, disableWebRTC ? 5000 : 2000); + await testEditSync(pageBob, pageAlice); // select content // TODO: consistent username + colors for screenshots // expect(await pageBob.screenshot()).toMatchSnapshot("sync-selection.bob.png"); diff --git a/packages/editor/tests/end-to-end/collaboration/twoWay-public.spec.ts b/packages/editor/tests/end-to-end/collaboration/twoWay-public.spec.ts index e206e2928..96e802ef2 100644 --- a/packages/editor/tests/end-to-end/collaboration/twoWay-public.spec.ts +++ b/packages/editor/tests/end-to-end/collaboration/twoWay-public.spec.ts @@ -1,7 +1,8 @@ -import { Page } from "@playwright/test"; +import { Page, expect } from "@playwright/test"; import { test } from "../setup/fixtures"; import { createNotebook, + readEditorSelector, selectionSyncs, testEditSync, writeEditorSelector, @@ -31,6 +32,10 @@ test.beforeAll(async ({ aliceContext, bobContext }) => { ); await pageAlice.click('button:has-text("Apply")'); + + // TODO: would be nice to have a way to apply permissions on the fly with hocuspocus + await pageBob.reload(); + await expect(pageBob.locator(readEditorSelector)).toBeAttached(); }); test.afterAll(() => { @@ -45,9 +50,7 @@ test.beforeEach(async ({ disableWebRTC }) => { // Press a with modifiers await pageAlice.press(writeEditorSelector, "Meta+a"); await pageAlice.fill(writeEditorSelector, "helloworld"); - await pageBob.waitForSelector("text=helloworld", { - timeout: disableWebRTC ? 5000 : 2000, - }); + await expect(pageBob.locator("text=helloworld")).toBeAttached(); }); // at the end of each test, set text to "done" and wait until both are synced @@ -57,9 +60,7 @@ test.afterEach(async ({ disableWebRTC }) => { // Press a with modifiers await pageAlice.press(writeEditorSelector, "Meta+a"); await pageAlice.fill(writeEditorSelector, "done"); - await pageBob.waitForSelector("text=done", { - timeout: disableWebRTC ? 5000 : 2000, - }); + await expect(pageBob.locator("text=done")).toBeAttached(); }); test("selection syncs from Alice to Bob", async ({ @@ -97,7 +98,7 @@ test("changes sync from Alice to Bob", async ({ bobContext, disableWebRTC, }) => { - await testEditSync(pageAlice, pageBob, disableWebRTC ? 5000 : 2000); + await testEditSync(pageAlice, pageBob); // select content // TODO: consistent username + colors for screenshots // expect(await pageBob.screenshot()).toMatchSnapshot("sync-selection.bob.png"); @@ -108,7 +109,7 @@ test("changes sync from Bob to Alice", async ({ bobContext, disableWebRTC, }) => { - await testEditSync(pageBob, pageAlice, disableWebRTC ? 5000 : 2000); + await testEditSync(pageBob, pageAlice); // select content // TODO: consistent username + colors for screenshots // expect(await pageBob.screenshot()).toMatchSnapshot("sync-selection.bob.png"); diff --git a/packages/editor/tests/end-to-end/collaboration/util.ts b/packages/editor/tests/end-to-end/collaboration/util.ts index 67afa7773..cb6479783 100644 --- a/packages/editor/tests/end-to-end/collaboration/util.ts +++ b/packages/editor/tests/end-to-end/collaboration/util.ts @@ -29,14 +29,14 @@ export async function createNotebook( await pageAlice.click('button:has-text("Create")'); // wait until alice loads - await pageAlice.waitForSelector(readEditorSelector); + await expect(pageAlice.locator(readEditorSelector)).toBeAttached(); const pageBob = await bobContext.newPage(); // debugger; await pageBob.goto(pageAlice.url()); // wait until bob loads - await pageBob.waitForSelector(readEditorSelector); + await expect(pageBob.locator(readEditorSelector)).toBeAttached(); return { pageAlice, pageBob }; } @@ -73,25 +73,18 @@ export async function selectionSyncs(from: Page, to: Page) { expect(bbLine!.y).toBeNear(bbSelection!.y, 2); } -export async function testEditSync( - from: Page, - to: Page, - timeout: number, - shouldSync = true -) { +export async function testEditSync(from: Page, to: Page, shouldSync = true) { await from.press(writeEditorSelector, "Meta+a"); await from.fill(writeEditorSelector, "changedtext"); expect(await from.textContent(readEditorSelector)).toBe("changedtext"); if (shouldSync) { - await to.waitForSelector("text=changedtext", { - timeout, - }); + await expect(to.locator("text=changedtext")).toBeAttached(); expect(from.locator('[data-test="forkAlert"]')).toBeHidden(); } else { - await to.waitForTimeout(timeout); - expect(to.locator("text=changedtext")).toBeHidden(); - await from.waitForSelector('[data-test="forkAlert"]'); + // await to.waitForTimeout(timeout); + await expect(to.locator("text=changedtext")).toBeHidden(); + await expect(from.locator('[data-test="forkAlert"]')).toBeAttached(); } } diff --git a/packages/editor/tests/end-to-end/login/login.spec.ts b/packages/editor/tests/end-to-end/login/login.spec.ts index 8aaaf75e4..1a25e434e 100644 --- a/packages/editor/tests/end-to-end/login/login.spec.ts +++ b/packages/editor/tests/end-to-end/login/login.spec.ts @@ -1,3 +1,4 @@ +import { DEFAULT_PROVIDER } from "../setup/config"; import { expect, test } from "../setup/fixtures"; test("Sign in button exists", async ({ page }) => { @@ -6,44 +7,91 @@ test("Sign in button exists", async ({ page }) => { await expect(button).toHaveText("Sign in"); }); -test("Sign in by email", async ({ page, aliceUser, aliceContext }) => { - // aliceContext is needed here for registration, - // but we don't use it here since we test a clean browser +if (DEFAULT_PROVIDER === "supabase") { + test("Sign in by email (supabase)", async ({ + page, + aliceUser, + aliceContext, + }) => { + // aliceContext is needed here for registration, + // but we don't use it here since we test a clean browser - // eslint-disable-next-line no-self-assign - aliceContext = aliceContext; + // eslint-disable-next-line no-self-assign + aliceContext = aliceContext; - await page.goto("/"); - const button = page.locator("button", { hasText: "Sign in" }); + await page.goto("/"); + const button = page.locator("button", { hasText: "Sign in" }); + + await button.click(); + + await page.keyboard.press("Enter"); + + // enter username / password + const email = page.locator("input[name=email]"); + const password = page.locator("input[type=password]"); - await button.click(); + await email.type(aliceUser.username + "@fakeemail.typecell.org"); + await password.type(aliceUser.password); - // sign in by username instead of email - await page.locator("text=Email address").click(); - await page.waitForTimeout(100); - // await page.keyboard.press("ArrowUp"); - await page.keyboard.press("ArrowUp"); - await page.keyboard.press("Enter"); + const continueButton = page.locator("button[type=submit]", { + hasText: "Sign in", + }); - // enter username / password - const email = page.locator("input[name=username]"); - const password = page.locator("input[type=password]"); + await continueButton.click(); - await email.type(aliceUser.username); - await password.type(aliceUser.password); + const profileButton = page.locator("button[data-testid='profile-button']"); - const continueButton = page.locator("button[type=submit]", { - hasText: "Continue", + await expect(profileButton).toBeVisible(); + + await profileButton.click(); + + const userElement = page.locator("text=@" + aliceUser.username); + await expect(userElement).toBeVisible(); }); +} else { + test("Sign in by email (matrix)", async ({ + page, + aliceUser, + aliceContext, + }) => { + // aliceContext is needed here for registration, + // but we don't use it here since we test a clean browser - await continueButton.click(); + // eslint-disable-next-line no-self-assign + aliceContext = aliceContext; - const profileButton = page.locator("button[data-testid='profile-button']"); + await page.goto("/"); + const button = page.locator("button", { hasText: "Sign in" }); - await expect(profileButton).toBeVisible(); + await button.click(); - await profileButton.click(); + // sign in by username instead of email + await page.locator("text=Email address").click(); + await page.waitForTimeout(100); + // await page.keyboard.press("ArrowUp"); + await page.keyboard.press("ArrowUp"); + await page.keyboard.press("Enter"); - const userElement = page.locator("text=@" + aliceUser.username); - await expect(userElement).toBeVisible(); -}); + // enter username / password + const email = page.locator("input[name=username]"); + const password = page.locator("input[type=password]"); + + await email.type(aliceUser.username); + await password.type(aliceUser.password); + + const continueButton = page.locator("button[type=submit]", { + hasText: "Continue", + }); + + await continueButton.click(); + + const profileButton = page.locator("button[data-testid='profile-button']"); + + await expect(profileButton).toBeVisible(); + + await profileButton.click(); + + const userElement = page.locator("text=@" + aliceUser.username); + await expect(userElement).toBeVisible(); + }); +} diff --git a/packages/editor/tests/end-to-end/setup/config.ts b/packages/editor/tests/end-to-end/setup/config.ts new file mode 100644 index 000000000..c77e9cc44 --- /dev/null +++ b/packages/editor/tests/end-to-end/setup/config.ts @@ -0,0 +1 @@ +export const DEFAULT_PROVIDER: "matrix" | "supabase" = "supabase"; diff --git a/packages/editor/tests/end-to-end/setup/networkRequestFilter.ts b/packages/editor/tests/end-to-end/setup/networkRequestFilter.ts index fb49f2cf8..73b20d263 100644 --- a/packages/editor/tests/end-to-end/setup/networkRequestFilter.ts +++ b/packages/editor/tests/end-to-end/setup/networkRequestFilter.ts @@ -1,9 +1,13 @@ -import { BrowserContext, BrowserContextOptions } from "@playwright/test"; -import { test as base } from "./scriptSetup"; +import { + BrowserContext, + BrowserContextOptions, + Request, +} from "@playwright/test"; import { uri } from "vscode-lib"; +import { test as base } from "./scriptSetup"; export function addFilterToBrowserContext(context: BrowserContext) { - const listener = (request) => { + const listener = (request: Request) => { const host = uri.URI.parse(request.url()).authority; if ( diff --git a/packages/editor/tests/end-to-end/setup/userFixtures.ts b/packages/editor/tests/end-to-end/setup/userFixtures.ts index df7746d18..c8668f636 100644 --- a/packages/editor/tests/end-to-end/setup/userFixtures.ts +++ b/packages/editor/tests/end-to-end/setup/userFixtures.ts @@ -1,4 +1,5 @@ -import { BrowserContext, Page } from "@playwright/test"; +import { BrowserContext, Page, expect } from "@playwright/test"; +import { DEFAULT_PROVIDER } from "./config"; import { test as base } from "./networkRequestFilter"; const SESSION_ID = Math.random() @@ -28,13 +29,13 @@ export type TestUser = { // const existingStateBobe = tryLoadState("bob.json"); /** - * Register a user via the interface + * Register a user via the interface (Matrix UI) */ -async function registerUser( +async function registerUserMatrix( page: Page, user: { username: string; password: string } ) { - await page.goto(process.env.TYPECELL_BASE_URL + "/register"); + await page.goto("/register"); const field = page.locator("input[name='username']"); await field.type(user.username); const pwField = page.locator("input[name='password']"); @@ -47,7 +48,39 @@ async function registerUser( await registerBtn.click(); // registered + signed in when profile button is visible - await page.waitForSelector("button[data-testid='profile-button']"); + await expect( + page.locator("button[data-testid='profile-button']") + ).toBeAttached(); +} + +/** + * Register a user via the interface (Supabase UI) + */ +async function registerUserSupabase( + page: Page, + user: { username: string; password: string } +) { + await page.goto("/register"); + const field = page.locator("input[name='email']"); + await field.type(user.username + "@fakeemail.typecell.org"); + const pwField = page.locator("input[name='password']"); + await pwField.type(user.password); + + const registerBtn = page.locator("button[type='submit']"); + await registerBtn.click(); + + await expect(page.locator("input[name='username']")).toBeAttached(); + + const usernameField = page.locator("input[name='username']"); + await usernameField.type(user.username); + + const setUsernameBtn = page.locator("button[type='submit']"); + await setUsernameBtn.click(); + + // registered + signed in when profile button is visible + await expect( + page.locator("button[data-testid='profile-button']") + ).toBeAttached(); } // This fixture exposes information (username / password) of alice / bob @@ -91,7 +124,11 @@ export const test = testWithUsers.extend< // if (!existingStateAlice) { const page = await newContext.newPage(); - await registerUser(page, aliceUser); + if (DEFAULT_PROVIDER === "supabase") { + await registerUserSupabase(page, aliceUser); + } else { + await registerUserMatrix(page, aliceUser); + } await page.close(); // fs.writeFileSync( // "alice.json", @@ -107,7 +144,11 @@ export const test = testWithUsers.extend< async ({ browser, bobUser }, use, workerInfo) => { const newContext = await browser.newContext(); const page = await newContext.newPage(); - await registerUser(page, bobUser); + if (DEFAULT_PROVIDER === "supabase") { + await registerUserSupabase(page, bobUser); + } else { + await registerUserMatrix(page, bobUser); + } await page.close(); // Use the account value. diff --git a/packages/editor/tests/util/loginUtil.ts b/packages/editor/tests/util/loginUtil.ts new file mode 100644 index 000000000..95a92f2e5 --- /dev/null +++ b/packages/editor/tests/util/loginUtil.ts @@ -0,0 +1,26 @@ +import { when } from "mobx"; +import { getRandomUserData } from "../../../commonTest/src/randomUser"; +import { SupabaseSessionStore } from "../../src/app/supabase-auth/SupabaseSessionStore"; + +export async function loginAsNewRandomUser( + sessionStore: SupabaseSessionStore, + basename: string +) { + const userData = getRandomUserData(basename); + + const { data, error } = await sessionStore.supabase.auth.signUp(userData); + + if (error) { + throw error; + } + + await when(() => !!sessionStore.userId); + + await sessionStore.setUsername(userData.name); + + return { + user: data.user, + session: data.session, + supabase: sessionStore.supabase, + }; +} diff --git a/packages/editor/tests/util/startMatrixServer.ts b/packages/editor/tests/util/startMatrixServer.ts index 7bd6dd166..a57c7dd5e 100644 --- a/packages/editor/tests/util/startMatrixServer.ts +++ b/packages/editor/tests/util/startMatrixServer.ts @@ -68,7 +68,7 @@ let globalPromise: Promise | undefined; // wrap doEnsureMatrixIsRunning to make sure concurrent request only start Matrix once export async function ensureMatrixIsRunning() { if (!globalPromise) { - globalPromise = doEnsureMatrixIsRunning(); + // globalPromise = doEnsureMatrixIsRunning(); } return globalPromise; } diff --git a/packages/editor/tsconfig.json b/packages/editor/tsconfig.json index 11fdfa948..9ab976f44 100644 --- a/packages/editor/tsconfig.json +++ b/packages/editor/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es6", + "target": "ESNext", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, @@ -17,5 +17,5 @@ "jsx": "react-jsx", "downlevelIteration": true }, - "include": ["src"] + "include": ["src", "tests"] } diff --git a/packages/editor/vite.config.ts b/packages/editor/vite.config.ts index c4f92795e..5e909c9b6 100644 --- a/packages/editor/vite.config.ts +++ b/packages/editor/vite.config.ts @@ -17,7 +17,7 @@ function redirectAll() { }); server.middlewares.use((req, res, next) => { - handler(req as Request, res as Response, next); + handler(req, res, next); }); }; }, @@ -33,13 +33,11 @@ export default defineConfig({ // Node.js global to browser globalThis // global: "globalThis", // breaks some modules work because of https://github.com/vitejs/vite/issues/6295, done in index.tsx instead // process & buffer are added to global scope in index.host.tsx + process: { + env: {}, + }, }, - plugins: [ - react({ - jsxRuntime: "classic", // TODO: would prefer to move to new jsxRuntime, but doesn't seem compatible with atlaskit - }), - redirectAll(), - ], + plugins: [react(), redirectAll()], resolve: { alias: { buffer: "rollup-plugin-node-polyfills/polyfills/buffer-es6", @@ -65,6 +63,11 @@ export default defineConfig({ plugins: [nodePolyfills()], }, }, + worker: { + // Enable rollup polyfills plugin + // used during production bundling + plugins: [nodePolyfills()], + }, test: { exclude: [ "**/end-to-end/**", diff --git a/packages/engine/package.json b/packages/engine/package.json index 9bb9a8fda..781701e1c 100644 --- a/packages/engine/package.json +++ b/packages/engine/package.json @@ -17,15 +17,15 @@ "@types/lodash": "^4.14.182", "@types/react": "^18.0.25", "rimraf": "^3.0.2", - "typescript": "4.5.5", - "@playwright/test": "^1.18.1", - "playwright-test": "^8.1.1", + "typescript": "5.0.4", + "@playwright/test": "^1.33.0", + "playwright-test": "^9.0.0", "vitest": "^0.24.4", "jsdom": "^20.0.0", "@vitest/coverage-c8": "^0.24.4" }, "overrides": { - "playwright-core": "1.24.2" + "playwright-core": "1.33.0" }, "source": "src/index.ts", "types": "types/index.d.ts", diff --git a/packages/engine/playwright.config.ts b/packages/engine/playwright.config.ts index 937f7935f..46649190b 100644 --- a/packages/engine/playwright.config.ts +++ b/packages/engine/playwright.config.ts @@ -15,7 +15,7 @@ const config: PlaywrightTestConfig = { * Maximum time expect() should wait for the condition to be met. * For example in `await expect(locator).toHaveText();` */ - timeout: 5000, + timeout: 10000, }, /* Fail the build on CI if you accidentally left test.only in the source code. */ diff --git a/packages/engine/src/CellEvaluator.ts b/packages/engine/src/CellEvaluator.ts index 9f36c02c0..bb9766969 100644 --- a/packages/engine/src/CellEvaluator.ts +++ b/packages/engine/src/CellEvaluator.ts @@ -81,6 +81,7 @@ export function createCellEvaluator( throw new Error("expected exactly 1 module"); } + (executionScope as any).initial = true; // log.debug("runModule", cell.path); moduleExecution = await runModule( modules[0], @@ -91,6 +92,7 @@ export function createCellEvaluator( onError, moduleExecution?.disposeVariables ); + (executionScope as any).initial = false; await moduleExecution.initialRun; } catch (e) { console.error(e); diff --git a/packages/engine/src/context.ts b/packages/engine/src/context.ts index bfefb2c8c..ce3dca0b7 100644 --- a/packages/engine/src/context.ts +++ b/packages/engine/src/context.ts @@ -37,12 +37,15 @@ export function createContext(storage?: Storage): TypeCellContext { // return Reflect.set(storage, property, value, receiver); // } // } - const ret = untracked(() => Reflect.get(target, property, receiver)); - if (isReactView(ret)) { - ret.props.__tcObservable.set(value); - return true; - } - return Reflect.set(target, property, value, receiver); + let ret = untracked(() => { + const ret = Reflect.get(target, property, receiver); + if (isReactView(ret)) { + ret.props.__tcObservable.set(value); + return true; + } + return Reflect.set(target, property, value, receiver); + }); + return ret; }, }); diff --git a/packages/engine/src/modules.ts b/packages/engine/src/modules.ts index 2525ca8d7..e7e879bb1 100644 --- a/packages/engine/src/modules.ts +++ b/packages/engine/src/modules.ts @@ -76,7 +76,15 @@ function createDefine(modules: Module[]) { export function createExecutionScope(context: TypeCellContext) { const scope = { - autorun, + autorun: (f: () => any) => { + // if the code hasn't changed we should need to run a new autorun + if ((scope as any).initial || true) { + // run in setTimeout so that the outer autorun doesn't track dependencies of the inner + setTimeout(() => { + autorun(f); + }, 0); + } + }, $: context.context, $views: context.viewContext, untracked, diff --git a/packages/packager/package.json b/packages/packager/package.json index 35ba4c0f4..a1c5e9266 100644 --- a/packages/packager/package.json +++ b/packages/packager/package.json @@ -22,15 +22,15 @@ "@types/lodash": "^4.14.182", "@types/react": "^18.0.25", "rimraf": "^3.0.2", - "typescript": "4.5.5", - "@playwright/test": "^1.18.1", - "playwright-test": "^8.1.1", + "typescript": "5.0.4", + "@playwright/test": "^1.33.0", + "playwright-test": "^9.0.0", "vitest": "^0.24.4", "jsdom": "^20.0.0", "@vitest/coverage-c8": "^0.24.4" }, "overrides": { - "playwright-core": "1.24.2" + "playwright-core": "1.33.0" }, "source": "src/index.ts", "types": "types/index.d.ts", @@ -42,6 +42,6 @@ "watch": "tsc --watch", "unittest:vitest": "vitest run --coverage", "unittest:playwright": "playwright-test '**/*.browsertest.ts'", - "test": "npm run unittest:vitest && npm run unittest:playwright" + "testFIXME": "npm run unittest:vitest && npm run unittest:playwright" } } diff --git a/packages/packager/template/package.json b/packages/packager/template/package.json index 30c25fbcd..7b84b4ed2 100644 --- a/packages/packager/template/package.json +++ b/packages/packager/template/package.json @@ -24,9 +24,10 @@ "devDependencies": { "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", - "@vitejs/plugin-react": "^2.2.0", - "typescript": "^4.6.4", - "vite": "^3.2.0", + "@vitejs/plugin-react": "^4.0.0", + "typescript": "^5.0.4", + "vite": "^4.3.8", + "vitest": "^0.31.1", "tsc-silent": "^1.2.2" }, "main": "./dist/PACKAGENAME.umd.cjs", diff --git a/packages/parsers/package.json b/packages/parsers/package.json index 1f3a0290d..6bc24b839 100644 --- a/packages/parsers/package.json +++ b/packages/parsers/package.json @@ -15,16 +15,16 @@ "@types/fs-extra": "9.0.13", "@types/react": "^18.0.25", "rimraf": "^3.0.2", - "typescript": "4.5.5", - "@playwright/test": "^1.18.1", - "playwright-test": "^8.1.1", + "typescript": "5.0.4", + "@playwright/test": "^1.33.0", + "playwright-test": "^9.0.0", "vitest": "^0.24.4", "jsdom": "^20.0.0", "@vitest/coverage-c8": "^0.24.4", "fast-glob": "^3.2.12" }, "overrides": { - "playwright-core": "1.24.2" + "playwright-core": "1.33.0" }, "source": "src/index.ts", "types": "types/index.d.ts", diff --git a/packages/editor/server/README.md b/packages/server-matrix/setup/README.md similarity index 100% rename from packages/editor/server/README.md rename to packages/server-matrix/setup/README.md diff --git a/packages/editor/server/docker-compose.yml b/packages/server-matrix/setup/docker-compose.yml similarity index 100% rename from packages/editor/server/docker-compose.yml rename to packages/server-matrix/setup/docker-compose.yml diff --git a/test-util/server/.gitignore b/packages/server-matrix/test-server/.gitignore similarity index 100% rename from test-util/server/.gitignore rename to packages/server-matrix/test-server/.gitignore diff --git a/test-util/server/data/homeserver.log b/packages/server-matrix/test-server/data/homeserver.log similarity index 100% rename from test-util/server/data/homeserver.log rename to packages/server-matrix/test-server/data/homeserver.log diff --git a/test-util/server/data/homeserver.yaml b/packages/server-matrix/test-server/data/homeserver.yaml similarity index 100% rename from test-util/server/data/homeserver.yaml rename to packages/server-matrix/test-server/data/homeserver.yaml diff --git a/test-util/server/data/localhost-8888.log.config b/packages/server-matrix/test-server/data/localhost-8888.log.config similarity index 100% rename from test-util/server/data/localhost-8888.log.config rename to packages/server-matrix/test-server/data/localhost-8888.log.config diff --git a/test-util/server/data/localhost-8888.signing.key b/packages/server-matrix/test-server/data/localhost-8888.signing.key similarity index 100% rename from test-util/server/data/localhost-8888.signing.key rename to packages/server-matrix/test-server/data/localhost-8888.signing.key diff --git a/test-util/server/docker-compose.yml b/packages/server-matrix/test-server/docker-compose.yml similarity index 100% rename from test-util/server/docker-compose.yml rename to packages/server-matrix/test-server/docker-compose.yml diff --git a/packages/server/.env.development b/packages/server/.env.development new file mode 100644 index 000000000..399b362a7 --- /dev/null +++ b/packages/server/.env.development @@ -0,0 +1,6 @@ +ENVIRONMENT=DEV +VITE_TYPECELL_SUPABASE_URL=http://localhost:54321 +VITE_TYPECELL_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0 +VITE_TYPECELL_SUPABASE_SERVICE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImV4cCI6MTk4MzgxMjk5Nn0.EGIM96RAZx35lJzdJsyH-qQwv8Hdp7fsn3W0YpN81IU +TYPECELL_GOOGLE_OAUTH_SECRET=07c7dfced313bf3b94735cdd632a4d7668a8064f +PORT=1234 \ No newline at end of file diff --git a/packages/server/.env.local.example b/packages/server/.env.local.example new file mode 100644 index 000000000..43e48ba63 --- /dev/null +++ b/packages/server/.env.local.example @@ -0,0 +1,3 @@ +# these env variables are only needed for local development and in github actions, when we run local supabase containers: +TYPECELL_GOOGLE_OAUTH_SECRET=SECRET +TYPECELL_GITHUB_OAUTH_SECRET=SECRET \ No newline at end of file diff --git a/packages/server/.env.production b/packages/server/.env.production new file mode 100644 index 000000000..45b9a795c --- /dev/null +++ b/packages/server/.env.production @@ -0,0 +1,3 @@ +ENVIRONMENT=PROD +VITE_TYPECELL_SUPABASE_URL=https://guzxrzrjknsekuefovon.supabase.co +VITE_TYPECELL_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imd1enhyenJqa25zZWt1ZWZvdm9uIiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODc0MjIzMDUsImV4cCI6MjAwMjk5ODMwNX0.2ZvW9nvWHSy1BFIBQYBxEysB2VJS761wpPiPmpe5Yqk \ No newline at end of file diff --git a/packages/server/.env.staging b/packages/server/.env.staging new file mode 100644 index 000000000..b1734ec3c --- /dev/null +++ b/packages/server/.env.staging @@ -0,0 +1,3 @@ +ENVIRONMENT=STAGING +VITE_TYPECELL_SUPABASE_URL=https://glsqqdamehahvdqssxow.supabase.co +VITE_TYPECELL_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imdsc3FxZGFtZWhhaHZkcXNzeG93Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODc0MjIzNTksImV4cCI6MjAwMjk5ODM1OX0.Z4_bs6Zcq2MtoKlCK-R_-7MFHOa4NeK_axCgGtLheIY \ No newline at end of file diff --git a/packages/server/.env.test b/packages/server/.env.test new file mode 100644 index 000000000..3147d15bc --- /dev/null +++ b/packages/server/.env.test @@ -0,0 +1,3 @@ +VITE_TYPECELL_SUPABASE_URL=http://localhost:54321 +VITE_TYPECELL_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0 +VITE_TYPECELL_SUPABASE_SERVICE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImV4cCI6MTk4MzgxMjk5Nn0.EGIM96RAZx35lJzdJsyH-qQwv8Hdp7fsn3W0YpN81IU \ No newline at end of file diff --git a/packages/server/README.md b/packages/server/README.md new file mode 100644 index 000000000..5d35f0355 --- /dev/null +++ b/packages/server/README.md @@ -0,0 +1 @@ +# packages/server diff --git a/packages/server/package.json b/packages/server/package.json new file mode 100644 index 000000000..d91d050ea --- /dev/null +++ b/packages/server/package.json @@ -0,0 +1,46 @@ +{ + "name": "@typecell-org/server", + "version": "0.0.3", + "private": true, + "dependencies": { + "@typecell-org/common": "^0.0.3", + "@hocuspocus/extension-database": "^2.1.0", + "@hocuspocus/extension-logger": "^2.1.0", + "@hocuspocus/server": "^2.1.0", + "@supabase/supabase-js": "^2.12.1", + "vscode-lib": "^0.1.2", + "dotenv": "^16.3.1" + }, + "devDependencies": { + "@hocuspocus/provider": "^2.1.0", + "@playwright/test": "^1.33.0", + "@vitest/coverage-c8": "^0.24.4", + "jsdom": "^20.0.0", + "nanoid": "^4.0.1", + "playwright-test": "^9.0.0", + "supabase": "^1.68.6", + "typescript": "5.0.4", + "vite-node": "^0.29.7", + "vitest": "^0.24.4", + "ws": "^8.13.0", + "yjs": "^13.6.4" + }, + "source": "src/index.ts", + "types": "types/index.d.ts", + "main": "dist/index.js", + "type": "module", + "scripts": { + "start": "node dist/server/src/index.js", + "start:supabase": "./supabase.sh start", + "stop:supabase": "./supabase.sh stop", + "clean": "rimraf dist && rimraf types", + "dev": "MODE=development vite-node src/index.ts", + "build": "npm run clean && tsc -p tsconfig.json", + "watch": "tsc --watch", + "test-watch": "vitest watch", + "unittest:vitest": "vitest run --coverage ", + "unittest:playwright": "playwright-test '**/*.browsertest.ts'", + "test": "npm run unittest:vitest && npm run unittest:playwright", + "gentypes": "./supabase.sh gen types typescript --local --schema public > src/@types/schema.ts" + } +} diff --git a/packages/server/src/@types/env.d.ts b/packages/server/src/@types/env.d.ts new file mode 100644 index 000000000..193704c75 --- /dev/null +++ b/packages/server/src/@types/env.d.ts @@ -0,0 +1,26 @@ +/// + +interface ImportMetaEnv { + readonly VITE_TYPECELL_SUPABASE_URL: string; + readonly VITE_TYPECELL_SUPABASE_ANON_KEY: string; + readonly VITE_TYPECELL_SUPABASE_SERVICE_KEY: string; + // more env variables... +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} + +declare global { + namespace NodeJS { + interface ProcessEnv { + readonly ENVIRONMENT: "PROD" | "DEV" | "STAGING"; + VITE_TYPECELL_SUPABASE_URL: string; + VITE_TYPECELL_SUPABASE_ANON_KEY: string; + VITE_TYPECELL_SUPABASE_SERVICE_KEY: string; + readonly PORT: string; + } + } +} + +export {}; diff --git a/packages/server/src/@types/schema.ts b/packages/server/src/@types/schema.ts new file mode 100644 index 000000000..07abd8ba2 --- /dev/null +++ b/packages/server/src/@types/schema.ts @@ -0,0 +1,169 @@ +export type Json = + | string + | number + | boolean + | null + | { [key: string]: Json } + | Json[] + +export interface Database { + public: { + Tables: { + document_permissions: { + Row: { + access_level: Database["public"]["Enums"]["access_level"] + document_id: string + user_id: string + } + Insert: { + access_level: Database["public"]["Enums"]["access_level"] + document_id: string + user_id: string + } + Update: { + access_level?: Database["public"]["Enums"]["access_level"] + document_id?: string + user_id?: string + } + Relationships: [ + { + foreignKeyName: "document_permissions_document_id_fkey" + columns: ["document_id"] + referencedRelation: "documents" + referencedColumns: ["id"] + }, + { + foreignKeyName: "document_permissions_user_id_fkey" + columns: ["user_id"] + referencedRelation: "users" + referencedColumns: ["id"] + } + ] + } + document_relations: { + Row: { + child_id: string + parent_id: string + } + Insert: { + child_id: string + parent_id: string + } + Update: { + child_id?: string + parent_id?: string + } + Relationships: [ + { + foreignKeyName: "document_relations_child_id_fkey" + columns: ["child_id"] + referencedRelation: "documents" + referencedColumns: ["id"] + }, + { + foreignKeyName: "document_relations_parent_id_fkey" + columns: ["parent_id"] + referencedRelation: "documents" + referencedColumns: ["id"] + } + ] + } + documents: { + Row: { + created_at: string + data: string + id: string + nano_id: string + public_access_level: Database["public"]["Enums"]["access_level"] + updated_at: string + user_id: string + } + Insert: { + created_at?: string + data: string + id?: string + nano_id: string + public_access_level: Database["public"]["Enums"]["access_level"] + updated_at?: string + user_id: string + } + Update: { + created_at?: string + data?: string + id?: string + nano_id?: string + public_access_level?: Database["public"]["Enums"]["access_level"] + updated_at?: string + user_id?: string + } + Relationships: [ + { + foreignKeyName: "documents_user_id_fkey" + columns: ["user_id"] + referencedRelation: "users" + referencedColumns: ["id"] + } + ] + } + workspaces: { + Row: { + created_at: string + document_nano_id: string + id: string + is_username: boolean + name: string + owner_user_id: string + } + Insert: { + created_at?: string + document_nano_id: string + id?: string + is_username: boolean + name: string + owner_user_id: string + } + Update: { + created_at?: string + document_nano_id?: string + id?: string + is_username?: boolean + name?: string + owner_user_id?: string + } + Relationships: [ + { + foreignKeyName: "workspaces_document_nano_id_fkey" + columns: ["document_nano_id"] + referencedRelation: "documents" + referencedColumns: ["nano_id"] + }, + { + foreignKeyName: "workspaces_owner_user_id_fkey" + columns: ["owner_user_id"] + referencedRelation: "users" + referencedColumns: ["id"] + } + ] + } + } + Views: { + [_ in never]: never + } + Functions: { + check_document_access: { + Args: { + uid: string + doc_id: string + } + Returns: Database["public"]["Enums"]["access_level"] + } + } + Enums: { + access_level: "no-access" | "read" | "write" + } + CompositeTypes: { + [_ in never]: never + } + } +} + diff --git a/packages/server/src/@types/ws.d.ts b/packages/server/src/@types/ws.d.ts new file mode 100644 index 000000000..abd2fa8a8 --- /dev/null +++ b/packages/server/src/@types/ws.d.ts @@ -0,0 +1 @@ +declare module "ws" {} diff --git a/packages/server/src/hocuspocus/extension-supabase/SupabaseHocuspocus.ts b/packages/server/src/hocuspocus/extension-supabase/SupabaseHocuspocus.ts new file mode 100644 index 000000000..7fad5dfe2 --- /dev/null +++ b/packages/server/src/hocuspocus/extension-supabase/SupabaseHocuspocus.ts @@ -0,0 +1,290 @@ +import { + Database, + DatabaseConfiguration, +} from "@hocuspocus/extension-database"; +import { + beforeHandleMessagePayload, + fetchPayload, + onAuthenticatePayload, + onDisconnectPayload, + onLoadDocumentPayload, + storePayload, +} from "@hocuspocus/server"; +import * as Y from "yjs"; +import { + createAnonClient, + createServiceClient, +} from "../../supabase/supabase.js"; + +const documentIdByDocument = new WeakMap(); +// export const schema = `CREATE TABLE IF NOT EXISTS "documents" ( +// "name" varchar(255) NOT NULL, +// "data" blob NOT NULL, +// UNIQUE(name) +// )`; + +// export const selectQuery = ` +// SELECT data FROM "documents" WHERE name = $name ORDER BY rowid DESC +// `; + +// export const upsertQuery = ` +// INSERT INTO "documents" ("name", "data") VALUES ($name, $data) +// ON CONFLICT(name) DO UPDATE SET data = $data +// `; + +type SupabaseType = Awaited>; + +export interface SupabaseConfiguration extends DatabaseConfiguration {} + +export class SupabaseHocuspocus extends Database { + private supabaseMap = new Map(); + + constructor(configuration?: Partial) { + super({ + fetch: async (data: fetchPayload) => { + const supabase = this.supabaseMap.get(data.socketId); + console.log("fetch"); + if (!supabase) { + throw new Error("unexpected: no db client on fetch"); + } + + const ret = await supabase + .from("documents") + .select() + .eq("nano_id", data.documentName); + if (ret.data?.length !== 1) { + throw new Error("unexpected: not found when fetching"); + } + + documentIdByDocument.set(data.document, ret.data[0].id); + + const decoded = Buffer.from(ret.data[0].data.substring(2), "hex"); // skip \x + if (!decoded.length) { + return null; + } + return decoded; + }, + store: async (data: storePayload) => { + const supabase = this.supabaseMap.get(data.socketId); + if (!supabase) { + throw new Error("unexpected: no db client on fetch"); + } + + const serviceClient = await createServiceClient(); + // console.log("store", data.document.getArray("inbox").toJSON()); + const ret = await serviceClient + .from("documents") + .update( + { data: "\\x" + data.state.toString("hex") }, // add \x for postgres binary data + { count: "exact" } + ) + .eq("nano_id", data.documentName) + .select(); + if (ret.data?.length !== 1) { + throw new Error( + "unexpected: not found when storing " + data.documentName + ); + } + }, + }); + } + + async onAuthenticate(data: onAuthenticatePayload) { + if (data.documentName.length < 5) { + throw new Error("invalid document name"); + } + console.log("authenticate ", data.documentName); + + const supabase = await createAnonClient(); + + if (!data.token) { + throw new Error("invalid token"); + } else if (data.token === "guest") { + // no-op, use anonClient withput session + } else { + const [access_token, refresh_token] = data.token.split("$"); + + if (!access_token || !refresh_token) { + throw new Error("invalid token"); + } + await supabase.auth.setSession({ access_token, refresh_token }); + } + + this.supabaseMap.set(data.socketId, supabase); + + // TODO: find alternative for updated_at + const ret = await supabase + .from("documents") + .update({ updated_at: JSON.stringify(new Date()) }, { count: "exact" }) + .eq("nano_id", data.documentName); + + if (ret.count === 1) { + // document exists and was able to update it, so has write access + console.log("read+write", data.documentName); + return; + } + + // we couldn't update, perhaps it's readonly? + const ret2 = await supabase + .from("documents") + .select(undefined, { count: "exact" }) + .eq("nano_id", data.documentName); + + if (ret2.count === 1) { + // document exists, but user only has read access + data.connection.readOnly = true; + // console.log("readonly", data.documentName); + return; + } + + // check with service account if document exists + const adminClient = await createServiceClient(); + const retAdmin = await adminClient + .from("documents") + .select(undefined, { count: "exact" }) + .eq("nano_id", data.documentName); + + if (retAdmin.count === 1) { + console.log("no access", retAdmin); + // document exists, but user has no access + throw new Error("no access"); + } + console.log("not found", data.documentName, retAdmin); + // document doesn't exist, user should create it first + throw new Error("not found"); + } + + // TODO: lock this function with a mutex? + refsChanged = async ( + socketId: string, + documentId: string, + event: Y.YEvent[], + tr: Y.Transaction + ) => { + const supabase = this.supabaseMap.get(socketId); + if (!supabase) { + throw new Error("unexpected: no db client on store"); + } + + if (!documentId) { + throw new Error("unexpected: no documentId in refsChanged"); + } + + const children = await supabase + .from("document_relations") + .select("child_id") + .eq("parent_id", documentId); + + if (!children.data || children.error) { + throw new Error("failed to fetch rels"); + } + const existing = new Set(children.data.map((c) => c.child_id)); + + const serviceClient = await createServiceClient(); + + const refs = [...tr.doc.getMap("refs").values()] + .filter((r) => r.namespace === "typecell" && r.type === "childOf") // TODO: use ChildReference + .map((r) => r.target as string); + + const refsIds = await serviceClient + .from("documents") + .select("id") + .in("nano_id", refs); + + if (!refsIds.data || refsIds.error) { + throw new Error("failed to fetch refs"); + } + const refsSet = new Set(refsIds.data.map((d) => d.id)); + + const toRemove: string[] = []; + const toAdd: string[] = []; + existing.forEach((e) => { + // TODO, remove ! + if (!refsSet.has(e)) { + toRemove.push(e!); + } + }); + + refsSet.forEach((id) => { + if (!existing.has(id)) { + toAdd.push(id); + } + }); + + if (toRemove.length) { + const ret = await supabase + .from("document_relations") + .delete() + .eq("parent_id", documentId) + .in("child_id", toRemove); + + if (ret.error) { + throw new Error( + "error executing supabase request (remove) " + ret.error.message + ); + } + } + + if (toAdd.length) { + const ret = await supabase + .from("document_relations") + .insert(toAdd.map((e) => ({ parent_id: documentId, child_id: e }))); + + if (ret.error) { + throw new Error( + "error executing supabase request (add) " + ret.error.message + ); + } + } + }; + + private refListenersByDocument = new WeakMap(); + + async afterLoadDocument(data: onLoadDocumentPayload): Promise { + console.log("afterLoadDocument", data.documentName); + if (this.refListenersByDocument.has(data.document)) { + throw new Error("unexpected: refListener already set"); + } + + const refListener = (event: Y.YEvent[], tr: Y.Transaction) => + this.refsChanged( + data.socketId, + documentIdByDocument.get(data.document)!, + event, + tr + ); + + data.document.getMap("refs").observeDeep(refListener); + console.log("set reflistener", data.document.guid); + this.refListenersByDocument.set(data.document, refListener); + + await super.onLoadDocument(data); + } + + async onDisconnect(data: onDisconnectPayload): Promise { + if (data.clientsCount === 0) { + console.log("remove reflistener", data.document.guid); + const refListener = this.refListenersByDocument.get(data.document); + if (!refListener) { + console.error("unexpected: refListener not set"); // TODO should be an error + // throw new Error("unexpected: refListener not set"); + } + + data.document.getMap("refs").unobserveDeep(refListener); + this.refListenersByDocument.delete(data.document); + } + } + + // async onChange(data: onChangePayload): Promise { + // console.log( + // "ONCHANGE", + // data.documentName, + // data.document.getArray("inbox").toJSON() + // ); + // } + + async beforeHandleMessage(data: beforeHandleMessagePayload): Promise { + // console.log("message", data); + return undefined; + } +} diff --git a/packages/server/src/hocuspocus/extension-supabase/hocuspocus.test.ts b/packages/server/src/hocuspocus/extension-supabase/hocuspocus.test.ts new file mode 100644 index 000000000..eb9597b51 --- /dev/null +++ b/packages/server/src/hocuspocus/extension-supabase/hocuspocus.test.ts @@ -0,0 +1,266 @@ +import { Server } from "@hocuspocus/server"; +import { beforeAll, describe, expect, it } from "vitest"; +import ws from "ws"; +import * as Y from "yjs"; +import { + createDocument, + createHPProvider, + createRandomUser, + createWsProvider, +} from "../../supabase/test/supabaseTestUtil"; +import { SupabaseHocuspocus } from "./SupabaseHocuspocus"; + +let server: typeof Server; +beforeAll(async () => { + // await resetSupabaseDB(); + server = Server.configure({ + extensions: [new SupabaseHocuspocus({})], + debounce: 0, + }); + await server.listen(0); // 0 for random port +}); +/* +it("should sync user data via yjs", async () => { + const ydoc = new Y.Doc(); + + let pResolve = () => {}; + const p = new Promise((resolve) => { + pResolve = resolve; + }); + const wsProvider = new HocuspocusProviderWebsocket({ + url: "ws://localhost:1234", + WebSocketPolyfill: ws, + }); + + const provider = new HocuspocusProvider({ + name: generateId(), + document: ydoc, + token: alice.session?.access_token, + onAuthenticated: () => { + console.log("onAuthenticated"); + }, + onAuthenticationFailed(data) { + console.log("onAuthenticationFailed", data); + }, + onStatus: (data) => { + console.log("onStatus", data); + }, + onSynced: () => { + console.log("onSynced"); + pResolve(); + }, + onConnect() { + console.log("onConnect"); + }, + websocketProvider: wsProvider, + broadcast: false, + }); + + provider.on("awarenessUpdate", () => { + console.log("awareness"); + }); + await p; + ydoc.getMap("hello").set("world", "hello"); + await new Promise((resolve) => setTimeout(resolve, 3000)); + console.log("next change"); + ydoc.getMap("hello").set("world", "hello2"); + await new Promise((resolve) => setTimeout(resolve, 1000)); + // await provider.connect(); + // await p; + // provider.on("synced", () => {}); +});*/ + +describe("SupabaseHocuspocus", () => { + let alice: Awaited>; + let bob: Awaited>; + + beforeAll(async () => { + console.log("create alice"); + alice = await createRandomUser("alice"); + console.log("create bob"); + bob = await createRandomUser("bob"); + }); + + describe("Private", () => { + let docId: string; + beforeAll(async () => { + const doc = createDocument(alice.user!.id, "", "no-access"); + const ret = await alice.supabase.from("documents").insert(doc).select(); + expect(ret.error).toBeNull(); + docId = ret.data![0].nano_id; + }); + + it.skip("should sync when Alice reopens", async () => { + const ydoc = new Y.Doc(); + + const wsProvider = createWsProvider(server.URL, ws); + + const provider = createHPProvider( + docId, + ydoc, + alice.session?.access_token + "$" + alice.session?.refresh_token, + wsProvider + ); + + ydoc.getMap("mymap").set("hello", "world"); + provider.disconnect(); + wsProvider.disconnect(); + await new Promise((resolve) => setTimeout(resolve, 1000)); + await wsProvider.connect(); + + const ydoc2 = new Y.Doc(); + const provider2 = createHPProvider( + docId, + ydoc, + alice.session?.access_token + "", // TODO + wsProvider + ); + await new Promise((resolve) => setTimeout(resolve, 1000)); + expect(ydoc2.getMap("mymap").get("hello")).toBe("world"); + }); + + it.skip("should sync when Alice opens 2 connections", async () => { + const ydoc = new Y.Doc(); + + const wsProvider = createWsProvider(server.URL, ws); + + const provider = createHPProvider( + docId, + ydoc, + alice.session?.access_token + "$" + alice.session?.refresh_token, + wsProvider + ); + + ydoc.getMap("mymap").set("hello", "world"); + + const ydoc2 = new Y.Doc(); + const provider2 = createHPProvider( + docId, + ydoc2, + alice.session?.access_token + "", // TODO + wsProvider + ); + + ydoc2.getMap("anothermap").set("hello", "world"); + await new Promise((resolve) => setTimeout(resolve, 1000)); + expect(ydoc2.getMap("mymap").get("hello")).toBe("world"); + expect(ydoc.getMap("anothermap").get("hello")).toBe("world"); + }); + + it.skip("should not sync to Bob", async () => { + const ydoc = new Y.Doc(); + + const wsProvider = createWsProvider(server.URL, ws); + + const provider = createHPProvider( + docId, + ydoc, + alice.session?.access_token + "$" + alice.session?.refresh_token, + wsProvider + ); + + ydoc.getMap("mymap").set("hello", "world"); + + const ydoc2 = new Y.Doc(); + const provider2 = createHPProvider( + docId, + ydoc2, + bob.session?.access_token + "", // TODO + wsProvider + ); + ydoc2.getMap("anothermap").set("hello", "world"); + await new Promise((resolve) => setTimeout(resolve, 1000)); + expect(ydoc2.getMap("mymap").get("hello")).toBe("world"); + expect(ydoc.getMap("anothermap").get("hello")).toBe("world"); + }); + }); + + describe("Public", () => { + it("should sync when Alice reopens", async () => {}); + + it("should sync when Alice opens 2 connections", async () => {}); + + it("should sync to Bob", async () => {}); + + it("should sync from Bob", async () => {}); + }); + + describe("Readonly", () => { + it("should sync when Alice reopens", async () => {}); + + it("should sync when Alice opens 2 connections", async () => {}); + + it("should sync to Bob", async () => {}); + + it("should not sync from Bob", async () => {}); + }); + + describe("Misc", () => { + it("should not sync a non-existing doc", async () => {}); + + it("should not sync changes to Bob after a doc has been made private", async () => {}); + }); + + describe("child / parent refs", () => { + let docId: string; + let docDbID: string; + + let docBId: string; + let docBDbID: string; + + beforeAll(async () => { + const doc = createDocument(alice.user!.id, "", "no-access"); + const ret = await alice.supabase.from("documents").insert(doc).select(); + expect(ret.error).toBeNull(); + docId = ret.data![0].nano_id; + docDbID = ret.data![0].id; + + const docB = createDocument(bob.user!.id, "", "no-access"); + const retB = await bob.supabase.from("documents").insert(docB).select(); + expect(retB.error).toBeNull(); + docBId = retB.data![0].nano_id; + docBDbID = retB.data![0].id; + }); + + it.skip("should add and remove refs to database", async () => { + const ydoc = new Y.Doc(); + + const wsProvider = createWsProvider(server.URL, ws); + + const provider = createHPProvider( + docId, + ydoc, + alice.session?.access_token + "$" + alice.session?.refresh_token, + wsProvider + ); + + ydoc.getMap("refs").set("fakekey", { + target: docBId, + type: "child", + namespace: "typecell", + }); + + await new Promise((resolve) => setTimeout(resolve, 1000)); + + const refs = await alice.supabase + .from("document_relations") + .select() + .eq("child_id", docBDbID) + .eq("parent_id", docDbID); + + expect(refs.data?.length).toBe(1); + + ydoc.getMap("refs").delete("fakekey"); + + await new Promise((resolve) => setTimeout(resolve, 1000)); + + const newrefs = await alice.supabase + .from("document_relations") + .select() + .eq("child_id", docBDbID) + .eq("parent_id", docDbID); + + expect(newrefs.data?.length).toBe(0); + }); + }); +}); diff --git a/packages/server/src/hocuspocus/extension-supabase/util.test.ts b/packages/server/src/hocuspocus/extension-supabase/util.test.ts new file mode 100644 index 000000000..ed4e1d35d --- /dev/null +++ b/packages/server/src/hocuspocus/extension-supabase/util.test.ts @@ -0,0 +1,19 @@ +import { describe, expect, it } from "vitest"; +import * as Y from "yjs"; + +function toHex(arr: Uint8Array) { + return [...arr].map((x) => x.toString(16).padStart(2, "0") as any).join(""); +} + +describe("SupabaseHocuspocus hex util tests", () => { + it("should sync when Alice opens 2 connections", async () => { + const ydoc = new Y.Doc(); + ydoc.getMap("mymap").set("hello", "world"); + + const update = Y.encodeStateAsUpdate(ydoc); + + const hexMethod1 = "\\x" + Buffer.from(update).toString("hex"); + const hexMethod2 = "\\x" + toHex(update); + expect(hexMethod1).toEqual(hexMethod2); + }); +}); diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts new file mode 100644 index 000000000..4bbfdaef6 --- /dev/null +++ b/packages/server/src/index.ts @@ -0,0 +1,22 @@ +import { Logger } from "@hocuspocus/extension-logger"; +import { Server } from "@hocuspocus/server"; +import * as dotenv from "dotenv"; +import { SupabaseHocuspocus } from "./hocuspocus/extension-supabase/SupabaseHocuspocus.js"; + +if (process.env.MODE === "development") { + dotenv.config({ path: ".env.development" }); +} else if (process.env.MODE === "staging") { + dotenv.config({ path: ".env.staging" }); +} else if (process.env.MODE === "production") { + dotenv.config({ path: ".env.production" }); +} else { + throw new Error( + "Invalid MODE, run with env MODE=development|staging|production" + ); +} + +const server = Server.configure({ + extensions: [new Logger(), new SupabaseHocuspocus({})], +}); + +server.listen(parseInt(process.env.PORT)); diff --git a/packages/server/src/supabase/supabase.ts b/packages/server/src/supabase/supabase.ts new file mode 100644 index 000000000..7911669b8 --- /dev/null +++ b/packages/server/src/supabase/supabase.ts @@ -0,0 +1,57 @@ +import { createClient } from "@supabase/supabase-js"; +import type { Database } from "../@types/schema"; + +const storage = { + getItem: (_data: any) => { + // console.error("getItem not expected to be called", data); + // throw new Error("getItem not expected to be called"); + return null; + }, + setItem: () => { + console.error("setItem not expected to be called"); + throw new Error("setItem not expected to be called"); + }, + removeItem: () => { + console.error("removeItem not expected to be called"); + throw new Error("removeItem not expected to be called"); + }, +}; + +export async function createServiceClient() { + const supabase = createClient( + process.env.VITE_TYPECELL_SUPABASE_URL!, + process.env.VITE_TYPECELL_SUPABASE_SERVICE_KEY!, + { + auth: { + autoRefreshToken: false, + persistSession: false, + storage, + }, + } + ); + return supabase; +} + +export async function createAnonClient( + env: { + VITE_TYPECELL_SUPABASE_URL: string; + VITE_TYPECELL_SUPABASE_ANON_KEY: string; + } = { + VITE_TYPECELL_SUPABASE_URL: process.env.VITE_TYPECELL_SUPABASE_URL!, + VITE_TYPECELL_SUPABASE_ANON_KEY: + process.env.VITE_TYPECELL_SUPABASE_ANON_KEY!, + } +) { + const supabase = createClient( + env.VITE_TYPECELL_SUPABASE_URL!, + env.VITE_TYPECELL_SUPABASE_ANON_KEY!, + { + auth: { + autoRefreshToken: false, + persistSession: false, + storage, + }, + } + ); + return supabase; +} diff --git a/packages/server/src/supabase/test/supabase.access.test.ts b/packages/server/src/supabase/test/supabase.access.test.ts new file mode 100644 index 000000000..c2606e570 --- /dev/null +++ b/packages/server/src/supabase/test/supabase.access.test.ts @@ -0,0 +1,79 @@ +import { beforeAll, describe, expect, it } from "vitest"; +import { createAnonClient } from "../supabase"; +import { createDocument, createRandomUser } from "./supabaseTestUtil"; + +describe("supabase access tests", () => { + let alice: Awaited>; + let bob: Awaited>; + + beforeAll(async () => { + alice = await createRandomUser("alice"); + bob = await createRandomUser("bob"); + // await resetSupabaseDB(); + // await stopSupabase(); + // await startSupabase(); + }); + it("alice: should be able to change name", async () => { + const ret = await alice.supabase.auth.updateUser({ + data: { + customValue: 24, + }, + }); + expect(ret.error).toBeNull(); + expect(ret.data.user!.user_metadata.customValue).toBe(24); + }); + + it("anon: should not be able to create document", async () => { + const supabase = await createAnonClient(); + const ret = await supabase + .from("documents") + .insert(createDocument(alice.user!.id, "hello", "no-access")); + + expect(ret.error).not.toBeNull(); + }); + + it("alice: should be able to create private document", async () => { + const ret = await alice.supabase + .from("documents") + .insert(createDocument(alice.user!.id, "hello", "no-access")); + console.log(ret.error); + expect(ret.error).toBeNull(); + }); + + it("alice: should not be able to create private document for someone else", async () => { + const ret = await alice.supabase + .from("documents") + .insert(createDocument(bob.user!.id, "hello", "no-access")); + console.log(ret.error); + expect(ret.error).not.toBeNull(); + }); + + it("bob: should be able to read public document by alice", async () => { + const ret = await alice.supabase + .from("documents") + .insert(createDocument(alice.user!.id, "hello", "write")) + .select(); + + const retByBob = await bob.supabase + .from("documents") + .select() + .eq("id", ret.data![0].id); + + expect(retByBob.data?.length).toBe(1); + }); + + it("bob: should not be able to read private document by alice", async () => { + const ret = await alice.supabase + .from("documents") + .insert(createDocument(alice.user!.id, "hello", "no-access")) + .select(); + + console.log(ret.data![0].id); + const retByBob = await bob.supabase + .from("documents") + .select() + .eq("id", ret.data![0].id); + + expect(retByBob.data?.length).toBe(0); + }); +}); diff --git a/packages/server/src/supabase/test/supabase.basics.test.ts b/packages/server/src/supabase/test/supabase.basics.test.ts new file mode 100644 index 000000000..d1b902bce --- /dev/null +++ b/packages/server/src/supabase/test/supabase.basics.test.ts @@ -0,0 +1,38 @@ +import { beforeAll, describe, expect, it } from "vitest"; +import { createAnonClient, createServiceClient } from "../supabase"; +import { createRandomUser } from "./supabaseTestUtil"; + +describe("supabase basics", () => { + beforeAll(async () => { + // await resetSupabaseDB(); + // await stopSupabase(); + // await startSupabase(); + }); + it("anon: should be able to sign up", async () => { + const data = await createRandomUser("alice"); + expect(data.user).not.toBeNull(); + expect(data.session).not.toBeNull(); + }); + + it("anon: should not be able to create user via admin", async () => { + const supabase = await createAnonClient(); + const { data, error } = await supabase.auth.admin.createUser({ + email: `user2-${Date.now()}@emailasdf.com`, + password: "password-2", + user_metadata: { name: "test" }, + }); + expect(error).not.toBeNull(); + expect(data.user).toBeNull(); + }); + + it("admin: should be able to create a user", async () => { + const supabase = await createServiceClient(); + const { data, error } = await supabase.auth.admin.createUser({ + email: `user2-${Date.now()}@emailasdf.com`, + password: "password-2", + user_metadata: { name: "test" }, + }); + expect(error).toBeNull(); + expect(data.user).not.toBeNull(); + }); +}); diff --git a/packages/server/src/supabase/test/supabase.cascadingaccess.test.ts b/packages/server/src/supabase/test/supabase.cascadingaccess.test.ts new file mode 100644 index 000000000..bb9f84316 --- /dev/null +++ b/packages/server/src/supabase/test/supabase.cascadingaccess.test.ts @@ -0,0 +1,139 @@ +import { beforeAll, describe, expect, it } from "vitest"; +import { createDocument, createRandomUser } from "./supabaseTestUtil"; + +/* + +I want to enforce the following rules in postgres: + +- a user's read / write access can be set on any document +- a document can be a child of one or more other documents +- a document can be a parent of one or more other documents +- if a user has specific access to a document, then that is the access they have +- if a user does not have specific access to a document, then they have access based on the access of their parent documents. This works recursively up the tree. If at some point a document has multiple parents, then the user's access is the most restrictive of the parent documents. +*/ +describe("supabase update tests", () => { + let alice: Awaited>; + let bob: Awaited>; + + beforeAll(async () => { + alice = await createRandomUser("alice"); + bob = await createRandomUser("bob"); + }); + + /* +Example: + +- Document A is a child of Document B +- Document B is a child of Document C +- Document A is also a child of Document D +- User Alice has read/write access to Document C, and Document D +- User Alice explicitly has no access to document B +- In this case, Alice does not have access to document A, because even though it has access to document D it doesn't have access to document B. It doesn't have access to document B, because this has been explicitly denied, even though Alice has access to B's parent C + +*/ + it.skip("test first scenario", async () => { + const docA = createDocument(alice.user!.id, "helloA", "write"); + const docB = createDocument(alice.user!.id, "helloB", "write"); + const docC = createDocument(alice.user!.id, "helloC", "write"); + const docD = createDocument(alice.user!.id, "helloD", "write"); + const ret = await alice.supabase + .from("documents") + .insert([docA, docB, docC, docD]) + .select(); + console.log(ret.error); + expect(ret.error).toBeNull(); + + const retRels = await alice.supabase.from("document_relations").insert([ + { child_id: docA.id, parent_id: docB.id }, + { child_id: docB.id, parent_id: docC.id }, + { child_id: docA.id, parent_id: docD.id }, + ]); + expect(retRels.error).toBeNull(); + + const retPerms = await alice.supabase.from("document_permissions").insert([ + { + document_id: docC.id, + user_id: bob.user!.id, + access_level: "read", + }, + { + document_id: docD.id, + user_id: bob.user!.id, + access_level: "read", + }, + { + document_id: docB.id, + user_id: bob.user!.id, + access_level: "no-access", + }, + ]); + + expect(retPerms.error).toBeNull(); + + const ret2 = await bob.supabase + .from("documents") + .select() + .eq("id", docA.id); + + expect(ret2.error).toBeNull(); + expect(ret2.data!.length).toBe(0); + }); + + /* + Another example: + +- Document A is a child of Document B +- Document B is a child of Document C +- Document A is also a child of Document D +- User Alice has read/write access to Document B, and Document D +- User Alice explicitly has no access to document C +- In this case, Alice does have access to document A, because it has access to document D and to document B. It has access to document B because it's been granted explicitly, even though she does not have access to it's parent C +*/ + it("test second scenario", async () => { + const docA = createDocument(alice.user!.id, "helloA", "write"); + const docB = createDocument(alice.user!.id, "helloB", "write"); + const docC = createDocument(alice.user!.id, "helloC", "write"); + const docD = createDocument(alice.user!.id, "helloD", "write"); + const ret = await alice.supabase + .from("documents") + .insert([docA, docB, docC, docD]) + .select(); + console.log(ret.error); + expect(ret.error).toBeNull(); + + const retRels = await alice.supabase.from("document_relations").insert([ + { child_id: docA.id, parent_id: docB.id }, + { child_id: docB.id, parent_id: docC.id }, + { child_id: docA.id, parent_id: docD.id }, + ]); + expect(retRels.error).toBeNull(); + + const retPerms = await alice.supabase.from("document_permissions").insert([ + { + document_id: docC.id, + user_id: bob.user!.id, + access_level: "no-access", + }, + { + document_id: docD.id, + user_id: bob.user!.id, + access_level: "read", + }, + { + document_id: docB.id, + user_id: bob.user!.id, + access_level: "read", + }, + ]); + + expect(retPerms.error).toBeNull(); + + const ret2 = await bob.supabase + .from("documents") + .select() + .eq("id", docA.id); + + expect(ret2.error).toBeNull(); + expect(ret2.data!.length).toBe(1); + }); +}); diff --git a/packages/server/src/supabase/test/supabase.updateaccess.test.ts b/packages/server/src/supabase/test/supabase.updateaccess.test.ts new file mode 100644 index 000000000..a01f9a42a --- /dev/null +++ b/packages/server/src/supabase/test/supabase.updateaccess.test.ts @@ -0,0 +1,419 @@ +import { beforeAll, describe, expect, it } from "vitest"; +import type { Database } from "../../@types/schema"; +import { createDocument, createRandomUser } from "./supabaseTestUtil"; + +// revoke update on documents in schema public from anon; +// grant update(data, is_public, updated_at) on documents in schema public from anon; + +describe("supabase update tests", () => { + let alice: Awaited>; + let bob: Awaited>; + + beforeAll(async () => { + alice = await createRandomUser("alice"); + bob = await createRandomUser("bob"); + }); + + /** + * Ways to secure updates: + * - https://stackoverflow.com/questions/72756376/supabase-solutions-for-column-level-security + * - https://discord.com/channels/839993398554656828/1078039838462324868 + * - https://github.com/orgs/supabase/discussions/656#discussioncomment-335362 + * + * currently using a mix of update grants and triggers (see schema definition in migrations) + */ + + type Row = Database["public"]["Tables"]["documents"]["Row"]; + // create typeof sample policies from rownames + type PoliciesType = { + [key in keyof Row]: { + sampleValue: Row[key]; + checkValue?: Row[key]; + policy: "allowed" | "forbidden" | "only-owner"; + }; + }; + + describe("public document", () => { + const policies: PoliciesType = { + id: { + sampleValue: "4a9d2598-a52b-44a6-aad3-5917cd02b8e9", + policy: "forbidden", + }, + created_at: { + sampleValue: "2021-01-01T00:00:00.000Z", + policy: "forbidden", + }, + user_id: { + sampleValue: "4a9d2598-a52b-44a6-aad3-5917cd02b8e9", + policy: "forbidden", + }, + nano_id: { + sampleValue: "hello", + policy: "forbidden", + }, + data: { + sampleValue: "hello", + policy: "allowed", + checkValue: "\\x" + Buffer.from("hello").toString("hex"), + }, + public_access_level: { + sampleValue: "no-access", + policy: "only-owner", + }, + updated_at: { + sampleValue: "2021-01-01T00:00:00+00:00", + policy: "allowed", + }, + }; + + describe("owner", () => { + let docId: string; + + beforeAll(async () => { + const doc = createDocument(alice.user!.id, "hello", "write"); + const ret = await alice.supabase.from("documents").insert(doc).select(); + expect(ret.error).toBeNull(); + expect(ret.data![0].id).not.toBeNull(); + docId = ret.data![0].id; + }); + + for (const [key, value] of Object.entries(policies)) { + if (value.policy === "allowed" || value.policy === "only-owner") { + it(`owner can update ${key}`, async () => { + const ret = await alice.supabase + .from("documents") + .update({ [key]: value.sampleValue }) + .eq("id", docId) + .select(); + + expect(ret.error).toBeNull(); + expect((ret.data as any)![0][key]).toBe( + value.checkValue || value.sampleValue + ); + }); + } else if (value.policy === "forbidden") { + it(`owner can't update ${key}`, async () => { + const ret = await alice.supabase + .from("documents") + .update({ [key]: value.sampleValue }) + .eq("id", docId) + .select(); + + expect(ret.error).not.toBeNull(); + expect(ret.error?.message).toBe( + "permission denied for table documents" + ); + expect(ret.data).toBeNull(); + }); + } + } + }); + + describe("other user", () => { + let docId: string; + + beforeAll(async () => { + const doc = createDocument(alice.user!.id, "hello", "write"); + const ret = await alice.supabase.from("documents").insert(doc).select(); + expect(ret.error).toBeNull(); + expect(ret.data![0].id).not.toBeNull(); + docId = ret.data![0].id; + }); + + for (const [key, value] of Object.entries(policies)) { + if (value.policy === "allowed") { + it(`other user can update ${key}`, async () => { + const ret = await bob.supabase + .from("documents") + .update({ [key]: value.sampleValue }) + .eq("id", docId) + .select(); + + expect(ret.error).toBeNull(); + expect((ret.data as any)![0][key]).toBe( + value.checkValue || value.sampleValue + ); + }); + } else if ( + value.policy === "forbidden" || + value.policy === "only-owner" + ) { + it(`other user can't update ${key}`, async () => { + const ret = await bob.supabase + .from("documents") + .update({ [key]: value.sampleValue }, { count: "exact" }) + .eq("id", docId) + .select(); + + expect(ret.error).not.toBeNull(); + if (value.policy === "only-owner") { + expect(ret.count).toBeNull(); + expect(ret.error?.message).toBe( + "Cannot update column unless auth.uid() = user_id." + ); + } else { + expect(ret.error?.message).toBe( + "permission denied for table documents" + ); + } + + expect(ret.data).toBeNull(); + }); + } + } + }); + }); + + describe("private document", () => { + const policies: PoliciesType = { + id: { + sampleValue: "4a9d2598-a52b-44a6-aad3-5917cd02b8e9", + policy: "forbidden", + }, + created_at: { + sampleValue: "2021-01-01T00:00:00.000Z", + policy: "forbidden", + }, + user_id: { + sampleValue: "4a9d2598-a52b-44a6-aad3-5917cd02b8e9", + policy: "forbidden", + }, + nano_id: { + sampleValue: "hello", + policy: "forbidden", + }, + data: { + sampleValue: "hello", + policy: "only-owner", + checkValue: "\\x" + Buffer.from("hello").toString("hex"), + }, + public_access_level: { + sampleValue: "write", + policy: "only-owner", + }, + updated_at: { + sampleValue: "2021-01-01T00:00:00+00:00", + policy: "only-owner", + }, + }; + + describe("owner", () => { + let docId: string; + + beforeAll(async () => { + const doc = createDocument(alice.user!.id, "hello", "no-access"); + const ret = await alice.supabase.from("documents").insert(doc).select(); + expect(ret.error).toBeNull(); + expect(ret.data![0].id).not.toBeNull(); + docId = ret.data![0].id; + }); + + for (const [key, value] of Object.entries(policies)) { + if (value.policy === "allowed" || value.policy === "only-owner") { + it(`owner can update ${key}`, async () => { + const ret = await alice.supabase + .from("documents") + .update({ [key]: value.sampleValue }, { count: "exact" }) + .eq("id", docId) + .select(); + + expect(ret.error).toBeNull(); + expect(ret.count).toBe(1); + expect((ret.data as any)![0][key]).toBe( + value.checkValue || value.sampleValue + ); + }); + } else if (value.policy === "forbidden") { + it(`owner can't update ${key}`, async () => { + const ret = await alice.supabase + .from("documents") + .update({ [key]: value.sampleValue }, { count: "exact" }) + .eq("id", docId) + .select(); + expect(ret.count).toBeNull(); + expect(ret.error).not.toBeNull(); + expect(ret.error?.message).toBe( + "permission denied for table documents" + ); + expect(ret.data).toBeNull(); + }); + } + } + }); + + describe("other user", () => { + let docId: string; + + beforeAll(async () => { + const doc = createDocument(alice.user!.id, "hello", "no-access"); + const ret = await alice.supabase.from("documents").insert(doc).select(); + expect(ret.error).toBeNull(); + expect(ret.data![0].id).not.toBeNull(); + docId = ret.data![0].id; + }); + + for (const [key, value] of Object.entries(policies)) { + if (value.policy === "allowed") { + it(`other user can update ${key}`, async () => { + const ret = await bob.supabase + .from("documents") + .update({ [key]: value.sampleValue }, { count: "exact" }) + .eq("id", docId) + .select(); + + expect(ret.count).toBe(1); + expect(ret.error).toBeNull(); + expect((ret.data as any)![0][key]).toBe( + value.checkValue || value.sampleValue + ); + }); + } else if ( + value.policy === "forbidden" || + value.policy === "only-owner" + ) { + it(`other user can't update ${key}`, async () => { + const ret = await bob.supabase + .from("documents") + .update({ [key]: value.sampleValue }, { count: "exact" }) + .eq("id", docId); + + if (value.policy === "only-owner") { + expect(ret.count).toBe(0); + } else { + expect(ret.error?.message).toBe( + "permission denied for table documents" + ); + } + }); + } + } + }); + }); + + describe("read-only document", () => { + const policies: PoliciesType = { + id: { + sampleValue: "4a9d2598-a52b-44a6-aad3-5917cd02b8e9", + policy: "forbidden", + }, + created_at: { + sampleValue: "2021-01-01T00:00:00.000Z", + policy: "forbidden", + }, + user_id: { + sampleValue: "4a9d2598-a52b-44a6-aad3-5917cd02b8e9", + policy: "forbidden", + }, + nano_id: { + sampleValue: "hello", + policy: "forbidden", + }, + data: { + sampleValue: "hello", + policy: "only-owner", + checkValue: "\\x" + Buffer.from("hello").toString("hex"), + }, + public_access_level: { + sampleValue: "write", + policy: "only-owner", + }, + updated_at: { + sampleValue: "2021-01-01T00:00:00+00:00", + policy: "only-owner", + }, + }; + + describe("owner", () => { + let docId: string; + + beforeAll(async () => { + const doc = createDocument(alice.user!.id, "hello", "read"); + const ret = await alice.supabase.from("documents").insert(doc).select(); + expect(ret.error).toBeNull(); + expect(ret.data![0].id).not.toBeNull(); + docId = ret.data![0].id; + }); + + for (const [key, value] of Object.entries(policies)) { + if (value.policy === "allowed" || value.policy === "only-owner") { + it(`owner can update ${key}`, async () => { + const ret = await alice.supabase + .from("documents") + .update({ [key]: value.sampleValue }, { count: "exact" }) + .eq("id", docId) + .select(); + + expect(ret.error).toBeNull(); + expect(ret.count).toBe(1); + expect((ret.data as any)![0][key]).toBe( + value.checkValue || value.sampleValue + ); + }); + } else if (value.policy === "forbidden") { + it(`owner can't update ${key}`, async () => { + const ret = await alice.supabase + .from("documents") + .update({ [key]: value.sampleValue }, { count: "exact" }) + .eq("id", docId) + .select(); + expect(ret.count).toBeNull(); + expect(ret.error).not.toBeNull(); + expect(ret.error?.message).toBe( + "permission denied for table documents" + ); + expect(ret.data).toBeNull(); + }); + } + } + }); + + describe("other user", () => { + let docId: string; + + beforeAll(async () => { + const doc = createDocument(alice.user!.id, "hello", "read"); + const ret = await alice.supabase.from("documents").insert(doc).select(); + expect(ret.error).toBeNull(); + expect(ret.data![0].id).not.toBeNull(); + docId = ret.data![0].id; + }); + + for (const [key, value] of Object.entries(policies)) { + if (value.policy === "allowed") { + it(`other user can update ${key}`, async () => { + const ret = await bob.supabase + .from("documents") + .update({ [key]: value.sampleValue }, { count: "exact" }) + .eq("id", docId) + .select(); + + expect(ret.count).toBe(1); + expect(ret.error).toBeNull(); + expect((ret.data as any)![0][key]).toBe( + value.checkValue || value.sampleValue + ); + }); + } else if ( + value.policy === "forbidden" || + value.policy === "only-owner" + ) { + it(`other user can't update ${key}`, async () => { + const ret = await bob.supabase + .from("documents") + .update({ [key]: value.sampleValue }, { count: "exact" }) + .eq("id", docId) + .select(); + + if (value.policy === "only-owner") { + expect(ret.count).toBe(0); + } else { + expect(ret.error?.message).toBe( + "permission denied for table documents" + ); + } + }); + } + } + }); + }); +}); diff --git a/packages/server/src/supabase/test/supabaseCLIUtil.ts b/packages/server/src/supabase/test/supabaseCLIUtil.ts new file mode 100644 index 000000000..7aa3ebaa9 --- /dev/null +++ b/packages/server/src/supabase/test/supabaseCLIUtil.ts @@ -0,0 +1,21 @@ +import * as cp from "child_process"; + +export async function stopSupabase() { + console.log("supabase stop"); + cp.execSync("./supabase.sh stop"); + console.log("end: supabase stop"); +} + +export async function startSupabase() { + console.log("supabase start"); + cp.execSync("./supabase.sh start"); + console.log("end: supabase start"); +} + +export async function resetSupabaseDB() { + console.log("reset db"); + // cp.execSync("npx --no supabase db reset"); + console.log("done reset db"); + // Wait for the database to be ready, in a not so nice way + await new Promise((resolve) => setTimeout(resolve, 2000)); +} diff --git a/packages/server/src/supabase/test/supabaseTestUtil.ts b/packages/server/src/supabase/test/supabaseTestUtil.ts new file mode 100644 index 000000000..dc3e335bb --- /dev/null +++ b/packages/server/src/supabase/test/supabaseTestUtil.ts @@ -0,0 +1,73 @@ +import { + HocuspocusProvider, + HocuspocusProviderWebsocket, +} from "@hocuspocus/provider"; +import { uniqueId } from "@typecell-org/common"; +import * as Y from "yjs"; +import { getRandomUserData } from "../../../../commonTest/src/randomUser"; +import { generateUuid } from "../../util/uuid"; +import { createAnonClient } from "../supabase"; + +export function createDocument( + userId: string, + data: string, + public_access_level: "read" | "write" | "no-access" +) { + const date = JSON.stringify(new Date()); + return { + id: generateUuid(), + created_at: date, + updated_at: date, + data, + nano_id: uniqueId.generateId("document"), + public_access_level, + user_id: userId, + } as const; +} + +export async function createRandomUser( + name: string, + env: { + VITE_TYPECELL_SUPABASE_URL: string; + VITE_TYPECELL_SUPABASE_ANON_KEY: string; + } = { + VITE_TYPECELL_SUPABASE_URL: process.env.VITE_TYPECELL_SUPABASE_URL!, + VITE_TYPECELL_SUPABASE_ANON_KEY: + process.env.VITE_TYPECELL_SUPABASE_ANON_KEY!, + } +) { + const userData = getRandomUserData(name); + + const supabase = await createAnonClient(env); + const { data, error } = await supabase.auth.signUp(userData); + if (error) { + throw error; + } + return { + user: data.user, + session: data.session, + supabase, + }; +} + +export function createWsProvider(url: string, ws?: any) { + return new HocuspocusProviderWebsocket({ + url, + WebSocketPolyfill: ws, + }); +} + +export function createHPProvider( + docId: string, + ydoc: Y.Doc, + token: string, + wsProvider: HocuspocusProviderWebsocket +) { + return new HocuspocusProvider({ + name: docId, + document: ydoc, + token, + websocketProvider: wsProvider, + broadcast: false, + }); +} diff --git a/packages/server/src/test/setup.ts b/packages/server/src/test/setup.ts new file mode 100644 index 000000000..b7065a994 --- /dev/null +++ b/packages/server/src/test/setup.ts @@ -0,0 +1,9 @@ +import { startSupabase } from "../supabase/test/supabaseCLIUtil"; + +export default async function () { + // in CI, supabase is already started + if (!process.env.CI) { + await startSupabase(); + } + // await resetSupabaseDB(); +} diff --git a/packages/server/src/util/uuid.ts b/packages/server/src/util/uuid.ts new file mode 100644 index 000000000..c98f957af --- /dev/null +++ b/packages/server/src/util/uuid.ts @@ -0,0 +1,6 @@ +import { v4 as uuidv4 } from "uuid"; + +export function generateUuid() { + // remove dashes because we can't easily use those in javascript variable names + return uuidv4(); +} diff --git a/packages/server/supabase.sh b/packages/server/supabase.sh new file mode 100755 index 000000000..b46e06fb7 --- /dev/null +++ b/packages/server/supabase.sh @@ -0,0 +1,8 @@ +#!/bin/bash +# because we don't want to check in the secrets (even though they are staging) +# we have to source them from a local file for config.toml to work and then run the supabase command +# only necessary for local development, as github actions will have the secrets in env already +source .env.local +export TYPECELL_GOOGLE_OAUTH_SECRET +export TYPECELL_GITHUB_OAUTH_SECRET +npx supabase "$@" \ No newline at end of file diff --git a/packages/server/supabase/.gitignore b/packages/server/supabase/.gitignore new file mode 100644 index 000000000..773c7c3e0 --- /dev/null +++ b/packages/server/supabase/.gitignore @@ -0,0 +1,3 @@ +# Supabase +.branches +.temp diff --git a/packages/server/supabase/config.toml b/packages/server/supabase/config.toml new file mode 100644 index 000000000..4e519067c --- /dev/null +++ b/packages/server/supabase/config.toml @@ -0,0 +1,82 @@ +# A string used to distinguish different Supabase projects on the same host. Defaults to the working +# directory name when running `supabase init`. +project_id = "typecell-next" + +[api] +# Port to use for the API URL. +port = 54321 +# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API +# endpoints. public and storage are always included. +schemas = ["public", "storage", "graphql_public"] +# Extra schemas to add to the search_path of every request. public is always included. +extra_search_path = ["public", "extensions"] +# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size +# for accidental or malicious requests. +max_rows = 1000 + +[db] +# Port to use for the local database URL. +port = 54322 +# The database major version to use. This has to be the same as your remote database's. Run `SHOW +# server_version;` on the remote database to check. +major_version = 15 + +[studio] +# Port to use for Supabase Studio. +port = 54323 + +# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they +# are monitored, and you can view the emails that would have been sent from the web interface. +[inbucket] +# Port to use for the email testing server web interface. +port = 54324 +smtp_port = 54325 +pop3_port = 54326 + +[storage] +# The maximum file size allowed (e.g. "5MB", "500KB"). +file_size_limit = "50MiB" + +[auth] +# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used +# in emails. +site_url = "http://localhost:3000" +# A list of *exact* URLs that auth providers are permitted to redirect to post authentication. +additional_redirect_urls = ["https://localhost:3000"] +# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 seconds (one +# week). +jwt_expiry = 3600 +# Allow/disallow new user signups to your project. +enable_signup = true + +[auth.email] +# Allow/disallow new user signups via email to your project. +enable_signup = true +# If enabled, a user will be required to confirm any email change on both the old, and new email +# addresses. If disabled, only the new email is required to confirm. +double_confirm_changes = true +# If enabled, users need to confirm their email address before signing in. +enable_confirmations = false + +# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, +# `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin`, `notion`, `twitch`, +# `twitter`, `slack`, `spotify`, `workos`, `zoom`. +[auth.external.github] +enabled = true +client_id = "Iv1.bdf3f05846bd5feb" +secret = "env(TYPECELL_GITHUB_OAUTH_SECRET)" +# Overrides the default auth redirectUrl. +redirect_uri = "http://localhost:54321/auth/v1/callback" +# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, +# or any other third-party OIDC providers. +url = "" + +[auth.external.google] +enabled = true +client_id = "1046482895817-hgrqvil6i6s7uhlfoosq0nhvhpf4n9je.apps.googleusercontent.com" +secret = "env(TYPECELL_GOOGLE_OAUTH_SECRET)" +# Overrides the default auth redirectUrl. +redirect_uri = "http://localhost:54321/auth/v1/callback" +# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, +# or any other third-party OIDC providers. +url = "" \ No newline at end of file diff --git a/packages/server/supabase/migrations/20230324133839_initial.sql b/packages/server/supabase/migrations/20230324133839_initial.sql new file mode 100644 index 000000000..795f4d89e --- /dev/null +++ b/packages/server/supabase/migrations/20230324133839_initial.sql @@ -0,0 +1,159 @@ +CREATE TYPE access_level AS ENUM ('no-access', 'read', 'write'); + +create table "public"."documents" ( + "id" uuid not null default uuid_generate_v4(), + "nano_id" character varying(20) not null, + "created_at" timestamp with time zone not null default now(), + "user_id" uuid not null, + "updated_at" timestamp with time zone not null default now(), + "data" bytea not null, + "public_access_level" access_level not null +); + +alter table "public"."documents" enable row level security; + +CREATE UNIQUE INDEX documents_nano_id_key ON public.documents USING btree (nano_id); + +CREATE UNIQUE INDEX documents_pkey ON public.documents USING btree (id); + +alter table "public"."documents" add constraint "documents_pkey" PRIMARY KEY using index "documents_pkey"; + +alter table "public"."documents" add constraint "documents_nano_id_key" UNIQUE using index "documents_nano_id_key"; + +alter table "public"."documents" add constraint "documents_user_id_fkey" FOREIGN KEY (user_id) REFERENCES auth.users(id) not valid; + +alter table "public"."documents" validate constraint "documents_user_id_fkey"; + +create policy "Enable delete for users based on user_id" +on "public"."documents" +as permissive +for delete +to authenticated +using ((auth.uid() = user_id)); + +revoke update on "public"."documents" from authenticated; +grant update(data, public_access_level, updated_at) on "public"."documents" to authenticated; + +CREATE OR REPLACE FUNCTION check_column_update() +RETURNS TRIGGER AS $$ +BEGIN + IF NEW.public_access_level IS DISTINCT FROM OLD.public_access_level THEN + IF auth.uid() IS DISTINCT FROM OLD.user_id THEN + RAISE EXCEPTION 'Cannot update column unless auth.uid() = user_id.'; + END IF; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_column_update_trigger +BEFORE UPDATE ON "public"."documents" +FOR EACH ROW +EXECUTE FUNCTION check_column_update(); + +CREATE TABLE document_relations ( + parent_id uuid REFERENCES documents(id) NOT NULL, + child_id uuid REFERENCES documents(id) NOT NULL, + UNIQUE (parent_id, child_id) +); + +CREATE TABLE document_permissions ( + document_id uuid REFERENCES documents(id) NOT NULL, + user_id uuid REFERENCES auth.users(id) NOT NULL, + access_level access_level NOT NULL, + UNIQUE (document_id, user_id) +); + +CREATE FUNCTION check_document_access(uid uuid, doc_id uuid) +RETURNS access_level +AS $$ +DECLARE + access access_level; +BEGIN + -- Get the access for the current document + SELECT p.access_level FROM document_permissions p WHERE p.user_id = uid AND document_id = doc_id INTO access; + + if access IS NOT NULL then + RETURN access; + end if; + + -- get access for parent, use MIN to take the most restrictive access. + -- Note that this is a recursive function and could cause an infinite loop + RETURN( + SELECT MIN(check_document_access(uid, parent_id)) FROM document_relations r WHERE child_id = doc_id + ); +END; +$$ LANGUAGE plpgsql; + +create policy "Enable insert for authenticated users only" +on "public"."documents" +as permissive +for insert +to authenticated +with check ((auth.uid() = user_id)); + + +create policy "Enable read access for all users" +on "public"."documents" +as permissive +for select +to public +using ((public_access_level >= 'read') OR (auth.uid() = user_id) OR (check_document_access(auth.uid(), id) >= 'read')); + +create policy "Enable update for authenticated users only" +on "public"."documents" +as permissive +for update +to authenticated +using ((public_access_level >= 'write') OR (auth.uid() = user_id) OR (check_document_access(auth.uid(), id) >= 'write')) +with check (true); + + +create table "public"."workspaces" ( + "id" uuid not null default uuid_generate_v4(), + "created_at" timestamp with time zone not null default now(), + "name" character varying not null, + "owner_user_id" uuid not null, + "is_username" boolean not null, + "document_nano_id" character varying not null +); + +alter table "public"."workspaces" enable row level security; + +CREATE UNIQUE INDEX workspaces_pkey ON public.workspaces USING btree (id); + +CREATE UNIQUE INDEX workspaces_name_key ON public.workspaces USING btree (name); + +CREATE UNIQUE INDEX workspaces_owner_user_id_key ON public.workspaces USING btree (owner_user_id) WHERE is_username IS TRUE; + +alter table "public"."workspaces" add constraint "workspaces_pkey" PRIMARY KEY using index "workspaces_pkey"; + +alter table "public"."workspaces" add constraint "workspaces_owner_user_id_fkey" FOREIGN KEY (owner_user_id) REFERENCES auth.users(id) not valid; + +alter table "public"."workspaces" validate constraint "workspaces_owner_user_id_fkey"; + +alter table "public"."workspaces" add constraint "workspaces_document_nano_id_fkey" FOREIGN KEY (document_nano_id) REFERENCES documents(nano_id) not valid; + +alter table "public"."workspaces" validate constraint "workspaces_document_nano_id_fkey"; + + +create policy "Enable insert for authenticated users only" +on "public"."workspaces" +as permissive +for insert +to authenticated +with check ((auth.uid() = owner_user_id)); + + +create policy "Enable read access for all users" +on "public"."workspaces" +as permissive +for select +to public +using (true); + + + + +-- TODO: prevent select * using https://stackoverflow.com/questions/74283527/postgresql-remove-ability-to-query-every-row-in-a-table +-- TODO: validate formats of nanoids and usernames \ No newline at end of file diff --git a/packages/server/supabase/seed.sql b/packages/server/supabase/seed.sql new file mode 100644 index 000000000..e69de29bb diff --git a/packages/server/supabase/tests/database/columnexists.test.sql b/packages/server/supabase/tests/database/columnexists.test.sql new file mode 100644 index 000000000..b4ff345b8 --- /dev/null +++ b/packages/server/supabase/tests/database/columnexists.test.sql @@ -0,0 +1,12 @@ +begin; +select plan(1); -- only one statement to run + +SELECT has_column( + 'public', + 'documents', + 'nano_id', + 'nano_id should exist' +); + +select * from finish(); +rollback; \ No newline at end of file diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json new file mode 100644 index 000000000..d9c10dd39 --- /dev/null +++ b/packages/server/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "es6", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": false, + "declaration": true, + "declarationDir": "types", + "sourceMap": true, + "downlevelIteration": true, + "outDir": "dist" + }, + "include": ["src"] +} diff --git a/packages/server/vitest.config.ts b/packages/server/vitest.config.ts new file mode 100644 index 000000000..01dcf09dd --- /dev/null +++ b/packages/server/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + globalSetup: ["./src/test/setup.ts"], + }, +}); diff --git a/patches/@atlaskit+page-layout+1.3.10.patch.bak b/patches/@atlaskit+page-layout+1.3.10.patch.bak new file mode 100644 index 000000000..38ef3dee3 --- /dev/null +++ b/patches/@atlaskit+page-layout+1.3.10.patch.bak @@ -0,0 +1,78 @@ +diff --git a/node_modules/@atlaskit/page-layout/dist/esm/common/constants.js b/node_modules/@atlaskit/page-layout/dist/esm/common/constants.js +index be1aa62..ac57aae 100644 +--- a/node_modules/@atlaskit/page-layout/dist/esm/common/constants.js ++++ b/node_modules/@atlaskit/page-layout/dist/esm/common/constants.js +@@ -21,7 +21,7 @@ export var RIGHT_SIDEBAR = 'right-sidebar'; + // Default slot dimension values + export var DEFAULT_BANNER_HEIGHT = 56; + export var DEFAULT_TOP_NAVIGATION_HEIGHT = 56; +-export var DEFAULT_LEFT_SIDEBAR_WIDTH = 240; ++export var DEFAULT_LEFT_SIDEBAR_WIDTH = 140; + export var DEFAULT_RIGHT_SIDEBAR_WIDTH = 280; + export var DEFAULT_RIGHT_PANEL_WIDTH = 368; + export var DEFAULT_LEFT_PANEL_WIDTH = 368; +@@ -30,7 +30,7 @@ export var DEFAULT_LEFT_PANEL_WIDTH = 368; + export var COLLAPSED_LEFT_SIDEBAR_WIDTH = 20; + export var MIN_LEFT_SIDEBAR_WIDTH = 80; + export var DEFAULT_LEFT_SIDEBAR_FLYOUT_WIDTH = 240; +-export var MIN_LEFT_SIDEBAR_DRAG_THRESHOLD = 200; ++export var MIN_LEFT_SIDEBAR_DRAG_THRESHOLD = 40; + export var TRANSITION_DURATION = 300; + export var FLYOUT_DELAY = 200; + export var LEFT_SIDEBAR_EXPANDED_WIDTH = 'expandedLeftSidebarWidth'; +diff --git a/node_modules/@atlaskit/page-layout/dist/esm/components/resize-control/index.js b/node_modules/@atlaskit/page-layout/dist/esm/components/resize-control/index.js +index 41881b9..d40bee5 100644 +--- a/node_modules/@atlaskit/page-layout/dist/esm/components/resize-control/index.js ++++ b/node_modules/@atlaskit/page-layout/dist/esm/components/resize-control/index.js +@@ -1,13 +1,13 @@ ++import _defineProperty from "@babel/runtime/helpers/defineProperty"; + import _extends from "@babel/runtime/helpers/extends"; + import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; +-import _defineProperty from "@babel/runtime/helpers/defineProperty"; + function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + /** @jsx jsx */ +-import { useCallback, useContext, useMemo, useRef, useState } from 'react'; + import { css, jsx } from '@emotion/react'; + import { bindAll } from 'bind-event-listener'; + import rafSchd from 'raf-schd'; ++import { useCallback, useContext, useMemo, useRef, useState } from 'react'; + import { COLLAPSED_LEFT_SIDEBAR_WIDTH, DEFAULT_LEFT_SIDEBAR_WIDTH, IS_SIDEBAR_DRAGGING, MIN_LEFT_SIDEBAR_DRAG_THRESHOLD, RESIZE_BUTTON_SELECTOR, RESIZE_CONTROL_SELECTOR, VAR_LEFT_SIDEBAR_WIDTH } from '../../common/constants'; + import { getLeftPanelWidth, getLeftSidebarPercentage } from '../../common/utils'; + import { SidebarResizeContext } from '../../controllers/sidebar-resize-context'; +@@ -99,7 +99,7 @@ var ResizeControl = function ResizeControl(_ref) { + }; + var onMouseMove = rafSchd(function (event) { + // Allow the sidebar to be 50% of the available page width +- var maxWidth = Math.round(window.innerWidth / 2); ++ var maxWidth = Math.min(450, Math.round(window.innerWidth / 2)); + var leftPanelWidth = getLeftPanelWidth(); + var leftSidebarWidth = leftSidebarState.leftSidebarWidth; + var invalidDrag = event.clientX < 0; +diff --git a/node_modules/@atlaskit/page-layout/dist/esm/components/slots/left-sidebar.js b/node_modules/@atlaskit/page-layout/dist/esm/components/slots/left-sidebar.js +index fa157b1..7e7ca33 100644 +--- a/node_modules/@atlaskit/page-layout/dist/esm/components/slots/left-sidebar.js ++++ b/node_modules/@atlaskit/page-layout/dist/esm/components/slots/left-sidebar.js +@@ -3,11 +3,11 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O + function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + /* eslint-disable @repo/internal/dom-events/no-unsafe-event-listeners */ + /** @jsx jsx */ +-import { useContext, useEffect, useRef } from 'react'; + import { jsx } from '@emotion/react'; ++import { useContext, useEffect, useRef } from 'react'; + import { COLLAPSED_LEFT_SIDEBAR_WIDTH, DEFAULT_LEFT_SIDEBAR_WIDTH, FLYOUT_DELAY, RESIZE_BUTTON_SELECTOR, VAR_LEFT_SIDEBAR_FLYOUT, VAR_LEFT_SIDEBAR_WIDTH } from '../../common/constants'; + import { getGridStateFromStorage, mergeGridStateIntoStorage, resolveDimension } from '../../common/utils'; +-import { publishGridState, SidebarResizeContext, useSkipLink } from '../../controllers'; ++import { SidebarResizeContext, publishGridState, useSkipLink } from '../../controllers'; + import ResizeControl from '../resize-control'; + import LeftSidebarInner from './internal/left-sidebar-inner'; + import LeftSidebarOuter from './internal/left-sidebar-outer'; +@@ -87,7 +87,7 @@ var LeftSidebar = function LeftSidebar(props) { + } + }; + }, [isLocked, lastLeftSidebarWidth, leftSidebarState, setLeftSidebarState]); +- var _width = Math.max(width || 0, DEFAULT_LEFT_SIDEBAR_WIDTH); ++ var _width = Math.max(width || 0, DEFAULT_LEFT_SIDEBAR_WIDTH + 100); + var collapsedStateOverrideOpen = collapsedState === 'expanded'; + var leftSidebarWidthOnMount; + if (collapsedStateOverrideOpen) { diff --git a/patches/@atlaskit+tree+8.6.2.patch.bak b/patches/@atlaskit+tree+8.6.2.patch.bak new file mode 100644 index 000000000..a79d1091c --- /dev/null +++ b/patches/@atlaskit+tree+8.6.2.patch.bak @@ -0,0 +1,53 @@ +diff --git a/node_modules/@atlaskit/tree/dist/cjs/components/TreeItem/TreeItem.js b/node_modules/@atlaskit/tree/dist/cjs/components/TreeItem/TreeItem.js +index b8b259d..d491b11 100644 +--- a/node_modules/@atlaskit/tree/dist/cjs/components/TreeItem/TreeItem.js ++++ b/node_modules/@atlaskit/tree/dist/cjs/components/TreeItem/TreeItem.js +@@ -64,7 +64,7 @@ var TreeItem = /*#__PURE__*/function (_Component) { + var transition = transitions.join(', '); + return _objectSpread(_objectSpread({}, draggableProps), {}, { + style: _objectSpread(_objectSpread({}, draggableProps.style), {}, { +- paddingLeft: (path.length - 1) * offsetPerLevel, ++ // paddingLeft: (path.length - 1) * offsetPerLevel, + // @ts-ignore + transition: transition + }) +diff --git a/node_modules/@atlaskit/tree/dist/es2019/components/TreeItem/TreeItem.js b/node_modules/@atlaskit/tree/dist/es2019/components/TreeItem/TreeItem.js +index 3095e34..3640522 100644 +--- a/node_modules/@atlaskit/tree/dist/es2019/components/TreeItem/TreeItem.js ++++ b/node_modules/@atlaskit/tree/dist/es2019/components/TreeItem/TreeItem.js +@@ -21,7 +21,7 @@ export default class TreeItem extends Component { + const transition = transitions.join(', '); + return { ...draggableProps, + style: { ...draggableProps.style, +- paddingLeft: (path.length - 1) * offsetPerLevel, ++ // paddingLeft: (path.length - 1) * offsetPerLevel, + // @ts-ignore + transition + } +diff --git a/node_modules/@atlaskit/tree/dist/esm/components/TreeItem/TreeItem.js b/node_modules/@atlaskit/tree/dist/esm/components/TreeItem/TreeItem.js +index 48cfd20..b9c5e1f 100644 +--- a/node_modules/@atlaskit/tree/dist/esm/components/TreeItem/TreeItem.js ++++ b/node_modules/@atlaskit/tree/dist/esm/components/TreeItem/TreeItem.js +@@ -1,10 +1,10 @@ ++import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized"; + import _classCallCheck from "@babel/runtime/helpers/classCallCheck"; + import _createClass from "@babel/runtime/helpers/createClass"; +-import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized"; ++import _defineProperty from "@babel/runtime/helpers/defineProperty"; ++import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf"; + import _inherits from "@babel/runtime/helpers/inherits"; + import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn"; +-import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf"; +-import _defineProperty from "@babel/runtime/helpers/defineProperty"; + + function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +@@ -48,7 +48,7 @@ var TreeItem = /*#__PURE__*/function (_Component) { + var transition = transitions.join(', '); + return _objectSpread(_objectSpread({}, draggableProps), {}, { + style: _objectSpread(_objectSpread({}, draggableProps.style), {}, { +- paddingLeft: (path.length - 1) * offsetPerLevel, ++ // paddingLeft: (path.length - 1) * offsetPerLevel, + // @ts-ignore + transition: transition + }) diff --git a/patches/@hocuspocus+provider+2.1.0.patch b/patches/@hocuspocus+provider+2.1.0.patch new file mode 100644 index 000000000..f1ce24bd1 --- /dev/null +++ b/patches/@hocuspocus+provider+2.1.0.patch @@ -0,0 +1,4459 @@ +diff --git a/node_modules/@hocuspocus/provider/CHANGELOG.md b/node_modules/@hocuspocus/provider/CHANGELOG.md +new file mode 100644 +index 0000000..a7f7115 +--- /dev/null ++++ b/node_modules/@hocuspocus/provider/CHANGELOG.md +@@ -0,0 +1,508 @@ ++# Change Log ++ ++All notable changes to this project will be documented in this file. ++See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. ++ ++# [2.1.0](https://github.com/ueberdosis/hocuspocus/compare/v2.0.6...v2.1.0) (2023-06-03) ++ ++ ++### Bug Fixes ++ ++* export typings for recent typescript ([#602](https://github.com/ueberdosis/hocuspocus/issues/602)) ([551d27f](https://github.com/ueberdosis/hocuspocus/commit/551d27fa6de9c746c67bf0f1e3bb56167aebbca5)), closes [/github.com/artalar/reatom/issues/560#issuecomment-1528997739](https://github.com//github.com/artalar/reatom/issues/560/issues/issuecomment-1528997739) ++ ++ ++ ++ ++ ++## [2.0.6](https://github.com/ueberdosis/hocuspocus/compare/v2.0.5...v2.0.6) (2023-04-25) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++## [2.0.5](https://github.com/ueberdosis/hocuspocus/compare/v2.0.4...v2.0.5) (2023-04-24) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++## [2.0.4](https://github.com/ueberdosis/hocuspocus/compare/v2.0.3...v2.0.4) (2023-04-23) ++ ++ ++### Bug Fixes ++ ++* Do not retry connection if data is too large ([#586](https://github.com/ueberdosis/hocuspocus/issues/586)) ([462a87f](https://github.com/ueberdosis/hocuspocus/commit/462a87f08bfdcaece4adb1ef8dca25ae42b3cb36)) ++ ++ ++ ++ ++ ++## [2.0.3](https://github.com/ueberdosis/hocuspocus/compare/v2.0.2...v2.0.3) (2023-04-05) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++## [2.0.2](https://github.com/ueberdosis/hocuspocus/compare/v2.0.1...v2.0.2) (2023-04-04) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++## [2.0.1](https://github.com/ueberdosis/hocuspocus/compare/v2.0.0...v2.0.1) (2023-03-30) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [2.0.0](https://github.com/ueberdosis/hocuspocus/compare/v1.1.3...v2.0.0) (2023-03-29) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [2.0.0-beta.0](https://github.com/ueberdosis/hocuspocus/compare/v1.1.1...v2.0.0-beta.0) (2023-03-28) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [2.0.0-alpha.1](https://github.com/ueberdosis/hocuspocus/compare/v2.0.0-alpha.0...v2.0.0-alpha.1) (2023-03-23) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [2.0.0-alpha.0](https://github.com/ueberdosis/hocuspocus/compare/v1.1.0...v2.0.0-alpha.0) (2023-02-28) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.1.0](https://github.com/ueberdosis/hocuspocus/compare/v1.0.2...v1.1.0) (2023-02-24) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++## [1.0.2](https://github.com/ueberdosis/hocuspocus/compare/v1.0.1...v1.0.2) (2023-02-16) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++## [1.0.1](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0...v1.0.1) (2023-01-30) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.7...v1.0.0) (2023-01-18) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-beta.7](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2023-01-11) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-beta.6](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2022-12-03) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-beta.5](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.3...v1.0.0-beta.5) (2022-11-25) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-beta.3](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2022-11-03) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-beta.2](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2022-09-28) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# 1.0.0-beta.111 (2022-09-28) ++ ++ ++### Bug Fixes ++ ++* Account for this.webSocket being null ([#235](https://github.com/ueberdosis/hocuspocus/issues/235)) ([b1476b6](https://github.com/ueberdosis/hocuspocus/commit/b1476b60f0eceb83d70c1ded2b3139e4f865a869)) ++* Empty sync message causes error in client MessageReceiver ([#174](https://github.com/ueberdosis/hocuspocus/issues/174)) ([f9dca69](https://github.com/ueberdosis/hocuspocus/commit/f9dca69eb96d1ede37a0709bd3b7735bf1ff57ba)) ++* Remote client awareness not immediately available ([37703f6](https://github.com/ueberdosis/hocuspocus/commit/37703f695f6bf3b0508c287294c5d26d2e888c37)) ++ ++ ++### Features ++ ++* Message Authentication ([#163](https://github.com/ueberdosis/hocuspocus/issues/163)) ([a1e68d5](https://github.com/ueberdosis/hocuspocus/commit/a1e68d5a272742bd17dd92522dfc908277343849)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.40](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.39...@hocuspocus/provider@1.0.0-alpha.40) (2022-08-28) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.39](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.38...@hocuspocus/provider@1.0.0-alpha.39) (2022-07-13) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.38](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.37...@hocuspocus/provider@1.0.0-alpha.38) (2022-06-13) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.37](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.36...@hocuspocus/provider@1.0.0-alpha.37) (2022-06-08) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.36](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.35...@hocuspocus/provider@1.0.0-alpha.36) (2022-04-05) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.35](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.34...@hocuspocus/provider@1.0.0-alpha.35) (2022-03-21) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.34](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.33...@hocuspocus/provider@1.0.0-alpha.34) (2022-03-11) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.33](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.32...@hocuspocus/provider@1.0.0-alpha.33) (2022-03-02) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.32](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.31...@hocuspocus/provider@1.0.0-alpha.32) (2022-02-24) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.31](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.30...@hocuspocus/provider@1.0.0-alpha.31) (2022-02-22) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.30](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.29...@hocuspocus/provider@1.0.0-alpha.30) (2022-02-18) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.29](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.28...@hocuspocus/provider@1.0.0-alpha.29) (2021-12-09) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.28](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.27...@hocuspocus/provider@1.0.0-alpha.28) (2021-12-07) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.27](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.26...@hocuspocus/provider@1.0.0-alpha.27) (2021-12-03) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.26](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.25...@hocuspocus/provider@1.0.0-alpha.26) (2021-11-30) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.25](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.24...@hocuspocus/provider@1.0.0-alpha.25) (2021-11-30) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.24](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.23...@hocuspocus/provider@1.0.0-alpha.24) (2021-11-26) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.23](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.22...@hocuspocus/provider@1.0.0-alpha.23) (2021-11-24) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.22](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.21...@hocuspocus/provider@1.0.0-alpha.22) (2021-11-22) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.21](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.20...@hocuspocus/provider@1.0.0-alpha.21) (2021-10-31) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.20](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.19...@hocuspocus/provider@1.0.0-alpha.20) (2021-10-28) ++ ++ ++### Bug Fixes ++ ++* Account for this.webSocket being null ([#235](https://github.com/ueberdosis/hocuspocus/issues/235)) ([b1476b6](https://github.com/ueberdosis/hocuspocus/commit/b1476b60f0eceb83d70c1ded2b3139e4f865a869)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.19](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.18...@hocuspocus/provider@1.0.0-alpha.19) (2021-10-15) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.18](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.17...@hocuspocus/provider@1.0.0-alpha.18) (2021-10-06) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.17](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.16...@hocuspocus/provider@1.0.0-alpha.17) (2021-10-05) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.16](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.15...@hocuspocus/provider@1.0.0-alpha.16) (2021-09-17) ++ ++ ++### Bug Fixes ++ ++* Remote client awareness not immediately available ([37703f6](https://github.com/ueberdosis/hocuspocus/commit/37703f695f6bf3b0508c287294c5d26d2e888c37)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.15](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.14...@hocuspocus/provider@1.0.0-alpha.15) (2021-09-14) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.14](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.13...@hocuspocus/provider@1.0.0-alpha.14) (2021-09-03) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.13](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.12...@hocuspocus/provider@1.0.0-alpha.13) (2021-09-01) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.12](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.11...@hocuspocus/provider@1.0.0-alpha.12) (2021-08-31) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.11](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.10...@hocuspocus/provider@1.0.0-alpha.11) (2021-08-27) ++ ++ ++### Bug Fixes ++ ++* Empty sync message causes error in client MessageReceiver ([#174](https://github.com/ueberdosis/hocuspocus/issues/174)) ([f9dca69](https://github.com/ueberdosis/hocuspocus/commit/f9dca69eb96d1ede37a0709bd3b7735bf1ff57ba)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.10](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.9...@hocuspocus/provider@1.0.0-alpha.10) (2021-08-19) ++ ++ ++### Features ++ ++* Message Authentication ([#163](https://github.com/ueberdosis/hocuspocus/issues/163)) ([a1e68d5](https://github.com/ueberdosis/hocuspocus/commit/a1e68d5a272742bd17dd92522dfc908277343849)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.9](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.8...@hocuspocus/provider@1.0.0-alpha.9) (2021-08-19) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.8](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.7...@hocuspocus/provider@1.0.0-alpha.8) (2021-06-23) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.7](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.6...@hocuspocus/provider@1.0.0-alpha.7) (2021-06-22) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.6](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.5...@hocuspocus/provider@1.0.0-alpha.6) (2021-06-11) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.5](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.4...@hocuspocus/provider@1.0.0-alpha.5) (2021-06-11) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.4](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.3...@hocuspocus/provider@1.0.0-alpha.4) (2021-06-09) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# [1.0.0-alpha.3](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/provider@1.0.0-alpha.2...@hocuspocus/provider@1.0.0-alpha.3) (2021-06-09) ++ ++**Note:** Version bump only for package @hocuspocus/provider ++ ++ ++ ++ ++ ++# 1.0.0-alpha.2 (2021-06-08) ++ ++**Note:** Version bump only for package @hocuspocus/provider +diff --git a/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.cjs b/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.cjs +index c00693b..fc67b7c 100644 +--- a/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.cjs ++++ b/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.cjs +@@ -2,8 +2,8 @@ + + Object.defineProperty(exports, '__esModule', { value: true }); + +-var Y = require('yjs'); + var common = require('@hocuspocus/common'); ++var Y = require('yjs'); + var attempt = require('@lifeomic/attempt'); + + function _interopNamespace(e) { +@@ -74,6 +74,22 @@ const setIfUndefined = (map, key, createT) => { + + const create$1 = () => new Set(); + ++/** ++ * Utility module to work with Arrays. ++ * ++ * @module array ++ */ ++ ++/** ++ * Transforms something array-like to an actual Array. ++ * ++ * @function ++ * @template T ++ * @param {ArrayLike|Iterable} arraylike ++ * @return {T} ++ */ ++const from = Array.from; ++ + /** + * Utility module to work with strings. + * +@@ -236,22 +252,6 @@ const onChange = eventHandler => usePolyfill || addEventListener('storage', /** + /* c8 ignore next */ + const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler)); + +-/** +- * Utility module to work with Arrays. +- * +- * @module array +- */ +- +-/** +- * Transforms something array-like to an actual Array. +- * +- * @function +- * @template T +- * @param {ArrayLike|Iterable} arraylike +- * @return {T} +- */ +-const from = Array.from; +- + /** + * Utility functions for working with EcmaScript objects. + * +@@ -399,7 +399,6 @@ const equalityDeep = (a, b) => { + */ + // @ts-ignore + const isOneOf = (value, options) => options.includes(value); +-/* c8 ignore stop */ + + /** + * Isomorphic module to work access the environment (query params, env variables). +@@ -531,7 +530,9 @@ const min = (a, b) => a < b ? a : b; + const max = (a, b) => a > b ? a : b; + + /* eslint-env browser */ ++const BIT7 = 64; + const BIT8 = 128; ++const BITS6 = 63; + const BITS7 = 127; + + /** +@@ -889,6 +890,44 @@ const readVarUint = decoder => { + throw errorUnexpectedEndOfArray + }; + ++/** ++ * Read signed integer (32bit) with variable length. ++ * 1/8th of the storage is used as encoding overhead. ++ * * numbers < 2^7 is stored in one bytlength ++ * * numbers < 2^14 is stored in two bylength ++ * @todo This should probably create the inverse ~num if number is negative - but this would be a breaking change. ++ * ++ * @function ++ * @param {Decoder} decoder ++ * @return {number} An unsigned integer.length ++ */ ++const readVarInt = decoder => { ++ let r = decoder.arr[decoder.pos++]; ++ let num = r & BITS6; ++ let mult = 64; ++ const sign = (r & BIT7) > 0 ? -1 : 1; ++ if ((r & BIT8) === 0) { ++ // don't continue reading ++ return sign * num ++ } ++ const len = decoder.arr.length; ++ while (decoder.pos < len) { ++ r = decoder.arr[decoder.pos++]; ++ // num = num | ((r & binary.BITS7) << len) ++ num = num + (r & BITS7) * mult; ++ mult *= 128; ++ if (r < BIT8) { ++ return sign * num ++ } ++ /* c8 ignore start */ ++ if (num > MAX_SAFE_INTEGER) { ++ throw errorIntegerOutOfRange ++ } ++ /* c8 ignore stop */ ++ } ++ throw errorUnexpectedEndOfArray ++}; ++ + /** + * We don't test this function anymore as we use native decoding/encoding by default now. + * Better not modify this anymore.. +@@ -1136,6 +1175,50 @@ const publish = (room, data, origin = null) => { + c.subs.forEach(sub => sub(data, origin)); + }; + ++/** ++ * Mutual exclude for JavaScript. ++ * ++ * @module mutex ++ */ ++ ++/** ++ * @callback mutex ++ * @param {function():void} cb Only executed when this mutex is not in the current stack ++ * @param {function():void} [elseCb] Executed when this mutex is in the current stack ++ */ ++ ++/** ++ * Creates a mutual exclude function with the following property: ++ * ++ * ```js ++ * const mutex = createMutex() ++ * mutex(() => { ++ * // This function is immediately executed ++ * mutex(() => { ++ * // This function is not executed, as the mutex is already active. ++ * }) ++ * }) ++ * ``` ++ * ++ * @return {mutex} A mutual exclude function ++ * @public ++ */ ++const createMutex = () => { ++ let token = true; ++ return (f, g) => { ++ if (token) { ++ token = false; ++ try { ++ f(); ++ } finally { ++ token = true; ++ } ++ } else if (g !== undefined) { ++ g(); ++ } ++ } ++}; ++ + /** + * Utility module to work with time. + * +@@ -1486,50 +1569,6 @@ const applyAwarenessUpdate = (awareness, update, origin) => { + } + }; + +-/** +- * Mutual exclude for JavaScript. +- * +- * @module mutex +- */ +- +-/** +- * @callback mutex +- * @param {function():void} cb Only executed when this mutex is not in the current stack +- * @param {function():void} [elseCb] Executed when this mutex is in the current stack +- */ +- +-/** +- * Creates a mutual exclude function with the following property: +- * +- * ```js +- * const mutex = createMutex() +- * mutex(() => { +- * // This function is immediately executed +- * mutex(() => { +- * // This function is not executed, as the mutex is already active. +- * }) +- * }) +- * ``` +- * +- * @return {mutex} A mutual exclude function +- * @public +- */ +-const createMutex = () => { +- let token = true; +- return (f, g) => { +- if (token) { +- token = false; +- try { +- f(); +- } finally { +- token = true; +- } +- } else if (g !== undefined) { +- g(); +- } +- } +-}; +- + class EventEmitter { + constructor() { + this.callbacks = {}; +@@ -1565,712 +1604,690 @@ class EventEmitter { + } + } + +-class IncomingMessage { +- constructor(data) { +- this.data = data; +- this.encoder = createEncoder(); +- this.decoder = createDecoder(new Uint8Array(this.data)); +- } +- readVarUint() { +- return readVarUint(this.decoder); +- } +- readVarString() { +- return readVarString(this.decoder); +- } +- readVarUint8Array() { +- return readVarUint8Array(this.decoder); +- } +- writeVarUint(type) { +- return writeVarUint(this.encoder, type); +- } +- writeVarString(string) { +- return writeVarString(this.encoder, string); +- } +- writeVarUint8Array(data) { +- return writeVarUint8Array(this.encoder, data); +- } +- length() { +- return length(this.encoder); +- } +-} +- + /** +- * @module sync-protocol +- */ +- +-/** +- * @typedef {Map} StateMap +- */ +- +-/** +- * Core Yjs defines two message types: +- * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2. +- * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it +- * received all information from the remote client. +- * +- * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection +- * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both +- * SyncStep2 and SyncDone, it is assured that it is synced to the remote client. +- * +- * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1. +- * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies +- * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the +- * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can +- * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them. +- * Therefore it is necesarry that the client initiates the sync. +- * +- * Construction of a message: +- * [messageType : varUint, message definition..] +- * +- * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol! ++ * Utility module to work with urls. + * +- * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer) ++ * @module url + */ + +-const messageYjsSyncStep1 = 0; +-const messageYjsSyncStep2 = 1; +-const messageYjsUpdate = 2; +- + /** +- * Create a sync step 1 message based on the state of the current shared document. +- * +- * @param {encoding.Encoder} encoder +- * @param {Y.Doc} doc ++ * @param {Object} params ++ * @return {string} + */ +-const writeSyncStep1 = (encoder, doc) => { +- writeVarUint(encoder, messageYjsSyncStep1); +- const sv = Y__namespace.encodeStateVector(doc); +- writeVarUint8Array(encoder, sv); +-}; ++const encodeQueryParams = params => ++ map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&'); + +-/** +- * @param {encoding.Encoder} encoder +- * @param {Y.Doc} doc +- * @param {Uint8Array} [encodedStateVector] +- */ +-const writeSyncStep2 = (encoder, doc, encodedStateVector) => { +- writeVarUint(encoder, messageYjsSyncStep2); +- writeVarUint8Array(encoder, Y__namespace.encodeStateAsUpdate(doc, encodedStateVector)); +-}; ++exports.MessageType = void 0; ++(function (MessageType) { ++ MessageType[MessageType["Sync"] = 0] = "Sync"; ++ MessageType[MessageType["Awareness"] = 1] = "Awareness"; ++ MessageType[MessageType["Auth"] = 2] = "Auth"; ++ MessageType[MessageType["QueryAwareness"] = 3] = "QueryAwareness"; ++ MessageType[MessageType["Stateless"] = 5] = "Stateless"; ++ MessageType[MessageType["CLOSE"] = 7] = "CLOSE"; ++ MessageType[MessageType["SyncStatus"] = 8] = "SyncStatus"; ++})(exports.MessageType || (exports.MessageType = {})); ++exports.WebSocketStatus = void 0; ++(function (WebSocketStatus) { ++ WebSocketStatus["Connecting"] = "connecting"; ++ WebSocketStatus["Connected"] = "connected"; ++ WebSocketStatus["Disconnected"] = "disconnected"; ++})(exports.WebSocketStatus || (exports.WebSocketStatus = {})); + +-/** +- * Read SyncStep1 message and reply with SyncStep2. +- * +- * @param {decoding.Decoder} decoder The reply to the received message +- * @param {encoding.Encoder} encoder The received message +- * @param {Y.Doc} doc +- */ +-const readSyncStep1 = (decoder, encoder, doc) => +- writeSyncStep2(encoder, doc, readVarUint8Array(decoder)); +- +-/** +- * Read and apply Structs and then DeleteStore to a y instance. +- * +- * @param {decoding.Decoder} decoder +- * @param {Y.Doc} doc +- * @param {any} transactionOrigin +- */ +-const readSyncStep2 = (decoder, doc, transactionOrigin) => { +- try { +- Y__namespace.applyUpdate(doc, readVarUint8Array(decoder), transactionOrigin); +- } catch (error) { +- // This catches errors that are thrown by event handlers +- console.error('Caught error while handling a Yjs update', error); +- } +-}; +- +-/** +- * @param {encoding.Encoder} encoder +- * @param {Uint8Array} update +- */ +-const writeUpdate = (encoder, update) => { +- writeVarUint(encoder, messageYjsUpdate); +- writeVarUint8Array(encoder, update); +-}; +- +-/** +- * Read and apply Structs and then DeleteStore to a y instance. +- * +- * @param {decoding.Decoder} decoder +- * @param {Y.Doc} doc +- * @param {any} transactionOrigin +- */ +-const readUpdate = readSyncStep2; +- +-/** +- * @param {decoding.Decoder} decoder A message received from another client +- * @param {encoding.Encoder} encoder The reply message. Will not be sent if empty. +- * @param {Y.Doc} doc +- * @param {any} transactionOrigin +- */ +-const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => { +- const messageType = readVarUint(decoder); +- switch (messageType) { +- case messageYjsSyncStep1: +- readSyncStep1(decoder, encoder, doc); +- break +- case messageYjsSyncStep2: +- readSyncStep2(decoder, doc, transactionOrigin); +- break +- case messageYjsUpdate: +- readUpdate(decoder, doc, transactionOrigin); +- break +- default: +- throw new Error('Unknown message type') +- } +- return messageType +-}; +- +-exports.MessageType = void 0; +-(function (MessageType) { +- MessageType[MessageType["Sync"] = 0] = "Sync"; +- MessageType[MessageType["Awareness"] = 1] = "Awareness"; +- MessageType[MessageType["Auth"] = 2] = "Auth"; +- MessageType[MessageType["QueryAwareness"] = 3] = "QueryAwareness"; +- MessageType[MessageType["Stateless"] = 5] = "Stateless"; +- MessageType[MessageType["CLOSE"] = 7] = "CLOSE"; +-})(exports.MessageType || (exports.MessageType = {})); +-exports.WebSocketStatus = void 0; +-(function (WebSocketStatus) { +- WebSocketStatus["Connecting"] = "connecting"; +- WebSocketStatus["Connected"] = "connected"; +- WebSocketStatus["Disconnected"] = "disconnected"; +-})(exports.WebSocketStatus || (exports.WebSocketStatus = {})); +- +-class OutgoingMessage { +- constructor() { +- this.encoder = createEncoder(); ++class HocuspocusProviderWebsocket extends EventEmitter { ++ constructor(configuration) { ++ super(); ++ this.messageQueue = []; ++ this.configuration = { ++ url: '', ++ // @ts-ignore ++ document: undefined, ++ // @ts-ignore ++ awareness: undefined, ++ WebSocketPolyfill: undefined, ++ parameters: {}, ++ connect: true, ++ broadcast: true, ++ forceSyncInterval: false, ++ // TODO: this should depend on awareness.outdatedTime ++ messageReconnectTimeout: 30000, ++ // 1 second ++ delay: 1000, ++ // instant ++ initialDelay: 0, ++ // double the delay each time ++ factor: 2, ++ // unlimited retries ++ maxAttempts: 0, ++ // wait at least 1 second ++ minDelay: 1000, ++ // at least every 30 seconds ++ maxDelay: 30000, ++ // randomize ++ jitter: true, ++ // retry forever ++ timeout: 0, ++ onOpen: () => null, ++ onConnect: () => null, ++ onMessage: () => null, ++ onOutgoingMessage: () => null, ++ onStatus: () => null, ++ onDisconnect: () => null, ++ onClose: () => null, ++ onDestroy: () => null, ++ onAwarenessUpdate: () => null, ++ onAwarenessChange: () => null, ++ quiet: false, ++ }; ++ this.subscribedToBroadcastChannel = false; ++ this.webSocket = null; ++ this.shouldConnect = true; ++ this.status = exports.WebSocketStatus.Disconnected; ++ this.lastMessageReceived = 0; ++ this.mux = createMutex(); ++ this.intervals = { ++ forceSync: null, ++ connectionChecker: null, ++ }; ++ this.connectionAttempt = null; ++ this.receivedOnOpenPayload = undefined; ++ this.receivedOnStatusPayload = undefined; ++ this.boundConnect = this.connect.bind(this); ++ this.setConfiguration(configuration); ++ this.configuration.WebSocketPolyfill = configuration.WebSocketPolyfill ? configuration.WebSocketPolyfill : WebSocket; ++ this.on('open', this.configuration.onOpen); ++ this.on('open', this.onOpen.bind(this)); ++ this.on('connect', this.configuration.onConnect); ++ this.on('message', this.configuration.onMessage); ++ this.on('outgoingMessage', this.configuration.onOutgoingMessage); ++ this.on('status', this.configuration.onStatus); ++ this.on('status', this.onStatus.bind(this)); ++ this.on('disconnect', this.configuration.onDisconnect); ++ this.on('close', this.configuration.onClose); ++ this.on('destroy', this.configuration.onDestroy); ++ this.on('awarenessUpdate', this.configuration.onAwarenessUpdate); ++ this.on('awarenessChange', this.configuration.onAwarenessChange); ++ this.on('close', this.onClose.bind(this)); ++ this.on('message', this.onMessage.bind(this)); ++ this.registerEventListeners(); ++ this.intervals.connectionChecker = setInterval(this.checkConnection.bind(this), this.configuration.messageReconnectTimeout / 10); ++ if (typeof configuration.connect !== 'undefined') { ++ this.shouldConnect = configuration.connect; ++ } ++ if (!this.shouldConnect) { ++ return; ++ } ++ this.connect(); + } +- get(args) { +- return args.encoder; ++ async onOpen(event) { ++ this.receivedOnOpenPayload = event; + } +- toUint8Array() { +- return toUint8Array(this.encoder); ++ async onStatus(data) { ++ this.receivedOnStatusPayload = data; + } +-} +- +-class MessageReceiver { +- constructor(message) { +- this.broadcasted = false; +- this.message = message; ++ attach(provider) { ++ if (this.receivedOnOpenPayload) { ++ provider.onOpen(this.receivedOnOpenPayload); ++ } ++ if (this.receivedOnStatusPayload) { ++ provider.onStatus(this.receivedOnStatusPayload); ++ } + } +- setBroadcasted(value) { +- this.broadcasted = value; +- return this; ++ detach(provider) { ++ // tell the server to remove the listener + } +- apply(provider, emitSynced = true) { +- const { message } = this; +- const type = message.readVarUint(); +- const emptyMessageLength = message.length(); +- switch (type) { +- case exports.MessageType.Sync: +- this.applySyncMessage(provider, emitSynced); +- break; +- case exports.MessageType.Awareness: +- this.applyAwarenessMessage(provider); +- break; +- case exports.MessageType.Auth: +- this.applyAuthMessage(provider); +- break; +- case exports.MessageType.QueryAwareness: +- this.applyQueryAwarenessMessage(provider); +- break; +- case exports.MessageType.Stateless: +- provider.receiveStateless(readVarString(message.decoder)); +- break; +- default: +- throw new Error(`Can’t apply message of unknown type: ${type}`); ++ setConfiguration(configuration = {}) { ++ this.configuration = { ...this.configuration, ...configuration }; ++ } ++ async connect() { ++ if (this.status === exports.WebSocketStatus.Connected) { ++ return; + } +- // Reply +- if (message.length() > emptyMessageLength + 1) { // length of documentName (considered in emptyMessageLength plus length of yjs sync type, set in applySyncMessage) +- if (this.broadcasted) { +- // TODO: Some weird TypeScript error +- // @ts-ignore +- provider.broadcast(OutgoingMessage, { encoder: message.encoder }); ++ // Always cancel any previously initiated connection retryer instances ++ if (this.cancelWebsocketRetry) { ++ this.cancelWebsocketRetry(); ++ this.cancelWebsocketRetry = undefined; ++ } ++ this.shouldConnect = true; ++ const abortableRetry = () => { ++ let cancelAttempt = false; ++ const retryPromise = attempt.retry(this.createWebSocketConnection.bind(this), { ++ delay: this.configuration.delay, ++ initialDelay: this.configuration.initialDelay, ++ factor: this.configuration.factor, ++ maxAttempts: this.configuration.maxAttempts, ++ minDelay: this.configuration.minDelay, ++ maxDelay: this.configuration.maxDelay, ++ jitter: this.configuration.jitter, ++ timeout: this.configuration.timeout, ++ beforeAttempt: context => { ++ if (!this.shouldConnect || cancelAttempt) { ++ context.abort(); ++ } ++ }, ++ }).catch((error) => { ++ // If we aborted the connection attempt then don’t throw an error ++ // ref: https://github.com/lifeomic/attempt/blob/master/src/index.ts#L136 ++ if (error && error.code !== 'ATTEMPT_ABORTED') { ++ throw error; ++ } ++ }); ++ return { ++ retryPromise, ++ cancelFunc: () => { ++ cancelAttempt = true; ++ }, ++ }; ++ }; ++ const { retryPromise, cancelFunc } = abortableRetry(); ++ this.cancelWebsocketRetry = cancelFunc; ++ return retryPromise; ++ } ++ createWebSocketConnection() { ++ return new Promise((resolve, reject) => { ++ if (this.webSocket) { ++ this.messageQueue = []; ++ this.webSocket.close(); ++ this.webSocket = null; ++ } ++ // Init the WebSocket connection ++ const ws = new this.configuration.WebSocketPolyfill(this.url); ++ ws.binaryType = 'arraybuffer'; ++ ws.onmessage = (payload) => this.emit('message', payload); ++ ws.onclose = (payload) => this.emit('close', { event: payload }); ++ ws.onopen = (payload) => this.emit('open', payload); ++ ws.onerror = (err) => { ++ reject(err); ++ }; ++ this.webSocket = ws; ++ // Reset the status ++ this.status = exports.WebSocketStatus.Connecting; ++ this.emit('status', { status: exports.WebSocketStatus.Connecting }); ++ // Store resolve/reject for later use ++ this.connectionAttempt = { ++ resolve, ++ reject, ++ }; ++ }); ++ } ++ onMessage(event) { ++ this.resolveConnectionAttempt(); ++ } ++ resolveConnectionAttempt() { ++ if (this.connectionAttempt) { ++ this.connectionAttempt.resolve(); ++ this.connectionAttempt = null; ++ this.status = exports.WebSocketStatus.Connected; ++ this.emit('status', { status: exports.WebSocketStatus.Connected }); ++ this.emit('connect'); ++ this.messageQueue.forEach(message => this.send(message)); ++ this.messageQueue = []; ++ } ++ } ++ stopConnectionAttempt() { ++ this.connectionAttempt = null; ++ } ++ rejectConnectionAttempt() { ++ var _a; ++ (_a = this.connectionAttempt) === null || _a === void 0 ? void 0 : _a.reject(); ++ this.connectionAttempt = null; ++ } ++ checkConnection() { ++ var _a; ++ // Don’t check the connection when it’s not even established ++ if (this.status !== exports.WebSocketStatus.Connected) { ++ return; ++ } ++ // Don’t close then connection while waiting for the first message ++ if (!this.lastMessageReceived) { ++ return; ++ } ++ // Don’t close the connection when a message was received recently ++ if (this.configuration.messageReconnectTimeout >= getUnixTime() - this.lastMessageReceived) { ++ return; ++ } ++ // No message received in a long time, not even your own ++ // Awareness updates, which are updated every 15 seconds. ++ (_a = this.webSocket) === null || _a === void 0 ? void 0 : _a.close(); ++ this.messageQueue = []; ++ } ++ registerEventListeners() { ++ if (typeof window === 'undefined') { ++ return; ++ } ++ window.addEventListener('online', this.boundConnect); ++ } ++ // Ensure that the URL always ends with / ++ get serverUrl() { ++ while (this.configuration.url[this.configuration.url.length - 1] === '/') { ++ return this.configuration.url.slice(0, this.configuration.url.length - 1); ++ } ++ return this.configuration.url; ++ } ++ get url() { ++ const encodedParams = encodeQueryParams(this.configuration.parameters); ++ return `${this.serverUrl}${encodedParams.length === 0 ? '' : `?${encodedParams}`}`; ++ } ++ disconnect() { ++ this.shouldConnect = false; ++ if (this.webSocket === null) { ++ return; ++ } ++ try { ++ this.webSocket.close(); ++ this.messageQueue = []; ++ } ++ catch { ++ // ++ } ++ } ++ send(message) { ++ var _a; ++ if (((_a = this.webSocket) === null || _a === void 0 ? void 0 : _a.readyState) === common.WsReadyStates.Open) { ++ this.webSocket.send(message); ++ } ++ else { ++ this.messageQueue.push(message); ++ } ++ } ++ onClose({ event }) { ++ this.webSocket = null; ++ if (this.status === exports.WebSocketStatus.Connected) { ++ this.status = exports.WebSocketStatus.Disconnected; ++ this.emit('status', { status: exports.WebSocketStatus.Disconnected }); ++ this.emit('disconnect', { event }); ++ } ++ if (event.code === common.Unauthorized.code) { ++ if (event.reason === common.Unauthorized.reason) { ++ console.warn('[HocuspocusProvider] An authentication token is required, but you didn’t send one. Try adding a `token` to your HocuspocusProvider configuration. Won’t try again.'); + } + else { +- // TODO: Some weird TypeScript error +- // @ts-ignore +- provider.send(OutgoingMessage, { encoder: message.encoder }); ++ console.warn(`[HocuspocusProvider] Connection closed with status Unauthorized: ${event.reason}`); + } ++ this.shouldConnect = false; ++ } ++ if (event.code === common.Forbidden.code) { ++ if (!this.configuration.quiet) { ++ console.warn('[HocuspocusProvider] The provided authentication token isn’t allowed to connect to this server. Will try again.'); ++ return; // TODO REMOVE ME ++ } ++ } ++ if (event.code === common.MessageTooBig.code) { ++ console.warn(`[HocuspocusProvider] Connection closed with status MessageTooBig: ${event.reason}`); ++ this.shouldConnect = false; ++ } ++ if (this.connectionAttempt) { ++ // That connection attempt failed. ++ this.rejectConnectionAttempt(); ++ } ++ else if (this.shouldConnect) { ++ // The connection was closed by the server. Let’s just try again. ++ this.connect(); ++ } ++ // If we’ll reconnect, we’re done for now. ++ if (this.shouldConnect) { ++ return; ++ } ++ // The status is set correctly already. ++ if (this.status === exports.WebSocketStatus.Disconnected) { ++ return; + } ++ // Let’s update the connection status. ++ this.status = exports.WebSocketStatus.Disconnected; ++ this.emit('status', { status: exports.WebSocketStatus.Disconnected }); ++ this.emit('disconnect', { event }); + } +- applySyncMessage(provider, emitSynced) { +- const { message } = this; +- message.writeVarUint(exports.MessageType.Sync); +- // Apply update +- const syncMessageType = readSyncMessage(message.decoder, message.encoder, provider.document, provider); +- // Synced once we receive Step2 +- if (emitSynced && syncMessageType === messageYjsSyncStep2) { +- provider.synced = true; ++ destroy() { ++ this.emit('destroy'); ++ if (this.intervals.forceSync) { ++ clearInterval(this.intervals.forceSync); + } +- if (syncMessageType === messageYjsUpdate || syncMessageType === messageYjsSyncStep2) { +- if (provider.unsyncedChanges > 0) { +- provider.updateUnsyncedChanges(-1); +- } ++ clearInterval(this.intervals.connectionChecker); ++ // If there is still a connection attempt outstanding then we should stop ++ // it before calling disconnect, otherwise it will be rejected in the onClose ++ // handler and trigger a retry ++ this.stopConnectionAttempt(); ++ this.disconnect(); ++ this.removeAllListeners(); ++ if (typeof window === 'undefined') { ++ return; + } +- } +- applyAwarenessMessage(provider) { +- const { message } = this; +- applyAwarenessUpdate(provider.awareness, message.readVarUint8Array(), provider); +- } +- applyAuthMessage(provider) { +- const { message } = this; +- common.readAuthMessage(message.decoder, provider.permissionDeniedHandler.bind(provider), provider.authenticatedHandler.bind(provider)); +- } +- applyQueryAwarenessMessage(provider) { +- const { message } = this; +- message.writeVarUint(exports.MessageType.Awareness); +- message.writeVarUint8Array(encodeAwarenessUpdate(provider.awareness, Array.from(provider.awareness.getStates().keys()))); ++ window.removeEventListener('online', this.boundConnect); + } + } + +-class MessageSender { +- constructor(Message, args = {}) { +- this.message = new Message(); +- this.encoder = this.message.get(args); ++class IncomingMessage { ++ constructor(data) { ++ this.data = data; ++ this.encoder = createEncoder(); ++ this.decoder = createDecoder(new Uint8Array(this.data)); + } +- create() { +- return toUint8Array(this.encoder); ++ readVarUint() { ++ return readVarUint(this.decoder); + } +- send(webSocket) { +- webSocket === null || webSocket === void 0 ? void 0 : webSocket.send(this.create()); ++ readVarString() { ++ return readVarString(this.decoder); + } +- broadcast(channel) { +- publish(channel, this.create()); ++ readVarUint8Array() { ++ return readVarUint8Array(this.decoder); + } +-} +- +-class SyncStepOneMessage extends OutgoingMessage { +- constructor() { +- super(...arguments); +- this.type = exports.MessageType.Sync; +- this.description = 'First sync step'; ++ writeVarUint(type) { ++ return writeVarUint(this.encoder, type); + } +- get(args) { +- if (typeof args.document === 'undefined') { +- throw new Error('The sync step one message requires document as an argument'); +- } +- writeVarString(this.encoder, args.documentName); +- writeVarUint(this.encoder, this.type); +- writeSyncStep1(this.encoder, args.document); +- return this.encoder; ++ writeVarString(string) { ++ return writeVarString(this.encoder, string); + } +-} +- +-class SyncStepTwoMessage extends OutgoingMessage { +- constructor() { +- super(...arguments); +- this.type = exports.MessageType.Sync; +- this.description = 'Second sync step'; ++ writeVarUint8Array(data) { ++ return writeVarUint8Array(this.encoder, data); + } +- get(args) { +- if (typeof args.document === 'undefined') { +- throw new Error('The sync step two message requires document as an argument'); +- } +- writeVarString(this.encoder, args.documentName); +- writeVarUint(this.encoder, this.type); +- writeSyncStep2(this.encoder, args.document); +- return this.encoder; ++ length() { ++ return length(this.encoder); + } + } + +-class QueryAwarenessMessage extends OutgoingMessage { +- constructor() { +- super(...arguments); +- this.type = exports.MessageType.QueryAwareness; +- this.description = 'Queries awareness states'; +- } +- get(args) { +- console.log('queryAwareness: writing string docName', args.documentName); +- console.log(this.encoder.cpos); +- writeVarString(this.encoder, args.documentName); +- writeVarUint(this.encoder, this.type); +- return this.encoder; +- } +-} ++/** ++ * @module sync-protocol ++ */ + +-class AuthenticationMessage extends OutgoingMessage { +- constructor() { +- super(...arguments); +- this.type = exports.MessageType.Auth; +- this.description = 'Authentication'; +- } +- get(args) { +- if (typeof args.token === 'undefined') { +- throw new Error('The authentication message requires `token` as an argument.'); +- } +- writeVarString(this.encoder, args.documentName); +- writeVarUint(this.encoder, this.type); +- common.writeAuthentication(this.encoder, args.token); +- return this.encoder; +- } +-} ++/** ++ * @typedef {Map} StateMap ++ */ + +-class AwarenessMessage extends OutgoingMessage { +- constructor() { +- super(...arguments); +- this.type = exports.MessageType.Awareness; +- this.description = 'Awareness states update'; +- } +- get(args) { +- if (typeof args.awareness === 'undefined') { +- throw new Error('The awareness message requires awareness as an argument'); +- } +- if (typeof args.clients === 'undefined') { +- throw new Error('The awareness message requires clients as an argument'); +- } +- writeVarString(this.encoder, args.documentName); +- writeVarUint(this.encoder, this.type); +- let awarenessUpdate; +- if (args.states === undefined) { +- awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients); +- } +- else { +- awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients, args.states); +- } +- writeVarUint8Array(this.encoder, awarenessUpdate); +- return this.encoder; +- } +-} ++/** ++ * Core Yjs defines two message types: ++ * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2. ++ * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it ++ * received all information from the remote client. ++ * ++ * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection ++ * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both ++ * SyncStep2 and SyncDone, it is assured that it is synced to the remote client. ++ * ++ * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1. ++ * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies ++ * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the ++ * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can ++ * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them. ++ * Therefore it is necesarry that the client initiates the sync. ++ * ++ * Construction of a message: ++ * [messageType : varUint, message definition..] ++ * ++ * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol! ++ * ++ * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer) ++ */ + +-class UpdateMessage extends OutgoingMessage { +- constructor() { +- super(...arguments); +- this.type = exports.MessageType.Sync; +- this.description = 'A document update'; +- } +- get(args) { +- writeVarString(this.encoder, args.documentName); +- writeVarUint(this.encoder, this.type); +- writeUpdate(this.encoder, args.update); +- return this.encoder; +- } +-} ++const messageYjsSyncStep1 = 0; ++const messageYjsSyncStep2 = 1; ++const messageYjsUpdate = 2; ++ ++/** ++ * Create a sync step 1 message based on the state of the current shared document. ++ * ++ * @param {encoding.Encoder} encoder ++ * @param {Y.Doc} doc ++ */ ++const writeSyncStep1 = (encoder, doc) => { ++ writeVarUint(encoder, messageYjsSyncStep1); ++ const sv = Y__namespace.encodeStateVector(doc); ++ writeVarUint8Array(encoder, sv); ++}; ++ ++/** ++ * @param {encoding.Encoder} encoder ++ * @param {Y.Doc} doc ++ * @param {Uint8Array} [encodedStateVector] ++ */ ++const writeSyncStep2 = (encoder, doc, encodedStateVector) => { ++ writeVarUint(encoder, messageYjsSyncStep2); ++ writeVarUint8Array(encoder, Y__namespace.encodeStateAsUpdate(doc, encodedStateVector)); ++}; ++ ++/** ++ * Read SyncStep1 message and reply with SyncStep2. ++ * ++ * @param {decoding.Decoder} decoder The reply to the received message ++ * @param {encoding.Encoder} encoder The received message ++ * @param {Y.Doc} doc ++ */ ++const readSyncStep1 = (decoder, encoder, doc) => ++ writeSyncStep2(encoder, doc, readVarUint8Array(decoder)); ++ ++/** ++ * Read and apply Structs and then DeleteStore to a y instance. ++ * ++ * @param {decoding.Decoder} decoder ++ * @param {Y.Doc} doc ++ * @param {any} transactionOrigin ++ */ ++const readSyncStep2 = (decoder, doc, transactionOrigin) => { ++ try { ++ Y__namespace.applyUpdate(doc, readVarUint8Array(decoder), transactionOrigin); ++ } catch (error) { ++ // This catches errors that are thrown by event handlers ++ console.error('Caught error while handling a Yjs update', error); ++ } ++}; ++ ++/** ++ * @param {encoding.Encoder} encoder ++ * @param {Uint8Array} update ++ */ ++const writeUpdate = (encoder, update) => { ++ writeVarUint(encoder, messageYjsUpdate); ++ writeVarUint8Array(encoder, update); ++}; + + /** +- * Utility module to work with urls. ++ * Read and apply Structs and then DeleteStore to a y instance. + * +- * @module url ++ * @param {decoding.Decoder} decoder ++ * @param {Y.Doc} doc ++ * @param {any} transactionOrigin + */ ++const readUpdate = readSyncStep2; + + /** +- * @param {Object} params +- * @return {string} ++ * @param {decoding.Decoder} decoder A message received from another client ++ * @param {encoding.Encoder} encoder The reply message. Will not be sent if empty. ++ * @param {Y.Doc} doc ++ * @param {any} transactionOrigin + */ +-const encodeQueryParams = params => +- map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&'); ++const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => { ++ const messageType = readVarUint(decoder); ++ switch (messageType) { ++ case messageYjsSyncStep1: ++ readSyncStep1(decoder, encoder, doc); ++ break ++ case messageYjsSyncStep2: ++ readSyncStep2(decoder, doc, transactionOrigin); ++ break ++ case messageYjsUpdate: ++ readUpdate(decoder, doc, transactionOrigin); ++ break ++ default: ++ throw new Error('Unknown message type') ++ } ++ return messageType ++}; + +-class HocuspocusProviderWebsocket extends EventEmitter { +- constructor(configuration) { +- super(); +- this.configuration = { +- url: '', +- // @ts-ignore +- document: undefined, +- // @ts-ignore +- awareness: undefined, +- WebSocketPolyfill: undefined, +- parameters: {}, +- connect: true, +- broadcast: true, +- forceSyncInterval: false, +- // TODO: this should depend on awareness.outdatedTime +- messageReconnectTimeout: 30000, +- // 1 second +- delay: 1000, +- // instant +- initialDelay: 0, +- // double the delay each time +- factor: 2, +- // unlimited retries +- maxAttempts: 0, +- // wait at least 1 second +- minDelay: 1000, +- // at least every 30 seconds +- maxDelay: 30000, +- // randomize +- jitter: true, +- // retry forever +- timeout: 0, +- onOpen: () => null, +- onConnect: () => null, +- onMessage: () => null, +- onOutgoingMessage: () => null, +- onStatus: () => null, +- onDisconnect: () => null, +- onClose: () => null, +- onDestroy: () => null, +- onAwarenessUpdate: () => null, +- onAwarenessChange: () => null, +- quiet: false, +- }; +- this.subscribedToBroadcastChannel = false; +- this.webSocket = null; +- this.shouldConnect = true; +- this.status = exports.WebSocketStatus.Disconnected; +- this.lastMessageReceived = 0; +- this.mux = createMutex(); +- this.intervals = { +- forceSync: null, +- connectionChecker: null, +- }; +- this.connectionAttempt = null; +- this.receivedOnOpenPayload = undefined; +- this.receivedOnStatusPayload = undefined; +- this.boundConnect = this.connect.bind(this); +- this.setConfiguration(configuration); +- this.configuration.WebSocketPolyfill = configuration.WebSocketPolyfill ? configuration.WebSocketPolyfill : WebSocket; +- this.on('open', this.configuration.onOpen); +- this.on('open', this.onOpen.bind(this)); +- this.on('connect', this.configuration.onConnect); +- this.on('message', this.configuration.onMessage); +- this.on('outgoingMessage', this.configuration.onOutgoingMessage); +- this.on('status', this.configuration.onStatus); +- this.on('status', this.onStatus.bind(this)); +- this.on('disconnect', this.configuration.onDisconnect); +- this.on('close', this.configuration.onClose); +- this.on('destroy', this.configuration.onDestroy); +- this.on('awarenessUpdate', this.configuration.onAwarenessUpdate); +- this.on('awarenessChange', this.configuration.onAwarenessChange); +- this.on('close', this.onClose.bind(this)); +- this.on('message', this.onMessage.bind(this)); +- this.registerEventListeners(); +- this.intervals.connectionChecker = setInterval(this.checkConnection.bind(this), this.configuration.messageReconnectTimeout / 10); +- if (typeof configuration.connect !== 'undefined') { +- this.shouldConnect = configuration.connect; +- } +- if (!this.shouldConnect) { +- return; +- } +- this.connect(); +- } +- async onOpen(event) { +- this.receivedOnOpenPayload = event; ++class OutgoingMessage { ++ constructor() { ++ this.encoder = createEncoder(); + } +- async onStatus(data) { +- this.receivedOnStatusPayload = data; ++ get(args) { ++ return args.encoder; + } +- attach(provider) { +- if (this.receivedOnOpenPayload) { +- provider.onOpen(this.receivedOnOpenPayload); +- } +- if (this.receivedOnStatusPayload) { +- provider.onStatus(this.receivedOnStatusPayload); +- } ++ toUint8Array() { ++ return toUint8Array(this.encoder); + } +- detach(provider) { +- // tell the server to remove the listener ++} ++ ++class MessageReceiver { ++ constructor(message) { ++ this.broadcasted = false; ++ this.message = message; + } +- setConfiguration(configuration = {}) { +- this.configuration = { ...this.configuration, ...configuration }; ++ setBroadcasted(value) { ++ this.broadcasted = value; ++ return this; + } +- async connect() { +- if (this.status === exports.WebSocketStatus.Connected) { +- return; +- } +- // Always cancel any previously initiated connection retryer instances +- if (this.cancelWebsocketRetry) { +- this.cancelWebsocketRetry(); +- this.cancelWebsocketRetry = undefined; ++ apply(provider, emitSynced) { ++ const { message } = this; ++ const type = message.readVarUint(); ++ const emptyMessageLength = message.length(); ++ switch (type) { ++ case exports.MessageType.Sync: ++ this.applySyncMessage(provider, emitSynced); ++ break; ++ case exports.MessageType.Awareness: ++ this.applyAwarenessMessage(provider); ++ break; ++ case exports.MessageType.Auth: ++ this.applyAuthMessage(provider); ++ break; ++ case exports.MessageType.QueryAwareness: ++ this.applyQueryAwarenessMessage(provider); ++ break; ++ case exports.MessageType.Stateless: ++ provider.receiveStateless(readVarString(message.decoder)); ++ break; ++ case exports.MessageType.SyncStatus: ++ this.applySyncStatusMessage(provider, readVarInt(message.decoder) === 1); ++ break; ++ default: ++ throw new Error(`Can’t apply message of unknown type: ${type}`); + } +- this.shouldConnect = true; +- const abortableRetry = () => { +- let cancelAttempt = false; +- const retryPromise = attempt.retry(this.createWebSocketConnection.bind(this), { +- delay: this.configuration.delay, +- initialDelay: this.configuration.initialDelay, +- factor: this.configuration.factor, +- maxAttempts: this.configuration.maxAttempts, +- minDelay: this.configuration.minDelay, +- maxDelay: this.configuration.maxDelay, +- jitter: this.configuration.jitter, +- timeout: this.configuration.timeout, +- beforeAttempt: context => { +- if (!this.shouldConnect || cancelAttempt) { +- context.abort(); +- } +- }, +- }).catch((error) => { +- // If we aborted the connection attempt then don’t throw an error +- // ref: https://github.com/lifeomic/attempt/blob/master/src/index.ts#L136 +- if (error && error.code !== 'ATTEMPT_ABORTED') { +- throw error; +- } +- }); +- return { +- retryPromise, +- cancelFunc: () => { +- cancelAttempt = true; +- }, +- }; +- }; +- const { retryPromise, cancelFunc } = abortableRetry(); +- this.cancelWebsocketRetry = cancelFunc; +- return retryPromise; +- } +- createWebSocketConnection() { +- return new Promise((resolve, reject) => { +- if (this.webSocket) { +- this.webSocket.close(); +- this.webSocket = null; ++ // Reply ++ if (message.length() > emptyMessageLength + 1) { // length of documentName (considered in emptyMessageLength plus length of yjs sync type, set in applySyncMessage) ++ if (this.broadcasted) { ++ // TODO: Some weird TypeScript error ++ // @ts-ignore ++ provider.broadcast(OutgoingMessage, { encoder: message.encoder }); + } +- // Init the WebSocket connection +- const ws = new this.configuration.WebSocketPolyfill(this.url); +- ws.binaryType = 'arraybuffer'; +- ws.onmessage = (payload) => this.emit('message', payload); +- ws.onclose = (payload) => this.emit('close', { event: payload }); +- ws.onopen = (payload) => this.emit('open', payload); +- ws.onerror = (err) => { +- reject(err); +- }; +- this.webSocket = ws; +- // Reset the status +- this.status = exports.WebSocketStatus.Connecting; +- this.emit('status', { status: exports.WebSocketStatus.Connecting }); +- // Store resolve/reject for later use +- this.connectionAttempt = { +- resolve, +- reject, +- }; +- }); ++ else { ++ // TODO: Some weird TypeScript error ++ // @ts-ignore ++ provider.send(OutgoingMessage, { encoder: message.encoder }); ++ } ++ } + } +- onMessage(event) { +- this.resolveConnectionAttempt(); ++ applySyncMessage(provider, emitSynced) { ++ const { message } = this; ++ message.writeVarUint(exports.MessageType.Sync); ++ // Apply update ++ const syncMessageType = readSyncMessage(message.decoder, message.encoder, provider.document, provider); ++ // Synced once we receive Step2 ++ if (emitSynced && syncMessageType === messageYjsSyncStep2) { ++ provider.synced = true; ++ } + } +- resolveConnectionAttempt() { +- if (this.connectionAttempt) { +- this.connectionAttempt.resolve(); +- this.connectionAttempt = null; +- this.status = exports.WebSocketStatus.Connected; +- this.emit('status', { status: exports.WebSocketStatus.Connected }); +- this.emit('connect'); ++ applySyncStatusMessage(provider, applied) { ++ if (applied) { ++ provider.decrementUnsyncedChanges(); + } + } +- stopConnectionAttempt() { +- this.connectionAttempt = null; ++ applyAwarenessMessage(provider) { ++ const { message } = this; ++ applyAwarenessUpdate(provider.awareness, message.readVarUint8Array(), provider); + } +- rejectConnectionAttempt() { +- var _a; +- (_a = this.connectionAttempt) === null || _a === void 0 ? void 0 : _a.reject(); +- this.connectionAttempt = null; ++ applyAuthMessage(provider) { ++ const { message } = this; ++ common.readAuthMessage(message.decoder, provider.permissionDeniedHandler.bind(provider), provider.authenticatedHandler.bind(provider)); + } +- checkConnection() { +- var _a; +- // Don’t check the connection when it’s not even established +- if (this.status !== exports.WebSocketStatus.Connected) { +- return; +- } +- // Don’t close then connection while waiting for the first message +- if (!this.lastMessageReceived) { +- return; +- } +- // Don’t close the connection when a message was received recently +- if (this.configuration.messageReconnectTimeout >= getUnixTime() - this.lastMessageReceived) { +- return; +- } +- // No message received in a long time, not even your own +- // Awareness updates, which are updated every 15 seconds. +- (_a = this.webSocket) === null || _a === void 0 ? void 0 : _a.close(); ++ applyQueryAwarenessMessage(provider) { ++ const { message } = this; ++ message.writeVarUint(exports.MessageType.Awareness); ++ message.writeVarUint8Array(encodeAwarenessUpdate(provider.awareness, Array.from(provider.awareness.getStates().keys()))); + } +- registerEventListeners() { +- if (typeof window === 'undefined') { +- return; +- } +- window.addEventListener('online', this.boundConnect); ++} ++ ++class MessageSender { ++ constructor(Message, args = {}) { ++ this.message = new Message(); ++ this.encoder = this.message.get(args); + } +- // Ensure that the URL always ends with / +- get serverUrl() { +- while (this.configuration.url[this.configuration.url.length - 1] === '/') { +- return this.configuration.url.slice(0, this.configuration.url.length - 1); +- } +- return this.configuration.url; ++ create() { ++ return toUint8Array(this.encoder); + } +- get url() { +- const encodedParams = encodeQueryParams(this.configuration.parameters); +- return `${this.serverUrl}${encodedParams.length === 0 ? '' : `?${encodedParams}`}`; ++ send(webSocket) { ++ webSocket === null || webSocket === void 0 ? void 0 : webSocket.send(this.create()); + } +- disconnect() { +- this.shouldConnect = false; +- if (this.webSocket === null) { +- return; +- } +- try { +- this.webSocket.close(); +- } +- catch { +- // +- } ++ broadcast(channel) { ++ publish(channel, this.create()); + } +- send(message) { +- var _a; +- if (((_a = this.webSocket) === null || _a === void 0 ? void 0 : _a.readyState) === common.WsReadyStates.Open) { +- this.webSocket.send(message); +- } ++} ++ ++class AuthenticationMessage extends OutgoingMessage { ++ constructor() { ++ super(...arguments); ++ this.type = exports.MessageType.Auth; ++ this.description = 'Authentication'; + } +- onClose({ event }) { +- this.webSocket = null; +- if (this.status === exports.WebSocketStatus.Connected) { +- this.status = exports.WebSocketStatus.Disconnected; +- this.emit('status', { status: exports.WebSocketStatus.Disconnected }); +- this.emit('disconnect', { event }); +- } +- if (event.code === common.Unauthorized.code) { +- if (event.reason === common.Unauthorized.reason) { +- console.warn('[HocuspocusProvider] An authentication token is required, but you didn’t send one. Try adding a `token` to your HocuspocusProvider configuration. Won’t try again.'); +- } +- else { +- console.warn(`[HocuspocusProvider] Connection closed with status Unauthorized: ${event.reason}`); +- } +- this.shouldConnect = false; +- } +- if (event.code === common.Forbidden.code) { +- if (!this.configuration.quiet) { +- console.warn('[HocuspocusProvider] The provided authentication token isn’t allowed to connect to this server. Will try again.'); +- return; // TODO REMOVE ME +- } +- } +- if (event.code === common.MessageTooBig.code) { +- console.warn(`[HocuspocusProvider] Connection closed with status MessageTooBig: ${event.reason}`); +- this.shouldConnect = false; ++ get(args) { ++ if (typeof args.token === 'undefined') { ++ throw new Error('The authentication message requires `token` as an argument.'); + } +- if (this.connectionAttempt) { +- // That connection attempt failed. +- this.rejectConnectionAttempt(); ++ writeVarString(this.encoder, args.documentName); ++ writeVarUint(this.encoder, this.type); ++ common.writeAuthentication(this.encoder, args.token); ++ return this.encoder; ++ } ++} ++ ++class AwarenessMessage extends OutgoingMessage { ++ constructor() { ++ super(...arguments); ++ this.type = exports.MessageType.Awareness; ++ this.description = 'Awareness states update'; ++ } ++ get(args) { ++ if (typeof args.awareness === 'undefined') { ++ throw new Error('The awareness message requires awareness as an argument'); + } +- else if (this.shouldConnect) { +- // The connection was closed by the server. Let’s just try again. +- this.connect(); ++ if (typeof args.clients === 'undefined') { ++ throw new Error('The awareness message requires clients as an argument'); + } +- // If we’ll reconnect, we’re done for now. +- if (this.shouldConnect) { +- return; ++ writeVarString(this.encoder, args.documentName); ++ writeVarUint(this.encoder, this.type); ++ let awarenessUpdate; ++ if (args.states === undefined) { ++ awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients); + } +- // The status is set correctly already. +- if (this.status === exports.WebSocketStatus.Disconnected) { +- return; ++ else { ++ awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients, args.states); + } +- // Let’s update the connection status. +- this.status = exports.WebSocketStatus.Disconnected; +- this.emit('status', { status: exports.WebSocketStatus.Disconnected }); +- this.emit('disconnect', { event }); ++ writeVarUint8Array(this.encoder, awarenessUpdate); ++ return this.encoder; + } +- destroy() { +- this.emit('destroy'); +- if (this.intervals.forceSync) { +- clearInterval(this.intervals.forceSync); +- } +- clearInterval(this.intervals.connectionChecker); +- // If there is still a connection attempt outstanding then we should stop +- // it before calling disconnect, otherwise it will be rejected in the onClose +- // handler and trigger a retry +- this.stopConnectionAttempt(); +- this.disconnect(); +- this.removeAllListeners(); +- if (typeof window === 'undefined') { +- return; +- } +- window.removeEventListener('online', this.boundConnect); ++} ++ ++class CloseMessage extends OutgoingMessage { ++ constructor() { ++ super(...arguments); ++ this.type = exports.MessageType.CLOSE; ++ this.description = 'Ask the server to close the connection'; ++ } ++ get(args) { ++ writeVarString(this.encoder, args.documentName); ++ writeVarUint(this.encoder, this.type); ++ return this.encoder; ++ } ++} ++ ++class QueryAwarenessMessage extends OutgoingMessage { ++ constructor() { ++ super(...arguments); ++ this.type = exports.MessageType.QueryAwareness; ++ this.description = 'Queries awareness states'; ++ } ++ get(args) { ++ console.log('queryAwareness: writing string docName', args.documentName); ++ console.log(this.encoder.cpos); ++ writeVarString(this.encoder, args.documentName); ++ writeVarUint(this.encoder, this.type); ++ return this.encoder; + } + } + +@@ -2289,15 +2306,50 @@ class StatelessMessage extends OutgoingMessage { + } + } + +-class CloseMessage extends OutgoingMessage { ++class SyncStepOneMessage extends OutgoingMessage { + constructor() { + super(...arguments); +- this.type = exports.MessageType.CLOSE; +- this.description = 'Ask the server to close the connection'; ++ this.type = exports.MessageType.Sync; ++ this.description = 'First sync step'; ++ } ++ get(args) { ++ if (typeof args.document === 'undefined') { ++ throw new Error('The sync step one message requires document as an argument'); ++ } ++ writeVarString(this.encoder, args.documentName); ++ writeVarUint(this.encoder, this.type); ++ writeSyncStep1(this.encoder, args.document); ++ return this.encoder; ++ } ++} ++ ++class SyncStepTwoMessage extends OutgoingMessage { ++ constructor() { ++ super(...arguments); ++ this.type = exports.MessageType.Sync; ++ this.description = 'Second sync step'; ++ } ++ get(args) { ++ if (typeof args.document === 'undefined') { ++ throw new Error('The sync step two message requires document as an argument'); ++ } ++ writeVarString(this.encoder, args.documentName); ++ writeVarUint(this.encoder, this.type); ++ writeSyncStep2(this.encoder, args.document); ++ return this.encoder; ++ } ++} ++ ++class UpdateMessage extends OutgoingMessage { ++ constructor() { ++ super(...arguments); ++ this.type = exports.MessageType.Sync; ++ this.description = 'A document update'; + } + get(args) { + writeVarString(this.encoder, args.documentName); + writeVarUint(this.encoder, this.type); ++ writeUpdate(this.encoder, args.update); + return this.encoder; + } + } +@@ -2408,8 +2460,15 @@ class HocuspocusProvider extends EventEmitter { + get hasUnsyncedChanges() { + return this.unsyncedChanges > 0; + } +- updateUnsyncedChanges(unsyncedChanges = 0) { +- this.unsyncedChanges += unsyncedChanges; ++ incrementUnsyncedChanges() { ++ this.unsyncedChanges += 1; ++ this.emit('unsyncedChanges', this.unsyncedChanges); ++ } ++ decrementUnsyncedChanges() { ++ this.unsyncedChanges -= 1; ++ if (this.unsyncedChanges === 0) { ++ this.synced = true; ++ } + this.emit('unsyncedChanges', this.unsyncedChanges); + } + forceSync() { +@@ -2431,7 +2490,7 @@ class HocuspocusProvider extends EventEmitter { + if (origin === this) { + return; + } +- this.updateUnsyncedChanges(1); ++ this.incrementUnsyncedChanges(); + this.send(UpdateMessage, { update, documentName: this.configuration.name }, true); + } + awarenessUpdateHandler({ added, updated, removed }, origin) { +@@ -2449,9 +2508,6 @@ class HocuspocusProvider extends EventEmitter { + if (this.isSynced === state) { + return; + } +- if (state && this.unsyncedChanges > 0) { +- this.updateUnsyncedChanges(-1 * this.unsyncedChanges); +- } + this.isSynced = state; + this.emit('synced', { state }); + this.emit('sync', { state }); +@@ -2489,6 +2545,7 @@ class HocuspocusProvider extends EventEmitter { + return this.configuration.token; + } + startSync() { ++ this.incrementUnsyncedChanges(); + this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name }); + if (this.awareness.getLocalState() !== null) { + this.send(AwarenessMessage, { +@@ -2499,8 +2556,9 @@ class HocuspocusProvider extends EventEmitter { + } + } + send(message, args, broadcast = false) { +- if (!this.isConnected) ++ if (!this.isConnected) { + return; ++ } + if (broadcast) { + this.mux(() => { this.broadcast(message, args); }); + } +@@ -2516,7 +2574,7 @@ class HocuspocusProvider extends EventEmitter { + } + message.writeVarString(documentName); + this.emit('message', { event, message: new IncomingMessage(event.data) }); +- new MessageReceiver(message).apply(this); ++ new MessageReceiver(message).apply(this, true); + } + onClose(event) { + this.isAuthenticated = false; +diff --git a/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.cjs.map b/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.cjs.map +index 1f1c0d8..0a4f5b5 100644 +--- a/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.cjs.map ++++ b/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.cjs.map +@@ -1 +1 @@ +-{"version":3,"file":"hocuspocus-provider.cjs","sources":["../../../node_modules/lib0/map.js","../../../node_modules/lib0/set.js","../../../node_modules/lib0/string.js","../../../node_modules/lib0/conditions.js","../../../node_modules/lib0/storage.js","../../../node_modules/lib0/array.js","../../../node_modules/lib0/object.js","../../../node_modules/lib0/function.js","../../../node_modules/lib0/environment.js","../../../node_modules/lib0/math.js","../../../node_modules/lib0/binary.js","../../../node_modules/lib0/number.js","../../../node_modules/lib0/encoding.js","../../../node_modules/lib0/error.js","../../../node_modules/lib0/decoding.js","../../../node_modules/lib0/buffer.js","../../../node_modules/lib0/broadcastchannel.js","../../../node_modules/lib0/time.js","../../../node_modules/lib0/observable.js","../../../node_modules/y-protocols/awareness.js","../../../node_modules/lib0/mutex.js","../src/EventEmitter.ts","../src/IncomingMessage.ts","../../../node_modules/y-protocols/sync.js","../src/types.ts","../src/OutgoingMessage.ts","../src/MessageReceiver.ts","../src/MessageSender.ts","../src/OutgoingMessages/SyncStepOneMessage.ts","../src/OutgoingMessages/SyncStepTwoMessage.ts","../src/OutgoingMessages/QueryAwarenessMessage.ts","../src/OutgoingMessages/AuthenticationMessage.ts","../src/OutgoingMessages/AwarenessMessage.ts","../src/OutgoingMessages/UpdateMessage.ts","../../../node_modules/lib0/url.js","../src/HocuspocusProviderWebsocket.ts","../src/OutgoingMessages/StatelessMessage.ts","../src/OutgoingMessages/CloseMessage.ts","../src/HocuspocusProvider.ts","../src/TiptapCollabProviderWebsocket.ts","../src/TiptapCollabProvider.ts"],"sourcesContent":["/**\n * Utility module to work with key-value stores.\n *\n * @module map\n */\n\n/**\n * Creates a new Map instance.\n *\n * @function\n * @return {Map}\n *\n * @function\n */\nexport const create = () => new Map()\n\n/**\n * Copy a Map object into a fresh Map object.\n *\n * @function\n * @template X,Y\n * @param {Map} m\n * @return {Map}\n */\nexport const copy = m => {\n const r = create()\n m.forEach((v, k) => { r.set(k, v) })\n return r\n}\n\n/**\n * Get map property. Create T if property is undefined and set T on map.\n *\n * ```js\n * const listeners = map.setIfUndefined(events, 'eventName', set.create)\n * listeners.add(listener)\n * ```\n *\n * @function\n * @template V,K\n * @template {Map} MAP\n * @param {MAP} map\n * @param {K} key\n * @param {function():V} createT\n * @return {V}\n */\nexport const setIfUndefined = (map, key, createT) => {\n let set = map.get(key)\n if (set === undefined) {\n map.set(key, set = createT())\n }\n return set\n}\n\n/**\n * Creates an Array and populates it with the content of all key-value pairs using the `f(value, key)` function.\n *\n * @function\n * @template K\n * @template V\n * @template R\n * @param {Map} m\n * @param {function(V,K):R} f\n * @return {Array}\n */\nexport const map = (m, f) => {\n const res = []\n for (const [key, value] of m) {\n res.push(f(value, key))\n }\n return res\n}\n\n/**\n * Tests whether any key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @todo should rename to some - similarly to Array.some\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const any = (m, f) => {\n for (const [key, value] of m) {\n if (f(value, key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * Tests whether all key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const all = (m, f) => {\n for (const [key, value] of m) {\n if (!f(value, key)) {\n return false\n }\n }\n return true\n}\n","/**\n * Utility module to work with sets.\n *\n * @module set\n */\n\nexport const create = () => new Set()\n\n/**\n * @template T\n * @param {Set} set\n * @return {Array}\n */\nexport const toArray = set => Array.from(set)\n\n/**\n * @template T\n * @param {Set} set\n * @return {T}\n */\nexport const first = set =>\n set.values().next().value || undefined\n\n/**\n * @template T\n * @param {Iterable} entries\n * @return {Set}\n */\nexport const from = entries => new Set(entries)\n","/**\n * Utility module to work with strings.\n *\n * @module string\n */\n\nexport const fromCharCode = String.fromCharCode\nexport const fromCodePoint = String.fromCodePoint\n\n/**\n * @param {string} s\n * @return {string}\n */\nconst toLowerCase = s => s.toLowerCase()\n\nconst trimLeftRegex = /^\\s*/g\n\n/**\n * @param {string} s\n * @return {string}\n */\nexport const trimLeft = s => s.replace(trimLeftRegex, '')\n\nconst fromCamelCaseRegex = /([A-Z])/g\n\n/**\n * @param {string} s\n * @param {string} separator\n * @return {string}\n */\nexport const fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, match => `${separator}${toLowerCase(match)}`))\n\n/**\n * Compute the utf8ByteLength\n * @param {string} str\n * @return {number}\n */\nexport const utf8ByteLength = str => unescape(encodeURIComponent(str)).length\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Polyfill = str => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n const buf = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n buf[i] = /** @type {number} */ (encodedString.codePointAt(i))\n }\n return buf\n}\n\n/* c8 ignore next */\nexport const utf8TextEncoder = /** @type {TextEncoder} */ (typeof TextEncoder !== 'undefined' ? new TextEncoder() : null)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Native = str => utf8TextEncoder.encode(str)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nexport const encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Polyfill = buf => {\n let remainingLen = buf.length\n let encodedString = ''\n let bufPos = 0\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n const bytes = buf.subarray(bufPos, bufPos + nextLen)\n bufPos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n return decodeURIComponent(escape(encodedString))\n}\n\n/* c8 ignore next */\nexport let utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })\n\n/* c8 ignore start */\nif (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {\n // Safari doesn't handle BOM correctly.\n // This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call\n // Another issue is that from then on no BOM chars are recognized anymore\n /* c8 ignore next */\n utf8TextDecoder = null\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Native = buf => /** @type {TextDecoder} */ (utf8TextDecoder).decode(buf)\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\n/* c8 ignore next */\nexport const decodeUtf8 = utf8TextDecoder ? _decodeUtf8Native : _decodeUtf8Polyfill\n\n/**\n * @param {string} str The initial string\n * @param {number} index Starting position\n * @param {number} remove Number of characters to remove\n * @param {string} insert New content to insert\n */\nexport const splice = (str, index, remove, insert = '') => str.slice(0, index) + insert + str.slice(index + remove)\n","/**\n * Often used conditions.\n *\n * @module conditions\n */\n\n/**\n * @template T\n * @param {T|null|undefined} v\n * @return {T|null}\n */\n/* c8 ignore next */\nexport const undefinedToNull = v => v === undefined ? null : v\n","/* eslint-env browser */\n\n/**\n * Isomorphic variable storage.\n *\n * Uses LocalStorage in the browser and falls back to in-memory storage.\n *\n * @module storage\n */\n\n/* c8 ignore start */\nclass VarStoragePolyfill {\n constructor () {\n this.map = new Map()\n }\n\n /**\n * @param {string} key\n * @param {any} newValue\n */\n setItem (key, newValue) {\n this.map.set(key, newValue)\n }\n\n /**\n * @param {string} key\n */\n getItem (key) {\n return this.map.get(key)\n }\n}\n/* c8 ignore stop */\n\n/**\n * @type {any}\n */\nlet _localStorage = new VarStoragePolyfill()\nlet usePolyfill = true\n\n/* c8 ignore start */\ntry {\n // if the same-origin rule is violated, accessing localStorage might thrown an error\n if (typeof localStorage !== 'undefined') {\n _localStorage = localStorage\n usePolyfill = false\n }\n} catch (e) { }\n/* c8 ignore stop */\n\n/**\n * This is basically localStorage in browser, or a polyfill in nodejs\n */\n/* c8 ignore next */\nexport const varStorage = _localStorage\n\n/**\n * A polyfill for `addEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const onChange = eventHandler => usePolyfill || addEventListener('storage', /** @type {any} */ (eventHandler))\n\n/**\n * A polyfill for `removeEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler))\n","/**\n * Utility module to work with Arrays.\n *\n * @module array\n */\n\nimport * as set from './set.js'\n\n/**\n * Return the last element of an array. The element must exist\n *\n * @template L\n * @param {ArrayLike} arr\n * @return {L}\n */\nexport const last = arr => arr[arr.length - 1]\n\n/**\n * @template C\n * @return {Array}\n */\nexport const create = () => /** @type {Array} */ ([])\n\n/**\n * @template D\n * @param {Array} a\n * @return {Array}\n */\nexport const copy = a => /** @type {Array} */ (a.slice())\n\n/**\n * Append elements from src to dest\n *\n * @template M\n * @param {Array} dest\n * @param {Array} src\n */\nexport const appendTo = (dest, src) => {\n for (let i = 0; i < src.length; i++) {\n dest.push(src[i])\n }\n}\n\n/**\n * Transforms something array-like to an actual Array.\n *\n * @function\n * @template T\n * @param {ArrayLike|Iterable} arraylike\n * @return {T}\n */\nexport const from = Array.from\n\n/**\n * True iff condition holds on every element in the Array.\n *\n * @function\n * @template ITEM\n * @template {ArrayLike} ARR\n *\n * @param {ARR} arr\n * @param {function(ITEM, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const every = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (!f(arr[i], i, arr)) {\n return false\n }\n }\n return true\n}\n\n/**\n * True iff condition holds on some element in the Array.\n *\n * @function\n * @template S\n * @template {ArrayLike} ARR\n * @param {ARR} arr\n * @param {function(S, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const some = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (f(arr[i], i, arr)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @template ELEM\n *\n * @param {ArrayLike} a\n * @param {ArrayLike} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a.length === b.length && every(a, (item, index) => item === b[index])\n\n/**\n * @template ELEM\n * @param {Array>} arr\n * @return {Array}\n */\nexport const flatten = arr => arr.reduce((acc, val) => acc.concat(val), [])\n\nexport const isArray = Array.isArray\n\n/**\n * @template T\n * @param {Array} arr\n * @return {Array}\n */\nexport const unique = arr => from(set.from(arr))\n\n/**\n * @template T\n * @template M\n * @param {ArrayLike} arr\n * @param {function(T):M} mapper\n * @return {Array}\n */\nexport const uniqueBy = (arr, mapper) => {\n /**\n * @type {Set}\n */\n const happened = set.create()\n /**\n * @type {Array}\n */\n const result = []\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i]\n const mapped = mapper(el)\n if (!happened.has(mapped)) {\n happened.add(mapped)\n result.push(el)\n }\n }\n return result\n}\n","/**\n * Utility functions for working with EcmaScript objects.\n *\n * @module object\n */\n\n/**\n * @return {Object} obj\n */\nexport const create = () => Object.create(null)\n\n/**\n * Object.assign\n */\nexport const assign = Object.assign\n\n/**\n * @param {Object} obj\n */\nexport const keys = Object.keys\n\n/**\n * @template V\n * @param {{[k:string]:V}} obj\n * @param {function(V,string):any} f\n */\nexport const forEach = (obj, f) => {\n for (const key in obj) {\n f(obj[key], key)\n }\n}\n\n/**\n * @todo implement mapToArray & map\n *\n * @template R\n * @param {Object} obj\n * @param {function(any,string):R} f\n * @return {Array}\n */\nexport const map = (obj, f) => {\n const results = []\n for (const key in obj) {\n results.push(f(obj[key], key))\n }\n return results\n}\n\n/**\n * @param {Object} obj\n * @return {number}\n */\nexport const length = obj => keys(obj).length\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const some = (obj, f) => {\n for (const key in obj) {\n if (f(obj[key], key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @param {Object|undefined} obj\n */\nexport const isEmpty = obj => {\n for (const _k in obj) {\n return false\n }\n return true\n}\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const every = (obj, f) => {\n for (const key in obj) {\n if (!f(obj[key], key)) {\n return false\n }\n }\n return true\n}\n\n/**\n * Calls `Object.prototype.hasOwnProperty`.\n *\n * @param {any} obj\n * @param {string|symbol} key\n * @return {boolean}\n */\nexport const hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key)\n\n/**\n * @param {Object} a\n * @param {Object} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a === b || (length(a) === length(b) && every(a, (val, key) => (val !== undefined || hasProperty(b, key)) && b[key] === val))\n","/**\n * Common functions and function call helpers.\n *\n * @module function\n */\n\nimport * as array from './array.js'\nimport * as object from './object.js'\n\n/**\n * Calls all functions in `fs` with args. Only throws after all functions were called.\n *\n * @param {Array} fs\n * @param {Array} args\n */\nexport const callAll = (fs, args, i = 0) => {\n try {\n for (; i < fs.length; i++) {\n fs[i](...args)\n }\n } finally {\n if (i < fs.length) {\n callAll(fs, args, i + 1)\n }\n }\n}\n\nexport const nop = () => {}\n\n/**\n * @template T\n * @param {function():T} f\n * @return {T}\n */\nexport const apply = f => f()\n\n/**\n * @template A\n *\n * @param {A} a\n * @return {A}\n */\nexport const id = a => a\n\n/**\n * @template T\n *\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n */\nexport const equalityStrict = (a, b) => a === b\n\n/**\n * @template T\n *\n * @param {Array|object} a\n * @param {Array|object} b\n * @return {boolean}\n */\nexport const equalityFlat = (a, b) => a === b || (a != null && b != null && a.constructor === b.constructor && ((a instanceof Array && array.equalFlat(a, /** @type {Array} */ (b))) || (typeof a === 'object' && object.equalFlat(a, b))))\n\n/* c8 ignore start */\n\n/**\n * @param {any} a\n * @param {any} b\n * @return {boolean}\n */\nexport const equalityDeep = (a, b) => {\n if (a == null || b == null) {\n return equalityStrict(a, b)\n }\n if (a.constructor !== b.constructor) {\n return false\n }\n if (a === b) {\n return true\n }\n switch (a.constructor) {\n case ArrayBuffer:\n a = new Uint8Array(a)\n b = new Uint8Array(b)\n // eslint-disable-next-line no-fallthrough\n case Uint8Array: {\n if (a.byteLength !== b.byteLength) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n break\n }\n case Set: {\n if (a.size !== b.size) {\n return false\n }\n for (const value of a) {\n if (!b.has(value)) {\n return false\n }\n }\n break\n }\n case Map: {\n if (a.size !== b.size) {\n return false\n }\n for (const key of a.keys()) {\n if (!b.has(key) || !equalityDeep(a.get(key), b.get(key))) {\n return false\n }\n }\n break\n }\n case Object:\n if (object.length(a) !== object.length(b)) {\n return false\n }\n for (const key in a) {\n if (!object.hasProperty(a, key) || !equalityDeep(a[key], b[key])) {\n return false\n }\n }\n break\n case Array:\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!equalityDeep(a[i], b[i])) {\n return false\n }\n }\n break\n default:\n return false\n }\n return true\n}\n\n/**\n * @template V\n * @template {V} OPTS\n *\n * @param {V} value\n * @param {Array} options\n */\n// @ts-ignore\nexport const isOneOf = (value, options) => options.includes(value)\n/* c8 ignore stop */\n","/**\n * Isomorphic module to work access the environment (query params, env variables).\n *\n * @module map\n */\n\nimport * as map from './map.js'\nimport * as string from './string.js'\nimport * as conditions from './conditions.js'\nimport * as storage from './storage.js'\nimport * as f from './function.js'\n\n/* c8 ignore next */\n// @ts-ignore\nexport const isNode = typeof process !== 'undefined' && process.release &&\n /node|io\\.js/.test(process.release.name)\n/* c8 ignore next */\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && !isNode\n/* c8 ignore next 3 */\nexport const isMac = typeof navigator !== 'undefined'\n ? /Mac/.test(navigator.platform)\n : false\n\n/**\n * @type {Map}\n */\nlet params\nconst args = []\n\n/* c8 ignore start */\nconst computeParams = () => {\n if (params === undefined) {\n if (isNode) {\n params = map.create()\n const pargs = process.argv\n let currParamName = null\n for (let i = 0; i < pargs.length; i++) {\n const parg = pargs[i]\n if (parg[0] === '-') {\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n currParamName = parg\n } else {\n if (currParamName !== null) {\n params.set(currParamName, parg)\n currParamName = null\n } else {\n args.push(parg)\n }\n }\n }\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n // in ReactNative for example this would not be true (unless connected to the Remote Debugger)\n } else if (typeof location === 'object') {\n params = map.create(); // eslint-disable-next-line no-undef\n (location.search || '?').slice(1).split('&').forEach((kv) => {\n if (kv.length !== 0) {\n const [key, value] = kv.split('=')\n params.set(`--${string.fromCamelCase(key, '-')}`, value)\n params.set(`-${string.fromCamelCase(key, '-')}`, value)\n }\n })\n } else {\n params = map.create()\n }\n }\n return params\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next */\nexport const hasParam = (name) => computeParams().has(name)\n\n/**\n * @param {string} name\n * @param {string} defaultVal\n * @return {string}\n */\n/* c8 ignore next 2 */\nexport const getParam = (name, defaultVal) =>\n computeParams().get(name) || defaultVal\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 4 */\nexport const getVariable = (name) =>\n isNode\n ? conditions.undefinedToNull(process.env[name.toUpperCase()])\n : conditions.undefinedToNull(storage.varStorage.getItem(name))\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 2 */\nexport const getConf = (name) =>\n computeParams().get('--' + name) || getVariable(name)\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next 2 */\nexport const hasConf = (name) =>\n hasParam('--' + name) || getVariable(name) !== null\n\n/* c8 ignore next */\nexport const production = hasConf('production')\n\n/* c8 ignore next 2 */\nconst forceColor = isNode &&\n f.isOneOf(process.env.FORCE_COLOR, ['true', '1', '2'])\n\n/* c8 ignore start */\nexport const supportsColor = !hasParam('no-colors') &&\n (!isNode || process.stdout.isTTY || forceColor) && (\n !isNode || hasParam('color') || forceColor ||\n getVariable('COLORTERM') !== null ||\n (getVariable('TERM') || '').includes('color')\n)\n/* c8 ignore stop */\n","/**\n * Common Math expressions.\n *\n * @module math\n */\n\nexport const floor = Math.floor\nexport const ceil = Math.ceil\nexport const abs = Math.abs\nexport const imul = Math.imul\nexport const round = Math.round\nexport const log10 = Math.log10\nexport const log2 = Math.log2\nexport const log = Math.log\nexport const sqrt = Math.sqrt\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The sum of a and b\n */\nexport const add = (a, b) => a + b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The smaller element of a and b\n */\nexport const min = (a, b) => a < b ? a : b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The bigger element of a and b\n */\nexport const max = (a, b) => a > b ? a : b\n\nexport const isNaN = Number.isNaN\n\nexport const pow = Math.pow\n/**\n * Base 10 exponential function. Returns the value of 10 raised to the power of pow.\n *\n * @param {number} exp\n * @return {number}\n */\nexport const exp10 = exp => Math.pow(10, exp)\n\nexport const sign = Math.sign\n\n/**\n * @param {number} n\n * @return {boolean} Wether n is negative. This function also differentiates between -0 and +0\n */\nexport const isNegativeZero = n => n !== 0 ? n < 0 : 1 / n < 0\n","/* eslint-env browser */\n\n/**\n * Binary data constants.\n *\n * @module binary\n */\n\n/**\n * n-th bit activated.\n *\n * @type {number}\n */\nexport const BIT1 = 1\nexport const BIT2 = 2\nexport const BIT3 = 4\nexport const BIT4 = 8\nexport const BIT5 = 16\nexport const BIT6 = 32\nexport const BIT7 = 64\nexport const BIT8 = 128\nexport const BIT9 = 256\nexport const BIT10 = 512\nexport const BIT11 = 1024\nexport const BIT12 = 2048\nexport const BIT13 = 4096\nexport const BIT14 = 8192\nexport const BIT15 = 16384\nexport const BIT16 = 32768\nexport const BIT17 = 65536\nexport const BIT18 = 1 << 17\nexport const BIT19 = 1 << 18\nexport const BIT20 = 1 << 19\nexport const BIT21 = 1 << 20\nexport const BIT22 = 1 << 21\nexport const BIT23 = 1 << 22\nexport const BIT24 = 1 << 23\nexport const BIT25 = 1 << 24\nexport const BIT26 = 1 << 25\nexport const BIT27 = 1 << 26\nexport const BIT28 = 1 << 27\nexport const BIT29 = 1 << 28\nexport const BIT30 = 1 << 29\nexport const BIT31 = 1 << 30\nexport const BIT32 = 1 << 31\n\n/**\n * First n bits activated.\n *\n * @type {number}\n */\nexport const BITS0 = 0\nexport const BITS1 = 1\nexport const BITS2 = 3\nexport const BITS3 = 7\nexport const BITS4 = 15\nexport const BITS5 = 31\nexport const BITS6 = 63\nexport const BITS7 = 127\nexport const BITS8 = 255\nexport const BITS9 = 511\nexport const BITS10 = 1023\nexport const BITS11 = 2047\nexport const BITS12 = 4095\nexport const BITS13 = 8191\nexport const BITS14 = 16383\nexport const BITS15 = 32767\nexport const BITS16 = 65535\nexport const BITS17 = BIT18 - 1\nexport const BITS18 = BIT19 - 1\nexport const BITS19 = BIT20 - 1\nexport const BITS20 = BIT21 - 1\nexport const BITS21 = BIT22 - 1\nexport const BITS22 = BIT23 - 1\nexport const BITS23 = BIT24 - 1\nexport const BITS24 = BIT25 - 1\nexport const BITS25 = BIT26 - 1\nexport const BITS26 = BIT27 - 1\nexport const BITS27 = BIT28 - 1\nexport const BITS28 = BIT29 - 1\nexport const BITS29 = BIT30 - 1\nexport const BITS30 = BIT31 - 1\n/**\n * @type {number}\n */\nexport const BITS31 = 0x7FFFFFFF\n/**\n * @type {number}\n */\nexport const BITS32 = 0xFFFFFFFF\n","/**\n * Utility helpers for working with numbers.\n *\n * @module number\n */\n\nimport * as math from './math.js'\nimport * as binary from './binary.js'\n\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER\n\nexport const LOWEST_INT32 = 1 << 31\n/**\n * @type {number}\n */\nexport const HIGHEST_INT32 = binary.BITS31\n\n/**\n * @module number\n */\n\n/* c8 ignore next */\nexport const isInteger = Number.isInteger || (num => typeof num === 'number' && isFinite(num) && math.floor(num) === num)\nexport const isNaN = Number.isNaN\nexport const parseInt = Number.parseInt\n","/**\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module encoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as binary from './binary.js'\nimport * as string from './string.js'\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nexport class Encoder {\n constructor () {\n this.cpos = 0\n this.cbuf = new Uint8Array(100)\n /**\n * @type {Array}\n */\n this.bufs = []\n }\n}\n\n/**\n * @function\n * @return {Encoder}\n */\nexport const createEncoder = () => new Encoder()\n\n/**\n * The current length of the encoded data.\n *\n * @function\n * @param {Encoder} encoder\n * @return {number}\n */\nexport const length = encoder => {\n let len = encoder.cpos\n for (let i = 0; i < encoder.bufs.length; i++) {\n len += encoder.bufs[i].length\n }\n return len\n}\n\n/**\n * Transform to Uint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @return {Uint8Array} The created ArrayBuffer.\n */\nexport const toUint8Array = encoder => {\n const uint8arr = new Uint8Array(length(encoder))\n let curPos = 0\n for (let i = 0; i < encoder.bufs.length; i++) {\n const d = encoder.bufs[i]\n uint8arr.set(d, curPos)\n curPos += d.length\n }\n uint8arr.set(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos), curPos)\n return uint8arr\n}\n\n/**\n * Verify that it is possible to write `len` bytes wtihout checking. If\n * necessary, a new Buffer with the required length is attached.\n *\n * @param {Encoder} encoder\n * @param {number} len\n */\nexport const verifyLen = (encoder, len) => {\n const bufferLen = encoder.cbuf.length\n if (bufferLen - encoder.cpos < len) {\n encoder.bufs.push(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos))\n encoder.cbuf = new Uint8Array(math.max(bufferLen, len) * 2)\n encoder.cpos = 0\n }\n}\n\n/**\n * Write one byte to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The byte that is to be encoded.\n */\nexport const write = (encoder, num) => {\n const bufferLen = encoder.cbuf.length\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf)\n encoder.cbuf = new Uint8Array(bufferLen * 2)\n encoder.cpos = 0\n }\n encoder.cbuf[encoder.cpos++] = num\n}\n\n/**\n * Write one byte at a specific position.\n * Position must already be written (i.e. encoder.length > pos)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos Position to which to write data\n * @param {number} num Unsigned 8-bit integer\n */\nexport const set = (encoder, pos, num) => {\n let buffer = null\n // iterate all buffers and adjust position\n for (let i = 0; i < encoder.bufs.length && buffer === null; i++) {\n const b = encoder.bufs[i]\n if (pos < b.length) {\n buffer = b // found buffer\n } else {\n pos -= b.length\n }\n }\n if (buffer === null) {\n // use current buffer\n buffer = encoder.cbuf\n }\n buffer[pos] = num\n}\n\n/**\n * Write one byte as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint8 = write\n\n/**\n * Write one byte as an unsigned Integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint8 = set\n\n/**\n * Write two bytes as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint16 = (encoder, num) => {\n write(encoder, num & binary.BITS8)\n write(encoder, (num >>> 8) & binary.BITS8)\n}\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint16 = (encoder, pos, num) => {\n set(encoder, pos, num & binary.BITS8)\n set(encoder, pos + 1, (num >>> 8) & binary.BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32 = (encoder, num) => {\n for (let i = 0; i < 4; i++) {\n write(encoder, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write two bytes as an unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32BigEndian = (encoder, num) => {\n for (let i = 3; i >= 0; i--) {\n write(encoder, (num >>> (8 * i)) & binary.BITS8)\n }\n}\n\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint32 = (encoder, pos, num) => {\n for (let i = 0; i < 4; i++) {\n set(encoder, pos + i, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarUint = (encoder, num) => {\n while (num > binary.BITS7) {\n write(encoder, binary.BIT8 | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n write(encoder, binary.BITS7 & num)\n}\n\n/**\n * Write a variable length integer.\n *\n * We use the 7th bit instead for signaling that this is a negative number.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarInt = (encoder, num) => {\n const isNegative = math.isNegativeZero(num)\n if (isNegative) {\n num = -num\n }\n // |- whether to continue reading |- whether is negative |- number\n write(encoder, (num > binary.BITS6 ? binary.BIT8 : 0) | (isNegative ? binary.BIT7 : 0) | (binary.BITS6 & num))\n num = math.floor(num / 64) // shift >>> 6\n // We don't need to consider the case of num === 0 so we can use a different\n // pattern here than above.\n while (num > 0) {\n write(encoder, (num > binary.BITS7 ? binary.BIT8 : 0) | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n}\n\n/**\n * A cache to store strings temporarily\n */\nconst _strBuffer = new Uint8Array(30000)\nconst _maxStrBSize = _strBuffer.length / 3\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringNative = (encoder, str) => {\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n /* c8 ignore next */\n const written = string.utf8TextEncoder.encodeInto(str, _strBuffer).written || 0\n writeVarUint(encoder, written)\n for (let i = 0; i < written; i++) {\n write(encoder, _strBuffer[i])\n }\n } else {\n writeVarUint8Array(encoder, string.encodeUtf8(str))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringPolyfill = (encoder, str) => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n write(encoder, /** @type {number} */ (encodedString.codePointAt(i)))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\n/* c8 ignore next */\nexport const writeVarString = (string.utf8TextEncoder && /** @type {any} */ (string.utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill\n\n/**\n * Write the content of another Encoder.\n *\n * @TODO: can be improved!\n * - Note: Should consider that when appending a lot of small Encoders, we should rather clone than referencing the old structure.\n * Encoders start with a rather big initial buffer.\n *\n * @function\n * @param {Encoder} encoder The enUint8Arr\n * @param {Encoder} append The BinaryEncoder to be written.\n */\nexport const writeBinaryEncoder = (encoder, append) => writeUint8Array(encoder, toUint8Array(append))\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeUint8Array = (encoder, uint8Array) => {\n const bufferLen = encoder.cbuf.length\n const cpos = encoder.cpos\n const leftCopyLen = math.min(bufferLen - cpos, uint8Array.length)\n const rightCopyLen = uint8Array.length - leftCopyLen\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos)\n encoder.cpos += leftCopyLen\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf)\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(math.max(bufferLen * 2, rightCopyLen))\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen))\n encoder.cpos = rightCopyLen\n }\n}\n\n/**\n * Append an Uint8Array to Encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeVarUint8Array = (encoder, uint8Array) => {\n writeVarUint(encoder, uint8Array.byteLength)\n writeUint8Array(encoder, uint8Array)\n}\n\n/**\n * Create an DataView of the next `len` bytes. Use it to write data after\n * calling this function.\n *\n * ```js\n * // write float32 using DataView\n * const dv = writeOnDataView(encoder, 4)\n * dv.setFloat32(0, 1.1)\n * // read float32 using DataView\n * const dv = readFromDataView(encoder, 4)\n * dv.getFloat32(0) // => 1.100000023841858 (leaving it to the reader to find out why this is the correct result)\n * ```\n *\n * @param {Encoder} encoder\n * @param {number} len\n * @return {DataView}\n */\nexport const writeOnDataView = (encoder, len) => {\n verifyLen(encoder, len)\n const dview = new DataView(encoder.cbuf.buffer, encoder.cpos, len)\n encoder.cpos += len\n return dview\n}\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat32 = (encoder, num) => writeOnDataView(encoder, 4).setFloat32(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat64 = (encoder, num) => writeOnDataView(encoder, 8).setFloat64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigInt64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigInt64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigUint64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigUint64(0, num, false)\n\nconst floatTestBed = new DataView(new ArrayBuffer(4))\n/**\n * Check if a number can be encoded as a 32 bit float.\n *\n * @param {number} num\n * @return {boolean}\n */\nconst isFloat32 = num => {\n floatTestBed.setFloat32(0, num)\n return floatTestBed.getFloat32(0) === num\n}\n\n/**\n * Encode data with efficient binary format.\n *\n * Differences to JSON:\n * • Transforms data to a binary format (not to a string)\n * • Encodes undefined, NaN, and ArrayBuffer (these can't be represented in JSON)\n * • Numbers are efficiently encoded either as a variable length integer, as a\n * 32 bit float, as a 64 bit float, or as a 64 bit bigint.\n *\n * Encoding table:\n *\n * | Data Type | Prefix | Encoding Method | Comment |\n * | ------------------- | -------- | ------------------ | ------- |\n * | undefined | 127 | | Functions, symbol, and everything that cannot be identified is encoded as undefined |\n * | null | 126 | | |\n * | integer | 125 | writeVarInt | Only encodes 32 bit signed integers |\n * | float32 | 124 | writeFloat32 | |\n * | float64 | 123 | writeFloat64 | |\n * | bigint | 122 | writeBigInt64 | |\n * | boolean (false) | 121 | | True and false are different data types so we save the following byte |\n * | boolean (true) | 120 | | - 0b01111000 so the last bit determines whether true or false |\n * | string | 119 | writeVarString | |\n * | object | 118 | custom | Writes {length} then {length} key-value pairs |\n * | array | 117 | custom | Writes {length} then {length} json values |\n * | Uint8Array | 116 | writeVarUint8Array | We use Uint8Array for any kind of binary data |\n *\n * Reasons for the decreasing prefix:\n * We need the first bit for extendability (later we may want to encode the\n * prefix with writeVarUint). The remaining 7 bits are divided as follows:\n * [0-30] the beginning of the data range is used for custom purposes\n * (defined by the function that uses this library)\n * [31-127] the end of the data range is used for data encoding by\n * lib0/encoding.js\n *\n * @param {Encoder} encoder\n * @param {undefined|null|number|bigint|boolean|string|Object|Array|Uint8Array} data\n */\nexport const writeAny = (encoder, data) => {\n switch (typeof data) {\n case 'string':\n // TYPE 119: STRING\n write(encoder, 119)\n writeVarString(encoder, data)\n break\n case 'number':\n if (number.isInteger(data) && math.abs(data) <= binary.BITS31) {\n // TYPE 125: INTEGER\n write(encoder, 125)\n writeVarInt(encoder, data)\n } else if (isFloat32(data)) {\n // TYPE 124: FLOAT32\n write(encoder, 124)\n writeFloat32(encoder, data)\n } else {\n // TYPE 123: FLOAT64\n write(encoder, 123)\n writeFloat64(encoder, data)\n }\n break\n case 'bigint':\n // TYPE 122: BigInt\n write(encoder, 122)\n writeBigInt64(encoder, data)\n break\n case 'object':\n if (data === null) {\n // TYPE 126: null\n write(encoder, 126)\n } else if (data instanceof Array) {\n // TYPE 117: Array\n write(encoder, 117)\n writeVarUint(encoder, data.length)\n for (let i = 0; i < data.length; i++) {\n writeAny(encoder, data[i])\n }\n } else if (data instanceof Uint8Array) {\n // TYPE 116: ArrayBuffer\n write(encoder, 116)\n writeVarUint8Array(encoder, data)\n } else {\n // TYPE 118: Object\n write(encoder, 118)\n const keys = Object.keys(data)\n writeVarUint(encoder, keys.length)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n writeVarString(encoder, key)\n writeAny(encoder, data[key])\n }\n }\n break\n case 'boolean':\n // TYPE 120/121: boolean (true/false)\n write(encoder, data ? 120 : 121)\n break\n default:\n // TYPE 127: undefined\n write(encoder, 127)\n }\n}\n\n/**\n * Now come a few stateful encoder that have their own classes.\n */\n\n/**\n * Basic Run Length Encoder - a basic compression implementation.\n *\n * Encodes [1,1,1,7] to [1,3,7,1] (3 times 1, 1 time 7). This encoder might do more harm than good if there are a lot of values that are not repeated.\n *\n * It was originally used for image compression. Cool .. article http://csbruce.com/cbm/transactor/pdfs/trans_v7_i06.pdf\n *\n * @note T must not be null!\n *\n * @template T\n */\nexport class RleEncoder extends Encoder {\n /**\n * @param {function(Encoder, T):void} writer\n */\n constructor (writer) {\n super()\n /**\n * The writer\n */\n this.w = writer\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n /**\n * @param {T} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n this.w(this, v)\n this.s = v\n }\n }\n}\n\n/**\n * Basic diff decoder using variable length encoding.\n *\n * Encodes the values [3, 1100, 1101, 1050, 0] to [3, 1097, 1, -51, -1050] using writeVarInt.\n */\nexport class IntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n writeVarInt(this, v - this.s)\n this.s = v\n }\n}\n\n/**\n * A combination of IntDiffEncoder and RleEncoder.\n *\n * Basically first writes the IntDiffEncoder and then counts duplicate diffs using RleEncoding.\n *\n * Encodes the values [1,1,1,2,3,4,5,6] as [1,1,0,2,1,5] (RLE([1,0,0,1,1,1,1,1]) ⇒ RleIntDiff[1,1,0,2,1,5])\n */\nexport class RleIntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v && this.count > 0) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n writeVarInt(this, v - this.s)\n this.s = v\n }\n }\n}\n\n/**\n * @param {UintOptRleEncoder} encoder\n */\nconst flushUintOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set sign to positive\n // case 2: write several values. set sign to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encoder.count === 1 ? encoder.s : -encoder.s)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * Optimized Rle encoder that does not suffer from the mentioned problem of the basic Rle encoder.\n *\n * Internally uses VarInt encoder to write unsigned integers. If the input occurs multiple times, we write\n * write it as a negative number. The UintOptRleDecoder then understands that it needs to read a count.\n *\n * Encodes [1,2,3,3,3] as [1,2,-3,3] (once 1, once 2, three times 3)\n */\nexport class UintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Increasing Uint Optimized RLE Encoder\n *\n * The RLE encoder counts the number of same occurences of the same value.\n * The IncUintOptRle encoder counts if the value increases.\n * I.e. 7, 8, 9, 10 will be encoded as [-7, 4]. 1, 3, 5 will be encoded\n * as [1, 3, 5].\n */\nexport class IncUintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s + this.count === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * @param {IntDiffOptRleEncoder} encoder\n */\nconst flushIntDiffOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // 31 bit making up the diff | wether to write the counter\n // const encodedDiff = encoder.diff << 1 | (encoder.count === 1 ? 0 : 1)\n const encodedDiff = encoder.diff * 2 + (encoder.count === 1 ? 0 : 1)\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set first bit to positive\n // case 2: write several values. set first bit to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encodedDiff)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * A combination of the IntDiffEncoder and the UintOptRleEncoder.\n *\n * The count approach is similar to the UintDiffOptRleEncoder, but instead of using the negative bitflag, it encodes\n * in the LSB whether a count is to be read. Therefore this Encoder only supports 31 bit integers!\n *\n * Encodes [1, 2, 3, 2] as [3, 1, 6, -1] (more specifically [(1 << 1) | 1, (3 << 0) | 0, -1])\n *\n * Internally uses variable length encoding. Contrary to normal UintVar encoding, the first byte contains:\n * * 1 bit that denotes whether the next value is a count (LSB)\n * * 1 bit that denotes whether this value is negative (MSB - 1)\n * * 1 bit that denotes whether to continue reading the variable length integer (MSB)\n *\n * Therefore, only five bits remain to encode diff ranges.\n *\n * Use this Encoder only when appropriate. In most cases, this is probably a bad idea.\n */\nexport class IntDiffOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.diff === v - this.s) {\n this.s = v\n this.count++\n } else {\n flushIntDiffOptRleEncoder(this)\n this.count = 1\n this.diff = v - this.s\n this.s = v\n }\n }\n\n toUint8Array () {\n flushIntDiffOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Optimized String Encoder.\n *\n * Encoding many small strings in a simple Encoder is not very efficient. The function call to decode a string takes some time and creates references that must be eventually deleted.\n * In practice, when decoding several million small strings, the GC will kick in more and more often to collect orphaned string objects (or maybe there is another reason?).\n *\n * This string encoder solves the above problem. All strings are concatenated and written as a single string using a single encoding call.\n *\n * The lengths are encoded using a UintOptRleEncoder.\n */\nexport class StringEncoder {\n constructor () {\n /**\n * @type {Array}\n */\n this.sarr = []\n this.s = ''\n this.lensE = new UintOptRleEncoder()\n }\n\n /**\n * @param {string} string\n */\n write (string) {\n this.s += string\n if (this.s.length > 19) {\n this.sarr.push(this.s)\n this.s = ''\n }\n this.lensE.write(string.length)\n }\n\n toUint8Array () {\n const encoder = new Encoder()\n this.sarr.push(this.s)\n this.s = ''\n writeVarString(encoder, this.sarr.join(''))\n writeUint8Array(encoder, this.lensE.toUint8Array())\n return toUint8Array(encoder)\n }\n}\n","/**\n * Error helpers.\n *\n * @module error\n */\n\n/**\n * @param {string} s\n * @return {Error}\n */\n/* c8 ignore next */\nexport const create = s => new Error(s)\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const methodUnimplemented = () => {\n throw create('Method unimplemented')\n}\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const unexpectedCase = () => {\n throw create('Unexpected case')\n}\n","/**\n * Efficient schema-less binary decoding with support for variable length encoding.\n *\n * Use [lib0/decoding] with [lib0/encoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module decoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as binary from './binary.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as string from './string.js'\nimport * as error from './error.js'\n\nconst errorUnexpectedEndOfArray = error.create('Unexpected end of array')\nconst errorIntegerOutOfRange = error.create('Integer out of Range')\n\n/**\n * A Decoder handles the decoding of an Uint8Array.\n */\nexport class Decoder {\n /**\n * @param {Uint8Array} uint8Array Binary data to decode\n */\n constructor (uint8Array) {\n /**\n * Decoding target.\n *\n * @type {Uint8Array}\n */\n this.arr = uint8Array\n /**\n * Current decoding position.\n *\n * @type {number}\n */\n this.pos = 0\n }\n}\n\n/**\n * @function\n * @param {Uint8Array} uint8Array\n * @return {Decoder}\n */\nexport const createDecoder = uint8Array => new Decoder(uint8Array)\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {boolean}\n */\nexport const hasContent = decoder => decoder.pos !== decoder.arr.length\n\n/**\n * Clone a decoder instance.\n * Optionally set a new position parameter.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} [newPos] Defaults to current position\n * @return {Decoder} A clone of `decoder`\n */\nexport const clone = (decoder, newPos = decoder.pos) => {\n const _decoder = createDecoder(decoder.arr)\n _decoder.pos = newPos\n return _decoder\n}\n\n/**\n * Create an Uint8Array view of the next `len` bytes and advance the position by `len`.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} len The length of bytes to read\n * @return {Uint8Array}\n */\nexport const readUint8Array = (decoder, len) => {\n const view = buffer.createUint8ArrayViewFromArrayBuffer(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len)\n decoder.pos += len\n return view\n}\n\n/**\n * Read variable length Uint8Array.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readVarUint8Array = decoder => readUint8Array(decoder, readVarUint(decoder))\n\n/**\n * Read the rest of the content as an ArrayBuffer\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTailAsUint8Array = decoder => readUint8Array(decoder, decoder.arr.length - decoder.pos)\n\n/**\n * Skip one byte, jump to the next position.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} The next position\n */\nexport const skip8 = decoder => decoder.pos++\n\n/**\n * Read one byte as unsigned integer.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} Unsigned 8-bit integer\n */\nexport const readUint8 = decoder => decoder.arr[decoder.pos++]\n\n/**\n * Read 2 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint16 = decoder => {\n const uint =\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n decoder.pos += 2\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32 = decoder => {\n const uint =\n (decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32BigEndian = decoder => {\n const uint =\n (decoder.arr[decoder.pos + 3] +\n (decoder.arr[decoder.pos + 2] << 8) +\n (decoder.arr[decoder.pos + 1] << 16) +\n (decoder.arr[decoder.pos] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint8 = decoder => decoder.arr[decoder.pos]\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint16 = decoder =>\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint32 = decoder => (\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)\n) >>> 0\n\n/**\n * Read unsigned integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarUint = decoder => {\n let num = 0\n let mult = 1\n const len = decoder.arr.length\n while (decoder.pos < len) {\n const r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult // shift $r << (7*#iterations) and add it to num\n mult *= 128 // next iteration, shift 7 \"more\" to the left\n if (r < binary.BIT8) {\n return num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Read signed integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n * @todo This should probably create the inverse ~num if number is negative - but this would be a breaking change.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarInt = decoder => {\n let r = decoder.arr[decoder.pos++]\n let num = r & binary.BITS6\n let mult = 64\n const sign = (r & binary.BIT7) > 0 ? -1 : 1\n if ((r & binary.BIT8) === 0) {\n // don't continue reading\n return sign * num\n }\n const len = decoder.arr.length\n while (decoder.pos < len) {\n r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult\n mult *= 128\n if (r < binary.BIT8) {\n return sign * num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarUint = decoder => {\n const pos = decoder.pos\n const s = readVarUint(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarInt = decoder => {\n const pos = decoder.pos\n const s = readVarInt(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * We don't test this function anymore as we use native decoding/encoding by default now.\n * Better not modify this anymore..\n *\n * Transforming utf8 to a string is pretty expensive. The code performs 10x better\n * when String.fromCodePoint is fed with all characters as arguments.\n * But most environments have a maximum number of arguments per functions.\n * For effiency reasons we apply a maximum of 10000 characters at once.\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String.\n */\n/* c8 ignore start */\nexport const _readVarStringPolyfill = decoder => {\n let remainingLen = readVarUint(decoder)\n if (remainingLen === 0) {\n return ''\n } else {\n let encodedString = String.fromCodePoint(readUint8(decoder)) // remember to decrease remainingLen\n if (--remainingLen < 100) { // do not create a Uint8Array for small strings\n while (remainingLen--) {\n encodedString += String.fromCodePoint(readUint8(decoder))\n }\n } else {\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n // this is dangerous, we create a fresh array view from the existing buffer\n const bytes = decoder.arr.subarray(decoder.pos, decoder.pos + nextLen)\n decoder.pos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n }\n return decodeURIComponent(escape(encodedString))\n }\n}\n/* c8 ignore stop */\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n */\nexport const _readVarStringNative = decoder =>\n /** @type any */ (string.utf8TextDecoder).decode(readVarUint8Array(decoder))\n\n/**\n * Read string of variable length\n * * varUint is used to store the length of the string\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n *\n */\n/* c8 ignore next */\nexport const readVarString = string.utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill\n\n/**\n * Look ahead and read varString without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const peekVarString = decoder => {\n const pos = decoder.pos\n const s = readVarString(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * @param {Decoder} decoder\n * @param {number} len\n * @return {DataView}\n */\nexport const readFromDataView = (decoder, len) => {\n const dv = new DataView(decoder.arr.buffer, decoder.arr.byteOffset + decoder.pos, len)\n decoder.pos += len\n return dv\n}\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat32 = decoder => readFromDataView(decoder, 4).getFloat32(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat64 = decoder => readFromDataView(decoder, 8).getFloat64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigInt64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigInt64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigUint64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigUint64(0, false)\n\n/**\n * @type {Array}\n */\nconst readAnyLookupTable = [\n decoder => undefined, // CASE 127: undefined\n decoder => null, // CASE 126: null\n readVarInt, // CASE 125: integer\n readFloat32, // CASE 124: float32\n readFloat64, // CASE 123: float64\n readBigInt64, // CASE 122: bigint\n decoder => false, // CASE 121: boolean (false)\n decoder => true, // CASE 120: boolean (true)\n readVarString, // CASE 119: string\n decoder => { // CASE 118: object\n const len = readVarUint(decoder)\n /**\n * @type {Object}\n */\n const obj = {}\n for (let i = 0; i < len; i++) {\n const key = readVarString(decoder)\n obj[key] = readAny(decoder)\n }\n return obj\n },\n decoder => { // CASE 117: array\n const len = readVarUint(decoder)\n const arr = []\n for (let i = 0; i < len; i++) {\n arr.push(readAny(decoder))\n }\n return arr\n },\n readVarUint8Array // CASE 116: Uint8Array\n]\n\n/**\n * @param {Decoder} decoder\n */\nexport const readAny = decoder => readAnyLookupTable[127 - readUint8(decoder)](decoder)\n\n/**\n * T must not be null.\n *\n * @template T\n */\nexport class RleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {function(Decoder):T} reader\n */\n constructor (uint8Array, reader) {\n super(uint8Array)\n /**\n * The reader\n */\n this.reader = reader\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = this.reader(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {T} */ (this.s)\n }\n}\n\nexport class IntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @return {number}\n */\n read () {\n this.s += readVarInt(this)\n return this.s\n }\n}\n\nexport class RleIntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n this.s += readVarInt(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class UintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class IncUintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s++)\n }\n}\n\nexport class IntDiffOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n const diff = readVarInt(this)\n // if the first bit is set, we read more data\n const hasCount = diff & 1\n this.diff = math.floor(diff / 2) // shift >> 1\n this.count = 1\n if (hasCount) {\n this.count = readVarUint(this) + 2\n }\n }\n this.s += this.diff\n this.count--\n return this.s\n }\n}\n\nexport class StringDecoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n this.decoder = new UintOptRleDecoder(uint8Array)\n this.str = readVarString(this.decoder)\n /**\n * @type {number}\n */\n this.spos = 0\n }\n\n /**\n * @return {string}\n */\n read () {\n const end = this.spos + this.decoder.read()\n const res = this.str.slice(this.spos, end)\n this.spos = end\n return res\n }\n}\n","/**\n * Utility functions to work with buffers (Uint8Array).\n *\n * @module buffer\n */\n\nimport * as string from './string.js'\nimport * as env from './environment.js'\nimport * as encoding from './encoding.js'\nimport * as decoding from './decoding.js'\n\n/**\n * @param {number} len\n */\nexport const createUint8ArrayFromLen = len => new Uint8Array(len)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n * @param {number} byteOffset\n * @param {number} length\n */\nexport const createUint8ArrayViewFromArrayBuffer = (buffer, byteOffset, length) => new Uint8Array(buffer, byteOffset, length)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n */\nexport const createUint8ArrayFromArrayBuffer = buffer => new Uint8Array(buffer)\n\n/* c8 ignore start */\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Browser = bytes => {\n let s = ''\n for (let i = 0; i < bytes.byteLength; i++) {\n s += string.fromCharCode(bytes[i])\n }\n // eslint-disable-next-line no-undef\n return btoa(s)\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Node = bytes => Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64')\n\n/* c8 ignore start */\n/**\n * @param {string} s\n * @return {Uint8Array}\n */\nconst fromBase64Browser = s => {\n // eslint-disable-next-line no-undef\n const a = atob(s)\n const bytes = createUint8ArrayFromLen(a.length)\n for (let i = 0; i < a.length; i++) {\n bytes[i] = a.charCodeAt(i)\n }\n return bytes\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} s\n */\nconst fromBase64Node = s => {\n const buf = Buffer.from(s, 'base64')\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/* c8 ignore next */\nexport const toBase64 = env.isBrowser ? toBase64Browser : toBase64Node\n\n/* c8 ignore next */\nexport const fromBase64 = env.isBrowser ? fromBase64Browser : fromBase64Node\n\n/**\n * Copy the content of an Uint8Array view to a new ArrayBuffer.\n *\n * @param {Uint8Array} uint8Array\n * @return {Uint8Array}\n */\nexport const copyUint8Array = uint8Array => {\n const newBuf = createUint8ArrayFromLen(uint8Array.byteLength)\n newBuf.set(uint8Array)\n return newBuf\n}\n\n/**\n * Encode anything as a UInt8Array. It's a pun on typescripts's `any` type.\n * See encoding.writeAny for more information.\n *\n * @param {any} data\n * @return {Uint8Array}\n */\nexport const encodeAny = data => {\n const encoder = encoding.createEncoder()\n encoding.writeAny(encoder, data)\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Decode an any-encoded value.\n *\n * @param {Uint8Array} buf\n * @return {any}\n */\nexport const decodeAny = buf => decoding.readAny(decoding.createDecoder(buf))\n","/* eslint-env browser */\n\n/**\n * Helpers for cross-tab communication using broadcastchannel with LocalStorage fallback.\n *\n * ```js\n * // In browser window A:\n * broadcastchannel.subscribe('my events', data => console.log(data))\n * broadcastchannel.publish('my events', 'Hello world!') // => A: 'Hello world!' fires synchronously in same tab\n *\n * // In browser window B:\n * broadcastchannel.publish('my events', 'hello from tab B') // => A: 'hello from tab B'\n * ```\n *\n * @module broadcastchannel\n */\n\n// @todo before next major: use Uint8Array instead as buffer object\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as buffer from './buffer.js'\nimport * as storage from './storage.js'\n\n/**\n * @typedef {Object} Channel\n * @property {Set} Channel.subs\n * @property {any} Channel.bc\n */\n\n/**\n * @type {Map}\n */\nconst channels = new Map()\n\n/* c8 ignore start */\nclass LocalStoragePolyfill {\n /**\n * @param {string} room\n */\n constructor (room) {\n this.room = room\n /**\n * @type {null|function({data:ArrayBuffer}):void}\n */\n this.onmessage = null\n /**\n * @param {any} e\n */\n this._onChange = e => e.key === room && this.onmessage !== null && this.onmessage({ data: buffer.fromBase64(e.newValue || '') })\n storage.onChange(this._onChange)\n }\n\n /**\n * @param {ArrayBuffer} buf\n */\n postMessage (buf) {\n storage.varStorage.setItem(this.room, buffer.toBase64(buffer.createUint8ArrayFromArrayBuffer(buf)))\n }\n\n close () {\n storage.offChange(this._onChange)\n }\n}\n/* c8 ignore stop */\n\n// Use BroadcastChannel or Polyfill\n/* c8 ignore next */\nconst BC = typeof BroadcastChannel === 'undefined' ? LocalStoragePolyfill : BroadcastChannel\n\n/**\n * @param {string} room\n * @return {Channel}\n */\nconst getChannel = room =>\n map.setIfUndefined(channels, room, () => {\n const subs = set.create()\n const bc = new BC(room)\n /**\n * @param {{data:ArrayBuffer}} e\n */\n /* c8 ignore next */\n bc.onmessage = e => subs.forEach(sub => sub(e.data, 'broadcastchannel'))\n return {\n bc, subs\n }\n })\n\n/**\n * Subscribe to global `publish` events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const subscribe = (room, f) => {\n getChannel(room).subs.add(f)\n return f\n}\n\n/**\n * Unsubscribe from `publish` global events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const unsubscribe = (room, f) => {\n const channel = getChannel(room)\n const unsubscribed = channel.subs.delete(f)\n if (unsubscribed && channel.subs.size === 0) {\n channel.bc.close()\n channels.delete(room)\n }\n return unsubscribed\n}\n\n/**\n * Publish data to all subscribers (including subscribers on this tab)\n *\n * @function\n * @param {string} room\n * @param {any} data\n * @param {any} [origin]\n */\nexport const publish = (room, data, origin = null) => {\n const c = getChannel(room)\n c.bc.postMessage(data)\n c.subs.forEach(sub => sub(data, origin))\n}\n","/**\n * Utility module to work with time.\n *\n * @module time\n */\n\nimport * as metric from './metric.js'\nimport * as math from './math.js'\n\n/**\n * Return current time.\n *\n * @return {Date}\n */\nexport const getDate = () => new Date()\n\n/**\n * Return current unix time.\n *\n * @return {number}\n */\nexport const getUnixTime = Date.now\n\n/**\n * Transform time (in ms) to a human readable format. E.g. 1100 => 1.1s. 60s => 1min. .001 => 10μs.\n *\n * @param {number} d duration in milliseconds\n * @return {string} humanized approximation of time\n */\nexport const humanizeDuration = d => {\n if (d < 60000) {\n const p = metric.prefix(d, -1)\n return math.round(p.n * 100) / 100 + p.prefix + 's'\n }\n d = math.floor(d / 1000)\n const seconds = d % 60\n const minutes = math.floor(d / 60) % 60\n const hours = math.floor(d / 3600) % 24\n const days = math.floor(d / 86400)\n if (days > 0) {\n return days + 'd' + ((hours > 0 || minutes > 30) ? ' ' + (minutes > 30 ? hours + 1 : hours) + 'h' : '')\n }\n if (hours > 0) {\n /* c8 ignore next */\n return hours + 'h' + ((minutes > 0 || seconds > 30) ? ' ' + (seconds > 30 ? minutes + 1 : minutes) + 'min' : '')\n }\n return minutes + 'min' + (seconds > 0 ? ' ' + seconds + 's' : '')\n}\n","/**\n * Observable class prototype.\n *\n * @module observable\n */\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as array from './array.js'\n\n/**\n * Handles named events.\n *\n * @template N\n */\nexport class Observable {\n constructor () {\n /**\n * Some desc.\n * @type {Map}\n */\n this._observers = map.create()\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, name, set.create).add(f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, _f)\n f(...args)\n }\n this.on(name, _f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @param {N} name The event name.\n * @param {Array} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n","/**\n * @module awareness-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as time from 'lib0/time'\nimport * as math from 'lib0/math'\nimport { Observable } from 'lib0/observable'\nimport * as f from 'lib0/function'\nimport * as Y from 'yjs' // eslint-disable-line\n\nexport const outdatedTimeout = 30000\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable}\n */\nexport class Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super()\n this.doc = doc\n /**\n * @type {number}\n */\n this.clientID = doc.clientID\n /**\n * Maps from client id to client state\n * @type {Map>}\n */\n this.states = new Map()\n /**\n * @type {Map}\n */\n this.meta = new Map()\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = time.getUnixTime()\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState())\n }\n /**\n * @type {Array}\n */\n const remove = []\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid)\n }\n })\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout')\n }\n }, math.floor(outdatedTimeout / 10)))\n doc.on('destroy', () => {\n this.destroy()\n })\n this.setLocalState({})\n }\n\n destroy () {\n this.emit('destroy', [this])\n this.setLocalState(null)\n super.destroy()\n clearInterval(this._checkInterval)\n }\n\n /**\n * @return {Object|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID\n const currLocalMeta = this.meta.get(clientID)\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1\n const prevState = this.states.get(clientID)\n if (state === null) {\n this.states.delete(clientID)\n } else {\n this.states.set(clientID, state)\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: time.getUnixTime()\n })\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n if (state === null) {\n removed.push(clientID)\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID)\n }\n } else {\n updated.push(clientID)\n if (!f.equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID)\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local'])\n }\n this.emit('update', [{ added, updated, removed }, 'local'])\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState()\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n })\n }\n }\n\n /**\n * @return {Map>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array} clients\n * @param {any} origin\n */\nexport const removeAwarenessStates = (awareness, clients, origin) => {\n const removed = []\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i]\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID)\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID))\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: time.getUnixTime()\n })\n }\n removed.push(clientID)\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin])\n awareness.emit('update', [{ added: [], updated: [], removed }, origin])\n }\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Array} clients\n * @return {Uint8Array}\n */\nexport const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = clients[i]\n const state = states.get(clientID) || null\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(state))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Modify the content of an awareness update before re-encoding it to an awareness update.\n *\n * This might be useful when you have a central server that wants to ensure that clients\n * cant hijack somebody elses identity.\n *\n * @param {Uint8Array} update\n * @param {function(any):any} modify\n * @return {Uint8Array}\n */\nexport const modifyAwarenessUpdate = (update, modify) => {\n const decoder = decoding.createDecoder(update)\n const encoder = encoding.createEncoder()\n const len = decoding.readVarUint(decoder)\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n const clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const modifiedState = modify(state)\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(modifiedState))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nexport const applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = decoding.createDecoder(update)\n const timestamp = time.getUnixTime()\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n const len = decoding.readVarUint(decoder)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n let clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const clientMeta = awareness.meta.get(clientID)\n const prevState = awareness.states.get(clientID)\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++\n } else {\n awareness.states.delete(clientID)\n }\n } else {\n awareness.states.set(clientID, state)\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n })\n if (clientMeta === undefined && state !== null) {\n added.push(clientID)\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID)\n } else if (state !== null) {\n if (!f.equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID)\n }\n updated.push(clientID)\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin])\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin])\n }\n}\n","/**\n * Mutual exclude for JavaScript.\n *\n * @module mutex\n */\n\n/**\n * @callback mutex\n * @param {function():void} cb Only executed when this mutex is not in the current stack\n * @param {function():void} [elseCb] Executed when this mutex is in the current stack\n */\n\n/**\n * Creates a mutual exclude function with the following property:\n *\n * ```js\n * const mutex = createMutex()\n * mutex(() => {\n * // This function is immediately executed\n * mutex(() => {\n * // This function is not executed, as the mutex is already active.\n * })\n * })\n * ```\n *\n * @return {mutex} A mutual exclude function\n * @public\n */\nexport const createMutex = () => {\n let token = true\n return (f, g) => {\n if (token) {\n token = false\n try {\n f()\n } finally {\n token = true\n }\n } else if (g !== undefined) {\n g()\n }\n }\n}\n","export default class EventEmitter {\n\n public callbacks: { [key: string]: Function[] } = {}\n\n public on(event: string, fn: Function): this {\n if (!this.callbacks[event]) {\n this.callbacks[event] = []\n }\n\n this.callbacks[event].push(fn)\n\n return this\n }\n\n protected emit(event: string, ...args: any): this {\n const callbacks = this.callbacks[event]\n\n if (callbacks) {\n callbacks.forEach(callback => callback.apply(this, args))\n }\n\n return this\n }\n\n public off(event: string, fn?: Function): this {\n const callbacks = this.callbacks[event]\n\n if (callbacks) {\n if (fn) {\n this.callbacks[event] = callbacks.filter(callback => callback !== fn)\n } else {\n delete this.callbacks[event]\n }\n }\n\n return this\n }\n\n removeAllListeners(): void {\n this.callbacks = {}\n }\n}\n","import {\n createDecoder,\n readVarUint,\n readVarUint8Array,\n readVarString,\n Decoder,\n} from 'lib0/decoding'\nimport {\n Encoder,\n createEncoder,\n writeVarUint,\n writeVarUint8Array,\n writeVarString,\n length,\n} from 'lib0/encoding'\nimport { MessageType } from './types.js'\n\nexport class IncomingMessage {\n\n data: any\n\n encoder: Encoder\n\n decoder: Decoder\n\n constructor(data: any) {\n this.data = data\n this.encoder = createEncoder()\n this.decoder = createDecoder(new Uint8Array(this.data))\n }\n\n readVarUint(): MessageType {\n return readVarUint(this.decoder)\n }\n\n readVarString(): string {\n return readVarString(this.decoder)\n }\n\n readVarUint8Array() {\n return readVarUint8Array(this.decoder)\n }\n\n writeVarUint(type: MessageType) {\n return writeVarUint(this.encoder, type)\n }\n\n writeVarString(string: string) {\n return writeVarString(this.encoder, string)\n }\n\n writeVarUint8Array(data: Uint8Array) {\n return writeVarUint8Array(this.encoder, data)\n }\n\n length() {\n return length(this.encoder)\n }\n}\n","/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them.\n * Therefore it is necesarry that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Will not be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n","import { Awareness } from 'y-protocols/awareness'\nimport * as Y from 'yjs'\nimport { Encoder } from 'lib0/encoding'\nimport type { Event, CloseEvent, MessageEvent } from 'ws'\nimport { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.js'\nimport { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.js'\nimport { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js'\nimport { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js'\nimport { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js'\nimport { UpdateMessage } from './OutgoingMessages/UpdateMessage.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\n\nexport enum MessageType {\n Sync = 0,\n Awareness = 1,\n Auth = 2,\n QueryAwareness = 3,\n Stateless = 5,\n CLOSE = 7,\n}\n\nexport enum WebSocketStatus {\n Connecting = 'connecting',\n Connected = 'connected',\n Disconnected = 'disconnected',\n}\n\nexport interface OutgoingMessageInterface {\n encoder: Encoder\n type?: MessageType\n}\n\nexport interface OutgoingMessageArguments {\n documentName: string,\n token: string,\n document: Y.Doc,\n awareness: Awareness,\n clients: number[],\n states: Map,\n update: any,\n payload: string,\n encoder: Encoder,\n}\n\nexport interface Constructable {\n new(...args: any) : T\n}\n\nexport type ConstructableOutgoingMessage =\n Constructable |\n Constructable |\n Constructable |\n Constructable |\n Constructable |\n Constructable\n\nexport type onAuthenticationFailedParameters = {\n reason: string,\n}\n\nexport type onOpenParameters = {\n event: Event,\n}\n\nexport type onMessageParameters = {\n event: MessageEvent,\n message: IncomingMessage,\n}\n\nexport type onOutgoingMessageParameters = {\n message: OutgoingMessage,\n}\n\nexport type onStatusParameters = {\n status: WebSocketStatus,\n}\n\nexport type onSyncedParameters = {\n state: boolean,\n}\n\nexport type onDisconnectParameters = {\n event: CloseEvent,\n}\n\nexport type onCloseParameters = {\n event: CloseEvent,\n}\n\nexport type onAwarenessUpdateParameters = {\n states: StatesArray\n}\n\nexport type onAwarenessChangeParameters = {\n states: StatesArray\n}\n\nexport type onStatelessParameters = {\n payload: string\n}\n\nexport type StatesArray = { clientId: number, [key: string | number]: any }[]\n","import { Encoder, createEncoder, toUint8Array } from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments, OutgoingMessageInterface } from './types.js'\n\nexport class OutgoingMessage implements OutgoingMessageInterface {\n encoder: Encoder\n\n type?: MessageType\n\n constructor() {\n this.encoder = createEncoder()\n }\n\n get(args: Partial) {\n return args.encoder\n }\n\n toUint8Array() {\n return toUint8Array(this.encoder)\n }\n}\n","import * as awarenessProtocol from 'y-protocols/awareness'\nimport { readSyncMessage, messageYjsSyncStep2, messageYjsUpdate } from 'y-protocols/sync'\nimport { readAuthMessage } from '@hocuspocus/common'\nimport { readVarString } from 'lib0/decoding'\nimport { MessageType } from './types.js'\nimport { HocuspocusProvider } from './HocuspocusProvider.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\n\nexport class MessageReceiver {\n\n message: IncomingMessage\n\n broadcasted = false\n\n constructor(message: IncomingMessage) {\n this.message = message\n }\n\n public setBroadcasted(value: boolean) {\n this.broadcasted = value\n\n return this\n }\n\n public apply(provider: HocuspocusProvider, emitSynced = true) {\n const { message } = this\n const type = message.readVarUint()\n\n const emptyMessageLength = message.length()\n\n switch (type) {\n case MessageType.Sync:\n this.applySyncMessage(provider, emitSynced)\n break\n\n case MessageType.Awareness:\n this.applyAwarenessMessage(provider)\n break\n\n case MessageType.Auth:\n this.applyAuthMessage(provider)\n break\n\n case MessageType.QueryAwareness:\n this.applyQueryAwarenessMessage(provider)\n break\n\n case MessageType.Stateless:\n provider.receiveStateless(readVarString(message.decoder))\n break\n\n default:\n throw new Error(`Can’t apply message of unknown type: ${type}`)\n }\n\n // Reply\n if (message.length() > emptyMessageLength + 1) { // length of documentName (considered in emptyMessageLength plus length of yjs sync type, set in applySyncMessage)\n if (this.broadcasted) {\n // TODO: Some weird TypeScript error\n // @ts-ignore\n provider.broadcast(OutgoingMessage, { encoder: message.encoder })\n } else {\n // TODO: Some weird TypeScript error\n // @ts-ignore\n provider.send(OutgoingMessage, { encoder: message.encoder })\n }\n }\n }\n\n private applySyncMessage(provider: HocuspocusProvider, emitSynced: boolean) {\n const { message } = this\n\n message.writeVarUint(MessageType.Sync)\n\n // Apply update\n const syncMessageType = readSyncMessage(\n message.decoder,\n message.encoder,\n provider.document,\n provider,\n )\n\n // Synced once we receive Step2\n if (emitSynced && syncMessageType === messageYjsSyncStep2) {\n provider.synced = true\n }\n\n if (syncMessageType === messageYjsUpdate || syncMessageType === messageYjsSyncStep2) {\n if (provider.unsyncedChanges > 0) {\n provider.updateUnsyncedChanges(-1)\n }\n }\n }\n\n private applyAwarenessMessage(provider: HocuspocusProvider) {\n const { message } = this\n\n awarenessProtocol.applyAwarenessUpdate(\n provider.awareness,\n message.readVarUint8Array(),\n provider,\n )\n }\n\n private applyAuthMessage(provider: HocuspocusProvider) {\n const { message } = this\n\n readAuthMessage(\n message.decoder,\n provider.permissionDeniedHandler.bind(provider),\n provider.authenticatedHandler.bind(provider),\n )\n }\n\n private applyQueryAwarenessMessage(provider: HocuspocusProvider) {\n const { message } = this\n\n message.writeVarUint(MessageType.Awareness)\n message.writeVarUint8Array(\n awarenessProtocol.encodeAwarenessUpdate(\n provider.awareness,\n Array.from(provider.awareness.getStates().keys()),\n ),\n )\n }\n}\n","import { Encoder, toUint8Array } from 'lib0/encoding'\nimport * as bc from 'lib0/broadcastchannel'\nimport { ConstructableOutgoingMessage } from './types.js'\n\nexport class MessageSender {\n\n encoder: Encoder\n\n message: any\n\n constructor(Message: ConstructableOutgoingMessage, args: any = {}) {\n this.message = new Message()\n this.encoder = this.message.get(args)\n }\n\n create() {\n return toUint8Array(this.encoder)\n }\n\n send(webSocket: any) {\n webSocket?.send(this.create())\n }\n\n broadcast(channel: string) {\n bc.publish(channel, this.create())\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport * as syncProtocol from 'y-protocols/sync'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class SyncStepOneMessage extends OutgoingMessage {\n type = MessageType.Sync\n\n description = 'First sync step'\n\n get(args: Partial) {\n if (typeof args.document === 'undefined') {\n throw new Error('The sync step one message requires document as an argument')\n }\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n syncProtocol.writeSyncStep1(this.encoder, args.document)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport * as syncProtocol from 'y-protocols/sync'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class SyncStepTwoMessage extends OutgoingMessage {\n type = MessageType.Sync\n\n description = 'Second sync step'\n\n get(args: Partial) {\n if (typeof args.document === 'undefined') {\n throw new Error('The sync step two message requires document as an argument')\n }\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n syncProtocol.writeSyncStep2(this.encoder, args.document)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class QueryAwarenessMessage extends OutgoingMessage {\n type = MessageType.QueryAwareness\n\n description = 'Queries awareness states'\n\n get(args: Partial) {\n\n console.log('queryAwareness: writing string docName', args.documentName)\n console.log(this.encoder.cpos)\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n\n return this.encoder\n }\n}\n","import { writeVarString, writeVarUint } from 'lib0/encoding'\nimport { writeAuthentication } from '@hocuspocus/common'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class AuthenticationMessage extends OutgoingMessage {\n type = MessageType.Auth\n\n description = 'Authentication'\n\n get(args: Partial) {\n if (typeof args.token === 'undefined') {\n throw new Error('The authentication message requires `token` as an argument.')\n }\n\n writeVarString(this.encoder, args.documentName!)\n writeVarUint(this.encoder, this.type)\n writeAuthentication(this.encoder, args.token)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport { encodeAwarenessUpdate } from 'y-protocols/awareness'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class AwarenessMessage extends OutgoingMessage {\n type = MessageType.Awareness\n\n description = 'Awareness states update'\n\n get(args: Partial) {\n if (typeof args.awareness === 'undefined') {\n throw new Error('The awareness message requires awareness as an argument')\n }\n\n if (typeof args.clients === 'undefined') {\n throw new Error('The awareness message requires clients as an argument')\n }\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n\n let awarenessUpdate\n if (args.states === undefined) {\n awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients)\n } else {\n awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients, args.states)\n }\n\n encoding.writeVarUint8Array(this.encoder, awarenessUpdate)\n\n return this.encoder\n }\n}\n","import { writeVarString, writeVarUint } from 'lib0/encoding'\nimport { writeUpdate } from 'y-protocols/sync'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class UpdateMessage extends OutgoingMessage {\n type = MessageType.Sync\n\n description = 'A document update'\n\n get(args: Partial) {\n writeVarString(this.encoder, args.documentName!)\n writeVarUint(this.encoder, this.type)\n\n writeUpdate(this.encoder, args.update)\n\n return this.encoder\n }\n}\n","/**\n * Utility module to work with urls.\n *\n * @module url\n */\n\nimport * as object from './object.js'\n\n/**\n * Parse query parameters from an url.\n *\n * @param {string} url\n * @return {Object}\n */\nexport const decodeQueryParams = url => {\n /**\n * @type {Object}\n */\n const query = {}\n const urlQuerySplit = url.split('?')\n const pairs = urlQuerySplit[urlQuerySplit.length - 1].split('&')\n for (let i = 0; i < pairs.length; i++) {\n const item = pairs[i]\n if (item.length > 0) {\n const pair = item.split('=')\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '')\n }\n }\n return query\n}\n\n/**\n * @param {Object} params\n * @return {string}\n */\nexport const encodeQueryParams = params =>\n object.map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&')\n","import * as time from 'lib0/time'\nimport * as mutex from 'lib0/mutex'\nimport * as url from 'lib0/url'\nimport type { MessageEvent } from 'ws'\nimport { retry } from '@lifeomic/attempt'\nimport {\n Forbidden, MessageTooBig, Unauthorized, WsReadyStates,\n} from '@hocuspocus/common'\nimport { Event } from 'ws'\nimport EventEmitter from './EventEmitter.js'\nimport {\n onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatusParameters, WebSocketStatus,\n onAwarenessChangeParameters, onAwarenessUpdateParameters,\n} from './types.js'\nimport { HocuspocusProvider } from './HocuspocusProvider.js'\n\nexport type HocuspocusProviderWebsocketConfiguration =\n Required>\n & Partial\n\nexport interface CompleteHocuspocusProviderWebsocketConfiguration {\n /**\n * URL of your @hocuspocus/server instance\n */\n url: string,\n\n /**\n * Pass `false` to start the connection manually.\n */\n connect: boolean,\n\n /**\n * URL parameters that should be added.\n */\n parameters: { [key: string]: any },\n /**\n * An optional WebSocket polyfill, for example for Node.js\n */\n WebSocketPolyfill: any,\n\n /**\n * Disconnect when no message is received for the defined amount of milliseconds.\n */\n messageReconnectTimeout: number,\n /**\n * The delay between each attempt in milliseconds. You can provide a factor to have the delay grow exponentially.\n */\n delay: number,\n /**\n * The intialDelay is the amount of time to wait before making the first attempt. This option should typically be 0 since you typically want the first attempt to happen immediately.\n */\n initialDelay: number,\n /**\n * The factor option is used to grow the delay exponentially.\n */\n factor: number,\n /**\n * The maximum number of attempts or 0 if there is no limit on number of attempts.\n */\n maxAttempts: number,\n /**\n * minDelay is used to set a lower bound of delay when jitter is enabled. This property has no effect if jitter is disabled.\n */\n minDelay: number,\n /**\n * The maxDelay option is used to set an upper bound for the delay when factor is enabled. A value of 0 can be provided if there should be no upper bound when calculating delay.\n */\n maxDelay: number,\n /**\n * If jitter is true then the calculated delay will be a random integer value between minDelay and the calculated delay for the current iteration.\n */\n jitter: boolean,\n /**\n * A timeout in milliseconds. If timeout is non-zero then a timer is set using setTimeout. If the timeout is triggered then future attempts will be aborted.\n */\n timeout: number,\n onOpen: (data: onOpenParameters) => void,\n onConnect: () => void,\n onMessage: (data: onMessageParameters) => void,\n onOutgoingMessage: (data: onOutgoingMessageParameters) => void,\n onStatus: (data: onStatusParameters) => void,\n onDisconnect: (data: onDisconnectParameters) => void,\n onClose: (data: onCloseParameters) => void,\n onDestroy: () => void,\n onAwarenessUpdate: (data: onAwarenessUpdateParameters) => void,\n onAwarenessChange: (data: onAwarenessChangeParameters) => void,\n /**\n * Don’t output any warnings.\n */\n quiet: boolean,\n}\n\nexport class HocuspocusProviderWebsocket extends EventEmitter {\n public configuration: CompleteHocuspocusProviderWebsocketConfiguration = {\n url: '',\n // @ts-ignore\n document: undefined,\n // @ts-ignore\n awareness: undefined,\n WebSocketPolyfill: undefined,\n parameters: {},\n connect: true,\n broadcast: true,\n forceSyncInterval: false,\n // TODO: this should depend on awareness.outdatedTime\n messageReconnectTimeout: 30000,\n // 1 second\n delay: 1000,\n // instant\n initialDelay: 0,\n // double the delay each time\n factor: 2,\n // unlimited retries\n maxAttempts: 0,\n // wait at least 1 second\n minDelay: 1000,\n // at least every 30 seconds\n maxDelay: 30000,\n // randomize\n jitter: true,\n // retry forever\n timeout: 0,\n onOpen: () => null,\n onConnect: () => null,\n onMessage: () => null,\n onOutgoingMessage: () => null,\n onStatus: () => null,\n onDisconnect: () => null,\n onClose: () => null,\n onDestroy: () => null,\n onAwarenessUpdate: () => null,\n onAwarenessChange: () => null,\n quiet: false,\n }\n\n subscribedToBroadcastChannel = false\n\n webSocket: WebSocket | null = null\n\n shouldConnect = true\n\n status = WebSocketStatus.Disconnected\n\n lastMessageReceived = 0\n\n mux = mutex.createMutex()\n\n intervals: any = {\n forceSync: null,\n connectionChecker: null,\n }\n\n connectionAttempt: {\n resolve: (value?: any) => void\n reject: (reason?: any) => void\n } | null = null\n\n constructor(configuration: HocuspocusProviderWebsocketConfiguration) {\n super()\n this.setConfiguration(configuration)\n\n this.configuration.WebSocketPolyfill = configuration.WebSocketPolyfill ? configuration.WebSocketPolyfill : WebSocket\n\n this.on('open', this.configuration.onOpen)\n this.on('open', this.onOpen.bind(this))\n this.on('connect', this.configuration.onConnect)\n this.on('message', this.configuration.onMessage)\n this.on('outgoingMessage', this.configuration.onOutgoingMessage)\n this.on('status', this.configuration.onStatus)\n this.on('status', this.onStatus.bind(this))\n this.on('disconnect', this.configuration.onDisconnect)\n this.on('close', this.configuration.onClose)\n this.on('destroy', this.configuration.onDestroy)\n this.on('awarenessUpdate', this.configuration.onAwarenessUpdate)\n this.on('awarenessChange', this.configuration.onAwarenessChange)\n\n this.on('close', this.onClose.bind(this))\n this.on('message', this.onMessage.bind(this))\n\n this.registerEventListeners()\n\n this.intervals.connectionChecker = setInterval(\n this.checkConnection.bind(this),\n this.configuration.messageReconnectTimeout / 10,\n )\n\n if (typeof configuration.connect !== 'undefined') {\n this.shouldConnect = configuration.connect\n }\n\n if (!this.shouldConnect) {\n return\n }\n\n this.connect()\n }\n\n receivedOnOpenPayload?: Event | undefined = undefined\n\n receivedOnStatusPayload?: onStatusParameters | undefined = undefined\n\n async onOpen(event: Event) {\n this.receivedOnOpenPayload = event\n }\n\n async onStatus(data: onStatusParameters) {\n this.receivedOnStatusPayload = data\n }\n\n attach(provider: HocuspocusProvider) {\n if (this.receivedOnOpenPayload) {\n provider.onOpen(this.receivedOnOpenPayload)\n }\n\n if (this.receivedOnStatusPayload) {\n provider.onStatus(this.receivedOnStatusPayload)\n }\n }\n\n detach(provider: HocuspocusProvider) {\n // tell the server to remove the listener\n\n }\n\n public setConfiguration(configuration: Partial = {}): void {\n this.configuration = { ...this.configuration, ...configuration }\n }\n\n boundConnect = this.connect.bind(this)\n\n cancelWebsocketRetry?: () => void\n\n async connect() {\n if (this.status === WebSocketStatus.Connected) {\n return\n }\n\n // Always cancel any previously initiated connection retryer instances\n if (this.cancelWebsocketRetry) {\n this.cancelWebsocketRetry()\n this.cancelWebsocketRetry = undefined\n }\n\n this.shouldConnect = true\n\n const abortableRetry = () => {\n let cancelAttempt = false\n\n const retryPromise = retry(this.createWebSocketConnection.bind(this), {\n delay: this.configuration.delay,\n initialDelay: this.configuration.initialDelay,\n factor: this.configuration.factor,\n maxAttempts: this.configuration.maxAttempts,\n minDelay: this.configuration.minDelay,\n maxDelay: this.configuration.maxDelay,\n jitter: this.configuration.jitter,\n timeout: this.configuration.timeout,\n beforeAttempt: context => {\n if (!this.shouldConnect || cancelAttempt) {\n context.abort()\n }\n },\n }).catch((error: any) => {\n // If we aborted the connection attempt then don’t throw an error\n // ref: https://github.com/lifeomic/attempt/blob/master/src/index.ts#L136\n if (error && error.code !== 'ATTEMPT_ABORTED') {\n throw error\n }\n })\n\n return {\n retryPromise,\n cancelFunc: () => {\n cancelAttempt = true\n },\n }\n }\n\n const { retryPromise, cancelFunc } = abortableRetry()\n this.cancelWebsocketRetry = cancelFunc\n\n return retryPromise\n }\n\n createWebSocketConnection() {\n return new Promise((resolve, reject) => {\n if (this.webSocket) {\n this.webSocket.close()\n this.webSocket = null\n }\n\n // Init the WebSocket connection\n const ws = new this.configuration.WebSocketPolyfill(this.url)\n ws.binaryType = 'arraybuffer'\n ws.onmessage = (payload: any) => this.emit('message', payload)\n ws.onclose = (payload: any) => this.emit('close', { event: payload })\n ws.onopen = (payload: any) => this.emit('open', payload)\n ws.onerror = (err: any) => {\n reject(err)\n }\n this.webSocket = ws\n\n // Reset the status\n this.status = WebSocketStatus.Connecting\n this.emit('status', { status: WebSocketStatus.Connecting })\n\n // Store resolve/reject for later use\n this.connectionAttempt = {\n resolve,\n reject,\n }\n })\n }\n\n onMessage(event: MessageEvent) {\n this.resolveConnectionAttempt()\n }\n\n resolveConnectionAttempt() {\n if (this.connectionAttempt) {\n this.connectionAttempt.resolve()\n this.connectionAttempt = null\n\n this.status = WebSocketStatus.Connected\n this.emit('status', { status: WebSocketStatus.Connected })\n this.emit('connect')\n }\n }\n\n stopConnectionAttempt() {\n this.connectionAttempt = null\n }\n\n rejectConnectionAttempt() {\n this.connectionAttempt?.reject()\n this.connectionAttempt = null\n }\n\n checkConnection() {\n // Don’t check the connection when it’s not even established\n if (this.status !== WebSocketStatus.Connected) {\n return\n }\n\n // Don’t close then connection while waiting for the first message\n if (!this.lastMessageReceived) {\n return\n }\n\n // Don’t close the connection when a message was received recently\n if (this.configuration.messageReconnectTimeout >= time.getUnixTime() - this.lastMessageReceived) {\n return\n }\n\n // No message received in a long time, not even your own\n // Awareness updates, which are updated every 15 seconds.\n this.webSocket?.close()\n }\n\n registerEventListeners() {\n if (typeof window === 'undefined') {\n return\n }\n\n window.addEventListener('online', this.boundConnect)\n }\n\n // Ensure that the URL always ends with /\n get serverUrl() {\n while (this.configuration.url[this.configuration.url.length - 1] === '/') {\n return this.configuration.url.slice(0, this.configuration.url.length - 1)\n }\n\n return this.configuration.url\n }\n\n get url() {\n const encodedParams = url.encodeQueryParams(this.configuration.parameters)\n\n return `${this.serverUrl}${encodedParams.length === 0 ? '' : `?${encodedParams}`}`\n }\n\n disconnect() {\n this.shouldConnect = false\n\n if (this.webSocket === null) {\n return\n }\n\n try {\n this.webSocket.close()\n } catch {\n //\n }\n }\n\n send(message: any) {\n if (this.webSocket?.readyState === WsReadyStates.Open) {\n this.webSocket.send(message)\n }\n }\n\n onClose({ event }: onCloseParameters) {\n this.webSocket = null\n\n if (this.status === WebSocketStatus.Connected) {\n this.status = WebSocketStatus.Disconnected\n this.emit('status', { status: WebSocketStatus.Disconnected })\n this.emit('disconnect', { event })\n }\n\n if (event.code === Unauthorized.code) {\n if (event.reason === Unauthorized.reason) {\n console.warn('[HocuspocusProvider] An authentication token is required, but you didn’t send one. Try adding a `token` to your HocuspocusProvider configuration. Won’t try again.')\n } else {\n console.warn(`[HocuspocusProvider] Connection closed with status Unauthorized: ${event.reason}`)\n }\n\n this.shouldConnect = false\n }\n\n if (event.code === Forbidden.code) {\n if (!this.configuration.quiet) {\n console.warn('[HocuspocusProvider] The provided authentication token isn’t allowed to connect to this server. Will try again.')\n return // TODO REMOVE ME\n }\n }\n\n if (event.code === MessageTooBig.code) {\n console.warn(`[HocuspocusProvider] Connection closed with status MessageTooBig: ${event.reason}`)\n this.shouldConnect = false\n }\n\n if (this.connectionAttempt) {\n // That connection attempt failed.\n this.rejectConnectionAttempt()\n } else if (this.shouldConnect) {\n // The connection was closed by the server. Let’s just try again.\n this.connect()\n }\n\n // If we’ll reconnect, we’re done for now.\n if (this.shouldConnect) {\n return\n }\n\n // The status is set correctly already.\n if (this.status === WebSocketStatus.Disconnected) {\n return\n }\n\n // Let’s update the connection status.\n this.status = WebSocketStatus.Disconnected\n this.emit('status', { status: WebSocketStatus.Disconnected })\n this.emit('disconnect', { event })\n }\n\n destroy() {\n this.emit('destroy')\n\n if (this.intervals.forceSync) {\n clearInterval(this.intervals.forceSync)\n }\n\n clearInterval(this.intervals.connectionChecker)\n\n // If there is still a connection attempt outstanding then we should stop\n // it before calling disconnect, otherwise it will be rejected in the onClose\n // handler and trigger a retry\n this.stopConnectionAttempt()\n\n this.disconnect()\n\n this.removeAllListeners()\n\n if (typeof window === 'undefined') {\n return\n }\n\n window.removeEventListener('online', this.boundConnect)\n }\n\n}\n","import { writeVarString, writeVarUint } from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class StatelessMessage extends OutgoingMessage {\n type = MessageType.Stateless\n\n description = 'A stateless message'\n\n get(args: Partial) {\n writeVarString(this.encoder, args.documentName!)\n writeVarUint(this.encoder, this.type)\n writeVarString(this.encoder, args.payload ?? '')\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class CloseMessage extends OutgoingMessage {\n type = MessageType.CLOSE\n\n description = 'Ask the server to close the connection'\n\n get(args: Partial) {\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n\n return this.encoder\n }\n}\n","import * as Y from 'yjs'\nimport * as bc from 'lib0/broadcastchannel'\nimport { Awareness, removeAwarenessStates } from 'y-protocols/awareness'\nimport * as mutex from 'lib0/mutex'\nimport type { CloseEvent, Event, MessageEvent } from 'ws'\nimport { awarenessStatesToArray } from '@hocuspocus/common'\nimport EventEmitter from './EventEmitter.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { MessageReceiver } from './MessageReceiver.js'\nimport { MessageSender } from './MessageSender.js'\nimport { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js'\nimport { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js'\nimport { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js'\nimport { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.js'\nimport { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.js'\nimport { UpdateMessage } from './OutgoingMessages/UpdateMessage.js'\nimport {\n ConstructableOutgoingMessage,\n onAuthenticationFailedParameters,\n onCloseParameters,\n onDisconnectParameters,\n onMessageParameters,\n onOpenParameters,\n onOutgoingMessageParameters, onStatelessParameters,\n onStatusParameters,\n onSyncedParameters,\n WebSocketStatus,\n onAwarenessChangeParameters,\n onAwarenessUpdateParameters,\n} from './types.js'\nimport {\n CompleteHocuspocusProviderWebsocketConfiguration,\n HocuspocusProviderWebsocket,\n} from './HocuspocusProviderWebsocket.js'\nimport { StatelessMessage } from './OutgoingMessages/StatelessMessage.js'\nimport { CloseMessage } from './OutgoingMessages/CloseMessage.js'\n\nexport type HocuspocusProviderConfiguration =\n Required>\n & Partial & (\n Required> |\n Required>\n )\n\nexport interface CompleteHocuspocusProviderConfiguration {\n /**\n * The identifier/name of your document\n */\n name: string,\n /**\n * The actual Y.js document\n */\n document: Y.Doc,\n\n /**\n * Pass false to disable broadcasting between browser tabs.\n */\n broadcast: boolean,\n /**\n * An Awareness instance to keep the presence state of all clients.\n */\n awareness: Awareness,\n /**\n * A token that’s sent to the backend for authentication purposes.\n */\n token: string | (() => string) | (() => Promise) | null,\n /**\n * URL parameters that should be added.\n */\n parameters: { [key: string]: any },\n /**\n * Hocuspocus websocket provider\n */\n websocketProvider: HocuspocusProviderWebsocket,\n /**\n * Force syncing the document in the defined interval.\n */\n forceSyncInterval: false | number,\n\n onAuthenticated: () => void,\n onAuthenticationFailed: (data: onAuthenticationFailedParameters) => void,\n onOpen: (data: onOpenParameters) => void,\n onConnect: () => void,\n onMessage: (data: onMessageParameters) => void,\n onOutgoingMessage: (data: onOutgoingMessageParameters) => void,\n onStatus: (data: onStatusParameters) => void,\n onSynced: (data: onSyncedParameters) => void,\n onDisconnect: (data: onDisconnectParameters) => void,\n onClose: (data: onCloseParameters) => void,\n onDestroy: () => void,\n onAwarenessUpdate: (data: onAwarenessUpdateParameters) => void,\n onAwarenessChange: (data: onAwarenessChangeParameters) => void,\n onStateless: (data: onStatelessParameters) => void\n\n /**\n * Don’t output any warnings.\n */\n quiet: boolean,\n}\n\nexport class HocuspocusProvider extends EventEmitter {\n public configuration: CompleteHocuspocusProviderConfiguration = {\n name: '',\n // @ts-ignore\n document: undefined,\n // @ts-ignore\n awareness: undefined,\n token: null,\n parameters: {},\n broadcast: true,\n forceSyncInterval: false,\n onAuthenticated: () => null,\n onAuthenticationFailed: () => null,\n onOpen: () => null,\n onConnect: () => null,\n onMessage: () => null,\n onOutgoingMessage: () => null,\n onStatus: () => null,\n onSynced: () => null,\n onDisconnect: () => null,\n onClose: () => null,\n onDestroy: () => null,\n onAwarenessUpdate: () => null,\n onAwarenessChange: () => null,\n onStateless: () => null,\n quiet: false,\n }\n\n subscribedToBroadcastChannel = false\n\n isSynced = false\n\n unsyncedChanges = 0\n\n status = WebSocketStatus.Disconnected\n\n isAuthenticated = false\n\n authorizedScope: string | undefined = undefined\n\n mux = mutex.createMutex()\n\n intervals: any = {\n forceSync: null,\n }\n\n isConnected = true\n\n constructor(configuration: HocuspocusProviderConfiguration) {\n super()\n this.setConfiguration(configuration)\n\n this.configuration.document = configuration.document ? configuration.document : new Y.Doc()\n this.configuration.awareness = configuration.awareness ? configuration.awareness : new Awareness(this.document)\n\n this.on('open', this.configuration.onOpen)\n this.on('message', this.configuration.onMessage)\n this.on('outgoingMessage', this.configuration.onOutgoingMessage)\n this.on('synced', this.configuration.onSynced)\n this.on('destroy', this.configuration.onDestroy)\n this.on('awarenessUpdate', this.configuration.onAwarenessUpdate)\n this.on('awarenessChange', this.configuration.onAwarenessChange)\n this.on('stateless', this.configuration.onStateless)\n\n this.on('authenticated', this.configuration.onAuthenticated)\n this.on('authenticationFailed', this.configuration.onAuthenticationFailed)\n\n this.configuration.websocketProvider.on('connect', this.configuration.onConnect)\n this.configuration.websocketProvider.on('connect', (e: Event) => this.emit('connect', e))\n\n this.configuration.websocketProvider.on('open', this.onOpen.bind(this))\n this.configuration.websocketProvider.on('open', (e: Event) => this.emit('open', e))\n\n this.configuration.websocketProvider.on('message', this.onMessage.bind(this))\n\n this.configuration.websocketProvider.on('close', this.onClose.bind(this))\n this.configuration.websocketProvider.on('close', this.configuration.onClose)\n this.configuration.websocketProvider.on('close', (e: Event) => this.emit('close', e))\n\n this.configuration.websocketProvider.on('status', this.onStatus.bind(this))\n\n this.configuration.websocketProvider.on('disconnect', this.configuration.onDisconnect)\n this.configuration.websocketProvider.on('disconnect', (e: Event) => this.emit('disconnect', e))\n\n this.configuration.websocketProvider.on('destroy', this.configuration.onDestroy)\n this.configuration.websocketProvider.on('destroy', (e: Event) => this.emit('destroy', e))\n\n this.awareness.on('update', () => {\n this.emit('awarenessUpdate', { states: awarenessStatesToArray(this.awareness.getStates()) })\n })\n\n this.awareness.on('change', () => {\n this.emit('awarenessChange', { states: awarenessStatesToArray(this.awareness.getStates()) })\n })\n\n this.document.on('update', this.documentUpdateHandler.bind(this))\n this.awareness.on('update', this.awarenessUpdateHandler.bind(this))\n this.registerEventListeners()\n\n if (this.configuration.forceSyncInterval) {\n this.intervals.forceSync = setInterval(\n this.forceSync.bind(this),\n this.configuration.forceSyncInterval,\n )\n }\n\n this.configuration.websocketProvider.attach(this)\n }\n\n public onStatus({ status } : onStatusParameters) {\n this.status = status\n\n this.configuration.onStatus({ status })\n this.emit('status', { status })\n }\n\n public setConfiguration(configuration: Partial = {}): void {\n if (!configuration.websocketProvider && (configuration as CompleteHocuspocusProviderWebsocketConfiguration).url) {\n const websocketProviderConfig = configuration as CompleteHocuspocusProviderWebsocketConfiguration\n\n this.configuration.websocketProvider = new HocuspocusProviderWebsocket({\n url: websocketProviderConfig.url,\n parameters: websocketProviderConfig.parameters,\n })\n }\n\n this.configuration = { ...this.configuration, ...configuration }\n }\n\n get document() {\n return this.configuration.document\n }\n\n get awareness() {\n return this.configuration.awareness\n }\n\n get hasUnsyncedChanges(): boolean {\n return this.unsyncedChanges > 0\n }\n\n updateUnsyncedChanges(unsyncedChanges = 0) {\n this.unsyncedChanges += unsyncedChanges\n this.emit('unsyncedChanges', this.unsyncedChanges)\n }\n\n forceSync() {\n this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name })\n }\n\n boundBeforeUnload = this.beforeUnload.bind(this)\n\n beforeUnload() {\n removeAwarenessStates(this.awareness, [this.document.clientID], 'window unload')\n }\n\n registerEventListeners() {\n if (typeof window === 'undefined') {\n return\n }\n\n window.addEventListener('beforeunload', this.boundBeforeUnload)\n }\n\n sendStateless(payload: string) {\n this.send(StatelessMessage, { documentName: this.configuration.name, payload })\n }\n\n documentUpdateHandler(update: Uint8Array, origin: any) {\n if (origin === this) {\n return\n }\n\n this.updateUnsyncedChanges(1)\n this.send(UpdateMessage, { update, documentName: this.configuration.name }, true)\n }\n\n awarenessUpdateHandler({ added, updated, removed }: any, origin: any) {\n const changedClients = added.concat(updated).concat(removed)\n\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: changedClients,\n documentName: this.configuration.name,\n }, true)\n }\n\n get synced(): boolean {\n return this.isSynced\n }\n\n set synced(state) {\n if (this.isSynced === state) {\n return\n }\n\n if (state && this.unsyncedChanges > 0) {\n this.updateUnsyncedChanges(-1 * this.unsyncedChanges)\n }\n\n this.isSynced = state\n this.emit('synced', { state })\n this.emit('sync', { state })\n }\n\n receiveStateless(payload: string) {\n this.emit('stateless', { payload })\n }\n\n get isAuthenticationRequired(): boolean {\n return !!this.configuration.token && !this.isAuthenticated\n }\n\n // not needed, but provides backward compatibility with e.g. lexicla/yjs\n async connect() {\n return this.configuration.websocketProvider.connect()\n }\n\n disconnect() {\n this.disconnectBroadcastChannel()\n this.configuration.websocketProvider.detach(this)\n }\n\n async onOpen(event: Event) {\n this.isAuthenticated = false\n\n this.emit('open', { event })\n\n if (this.isAuthenticationRequired) {\n this.send(AuthenticationMessage, {\n token: await this.getToken(),\n documentName: this.configuration.name,\n })\n }\n\n this.startSync()\n }\n\n async getToken() {\n if (typeof this.configuration.token === 'function') {\n const token = await this.configuration.token()\n return token\n }\n\n return this.configuration.token\n }\n\n startSync() {\n this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name })\n\n if (this.awareness.getLocalState() !== null) {\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: [this.document.clientID],\n documentName: this.configuration.name,\n })\n }\n }\n\n send(message: ConstructableOutgoingMessage, args: any, broadcast = false) {\n if (!this.isConnected) return\n\n if (broadcast) {\n this.mux(() => { this.broadcast(message, args) })\n }\n\n const messageSender = new MessageSender(message, args)\n\n this.emit('outgoingMessage', { message: messageSender.message })\n messageSender.send(this.configuration.websocketProvider)\n }\n\n onMessage(event: MessageEvent) {\n const message = new IncomingMessage(event.data)\n\n const documentName = message.readVarString()\n\n if (documentName !== this.configuration.name) {\n return // message is meant for another provider\n }\n\n message.writeVarString(documentName)\n\n this.emit('message', { event, message: new IncomingMessage(event.data) })\n\n new MessageReceiver(message).apply(this)\n }\n\n onClose(event: CloseEvent) {\n this.isAuthenticated = false\n this.synced = false\n\n // update awareness (all users except local left)\n removeAwarenessStates(\n this.awareness,\n Array.from(this.awareness.getStates().keys()).filter(client => client !== this.document.clientID),\n this,\n )\n }\n\n destroy() {\n this.emit('destroy')\n\n if (this.intervals.forceSync) {\n clearInterval(this.intervals.forceSync)\n }\n\n removeAwarenessStates(this.awareness, [this.document.clientID], 'provider destroy')\n\n this.disconnect()\n\n this.awareness.off('update', this.awarenessUpdateHandler)\n this.document.off('update', this.documentUpdateHandler)\n\n this.removeAllListeners()\n\n this.send(CloseMessage, { documentName: this.configuration.name })\n this.isConnected = false\n\n if (typeof window === 'undefined') {\n return\n }\n\n window.removeEventListener('beforeunload', this.boundBeforeUnload)\n }\n\n permissionDeniedHandler(reason: string) {\n this.emit('authenticationFailed', { reason })\n this.isAuthenticated = false\n this.disconnect()\n this.status = WebSocketStatus.Disconnected\n }\n\n authenticatedHandler(scope: string) {\n this.isAuthenticated = true\n this.authorizedScope = scope\n\n this.emit('authenticated')\n this.startSync()\n }\n\n get broadcastChannel() {\n return `${this.configuration.name}`\n }\n\n boundBroadcastChannelSubscriber = this.broadcastChannelSubscriber.bind(this)\n\n broadcastChannelSubscriber(data: ArrayBuffer) {\n this.mux(() => {\n const message = new IncomingMessage(data)\n\n const documentName = message.readVarString()\n\n message.writeVarString(documentName)\n\n new MessageReceiver(message)\n .setBroadcasted(true)\n .apply(this, false)\n })\n }\n\n subscribeToBroadcastChannel() {\n if (!this.subscribedToBroadcastChannel) {\n bc.subscribe(this.broadcastChannel, this.boundBroadcastChannelSubscriber)\n this.subscribedToBroadcastChannel = true\n }\n\n this.mux(() => {\n this.broadcast(SyncStepOneMessage, { document: this.document })\n this.broadcast(SyncStepTwoMessage, { document: this.document })\n this.broadcast(QueryAwarenessMessage, { document: this.document })\n this.broadcast(AwarenessMessage, { awareness: this.awareness, clients: [this.document.clientID], document: this.document })\n })\n }\n\n disconnectBroadcastChannel() {\n // broadcast message with local awareness state set to null (indicating disconnect)\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: [this.document.clientID],\n states: new Map(),\n documentName: this.configuration.name,\n }, true)\n\n if (this.subscribedToBroadcastChannel) {\n bc.unsubscribe(this.broadcastChannel, this.boundBroadcastChannelSubscriber)\n this.subscribedToBroadcastChannel = false\n }\n }\n\n broadcast(Message: ConstructableOutgoingMessage, args?: any) {\n if (!this.configuration.broadcast) {\n return\n }\n\n if (!this.subscribedToBroadcastChannel) {\n return\n }\n\n new MessageSender(Message, args).broadcast(this.broadcastChannel)\n }\n\n setAwarenessField(key: string, value: any) {\n this.awareness.setLocalStateField(key, value)\n }\n}\n","import {\n CompleteHocuspocusProviderWebsocketConfiguration,\n HocuspocusProviderWebsocket, HocuspocusProviderWebsocketConfiguration,\n} from './HocuspocusProviderWebsocket.js'\n\nexport type TiptapCollabProviderWebsocketConfiguration =\n Partial &\n AdditionalTiptapCollabProviderWebsocketConfiguration\n\nexport interface AdditionalTiptapCollabProviderWebsocketConfiguration {\n /**\n * A Hocuspocus Cloud App ID, get one here: https://collab.tiptap.dev\n */\n appId: string,\n}\n\nexport class TiptapCollabProviderWebsocket extends HocuspocusProviderWebsocket {\n constructor(configuration: TiptapCollabProviderWebsocketConfiguration) {\n super({ ...configuration as HocuspocusProviderWebsocketConfiguration, url: `wss://${configuration.appId}.collab.tiptap.cloud` })\n }\n}\n","import {\n HocuspocusProvider,\n HocuspocusProviderConfiguration,\n} from './HocuspocusProvider.js'\n\nimport { TiptapCollabProviderWebsocket } from './TiptapCollabProviderWebsocket.js'\n\nexport type TiptapCollabProviderConfiguration =\n Required> &\n Partial &\n AdditionalTiptapCollabProviderConfiguration\n\nexport interface AdditionalTiptapCollabProviderConfiguration {\n /**\n * A Hocuspocus Cloud App ID, get one here: https://collab.tiptap.dev\n */\n appId: string,\n}\n\nexport class TiptapCollabProvider extends HocuspocusProvider {\n constructor(configuration: TiptapCollabProviderConfiguration) {\n if (!configuration.websocketProvider) {\n configuration.websocketProvider = new TiptapCollabProviderWebsocket({ appId: configuration.appId })\n }\n\n if (!configuration.token) {\n configuration.token = 'notoken' // need to send a token anyway (which will be ignored)\n }\n\n super(configuration as HocuspocusProviderConfiguration)\n }\n}\n"],"names":["create","length","object.length","object.hasProperty","map.create","string.fromCamelCase","conditions.undefinedToNull","storage.varStorage","f.isOneOf","buffer.createUint8ArrayViewFromArrayBuffer","binary.BITS7","binary.BIT8","math.floor","string.utf8TextEncoder","string.encodeUtf8","math.min","math.max","error.create","number.MAX_SAFE_INTEGER","string.utf8TextDecoder","string.fromCharCode","env.isBrowser","buffer.fromBase64","storage.onChange","buffer.toBase64","buffer.createUint8ArrayFromArrayBuffer","storage.offChange","map.setIfUndefined","set.create","array.from","time.getUnixTime","f.equalityDeep","encoding.createEncoder","encoding.writeVarUint","encoding.writeVarString","encoding.toUint8Array","decoding.createDecoder","decoding.readVarUint","decoding.readVarString","Y","encoding.writeVarUint8Array","decoding.readVarUint8Array","MessageType","WebSocketStatus","awarenessProtocol.applyAwarenessUpdate","readAuthMessage","awarenessProtocol.encodeAwarenessUpdate","bc.publish","syncProtocol.writeSyncStep1","syncProtocol.writeSyncStep2","writeAuthentication","object.map","mutex.createMutex","retry","url.encodeQueryParams","WsReadyStates","Unauthorized","Forbidden","MessageTooBig","awarenessStatesToArray","bc.subscribe","bc.unsubscribe"],"mappings":"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"} +\ No newline at end of file ++{"version":3,"file":"hocuspocus-provider.cjs","sources":["../../../node_modules/lib0/map.js","../../../node_modules/lib0/set.js","../../../node_modules/lib0/array.js","../../../node_modules/lib0/string.js","../../../node_modules/lib0/conditions.js","../../../node_modules/lib0/storage.js","../../../node_modules/lib0/object.js","../../../node_modules/lib0/function.js","../../../node_modules/lib0/environment.js","../../../node_modules/lib0/math.js","../../../node_modules/lib0/binary.js","../../../node_modules/lib0/number.js","../../../node_modules/lib0/encoding.js","../../../node_modules/lib0/error.js","../../../node_modules/lib0/decoding.js","../../../node_modules/lib0/buffer.js","../../../node_modules/lib0/broadcastchannel.js","../../../node_modules/lib0/mutex.js","../../../node_modules/lib0/time.js","../../../node_modules/lib0/observable.js","../../../node_modules/y-protocols/awareness.js","../src/EventEmitter.ts","../../../node_modules/lib0/url.js","../src/types.ts","../src/HocuspocusProviderWebsocket.ts","../src/IncomingMessage.ts","../../../node_modules/y-protocols/sync.js","../src/OutgoingMessage.ts","../src/MessageReceiver.ts","../src/MessageSender.ts","../src/OutgoingMessages/AuthenticationMessage.ts","../src/OutgoingMessages/AwarenessMessage.ts","../src/OutgoingMessages/CloseMessage.ts","../src/OutgoingMessages/QueryAwarenessMessage.ts","../src/OutgoingMessages/StatelessMessage.ts","../src/OutgoingMessages/SyncStepOneMessage.ts","../src/OutgoingMessages/SyncStepTwoMessage.ts","../src/OutgoingMessages/UpdateMessage.ts","../src/HocuspocusProvider.ts","../src/TiptapCollabProviderWebsocket.ts","../src/TiptapCollabProvider.ts"],"sourcesContent":["/**\n * Utility module to work with key-value stores.\n *\n * @module map\n */\n\n/**\n * Creates a new Map instance.\n *\n * @function\n * @return {Map}\n *\n * @function\n */\nexport const create = () => new Map()\n\n/**\n * Copy a Map object into a fresh Map object.\n *\n * @function\n * @template X,Y\n * @param {Map} m\n * @return {Map}\n */\nexport const copy = m => {\n const r = create()\n m.forEach((v, k) => { r.set(k, v) })\n return r\n}\n\n/**\n * Get map property. Create T if property is undefined and set T on map.\n *\n * ```js\n * const listeners = map.setIfUndefined(events, 'eventName', set.create)\n * listeners.add(listener)\n * ```\n *\n * @function\n * @template V,K\n * @template {Map} MAP\n * @param {MAP} map\n * @param {K} key\n * @param {function():V} createT\n * @return {V}\n */\nexport const setIfUndefined = (map, key, createT) => {\n let set = map.get(key)\n if (set === undefined) {\n map.set(key, set = createT())\n }\n return set\n}\n\n/**\n * Creates an Array and populates it with the content of all key-value pairs using the `f(value, key)` function.\n *\n * @function\n * @template K\n * @template V\n * @template R\n * @param {Map} m\n * @param {function(V,K):R} f\n * @return {Array}\n */\nexport const map = (m, f) => {\n const res = []\n for (const [key, value] of m) {\n res.push(f(value, key))\n }\n return res\n}\n\n/**\n * Tests whether any key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @todo should rename to some - similarly to Array.some\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const any = (m, f) => {\n for (const [key, value] of m) {\n if (f(value, key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * Tests whether all key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const all = (m, f) => {\n for (const [key, value] of m) {\n if (!f(value, key)) {\n return false\n }\n }\n return true\n}\n","/**\n * Utility module to work with sets.\n *\n * @module set\n */\n\nexport const create = () => new Set()\n\n/**\n * @template T\n * @param {Set} set\n * @return {Array}\n */\nexport const toArray = set => Array.from(set)\n\n/**\n * @template T\n * @param {Set} set\n * @return {T}\n */\nexport const first = set =>\n set.values().next().value || undefined\n\n/**\n * @template T\n * @param {Iterable} entries\n * @return {Set}\n */\nexport const from = entries => new Set(entries)\n","/**\n * Utility module to work with Arrays.\n *\n * @module array\n */\n\nimport * as set from './set.js'\n\n/**\n * Return the last element of an array. The element must exist\n *\n * @template L\n * @param {ArrayLike} arr\n * @return {L}\n */\nexport const last = arr => arr[arr.length - 1]\n\n/**\n * @template C\n * @return {Array}\n */\nexport const create = () => /** @type {Array} */ ([])\n\n/**\n * @template D\n * @param {Array} a\n * @return {Array}\n */\nexport const copy = a => /** @type {Array} */ (a.slice())\n\n/**\n * Append elements from src to dest\n *\n * @template M\n * @param {Array} dest\n * @param {Array} src\n */\nexport const appendTo = (dest, src) => {\n for (let i = 0; i < src.length; i++) {\n dest.push(src[i])\n }\n}\n\n/**\n * Transforms something array-like to an actual Array.\n *\n * @function\n * @template T\n * @param {ArrayLike|Iterable} arraylike\n * @return {T}\n */\nexport const from = Array.from\n\n/**\n * True iff condition holds on every element in the Array.\n *\n * @function\n * @template ITEM\n * @template {ArrayLike} ARR\n *\n * @param {ARR} arr\n * @param {function(ITEM, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const every = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (!f(arr[i], i, arr)) {\n return false\n }\n }\n return true\n}\n\n/**\n * True iff condition holds on some element in the Array.\n *\n * @function\n * @template S\n * @template {ArrayLike} ARR\n * @param {ARR} arr\n * @param {function(S, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const some = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (f(arr[i], i, arr)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @template ELEM\n *\n * @param {ArrayLike} a\n * @param {ArrayLike} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a.length === b.length && every(a, (item, index) => item === b[index])\n\n/**\n * @template ELEM\n * @param {Array>} arr\n * @return {Array}\n */\nexport const flatten = arr => fold(arr, /** @type {Array} */ ([]), (acc, val) => acc.concat(val))\n\n/**\n * @template T\n * @param {number} len\n * @param {function(number, Array):T} f\n * @return {Array}\n */\nexport const unfold = (len, f) => {\n const array = new Array(len)\n for (let i = 0; i < len; i++) {\n array[i] = f(i, array)\n }\n return array\n}\n\n/**\n * @template T\n * @template RESULT\n * @param {Array} arr\n * @param {RESULT} seed\n * @param {function(RESULT, T, number):RESULT} folder\n */\nexport const fold = (arr, seed, folder) => arr.reduce(folder, seed)\n\nexport const isArray = Array.isArray\n\n/**\n * @template T\n * @param {Array} arr\n * @return {Array}\n */\nexport const unique = arr => from(set.from(arr))\n\n/**\n * @template T\n * @template M\n * @param {ArrayLike} arr\n * @param {function(T):M} mapper\n * @return {Array}\n */\nexport const uniqueBy = (arr, mapper) => {\n /**\n * @type {Set}\n */\n const happened = set.create()\n /**\n * @type {Array}\n */\n const result = []\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i]\n const mapped = mapper(el)\n if (!happened.has(mapped)) {\n happened.add(mapped)\n result.push(el)\n }\n }\n return result\n}\n","import * as array from './array.js'\n\n/**\n * Utility module to work with strings.\n *\n * @module string\n */\n\nexport const fromCharCode = String.fromCharCode\nexport const fromCodePoint = String.fromCodePoint\n\n/**\n * The largest utf16 character.\n * Corresponds to Uint8Array([255, 255]) or charcodeof(2x2^8)\n */\nexport const MAX_UTF16_CHARACTER = fromCharCode(65535)\n\n/**\n * @param {string} s\n * @return {string}\n */\nconst toLowerCase = s => s.toLowerCase()\n\nconst trimLeftRegex = /^\\s*/g\n\n/**\n * @param {string} s\n * @return {string}\n */\nexport const trimLeft = s => s.replace(trimLeftRegex, '')\n\nconst fromCamelCaseRegex = /([A-Z])/g\n\n/**\n * @param {string} s\n * @param {string} separator\n * @return {string}\n */\nexport const fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, match => `${separator}${toLowerCase(match)}`))\n\n/**\n * Compute the utf8ByteLength\n * @param {string} str\n * @return {number}\n */\nexport const utf8ByteLength = str => unescape(encodeURIComponent(str)).length\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Polyfill = str => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n const buf = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n buf[i] = /** @type {number} */ (encodedString.codePointAt(i))\n }\n return buf\n}\n\n/* c8 ignore next */\nexport const utf8TextEncoder = /** @type {TextEncoder} */ (typeof TextEncoder !== 'undefined' ? new TextEncoder() : null)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Native = str => utf8TextEncoder.encode(str)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nexport const encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Polyfill = buf => {\n let remainingLen = buf.length\n let encodedString = ''\n let bufPos = 0\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n const bytes = buf.subarray(bufPos, bufPos + nextLen)\n bufPos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n return decodeURIComponent(escape(encodedString))\n}\n\n/* c8 ignore next */\nexport let utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })\n\n/* c8 ignore start */\nif (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {\n // Safari doesn't handle BOM correctly.\n // This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call\n // Another issue is that from then on no BOM chars are recognized anymore\n /* c8 ignore next */\n utf8TextDecoder = null\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Native = buf => /** @type {TextDecoder} */ (utf8TextDecoder).decode(buf)\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\n/* c8 ignore next */\nexport const decodeUtf8 = utf8TextDecoder ? _decodeUtf8Native : _decodeUtf8Polyfill\n\n/**\n * @param {string} str The initial string\n * @param {number} index Starting position\n * @param {number} remove Number of characters to remove\n * @param {string} insert New content to insert\n */\nexport const splice = (str, index, remove, insert = '') => str.slice(0, index) + insert + str.slice(index + remove)\n\n/**\n * @param {string} source\n * @param {number} n\n */\nexport const repeat = (source, n) => array.unfold(n, () => source).join('')\n","/**\n * Often used conditions.\n *\n * @module conditions\n */\n\n/**\n * @template T\n * @param {T|null|undefined} v\n * @return {T|null}\n */\n/* c8 ignore next */\nexport const undefinedToNull = v => v === undefined ? null : v\n","/* eslint-env browser */\n\n/**\n * Isomorphic variable storage.\n *\n * Uses LocalStorage in the browser and falls back to in-memory storage.\n *\n * @module storage\n */\n\n/* c8 ignore start */\nclass VarStoragePolyfill {\n constructor () {\n this.map = new Map()\n }\n\n /**\n * @param {string} key\n * @param {any} newValue\n */\n setItem (key, newValue) {\n this.map.set(key, newValue)\n }\n\n /**\n * @param {string} key\n */\n getItem (key) {\n return this.map.get(key)\n }\n}\n/* c8 ignore stop */\n\n/**\n * @type {any}\n */\nlet _localStorage = new VarStoragePolyfill()\nlet usePolyfill = true\n\n/* c8 ignore start */\ntry {\n // if the same-origin rule is violated, accessing localStorage might thrown an error\n if (typeof localStorage !== 'undefined') {\n _localStorage = localStorage\n usePolyfill = false\n }\n} catch (e) { }\n/* c8 ignore stop */\n\n/**\n * This is basically localStorage in browser, or a polyfill in nodejs\n */\n/* c8 ignore next */\nexport const varStorage = _localStorage\n\n/**\n * A polyfill for `addEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const onChange = eventHandler => usePolyfill || addEventListener('storage', /** @type {any} */ (eventHandler))\n\n/**\n * A polyfill for `removeEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler))\n","/**\n * Utility functions for working with EcmaScript objects.\n *\n * @module object\n */\n\n/**\n * @return {Object} obj\n */\nexport const create = () => Object.create(null)\n\n/**\n * Object.assign\n */\nexport const assign = Object.assign\n\n/**\n * @param {Object} obj\n */\nexport const keys = Object.keys\n\n/**\n * @template V\n * @param {{[k:string]:V}} obj\n * @param {function(V,string):any} f\n */\nexport const forEach = (obj, f) => {\n for (const key in obj) {\n f(obj[key], key)\n }\n}\n\n/**\n * @todo implement mapToArray & map\n *\n * @template R\n * @param {Object} obj\n * @param {function(any,string):R} f\n * @return {Array}\n */\nexport const map = (obj, f) => {\n const results = []\n for (const key in obj) {\n results.push(f(obj[key], key))\n }\n return results\n}\n\n/**\n * @param {Object} obj\n * @return {number}\n */\nexport const length = obj => keys(obj).length\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const some = (obj, f) => {\n for (const key in obj) {\n if (f(obj[key], key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @param {Object|undefined} obj\n */\nexport const isEmpty = obj => {\n for (const _k in obj) {\n return false\n }\n return true\n}\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const every = (obj, f) => {\n for (const key in obj) {\n if (!f(obj[key], key)) {\n return false\n }\n }\n return true\n}\n\n/**\n * Calls `Object.prototype.hasOwnProperty`.\n *\n * @param {any} obj\n * @param {string|symbol} key\n * @return {boolean}\n */\nexport const hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key)\n\n/**\n * @param {Object} a\n * @param {Object} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a === b || (length(a) === length(b) && every(a, (val, key) => (val !== undefined || hasProperty(b, key)) && b[key] === val))\n","/**\n * Common functions and function call helpers.\n *\n * @module function\n */\n\nimport * as array from './array.js'\nimport * as object from './object.js'\n\n/**\n * Calls all functions in `fs` with args. Only throws after all functions were called.\n *\n * @param {Array} fs\n * @param {Array} args\n */\nexport const callAll = (fs, args, i = 0) => {\n try {\n for (; i < fs.length; i++) {\n fs[i](...args)\n }\n } finally {\n if (i < fs.length) {\n callAll(fs, args, i + 1)\n }\n }\n}\n\nexport const nop = () => {}\n\n/**\n * @template T\n * @param {function():T} f\n * @return {T}\n */\nexport const apply = f => f()\n\n/**\n * @template A\n *\n * @param {A} a\n * @return {A}\n */\nexport const id = a => a\n\n/**\n * @template T\n *\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n */\nexport const equalityStrict = (a, b) => a === b\n\n/**\n * @template T\n *\n * @param {Array|object} a\n * @param {Array|object} b\n * @return {boolean}\n */\nexport const equalityFlat = (a, b) => a === b || (a != null && b != null && a.constructor === b.constructor && ((array.isArray(a) && array.equalFlat(a, /** @type {Array} */ (b))) || (typeof a === 'object' && object.equalFlat(a, b))))\n\n/* c8 ignore start */\n\n/**\n * @param {any} a\n * @param {any} b\n * @return {boolean}\n */\nexport const equalityDeep = (a, b) => {\n if (a == null || b == null) {\n return equalityStrict(a, b)\n }\n if (a.constructor !== b.constructor) {\n return false\n }\n if (a === b) {\n return true\n }\n switch (a.constructor) {\n case ArrayBuffer:\n a = new Uint8Array(a)\n b = new Uint8Array(b)\n // eslint-disable-next-line no-fallthrough\n case Uint8Array: {\n if (a.byteLength !== b.byteLength) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n break\n }\n case Set: {\n if (a.size !== b.size) {\n return false\n }\n for (const value of a) {\n if (!b.has(value)) {\n return false\n }\n }\n break\n }\n case Map: {\n if (a.size !== b.size) {\n return false\n }\n for (const key of a.keys()) {\n if (!b.has(key) || !equalityDeep(a.get(key), b.get(key))) {\n return false\n }\n }\n break\n }\n case Object:\n if (object.length(a) !== object.length(b)) {\n return false\n }\n for (const key in a) {\n if (!object.hasProperty(a, key) || !equalityDeep(a[key], b[key])) {\n return false\n }\n }\n break\n case Array:\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!equalityDeep(a[i], b[i])) {\n return false\n }\n }\n break\n default:\n return false\n }\n return true\n}\n\n/**\n * @template V\n * @template {V} OPTS\n *\n * @param {V} value\n * @param {Array} options\n */\n// @ts-ignore\nexport const isOneOf = (value, options) => options.includes(value)\n/* c8 ignore stop */\n\nexport const isArray = array.isArray\n\n/**\n * @param {any} s\n * @return {s is String}\n */\nexport const isString = (s) => s && s.constructor === String\n\n/**\n * @param {any} n\n * @return {n is Number}\n */\nexport const isNumber = n => n != null && n.constructor === Number\n\n/**\n * @template {abstract new (...args: any) => any} TYPE\n * @param {any} n\n * @param {TYPE} T\n * @return {n is InstanceType}\n */\nexport const is = (n, T) => n && n.constructor === T\n\n/**\n * @template {abstract new (...args: any) => any} TYPE\n * @param {TYPE} T\n */\nexport const isTemplate = (T) =>\n /**\n * @param {any} n\n * @return {n is InstanceType}\n **/\n n => n && n.constructor === T\n","/**\n * Isomorphic module to work access the environment (query params, env variables).\n *\n * @module map\n */\n\nimport * as map from './map.js'\nimport * as string from './string.js'\nimport * as conditions from './conditions.js'\nimport * as storage from './storage.js'\nimport * as f from './function.js'\n\n/* c8 ignore next */\n// @ts-ignore\nexport const isNode = typeof process !== 'undefined' && process.release &&\n /node|io\\.js/.test(process.release.name)\n/* c8 ignore next */\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && !isNode\n/* c8 ignore next 3 */\nexport const isMac = typeof navigator !== 'undefined'\n ? /Mac/.test(navigator.platform)\n : false\n\n/**\n * @type {Map}\n */\nlet params\nconst args = []\n\n/* c8 ignore start */\nconst computeParams = () => {\n if (params === undefined) {\n if (isNode) {\n params = map.create()\n const pargs = process.argv\n let currParamName = null\n for (let i = 0; i < pargs.length; i++) {\n const parg = pargs[i]\n if (parg[0] === '-') {\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n currParamName = parg\n } else {\n if (currParamName !== null) {\n params.set(currParamName, parg)\n currParamName = null\n } else {\n args.push(parg)\n }\n }\n }\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n // in ReactNative for example this would not be true (unless connected to the Remote Debugger)\n } else if (typeof location === 'object') {\n params = map.create(); // eslint-disable-next-line no-undef\n (location.search || '?').slice(1).split('&').forEach((kv) => {\n if (kv.length !== 0) {\n const [key, value] = kv.split('=')\n params.set(`--${string.fromCamelCase(key, '-')}`, value)\n params.set(`-${string.fromCamelCase(key, '-')}`, value)\n }\n })\n } else {\n params = map.create()\n }\n }\n return params\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next */\nexport const hasParam = (name) => computeParams().has(name)\n\n/**\n * @param {string} name\n * @param {string} defaultVal\n * @return {string}\n */\n/* c8 ignore next 2 */\nexport const getParam = (name, defaultVal) =>\n computeParams().get(name) || defaultVal\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 4 */\nexport const getVariable = (name) =>\n isNode\n ? conditions.undefinedToNull(process.env[name.toUpperCase()])\n : conditions.undefinedToNull(storage.varStorage.getItem(name))\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 2 */\nexport const getConf = (name) =>\n computeParams().get('--' + name) || getVariable(name)\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next 2 */\nexport const hasConf = (name) =>\n hasParam('--' + name) || getVariable(name) !== null\n\n/* c8 ignore next */\nexport const production = hasConf('production')\n\n/* c8 ignore next 2 */\nconst forceColor = isNode &&\n f.isOneOf(process.env.FORCE_COLOR, ['true', '1', '2'])\n\n/* c8 ignore start */\nexport const supportsColor = !hasParam('no-colors') &&\n (!isNode || process.stdout.isTTY || forceColor) && (\n !isNode || hasParam('color') || forceColor ||\n getVariable('COLORTERM') !== null ||\n (getVariable('TERM') || '').includes('color')\n)\n/* c8 ignore stop */\n","/**\n * Common Math expressions.\n *\n * @module math\n */\n\nexport const floor = Math.floor\nexport const ceil = Math.ceil\nexport const abs = Math.abs\nexport const imul = Math.imul\nexport const round = Math.round\nexport const log10 = Math.log10\nexport const log2 = Math.log2\nexport const log = Math.log\nexport const sqrt = Math.sqrt\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The sum of a and b\n */\nexport const add = (a, b) => a + b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The smaller element of a and b\n */\nexport const min = (a, b) => a < b ? a : b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The bigger element of a and b\n */\nexport const max = (a, b) => a > b ? a : b\n\nexport const isNaN = Number.isNaN\n\nexport const pow = Math.pow\n/**\n * Base 10 exponential function. Returns the value of 10 raised to the power of pow.\n *\n * @param {number} exp\n * @return {number}\n */\nexport const exp10 = exp => Math.pow(10, exp)\n\nexport const sign = Math.sign\n\n/**\n * @param {number} n\n * @return {boolean} Wether n is negative. This function also differentiates between -0 and +0\n */\nexport const isNegativeZero = n => n !== 0 ? n < 0 : 1 / n < 0\n","/* eslint-env browser */\n\n/**\n * Binary data constants.\n *\n * @module binary\n */\n\n/**\n * n-th bit activated.\n *\n * @type {number}\n */\nexport const BIT1 = 1\nexport const BIT2 = 2\nexport const BIT3 = 4\nexport const BIT4 = 8\nexport const BIT5 = 16\nexport const BIT6 = 32\nexport const BIT7 = 64\nexport const BIT8 = 128\nexport const BIT9 = 256\nexport const BIT10 = 512\nexport const BIT11 = 1024\nexport const BIT12 = 2048\nexport const BIT13 = 4096\nexport const BIT14 = 8192\nexport const BIT15 = 16384\nexport const BIT16 = 32768\nexport const BIT17 = 65536\nexport const BIT18 = 1 << 17\nexport const BIT19 = 1 << 18\nexport const BIT20 = 1 << 19\nexport const BIT21 = 1 << 20\nexport const BIT22 = 1 << 21\nexport const BIT23 = 1 << 22\nexport const BIT24 = 1 << 23\nexport const BIT25 = 1 << 24\nexport const BIT26 = 1 << 25\nexport const BIT27 = 1 << 26\nexport const BIT28 = 1 << 27\nexport const BIT29 = 1 << 28\nexport const BIT30 = 1 << 29\nexport const BIT31 = 1 << 30\nexport const BIT32 = 1 << 31\n\n/**\n * First n bits activated.\n *\n * @type {number}\n */\nexport const BITS0 = 0\nexport const BITS1 = 1\nexport const BITS2 = 3\nexport const BITS3 = 7\nexport const BITS4 = 15\nexport const BITS5 = 31\nexport const BITS6 = 63\nexport const BITS7 = 127\nexport const BITS8 = 255\nexport const BITS9 = 511\nexport const BITS10 = 1023\nexport const BITS11 = 2047\nexport const BITS12 = 4095\nexport const BITS13 = 8191\nexport const BITS14 = 16383\nexport const BITS15 = 32767\nexport const BITS16 = 65535\nexport const BITS17 = BIT18 - 1\nexport const BITS18 = BIT19 - 1\nexport const BITS19 = BIT20 - 1\nexport const BITS20 = BIT21 - 1\nexport const BITS21 = BIT22 - 1\nexport const BITS22 = BIT23 - 1\nexport const BITS23 = BIT24 - 1\nexport const BITS24 = BIT25 - 1\nexport const BITS25 = BIT26 - 1\nexport const BITS26 = BIT27 - 1\nexport const BITS27 = BIT28 - 1\nexport const BITS28 = BIT29 - 1\nexport const BITS29 = BIT30 - 1\nexport const BITS30 = BIT31 - 1\n/**\n * @type {number}\n */\nexport const BITS31 = 0x7FFFFFFF\n/**\n * @type {number}\n */\nexport const BITS32 = 0xFFFFFFFF\n","/**\n * Utility helpers for working with numbers.\n *\n * @module number\n */\n\nimport * as math from './math.js'\nimport * as binary from './binary.js'\n\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER\n\nexport const LOWEST_INT32 = 1 << 31\nexport const HIGHEST_INT32 = binary.BITS31\nexport const HIGHEST_UINT32 = binary.BITS32\n\n/* c8 ignore next */\nexport const isInteger = Number.isInteger || (num => typeof num === 'number' && isFinite(num) && math.floor(num) === num)\nexport const isNaN = Number.isNaN\nexport const parseInt = Number.parseInt\n","/**\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module encoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as binary from './binary.js'\nimport * as string from './string.js'\nimport * as array from './array.js'\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nexport class Encoder {\n constructor () {\n this.cpos = 0\n this.cbuf = new Uint8Array(100)\n /**\n * @type {Array}\n */\n this.bufs = []\n }\n}\n\n/**\n * @function\n * @return {Encoder}\n */\nexport const createEncoder = () => new Encoder()\n\n/**\n * @param {function(Encoder):void} f\n */\nexport const encode = (f) => {\n const encoder = createEncoder()\n f(encoder)\n return toUint8Array(encoder)\n}\n\n/**\n * The current length of the encoded data.\n *\n * @function\n * @param {Encoder} encoder\n * @return {number}\n */\nexport const length = encoder => {\n let len = encoder.cpos\n for (let i = 0; i < encoder.bufs.length; i++) {\n len += encoder.bufs[i].length\n }\n return len\n}\n\n/**\n * Check whether encoder is empty.\n *\n * @function\n * @param {Encoder} encoder\n * @return {boolean}\n */\nexport const hasContent = encoder => encoder.cpos > 0 || encoder.bufs.length > 0\n\n/**\n * Transform to Uint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @return {Uint8Array} The created ArrayBuffer.\n */\nexport const toUint8Array = encoder => {\n const uint8arr = new Uint8Array(length(encoder))\n let curPos = 0\n for (let i = 0; i < encoder.bufs.length; i++) {\n const d = encoder.bufs[i]\n uint8arr.set(d, curPos)\n curPos += d.length\n }\n uint8arr.set(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos), curPos)\n return uint8arr\n}\n\n/**\n * Verify that it is possible to write `len` bytes wtihout checking. If\n * necessary, a new Buffer with the required length is attached.\n *\n * @param {Encoder} encoder\n * @param {number} len\n */\nexport const verifyLen = (encoder, len) => {\n const bufferLen = encoder.cbuf.length\n if (bufferLen - encoder.cpos < len) {\n encoder.bufs.push(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos))\n encoder.cbuf = new Uint8Array(math.max(bufferLen, len) * 2)\n encoder.cpos = 0\n }\n}\n\n/**\n * Write one byte to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The byte that is to be encoded.\n */\nexport const write = (encoder, num) => {\n const bufferLen = encoder.cbuf.length\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf)\n encoder.cbuf = new Uint8Array(bufferLen * 2)\n encoder.cpos = 0\n }\n encoder.cbuf[encoder.cpos++] = num\n}\n\n/**\n * Write one byte at a specific position.\n * Position must already be written (i.e. encoder.length > pos)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos Position to which to write data\n * @param {number} num Unsigned 8-bit integer\n */\nexport const set = (encoder, pos, num) => {\n let buffer = null\n // iterate all buffers and adjust position\n for (let i = 0; i < encoder.bufs.length && buffer === null; i++) {\n const b = encoder.bufs[i]\n if (pos < b.length) {\n buffer = b // found buffer\n } else {\n pos -= b.length\n }\n }\n if (buffer === null) {\n // use current buffer\n buffer = encoder.cbuf\n }\n buffer[pos] = num\n}\n\n/**\n * Write one byte as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint8 = write\n\n/**\n * Write one byte as an unsigned Integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint8 = set\n\n/**\n * Write two bytes as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint16 = (encoder, num) => {\n write(encoder, num & binary.BITS8)\n write(encoder, (num >>> 8) & binary.BITS8)\n}\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint16 = (encoder, pos, num) => {\n set(encoder, pos, num & binary.BITS8)\n set(encoder, pos + 1, (num >>> 8) & binary.BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32 = (encoder, num) => {\n for (let i = 0; i < 4; i++) {\n write(encoder, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write two bytes as an unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32BigEndian = (encoder, num) => {\n for (let i = 3; i >= 0; i--) {\n write(encoder, (num >>> (8 * i)) & binary.BITS8)\n }\n}\n\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint32 = (encoder, pos, num) => {\n for (let i = 0; i < 4; i++) {\n set(encoder, pos + i, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarUint = (encoder, num) => {\n while (num > binary.BITS7) {\n write(encoder, binary.BIT8 | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n write(encoder, binary.BITS7 & num)\n}\n\n/**\n * Write a variable length integer.\n *\n * We use the 7th bit instead for signaling that this is a negative number.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarInt = (encoder, num) => {\n const isNegative = math.isNegativeZero(num)\n if (isNegative) {\n num = -num\n }\n // |- whether to continue reading |- whether is negative |- number\n write(encoder, (num > binary.BITS6 ? binary.BIT8 : 0) | (isNegative ? binary.BIT7 : 0) | (binary.BITS6 & num))\n num = math.floor(num / 64) // shift >>> 6\n // We don't need to consider the case of num === 0 so we can use a different\n // pattern here than above.\n while (num > 0) {\n write(encoder, (num > binary.BITS7 ? binary.BIT8 : 0) | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n}\n\n/**\n * A cache to store strings temporarily\n */\nconst _strBuffer = new Uint8Array(30000)\nconst _maxStrBSize = _strBuffer.length / 3\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringNative = (encoder, str) => {\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n /* c8 ignore next */\n const written = string.utf8TextEncoder.encodeInto(str, _strBuffer).written || 0\n writeVarUint(encoder, written)\n for (let i = 0; i < written; i++) {\n write(encoder, _strBuffer[i])\n }\n } else {\n writeVarUint8Array(encoder, string.encodeUtf8(str))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringPolyfill = (encoder, str) => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n write(encoder, /** @type {number} */ (encodedString.codePointAt(i)))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\n/* c8 ignore next */\nexport const writeVarString = (string.utf8TextEncoder && /** @type {any} */ (string.utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill\n\n/**\n * Write a string terminated by a special byte sequence. This is not very performant and is\n * generally discouraged. However, the resulting byte arrays are lexiographically ordered which\n * makes this a nice feature for databases.\n *\n * The string will be encoded using utf8 and then terminated and escaped using writeTerminatingUint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const writeTerminatedString = (encoder, str) =>\n writeTerminatedUint8Array(encoder, string.encodeUtf8(str))\n\n/**\n * Write a terminating Uint8Array. Note that this is not performant and is generally\n * discouraged. There are few situations when this is needed.\n *\n * We use 0x0 as a terminating character. 0x1 serves as an escape character for 0x0 and 0x1.\n *\n * Example: [0,1,2] is encoded to [1,0,1,1,2,0]. 0x0, and 0x1 needed to be escaped using 0x1. Then\n * the result is terminated using the 0x0 character.\n *\n * This is basically how many systems implement null terminated strings. However, we use an escape\n * character 0x1 to avoid issues and potenial attacks on our database (if this is used as a key\n * encoder for NoSql databases).\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} buf The string that is to be encoded.\n */\nexport const writeTerminatedUint8Array = (encoder, buf) => {\n for (let i = 0; i < buf.length; i++) {\n const b = buf[i]\n if (b === 0 || b === 1) {\n write(encoder, 1)\n }\n write(encoder, buf[i])\n }\n write(encoder, 0)\n}\n\n/**\n * Write the content of another Encoder.\n *\n * @TODO: can be improved!\n * - Note: Should consider that when appending a lot of small Encoders, we should rather clone than referencing the old structure.\n * Encoders start with a rather big initial buffer.\n *\n * @function\n * @param {Encoder} encoder The enUint8Arr\n * @param {Encoder} append The BinaryEncoder to be written.\n */\nexport const writeBinaryEncoder = (encoder, append) => writeUint8Array(encoder, toUint8Array(append))\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeUint8Array = (encoder, uint8Array) => {\n const bufferLen = encoder.cbuf.length\n const cpos = encoder.cpos\n const leftCopyLen = math.min(bufferLen - cpos, uint8Array.length)\n const rightCopyLen = uint8Array.length - leftCopyLen\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos)\n encoder.cpos += leftCopyLen\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf)\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(math.max(bufferLen * 2, rightCopyLen))\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen))\n encoder.cpos = rightCopyLen\n }\n}\n\n/**\n * Append an Uint8Array to Encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeVarUint8Array = (encoder, uint8Array) => {\n writeVarUint(encoder, uint8Array.byteLength)\n writeUint8Array(encoder, uint8Array)\n}\n\n/**\n * Create an DataView of the next `len` bytes. Use it to write data after\n * calling this function.\n *\n * ```js\n * // write float32 using DataView\n * const dv = writeOnDataView(encoder, 4)\n * dv.setFloat32(0, 1.1)\n * // read float32 using DataView\n * const dv = readFromDataView(encoder, 4)\n * dv.getFloat32(0) // => 1.100000023841858 (leaving it to the reader to find out why this is the correct result)\n * ```\n *\n * @param {Encoder} encoder\n * @param {number} len\n * @return {DataView}\n */\nexport const writeOnDataView = (encoder, len) => {\n verifyLen(encoder, len)\n const dview = new DataView(encoder.cbuf.buffer, encoder.cpos, len)\n encoder.cpos += len\n return dview\n}\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat32 = (encoder, num) => writeOnDataView(encoder, 4).setFloat32(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat64 = (encoder, num) => writeOnDataView(encoder, 8).setFloat64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigInt64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigInt64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigUint64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigUint64(0, num, false)\n\nconst floatTestBed = new DataView(new ArrayBuffer(4))\n/**\n * Check if a number can be encoded as a 32 bit float.\n *\n * @param {number} num\n * @return {boolean}\n */\nconst isFloat32 = num => {\n floatTestBed.setFloat32(0, num)\n return floatTestBed.getFloat32(0) === num\n}\n\n/**\n * Encode data with efficient binary format.\n *\n * Differences to JSON:\n * • Transforms data to a binary format (not to a string)\n * • Encodes undefined, NaN, and ArrayBuffer (these can't be represented in JSON)\n * • Numbers are efficiently encoded either as a variable length integer, as a\n * 32 bit float, as a 64 bit float, or as a 64 bit bigint.\n *\n * Encoding table:\n *\n * | Data Type | Prefix | Encoding Method | Comment |\n * | ------------------- | -------- | ------------------ | ------- |\n * | undefined | 127 | | Functions, symbol, and everything that cannot be identified is encoded as undefined |\n * | null | 126 | | |\n * | integer | 125 | writeVarInt | Only encodes 32 bit signed integers |\n * | float32 | 124 | writeFloat32 | |\n * | float64 | 123 | writeFloat64 | |\n * | bigint | 122 | writeBigInt64 | |\n * | boolean (false) | 121 | | True and false are different data types so we save the following byte |\n * | boolean (true) | 120 | | - 0b01111000 so the last bit determines whether true or false |\n * | string | 119 | writeVarString | |\n * | object | 118 | custom | Writes {length} then {length} key-value pairs |\n * | array | 117 | custom | Writes {length} then {length} json values |\n * | Uint8Array | 116 | writeVarUint8Array | We use Uint8Array for any kind of binary data |\n *\n * Reasons for the decreasing prefix:\n * We need the first bit for extendability (later we may want to encode the\n * prefix with writeVarUint). The remaining 7 bits are divided as follows:\n * [0-30] the beginning of the data range is used for custom purposes\n * (defined by the function that uses this library)\n * [31-127] the end of the data range is used for data encoding by\n * lib0/encoding.js\n *\n * @param {Encoder} encoder\n * @param {undefined|null|number|bigint|boolean|string|Object|Array|Uint8Array} data\n */\nexport const writeAny = (encoder, data) => {\n switch (typeof data) {\n case 'string':\n // TYPE 119: STRING\n write(encoder, 119)\n writeVarString(encoder, data)\n break\n case 'number':\n if (number.isInteger(data) && math.abs(data) <= binary.BITS31) {\n // TYPE 125: INTEGER\n write(encoder, 125)\n writeVarInt(encoder, data)\n } else if (isFloat32(data)) {\n // TYPE 124: FLOAT32\n write(encoder, 124)\n writeFloat32(encoder, data)\n } else {\n // TYPE 123: FLOAT64\n write(encoder, 123)\n writeFloat64(encoder, data)\n }\n break\n case 'bigint':\n // TYPE 122: BigInt\n write(encoder, 122)\n writeBigInt64(encoder, data)\n break\n case 'object':\n if (data === null) {\n // TYPE 126: null\n write(encoder, 126)\n } else if (array.isArray(data)) {\n // TYPE 117: Array\n write(encoder, 117)\n writeVarUint(encoder, data.length)\n for (let i = 0; i < data.length; i++) {\n writeAny(encoder, data[i])\n }\n } else if (data instanceof Uint8Array) {\n // TYPE 116: ArrayBuffer\n write(encoder, 116)\n writeVarUint8Array(encoder, data)\n } else {\n // TYPE 118: Object\n write(encoder, 118)\n const keys = Object.keys(data)\n writeVarUint(encoder, keys.length)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n writeVarString(encoder, key)\n writeAny(encoder, data[key])\n }\n }\n break\n case 'boolean':\n // TYPE 120/121: boolean (true/false)\n write(encoder, data ? 120 : 121)\n break\n default:\n // TYPE 127: undefined\n write(encoder, 127)\n }\n}\n\n/**\n * Now come a few stateful encoder that have their own classes.\n */\n\n/**\n * Basic Run Length Encoder - a basic compression implementation.\n *\n * Encodes [1,1,1,7] to [1,3,7,1] (3 times 1, 1 time 7). This encoder might do more harm than good if there are a lot of values that are not repeated.\n *\n * It was originally used for image compression. Cool .. article http://csbruce.com/cbm/transactor/pdfs/trans_v7_i06.pdf\n *\n * @note T must not be null!\n *\n * @template T\n */\nexport class RleEncoder extends Encoder {\n /**\n * @param {function(Encoder, T):void} writer\n */\n constructor (writer) {\n super()\n /**\n * The writer\n */\n this.w = writer\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n /**\n * @param {T} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n this.w(this, v)\n this.s = v\n }\n }\n}\n\n/**\n * Basic diff decoder using variable length encoding.\n *\n * Encodes the values [3, 1100, 1101, 1050, 0] to [3, 1097, 1, -51, -1050] using writeVarInt.\n */\nexport class IntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n writeVarInt(this, v - this.s)\n this.s = v\n }\n}\n\n/**\n * A combination of IntDiffEncoder and RleEncoder.\n *\n * Basically first writes the IntDiffEncoder and then counts duplicate diffs using RleEncoding.\n *\n * Encodes the values [1,1,1,2,3,4,5,6] as [1,1,0,2,1,5] (RLE([1,0,0,1,1,1,1,1]) ⇒ RleIntDiff[1,1,0,2,1,5])\n */\nexport class RleIntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v && this.count > 0) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n writeVarInt(this, v - this.s)\n this.s = v\n }\n }\n}\n\n/**\n * @param {UintOptRleEncoder} encoder\n */\nconst flushUintOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set sign to positive\n // case 2: write several values. set sign to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encoder.count === 1 ? encoder.s : -encoder.s)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * Optimized Rle encoder that does not suffer from the mentioned problem of the basic Rle encoder.\n *\n * Internally uses VarInt encoder to write unsigned integers. If the input occurs multiple times, we write\n * write it as a negative number. The UintOptRleDecoder then understands that it needs to read a count.\n *\n * Encodes [1,2,3,3,3] as [1,2,-3,3] (once 1, once 2, three times 3)\n */\nexport class UintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Increasing Uint Optimized RLE Encoder\n *\n * The RLE encoder counts the number of same occurences of the same value.\n * The IncUintOptRle encoder counts if the value increases.\n * I.e. 7, 8, 9, 10 will be encoded as [-7, 4]. 1, 3, 5 will be encoded\n * as [1, 3, 5].\n */\nexport class IncUintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s + this.count === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * @param {IntDiffOptRleEncoder} encoder\n */\nconst flushIntDiffOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // 31 bit making up the diff | wether to write the counter\n // const encodedDiff = encoder.diff << 1 | (encoder.count === 1 ? 0 : 1)\n const encodedDiff = encoder.diff * 2 + (encoder.count === 1 ? 0 : 1)\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set first bit to positive\n // case 2: write several values. set first bit to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encodedDiff)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * A combination of the IntDiffEncoder and the UintOptRleEncoder.\n *\n * The count approach is similar to the UintDiffOptRleEncoder, but instead of using the negative bitflag, it encodes\n * in the LSB whether a count is to be read. Therefore this Encoder only supports 31 bit integers!\n *\n * Encodes [1, 2, 3, 2] as [3, 1, 6, -1] (more specifically [(1 << 1) | 1, (3 << 0) | 0, -1])\n *\n * Internally uses variable length encoding. Contrary to normal UintVar encoding, the first byte contains:\n * * 1 bit that denotes whether the next value is a count (LSB)\n * * 1 bit that denotes whether this value is negative (MSB - 1)\n * * 1 bit that denotes whether to continue reading the variable length integer (MSB)\n *\n * Therefore, only five bits remain to encode diff ranges.\n *\n * Use this Encoder only when appropriate. In most cases, this is probably a bad idea.\n */\nexport class IntDiffOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.diff === v - this.s) {\n this.s = v\n this.count++\n } else {\n flushIntDiffOptRleEncoder(this)\n this.count = 1\n this.diff = v - this.s\n this.s = v\n }\n }\n\n toUint8Array () {\n flushIntDiffOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Optimized String Encoder.\n *\n * Encoding many small strings in a simple Encoder is not very efficient. The function call to decode a string takes some time and creates references that must be eventually deleted.\n * In practice, when decoding several million small strings, the GC will kick in more and more often to collect orphaned string objects (or maybe there is another reason?).\n *\n * This string encoder solves the above problem. All strings are concatenated and written as a single string using a single encoding call.\n *\n * The lengths are encoded using a UintOptRleEncoder.\n */\nexport class StringEncoder {\n constructor () {\n /**\n * @type {Array}\n */\n this.sarr = []\n this.s = ''\n this.lensE = new UintOptRleEncoder()\n }\n\n /**\n * @param {string} string\n */\n write (string) {\n this.s += string\n if (this.s.length > 19) {\n this.sarr.push(this.s)\n this.s = ''\n }\n this.lensE.write(string.length)\n }\n\n toUint8Array () {\n const encoder = new Encoder()\n this.sarr.push(this.s)\n this.s = ''\n writeVarString(encoder, this.sarr.join(''))\n writeUint8Array(encoder, this.lensE.toUint8Array())\n return toUint8Array(encoder)\n }\n}\n","/**\n * Error helpers.\n *\n * @module error\n */\n\n/**\n * @param {string} s\n * @return {Error}\n */\n/* c8 ignore next */\nexport const create = s => new Error(s)\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const methodUnimplemented = () => {\n throw create('Method unimplemented')\n}\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const unexpectedCase = () => {\n throw create('Unexpected case')\n}\n","/**\n * Efficient schema-less binary decoding with support for variable length encoding.\n *\n * Use [lib0/decoding] with [lib0/encoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module decoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as binary from './binary.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as string from './string.js'\nimport * as error from './error.js'\nimport * as encoding from './encoding.js'\n\nconst errorUnexpectedEndOfArray = error.create('Unexpected end of array')\nconst errorIntegerOutOfRange = error.create('Integer out of Range')\n\n/**\n * A Decoder handles the decoding of an Uint8Array.\n */\nexport class Decoder {\n /**\n * @param {Uint8Array} uint8Array Binary data to decode\n */\n constructor (uint8Array) {\n /**\n * Decoding target.\n *\n * @type {Uint8Array}\n */\n this.arr = uint8Array\n /**\n * Current decoding position.\n *\n * @type {number}\n */\n this.pos = 0\n }\n}\n\n/**\n * @function\n * @param {Uint8Array} uint8Array\n * @return {Decoder}\n */\nexport const createDecoder = uint8Array => new Decoder(uint8Array)\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {boolean}\n */\nexport const hasContent = decoder => decoder.pos !== decoder.arr.length\n\n/**\n * Clone a decoder instance.\n * Optionally set a new position parameter.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} [newPos] Defaults to current position\n * @return {Decoder} A clone of `decoder`\n */\nexport const clone = (decoder, newPos = decoder.pos) => {\n const _decoder = createDecoder(decoder.arr)\n _decoder.pos = newPos\n return _decoder\n}\n\n/**\n * Create an Uint8Array view of the next `len` bytes and advance the position by `len`.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} len The length of bytes to read\n * @return {Uint8Array}\n */\nexport const readUint8Array = (decoder, len) => {\n const view = buffer.createUint8ArrayViewFromArrayBuffer(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len)\n decoder.pos += len\n return view\n}\n\n/**\n * Read variable length Uint8Array.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readVarUint8Array = decoder => readUint8Array(decoder, readVarUint(decoder))\n\n/**\n * Read the rest of the content as an ArrayBuffer\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTailAsUint8Array = decoder => readUint8Array(decoder, decoder.arr.length - decoder.pos)\n\n/**\n * Skip one byte, jump to the next position.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} The next position\n */\nexport const skip8 = decoder => decoder.pos++\n\n/**\n * Read one byte as unsigned integer.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} Unsigned 8-bit integer\n */\nexport const readUint8 = decoder => decoder.arr[decoder.pos++]\n\n/**\n * Read 2 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint16 = decoder => {\n const uint =\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n decoder.pos += 2\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32 = decoder => {\n const uint =\n (decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32BigEndian = decoder => {\n const uint =\n (decoder.arr[decoder.pos + 3] +\n (decoder.arr[decoder.pos + 2] << 8) +\n (decoder.arr[decoder.pos + 1] << 16) +\n (decoder.arr[decoder.pos] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint8 = decoder => decoder.arr[decoder.pos]\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint16 = decoder =>\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint32 = decoder => (\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)\n) >>> 0\n\n/**\n * Read unsigned integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarUint = decoder => {\n let num = 0\n let mult = 1\n const len = decoder.arr.length\n while (decoder.pos < len) {\n const r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult // shift $r << (7*#iterations) and add it to num\n mult *= 128 // next iteration, shift 7 \"more\" to the left\n if (r < binary.BIT8) {\n return num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Read signed integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n * @todo This should probably create the inverse ~num if number is negative - but this would be a breaking change.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarInt = decoder => {\n let r = decoder.arr[decoder.pos++]\n let num = r & binary.BITS6\n let mult = 64\n const sign = (r & binary.BIT7) > 0 ? -1 : 1\n if ((r & binary.BIT8) === 0) {\n // don't continue reading\n return sign * num\n }\n const len = decoder.arr.length\n while (decoder.pos < len) {\n r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult\n mult *= 128\n if (r < binary.BIT8) {\n return sign * num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarUint = decoder => {\n const pos = decoder.pos\n const s = readVarUint(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarInt = decoder => {\n const pos = decoder.pos\n const s = readVarInt(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * We don't test this function anymore as we use native decoding/encoding by default now.\n * Better not modify this anymore..\n *\n * Transforming utf8 to a string is pretty expensive. The code performs 10x better\n * when String.fromCodePoint is fed with all characters as arguments.\n * But most environments have a maximum number of arguments per functions.\n * For effiency reasons we apply a maximum of 10000 characters at once.\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String.\n */\n/* c8 ignore start */\nexport const _readVarStringPolyfill = decoder => {\n let remainingLen = readVarUint(decoder)\n if (remainingLen === 0) {\n return ''\n } else {\n let encodedString = String.fromCodePoint(readUint8(decoder)) // remember to decrease remainingLen\n if (--remainingLen < 100) { // do not create a Uint8Array for small strings\n while (remainingLen--) {\n encodedString += String.fromCodePoint(readUint8(decoder))\n }\n } else {\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n // this is dangerous, we create a fresh array view from the existing buffer\n const bytes = decoder.arr.subarray(decoder.pos, decoder.pos + nextLen)\n decoder.pos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n }\n return decodeURIComponent(escape(encodedString))\n }\n}\n/* c8 ignore stop */\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n */\nexport const _readVarStringNative = decoder =>\n /** @type any */ (string.utf8TextDecoder).decode(readVarUint8Array(decoder))\n\n/**\n * Read string of variable length\n * * varUint is used to store the length of the string\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n *\n */\n/* c8 ignore next */\nexport const readVarString = string.utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill\n\n/**\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTerminatedUint8Array = decoder => {\n const encoder = encoding.createEncoder()\n let b\n while (true) {\n b = readUint8(decoder)\n if (b === 0) {\n return encoding.toUint8Array(encoder)\n }\n if (b === 1) {\n b = readUint8(decoder)\n }\n encoding.write(encoder, b)\n }\n}\n\n/**\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const readTerminatedString = decoder => string.decodeUtf8(readTerminatedUint8Array(decoder))\n\n/**\n * Look ahead and read varString without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const peekVarString = decoder => {\n const pos = decoder.pos\n const s = readVarString(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * @param {Decoder} decoder\n * @param {number} len\n * @return {DataView}\n */\nexport const readFromDataView = (decoder, len) => {\n const dv = new DataView(decoder.arr.buffer, decoder.arr.byteOffset + decoder.pos, len)\n decoder.pos += len\n return dv\n}\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat32 = decoder => readFromDataView(decoder, 4).getFloat32(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat64 = decoder => readFromDataView(decoder, 8).getFloat64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigInt64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigInt64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigUint64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigUint64(0, false)\n\n/**\n * @type {Array}\n */\nconst readAnyLookupTable = [\n decoder => undefined, // CASE 127: undefined\n decoder => null, // CASE 126: null\n readVarInt, // CASE 125: integer\n readFloat32, // CASE 124: float32\n readFloat64, // CASE 123: float64\n readBigInt64, // CASE 122: bigint\n decoder => false, // CASE 121: boolean (false)\n decoder => true, // CASE 120: boolean (true)\n readVarString, // CASE 119: string\n decoder => { // CASE 118: object\n const len = readVarUint(decoder)\n /**\n * @type {Object}\n */\n const obj = {}\n for (let i = 0; i < len; i++) {\n const key = readVarString(decoder)\n obj[key] = readAny(decoder)\n }\n return obj\n },\n decoder => { // CASE 117: array\n const len = readVarUint(decoder)\n const arr = []\n for (let i = 0; i < len; i++) {\n arr.push(readAny(decoder))\n }\n return arr\n },\n readVarUint8Array // CASE 116: Uint8Array\n]\n\n/**\n * @param {Decoder} decoder\n */\nexport const readAny = decoder => readAnyLookupTable[127 - readUint8(decoder)](decoder)\n\n/**\n * T must not be null.\n *\n * @template T\n */\nexport class RleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {function(Decoder):T} reader\n */\n constructor (uint8Array, reader) {\n super(uint8Array)\n /**\n * The reader\n */\n this.reader = reader\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = this.reader(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {T} */ (this.s)\n }\n}\n\nexport class IntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @return {number}\n */\n read () {\n this.s += readVarInt(this)\n return this.s\n }\n}\n\nexport class RleIntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n this.s += readVarInt(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class UintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class IncUintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s++)\n }\n}\n\nexport class IntDiffOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n const diff = readVarInt(this)\n // if the first bit is set, we read more data\n const hasCount = diff & 1\n this.diff = math.floor(diff / 2) // shift >> 1\n this.count = 1\n if (hasCount) {\n this.count = readVarUint(this) + 2\n }\n }\n this.s += this.diff\n this.count--\n return this.s\n }\n}\n\nexport class StringDecoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n this.decoder = new UintOptRleDecoder(uint8Array)\n this.str = readVarString(this.decoder)\n /**\n * @type {number}\n */\n this.spos = 0\n }\n\n /**\n * @return {string}\n */\n read () {\n const end = this.spos + this.decoder.read()\n const res = this.str.slice(this.spos, end)\n this.spos = end\n return res\n }\n}\n","/**\n * Utility functions to work with buffers (Uint8Array).\n *\n * @module buffer\n */\n\nimport * as string from './string.js'\nimport * as env from './environment.js'\nimport * as encoding from './encoding.js'\nimport * as decoding from './decoding.js'\n\n/**\n * @param {number} len\n */\nexport const createUint8ArrayFromLen = len => new Uint8Array(len)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n * @param {number} byteOffset\n * @param {number} length\n */\nexport const createUint8ArrayViewFromArrayBuffer = (buffer, byteOffset, length) => new Uint8Array(buffer, byteOffset, length)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n */\nexport const createUint8ArrayFromArrayBuffer = buffer => new Uint8Array(buffer)\n\n/* c8 ignore start */\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Browser = bytes => {\n let s = ''\n for (let i = 0; i < bytes.byteLength; i++) {\n s += string.fromCharCode(bytes[i])\n }\n // eslint-disable-next-line no-undef\n return btoa(s)\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Node = bytes => Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64')\n\n/* c8 ignore start */\n/**\n * @param {string} s\n * @return {Uint8Array}\n */\nconst fromBase64Browser = s => {\n // eslint-disable-next-line no-undef\n const a = atob(s)\n const bytes = createUint8ArrayFromLen(a.length)\n for (let i = 0; i < a.length; i++) {\n bytes[i] = a.charCodeAt(i)\n }\n return bytes\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} s\n */\nconst fromBase64Node = s => {\n const buf = Buffer.from(s, 'base64')\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/* c8 ignore next */\nexport const toBase64 = env.isBrowser ? toBase64Browser : toBase64Node\n\n/* c8 ignore next */\nexport const fromBase64 = env.isBrowser ? fromBase64Browser : fromBase64Node\n\n/**\n * Copy the content of an Uint8Array view to a new ArrayBuffer.\n *\n * @param {Uint8Array} uint8Array\n * @return {Uint8Array}\n */\nexport const copyUint8Array = uint8Array => {\n const newBuf = createUint8ArrayFromLen(uint8Array.byteLength)\n newBuf.set(uint8Array)\n return newBuf\n}\n\n/**\n * Encode anything as a UInt8Array. It's a pun on typescripts's `any` type.\n * See encoding.writeAny for more information.\n *\n * @param {any} data\n * @return {Uint8Array}\n */\nexport const encodeAny = data => {\n const encoder = encoding.createEncoder()\n encoding.writeAny(encoder, data)\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Decode an any-encoded value.\n *\n * @param {Uint8Array} buf\n * @return {any}\n */\nexport const decodeAny = buf => decoding.readAny(decoding.createDecoder(buf))\n","/* eslint-env browser */\n\n/**\n * Helpers for cross-tab communication using broadcastchannel with LocalStorage fallback.\n *\n * ```js\n * // In browser window A:\n * broadcastchannel.subscribe('my events', data => console.log(data))\n * broadcastchannel.publish('my events', 'Hello world!') // => A: 'Hello world!' fires synchronously in same tab\n *\n * // In browser window B:\n * broadcastchannel.publish('my events', 'hello from tab B') // => A: 'hello from tab B'\n * ```\n *\n * @module broadcastchannel\n */\n\n// @todo before next major: use Uint8Array instead as buffer object\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as buffer from './buffer.js'\nimport * as storage from './storage.js'\n\n/**\n * @typedef {Object} Channel\n * @property {Set} Channel.subs\n * @property {any} Channel.bc\n */\n\n/**\n * @type {Map}\n */\nconst channels = new Map()\n\n/* c8 ignore start */\nclass LocalStoragePolyfill {\n /**\n * @param {string} room\n */\n constructor (room) {\n this.room = room\n /**\n * @type {null|function({data:ArrayBuffer}):void}\n */\n this.onmessage = null\n /**\n * @param {any} e\n */\n this._onChange = e => e.key === room && this.onmessage !== null && this.onmessage({ data: buffer.fromBase64(e.newValue || '') })\n storage.onChange(this._onChange)\n }\n\n /**\n * @param {ArrayBuffer} buf\n */\n postMessage (buf) {\n storage.varStorage.setItem(this.room, buffer.toBase64(buffer.createUint8ArrayFromArrayBuffer(buf)))\n }\n\n close () {\n storage.offChange(this._onChange)\n }\n}\n/* c8 ignore stop */\n\n// Use BroadcastChannel or Polyfill\n/* c8 ignore next */\nconst BC = typeof BroadcastChannel === 'undefined' ? LocalStoragePolyfill : BroadcastChannel\n\n/**\n * @param {string} room\n * @return {Channel}\n */\nconst getChannel = room =>\n map.setIfUndefined(channels, room, () => {\n const subs = set.create()\n const bc = new BC(room)\n /**\n * @param {{data:ArrayBuffer}} e\n */\n /* c8 ignore next */\n bc.onmessage = e => subs.forEach(sub => sub(e.data, 'broadcastchannel'))\n return {\n bc, subs\n }\n })\n\n/**\n * Subscribe to global `publish` events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const subscribe = (room, f) => {\n getChannel(room).subs.add(f)\n return f\n}\n\n/**\n * Unsubscribe from `publish` global events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const unsubscribe = (room, f) => {\n const channel = getChannel(room)\n const unsubscribed = channel.subs.delete(f)\n if (unsubscribed && channel.subs.size === 0) {\n channel.bc.close()\n channels.delete(room)\n }\n return unsubscribed\n}\n\n/**\n * Publish data to all subscribers (including subscribers on this tab)\n *\n * @function\n * @param {string} room\n * @param {any} data\n * @param {any} [origin]\n */\nexport const publish = (room, data, origin = null) => {\n const c = getChannel(room)\n c.bc.postMessage(data)\n c.subs.forEach(sub => sub(data, origin))\n}\n","/**\n * Mutual exclude for JavaScript.\n *\n * @module mutex\n */\n\n/**\n * @callback mutex\n * @param {function():void} cb Only executed when this mutex is not in the current stack\n * @param {function():void} [elseCb] Executed when this mutex is in the current stack\n */\n\n/**\n * Creates a mutual exclude function with the following property:\n *\n * ```js\n * const mutex = createMutex()\n * mutex(() => {\n * // This function is immediately executed\n * mutex(() => {\n * // This function is not executed, as the mutex is already active.\n * })\n * })\n * ```\n *\n * @return {mutex} A mutual exclude function\n * @public\n */\nexport const createMutex = () => {\n let token = true\n return (f, g) => {\n if (token) {\n token = false\n try {\n f()\n } finally {\n token = true\n }\n } else if (g !== undefined) {\n g()\n }\n }\n}\n","/**\n * Utility module to work with time.\n *\n * @module time\n */\n\nimport * as metric from './metric.js'\nimport * as math from './math.js'\n\n/**\n * Return current time.\n *\n * @return {Date}\n */\nexport const getDate = () => new Date()\n\n/**\n * Return current unix time.\n *\n * @return {number}\n */\nexport const getUnixTime = Date.now\n\n/**\n * Transform time (in ms) to a human readable format. E.g. 1100 => 1.1s. 60s => 1min. .001 => 10μs.\n *\n * @param {number} d duration in milliseconds\n * @return {string} humanized approximation of time\n */\nexport const humanizeDuration = d => {\n if (d < 60000) {\n const p = metric.prefix(d, -1)\n return math.round(p.n * 100) / 100 + p.prefix + 's'\n }\n d = math.floor(d / 1000)\n const seconds = d % 60\n const minutes = math.floor(d / 60) % 60\n const hours = math.floor(d / 3600) % 24\n const days = math.floor(d / 86400)\n if (days > 0) {\n return days + 'd' + ((hours > 0 || minutes > 30) ? ' ' + (minutes > 30 ? hours + 1 : hours) + 'h' : '')\n }\n if (hours > 0) {\n /* c8 ignore next */\n return hours + 'h' + ((minutes > 0 || seconds > 30) ? ' ' + (seconds > 30 ? minutes + 1 : minutes) + 'min' : '')\n }\n return minutes + 'min' + (seconds > 0 ? ' ' + seconds + 's' : '')\n}\n","/**\n * Observable class prototype.\n *\n * @module observable\n */\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as array from './array.js'\n\n/**\n * Handles named events.\n *\n * @template N\n */\nexport class Observable {\n constructor () {\n /**\n * Some desc.\n * @type {Map}\n */\n this._observers = map.create()\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, name, set.create).add(f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, _f)\n f(...args)\n }\n this.on(name, _f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @param {N} name The event name.\n * @param {Array} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n","/**\n * @module awareness-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as time from 'lib0/time'\nimport * as math from 'lib0/math'\nimport { Observable } from 'lib0/observable'\nimport * as f from 'lib0/function'\nimport * as Y from 'yjs' // eslint-disable-line\n\nexport const outdatedTimeout = 30000\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable}\n */\nexport class Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super()\n this.doc = doc\n /**\n * @type {number}\n */\n this.clientID = doc.clientID\n /**\n * Maps from client id to client state\n * @type {Map>}\n */\n this.states = new Map()\n /**\n * @type {Map}\n */\n this.meta = new Map()\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = time.getUnixTime()\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState())\n }\n /**\n * @type {Array}\n */\n const remove = []\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid)\n }\n })\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout')\n }\n }, math.floor(outdatedTimeout / 10)))\n doc.on('destroy', () => {\n this.destroy()\n })\n this.setLocalState({})\n }\n\n destroy () {\n this.emit('destroy', [this])\n this.setLocalState(null)\n super.destroy()\n clearInterval(this._checkInterval)\n }\n\n /**\n * @return {Object|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID\n const currLocalMeta = this.meta.get(clientID)\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1\n const prevState = this.states.get(clientID)\n if (state === null) {\n this.states.delete(clientID)\n } else {\n this.states.set(clientID, state)\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: time.getUnixTime()\n })\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n if (state === null) {\n removed.push(clientID)\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID)\n }\n } else {\n updated.push(clientID)\n if (!f.equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID)\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local'])\n }\n this.emit('update', [{ added, updated, removed }, 'local'])\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState()\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n })\n }\n }\n\n /**\n * @return {Map>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array} clients\n * @param {any} origin\n */\nexport const removeAwarenessStates = (awareness, clients, origin) => {\n const removed = []\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i]\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID)\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID))\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: time.getUnixTime()\n })\n }\n removed.push(clientID)\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin])\n awareness.emit('update', [{ added: [], updated: [], removed }, origin])\n }\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Array} clients\n * @return {Uint8Array}\n */\nexport const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = clients[i]\n const state = states.get(clientID) || null\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(state))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Modify the content of an awareness update before re-encoding it to an awareness update.\n *\n * This might be useful when you have a central server that wants to ensure that clients\n * cant hijack somebody elses identity.\n *\n * @param {Uint8Array} update\n * @param {function(any):any} modify\n * @return {Uint8Array}\n */\nexport const modifyAwarenessUpdate = (update, modify) => {\n const decoder = decoding.createDecoder(update)\n const encoder = encoding.createEncoder()\n const len = decoding.readVarUint(decoder)\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n const clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const modifiedState = modify(state)\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(modifiedState))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nexport const applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = decoding.createDecoder(update)\n const timestamp = time.getUnixTime()\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n const len = decoding.readVarUint(decoder)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n let clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const clientMeta = awareness.meta.get(clientID)\n const prevState = awareness.states.get(clientID)\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++\n } else {\n awareness.states.delete(clientID)\n }\n } else {\n awareness.states.set(clientID, state)\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n })\n if (clientMeta === undefined && state !== null) {\n added.push(clientID)\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID)\n } else if (state !== null) {\n if (!f.equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID)\n }\n updated.push(clientID)\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin])\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin])\n }\n}\n","export default class EventEmitter {\n\n public callbacks: { [key: string]: Function[] } = {}\n\n public on(event: string, fn: Function): this {\n if (!this.callbacks[event]) {\n this.callbacks[event] = []\n }\n\n this.callbacks[event].push(fn)\n\n return this\n }\n\n protected emit(event: string, ...args: any): this {\n const callbacks = this.callbacks[event]\n\n if (callbacks) {\n callbacks.forEach(callback => callback.apply(this, args))\n }\n\n return this\n }\n\n public off(event: string, fn?: Function): this {\n const callbacks = this.callbacks[event]\n\n if (callbacks) {\n if (fn) {\n this.callbacks[event] = callbacks.filter(callback => callback !== fn)\n } else {\n delete this.callbacks[event]\n }\n }\n\n return this\n }\n\n removeAllListeners(): void {\n this.callbacks = {}\n }\n}\n","/**\n * Utility module to work with urls.\n *\n * @module url\n */\n\nimport * as object from './object.js'\n\n/**\n * Parse query parameters from an url.\n *\n * @param {string} url\n * @return {Object}\n */\nexport const decodeQueryParams = url => {\n /**\n * @type {Object}\n */\n const query = {}\n const urlQuerySplit = url.split('?')\n const pairs = urlQuerySplit[urlQuerySplit.length - 1].split('&')\n for (let i = 0; i < pairs.length; i++) {\n const item = pairs[i]\n if (item.length > 0) {\n const pair = item.split('=')\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '')\n }\n }\n return query\n}\n\n/**\n * @param {Object} params\n * @return {string}\n */\nexport const encodeQueryParams = params =>\n object.map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&')\n","import { Encoder } from 'lib0/encoding'\nimport type { CloseEvent, Event, MessageEvent } from 'ws'\nimport { Awareness } from 'y-protocols/awareness'\nimport * as Y from 'yjs'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.js'\nimport { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.js'\nimport { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js'\nimport { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js'\nimport { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js'\nimport { UpdateMessage } from './OutgoingMessages/UpdateMessage.js'\n\nexport enum MessageType {\n Sync = 0,\n Awareness = 1,\n Auth = 2,\n QueryAwareness = 3,\n Stateless = 5,\n CLOSE = 7,\n SyncStatus = 8,\n}\n\nexport enum WebSocketStatus {\n Connecting = 'connecting',\n Connected = 'connected',\n Disconnected = 'disconnected',\n}\n\nexport interface OutgoingMessageInterface {\n encoder: Encoder\n type?: MessageType\n}\n\nexport interface OutgoingMessageArguments {\n documentName: string,\n token: string,\n document: Y.Doc,\n awareness: Awareness,\n clients: number[],\n states: Map,\n update: any,\n payload: string,\n encoder: Encoder,\n}\n\nexport interface Constructable {\n new(...args: any) : T\n}\n\nexport type ConstructableOutgoingMessage =\n Constructable |\n Constructable |\n Constructable |\n Constructable |\n Constructable |\n Constructable\n\nexport type onAuthenticationFailedParameters = {\n reason: string,\n}\n\nexport type onOpenParameters = {\n event: Event,\n}\n\nexport type onMessageParameters = {\n event: MessageEvent,\n message: IncomingMessage,\n}\n\nexport type onOutgoingMessageParameters = {\n message: OutgoingMessage,\n}\n\nexport type onStatusParameters = {\n status: WebSocketStatus,\n}\n\nexport type onSyncedParameters = {\n state: boolean,\n}\n\nexport type onDisconnectParameters = {\n event: CloseEvent,\n}\n\nexport type onCloseParameters = {\n event: CloseEvent,\n}\n\nexport type onAwarenessUpdateParameters = {\n states: StatesArray\n}\n\nexport type onAwarenessChangeParameters = {\n states: StatesArray\n}\n\nexport type onStatelessParameters = {\n payload: string\n}\n\nexport type StatesArray = { clientId: number, [key: string | number]: any }[]\n","import {\n Forbidden, MessageTooBig, Unauthorized, WsReadyStates,\n} from '@hocuspocus/common'\nimport { retry } from '@lifeomic/attempt'\nimport * as mutex from 'lib0/mutex'\nimport * as time from 'lib0/time'\nimport * as url from 'lib0/url'\nimport type { MessageEvent } from 'ws'\nimport { Event } from 'ws'\nimport EventEmitter from './EventEmitter.js'\nimport { HocuspocusProvider } from './HocuspocusProvider.js'\nimport {\n WebSocketStatus,\n onAwarenessChangeParameters, onAwarenessUpdateParameters,\n onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatusParameters,\n} from './types.js'\n\nexport type HocuspocusProviderWebsocketConfiguration =\n Required>\n & Partial\n\nexport interface CompleteHocuspocusProviderWebsocketConfiguration {\n /**\n * URL of your @hocuspocus/server instance\n */\n url: string,\n\n /**\n * Pass `false` to start the connection manually.\n */\n connect: boolean,\n\n /**\n * URL parameters that should be added.\n */\n parameters: { [key: string]: any },\n /**\n * An optional WebSocket polyfill, for example for Node.js\n */\n WebSocketPolyfill: any,\n\n /**\n * Disconnect when no message is received for the defined amount of milliseconds.\n */\n messageReconnectTimeout: number,\n /**\n * The delay between each attempt in milliseconds. You can provide a factor to have the delay grow exponentially.\n */\n delay: number,\n /**\n * The intialDelay is the amount of time to wait before making the first attempt. This option should typically be 0 since you typically want the first attempt to happen immediately.\n */\n initialDelay: number,\n /**\n * The factor option is used to grow the delay exponentially.\n */\n factor: number,\n /**\n * The maximum number of attempts or 0 if there is no limit on number of attempts.\n */\n maxAttempts: number,\n /**\n * minDelay is used to set a lower bound of delay when jitter is enabled. This property has no effect if jitter is disabled.\n */\n minDelay: number,\n /**\n * The maxDelay option is used to set an upper bound for the delay when factor is enabled. A value of 0 can be provided if there should be no upper bound when calculating delay.\n */\n maxDelay: number,\n /**\n * If jitter is true then the calculated delay will be a random integer value between minDelay and the calculated delay for the current iteration.\n */\n jitter: boolean,\n /**\n * A timeout in milliseconds. If timeout is non-zero then a timer is set using setTimeout. If the timeout is triggered then future attempts will be aborted.\n */\n timeout: number,\n onOpen: (data: onOpenParameters) => void,\n onConnect: () => void,\n onMessage: (data: onMessageParameters) => void,\n onOutgoingMessage: (data: onOutgoingMessageParameters) => void,\n onStatus: (data: onStatusParameters) => void,\n onDisconnect: (data: onDisconnectParameters) => void,\n onClose: (data: onCloseParameters) => void,\n onDestroy: () => void,\n onAwarenessUpdate: (data: onAwarenessUpdateParameters) => void,\n onAwarenessChange: (data: onAwarenessChangeParameters) => void,\n /**\n * Don’t output any warnings.\n */\n quiet: boolean,\n}\n\nexport class HocuspocusProviderWebsocket extends EventEmitter {\n private messageQueue: any[] = []\n\n public configuration: CompleteHocuspocusProviderWebsocketConfiguration = {\n url: '',\n // @ts-ignore\n document: undefined,\n // @ts-ignore\n awareness: undefined,\n WebSocketPolyfill: undefined,\n parameters: {},\n connect: true,\n broadcast: true,\n forceSyncInterval: false,\n // TODO: this should depend on awareness.outdatedTime\n messageReconnectTimeout: 30000,\n // 1 second\n delay: 1000,\n // instant\n initialDelay: 0,\n // double the delay each time\n factor: 2,\n // unlimited retries\n maxAttempts: 0,\n // wait at least 1 second\n minDelay: 1000,\n // at least every 30 seconds\n maxDelay: 30000,\n // randomize\n jitter: true,\n // retry forever\n timeout: 0,\n onOpen: () => null,\n onConnect: () => null,\n onMessage: () => null,\n onOutgoingMessage: () => null,\n onStatus: () => null,\n onDisconnect: () => null,\n onClose: () => null,\n onDestroy: () => null,\n onAwarenessUpdate: () => null,\n onAwarenessChange: () => null,\n quiet: false,\n }\n\n subscribedToBroadcastChannel = false\n\n webSocket: WebSocket | null = null\n\n shouldConnect = true\n\n status = WebSocketStatus.Disconnected\n\n lastMessageReceived = 0\n\n mux = mutex.createMutex()\n\n intervals: any = {\n forceSync: null,\n connectionChecker: null,\n }\n\n connectionAttempt: {\n resolve: (value?: any) => void\n reject: (reason?: any) => void\n } | null = null\n\n constructor(configuration: HocuspocusProviderWebsocketConfiguration) {\n super()\n this.setConfiguration(configuration)\n\n this.configuration.WebSocketPolyfill = configuration.WebSocketPolyfill ? configuration.WebSocketPolyfill : WebSocket\n\n this.on('open', this.configuration.onOpen)\n this.on('open', this.onOpen.bind(this))\n this.on('connect', this.configuration.onConnect)\n this.on('message', this.configuration.onMessage)\n this.on('outgoingMessage', this.configuration.onOutgoingMessage)\n this.on('status', this.configuration.onStatus)\n this.on('status', this.onStatus.bind(this))\n this.on('disconnect', this.configuration.onDisconnect)\n this.on('close', this.configuration.onClose)\n this.on('destroy', this.configuration.onDestroy)\n this.on('awarenessUpdate', this.configuration.onAwarenessUpdate)\n this.on('awarenessChange', this.configuration.onAwarenessChange)\n\n this.on('close', this.onClose.bind(this))\n this.on('message', this.onMessage.bind(this))\n\n this.registerEventListeners()\n\n this.intervals.connectionChecker = setInterval(\n this.checkConnection.bind(this),\n this.configuration.messageReconnectTimeout / 10,\n )\n\n if (typeof configuration.connect !== 'undefined') {\n this.shouldConnect = configuration.connect\n }\n\n if (!this.shouldConnect) {\n return\n }\n\n this.connect()\n }\n\n receivedOnOpenPayload?: Event | undefined = undefined\n\n receivedOnStatusPayload?: onStatusParameters | undefined = undefined\n\n async onOpen(event: Event) {\n this.receivedOnOpenPayload = event\n }\n\n async onStatus(data: onStatusParameters) {\n this.receivedOnStatusPayload = data\n }\n\n attach(provider: HocuspocusProvider) {\n if (this.receivedOnOpenPayload) {\n provider.onOpen(this.receivedOnOpenPayload)\n }\n\n if (this.receivedOnStatusPayload) {\n provider.onStatus(this.receivedOnStatusPayload)\n }\n }\n\n detach(provider: HocuspocusProvider) {\n // tell the server to remove the listener\n\n }\n\n public setConfiguration(configuration: Partial = {}): void {\n this.configuration = { ...this.configuration, ...configuration }\n }\n\n boundConnect = this.connect.bind(this)\n\n cancelWebsocketRetry?: () => void\n\n async connect() {\n if (this.status === WebSocketStatus.Connected) {\n return\n }\n\n // Always cancel any previously initiated connection retryer instances\n if (this.cancelWebsocketRetry) {\n this.cancelWebsocketRetry()\n this.cancelWebsocketRetry = undefined\n }\n\n this.shouldConnect = true\n\n const abortableRetry = () => {\n let cancelAttempt = false\n\n const retryPromise = retry(this.createWebSocketConnection.bind(this), {\n delay: this.configuration.delay,\n initialDelay: this.configuration.initialDelay,\n factor: this.configuration.factor,\n maxAttempts: this.configuration.maxAttempts,\n minDelay: this.configuration.minDelay,\n maxDelay: this.configuration.maxDelay,\n jitter: this.configuration.jitter,\n timeout: this.configuration.timeout,\n beforeAttempt: context => {\n if (!this.shouldConnect || cancelAttempt) {\n context.abort()\n }\n },\n }).catch((error: any) => {\n // If we aborted the connection attempt then don’t throw an error\n // ref: https://github.com/lifeomic/attempt/blob/master/src/index.ts#L136\n if (error && error.code !== 'ATTEMPT_ABORTED') {\n throw error\n }\n })\n\n return {\n retryPromise,\n cancelFunc: () => {\n cancelAttempt = true\n },\n }\n }\n\n const { retryPromise, cancelFunc } = abortableRetry()\n this.cancelWebsocketRetry = cancelFunc\n\n return retryPromise\n }\n\n createWebSocketConnection() {\n return new Promise((resolve, reject) => {\n if (this.webSocket) {\n this.messageQueue = []\n this.webSocket.close()\n this.webSocket = null\n }\n\n // Init the WebSocket connection\n const ws = new this.configuration.WebSocketPolyfill(this.url)\n ws.binaryType = 'arraybuffer'\n ws.onmessage = (payload: any) => this.emit('message', payload)\n ws.onclose = (payload: any) => this.emit('close', { event: payload })\n ws.onopen = (payload: any) => this.emit('open', payload)\n ws.onerror = (err: any) => {\n reject(err)\n }\n this.webSocket = ws\n\n // Reset the status\n this.status = WebSocketStatus.Connecting\n this.emit('status', { status: WebSocketStatus.Connecting })\n\n // Store resolve/reject for later use\n this.connectionAttempt = {\n resolve,\n reject,\n }\n })\n }\n\n onMessage(event: MessageEvent) {\n this.resolveConnectionAttempt()\n }\n\n resolveConnectionAttempt() {\n if (this.connectionAttempt) {\n this.connectionAttempt.resolve()\n this.connectionAttempt = null\n\n this.status = WebSocketStatus.Connected\n this.emit('status', { status: WebSocketStatus.Connected })\n this.emit('connect')\n this.messageQueue.forEach(message => this.send(message))\n this.messageQueue = []\n }\n }\n\n stopConnectionAttempt() {\n this.connectionAttempt = null\n }\n\n rejectConnectionAttempt() {\n this.connectionAttempt?.reject()\n this.connectionAttempt = null\n }\n\n checkConnection() {\n // Don’t check the connection when it’s not even established\n if (this.status !== WebSocketStatus.Connected) {\n return\n }\n\n // Don’t close then connection while waiting for the first message\n if (!this.lastMessageReceived) {\n return\n }\n\n // Don’t close the connection when a message was received recently\n if (this.configuration.messageReconnectTimeout >= time.getUnixTime() - this.lastMessageReceived) {\n return\n }\n\n // No message received in a long time, not even your own\n // Awareness updates, which are updated every 15 seconds.\n this.webSocket?.close()\n this.messageQueue = []\n }\n\n registerEventListeners() {\n if (typeof window === 'undefined') {\n return\n }\n\n window.addEventListener('online', this.boundConnect)\n }\n\n // Ensure that the URL always ends with /\n get serverUrl() {\n while (this.configuration.url[this.configuration.url.length - 1] === '/') {\n return this.configuration.url.slice(0, this.configuration.url.length - 1)\n }\n\n return this.configuration.url\n }\n\n get url() {\n const encodedParams = url.encodeQueryParams(this.configuration.parameters)\n\n return `${this.serverUrl}${encodedParams.length === 0 ? '' : `?${encodedParams}`}`\n }\n\n disconnect() {\n this.shouldConnect = false\n\n if (this.webSocket === null) {\n return\n }\n\n try {\n this.webSocket.close()\n this.messageQueue = []\n } catch {\n //\n }\n }\n\n send(message: any) {\n if (this.webSocket?.readyState === WsReadyStates.Open) {\n this.webSocket.send(message)\n } else {\n this.messageQueue.push(message)\n }\n }\n\n onClose({ event }: onCloseParameters) {\n this.webSocket = null\n\n if (this.status === WebSocketStatus.Connected) {\n this.status = WebSocketStatus.Disconnected\n this.emit('status', { status: WebSocketStatus.Disconnected })\n this.emit('disconnect', { event })\n }\n\n if (event.code === Unauthorized.code) {\n if (event.reason === Unauthorized.reason) {\n console.warn('[HocuspocusProvider] An authentication token is required, but you didn’t send one. Try adding a `token` to your HocuspocusProvider configuration. Won’t try again.')\n } else {\n console.warn(`[HocuspocusProvider] Connection closed with status Unauthorized: ${event.reason}`)\n }\n\n this.shouldConnect = false\n }\n\n if (event.code === Forbidden.code) {\n if (!this.configuration.quiet) {\n console.warn('[HocuspocusProvider] The provided authentication token isn’t allowed to connect to this server. Will try again.')\n return // TODO REMOVE ME\n }\n }\n\n if (event.code === MessageTooBig.code) {\n console.warn(`[HocuspocusProvider] Connection closed with status MessageTooBig: ${event.reason}`)\n this.shouldConnect = false\n }\n\n if (this.connectionAttempt) {\n // That connection attempt failed.\n this.rejectConnectionAttempt()\n } else if (this.shouldConnect) {\n // The connection was closed by the server. Let’s just try again.\n this.connect()\n }\n\n // If we’ll reconnect, we’re done for now.\n if (this.shouldConnect) {\n return\n }\n\n // The status is set correctly already.\n if (this.status === WebSocketStatus.Disconnected) {\n return\n }\n\n // Let’s update the connection status.\n this.status = WebSocketStatus.Disconnected\n this.emit('status', { status: WebSocketStatus.Disconnected })\n this.emit('disconnect', { event })\n }\n\n destroy() {\n this.emit('destroy')\n\n if (this.intervals.forceSync) {\n clearInterval(this.intervals.forceSync)\n }\n\n clearInterval(this.intervals.connectionChecker)\n\n // If there is still a connection attempt outstanding then we should stop\n // it before calling disconnect, otherwise it will be rejected in the onClose\n // handler and trigger a retry\n this.stopConnectionAttempt()\n\n this.disconnect()\n\n this.removeAllListeners()\n\n if (typeof window === 'undefined') {\n return\n }\n\n window.removeEventListener('online', this.boundConnect)\n }\n\n}\n","import {\n createDecoder,\n readVarUint,\n readVarUint8Array,\n readVarString,\n Decoder,\n} from 'lib0/decoding'\nimport {\n Encoder,\n createEncoder,\n writeVarUint,\n writeVarUint8Array,\n writeVarString,\n length,\n} from 'lib0/encoding'\nimport { MessageType } from './types.js'\n\nexport class IncomingMessage {\n\n data: any\n\n encoder: Encoder\n\n decoder: Decoder\n\n constructor(data: any) {\n this.data = data\n this.encoder = createEncoder()\n this.decoder = createDecoder(new Uint8Array(this.data))\n }\n\n readVarUint(): MessageType {\n return readVarUint(this.decoder)\n }\n\n readVarString(): string {\n return readVarString(this.decoder)\n }\n\n readVarUint8Array() {\n return readVarUint8Array(this.decoder)\n }\n\n writeVarUint(type: MessageType) {\n return writeVarUint(this.encoder, type)\n }\n\n writeVarString(string: string) {\n return writeVarString(this.encoder, string)\n }\n\n writeVarUint8Array(data: Uint8Array) {\n return writeVarUint8Array(this.encoder, data)\n }\n\n length() {\n return length(this.encoder)\n }\n}\n","/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them.\n * Therefore it is necesarry that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Will not be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n","import { Encoder, createEncoder, toUint8Array } from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments, OutgoingMessageInterface } from './types.js'\n\nexport class OutgoingMessage implements OutgoingMessageInterface {\n encoder: Encoder\n\n type?: MessageType\n\n constructor() {\n this.encoder = createEncoder()\n }\n\n get(args: Partial) {\n return args.encoder\n }\n\n toUint8Array() {\n return toUint8Array(this.encoder)\n }\n}\n","import { readAuthMessage } from '@hocuspocus/common'\nimport { readVarInt, readVarString } from 'lib0/decoding'\nimport * as awarenessProtocol from 'y-protocols/awareness'\nimport { messageYjsSyncStep2, readSyncMessage } from 'y-protocols/sync'\nimport { HocuspocusProvider } from './HocuspocusProvider.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { MessageType } from './types.js'\n\nexport class MessageReceiver {\n\n message: IncomingMessage\n\n broadcasted = false\n\n constructor(message: IncomingMessage) {\n this.message = message\n }\n\n public setBroadcasted(value: boolean) {\n this.broadcasted = value\n\n return this\n }\n\n public apply(provider: HocuspocusProvider, emitSynced: boolean) {\n const { message } = this\n const type = message.readVarUint()\n\n const emptyMessageLength = message.length()\n\n switch (type) {\n case MessageType.Sync:\n this.applySyncMessage(provider, emitSynced)\n break\n\n case MessageType.Awareness:\n this.applyAwarenessMessage(provider)\n break\n\n case MessageType.Auth:\n this.applyAuthMessage(provider)\n break\n\n case MessageType.QueryAwareness:\n this.applyQueryAwarenessMessage(provider)\n break\n\n case MessageType.Stateless:\n provider.receiveStateless(readVarString(message.decoder))\n break\n\n case MessageType.SyncStatus:\n this.applySyncStatusMessage(provider, readVarInt(message.decoder) === 1)\n break\n default:\n throw new Error(`Can’t apply message of unknown type: ${type}`)\n }\n\n // Reply\n if (message.length() > emptyMessageLength + 1) { // length of documentName (considered in emptyMessageLength plus length of yjs sync type, set in applySyncMessage)\n if (this.broadcasted) {\n // TODO: Some weird TypeScript error\n // @ts-ignore\n provider.broadcast(OutgoingMessage, { encoder: message.encoder })\n } else {\n // TODO: Some weird TypeScript error\n // @ts-ignore\n provider.send(OutgoingMessage, { encoder: message.encoder })\n }\n }\n }\n\n private applySyncMessage(provider: HocuspocusProvider, emitSynced: boolean) {\n const { message } = this\n\n message.writeVarUint(MessageType.Sync)\n\n // Apply update\n const syncMessageType = readSyncMessage(\n message.decoder,\n message.encoder,\n provider.document,\n provider,\n )\n\n // Synced once we receive Step2\n if (emitSynced && syncMessageType === messageYjsSyncStep2) {\n provider.synced = true\n }\n }\n\n applySyncStatusMessage(provider: HocuspocusProvider, applied: boolean) {\n if (applied) {\n provider.decrementUnsyncedChanges()\n }\n }\n\n private applyAwarenessMessage(provider: HocuspocusProvider) {\n const { message } = this\n\n awarenessProtocol.applyAwarenessUpdate(\n provider.awareness,\n message.readVarUint8Array(),\n provider,\n )\n }\n\n private applyAuthMessage(provider: HocuspocusProvider) {\n const { message } = this\n\n readAuthMessage(\n message.decoder,\n provider.permissionDeniedHandler.bind(provider),\n provider.authenticatedHandler.bind(provider),\n )\n }\n\n private applyQueryAwarenessMessage(provider: HocuspocusProvider) {\n const { message } = this\n\n message.writeVarUint(MessageType.Awareness)\n message.writeVarUint8Array(\n awarenessProtocol.encodeAwarenessUpdate(\n provider.awareness,\n Array.from(provider.awareness.getStates().keys()),\n ),\n )\n }\n}\n","import { Encoder, toUint8Array } from 'lib0/encoding'\nimport * as bc from 'lib0/broadcastchannel'\nimport { ConstructableOutgoingMessage } from './types.js'\n\nexport class MessageSender {\n\n encoder: Encoder\n\n message: any\n\n constructor(Message: ConstructableOutgoingMessage, args: any = {}) {\n this.message = new Message()\n this.encoder = this.message.get(args)\n }\n\n create() {\n return toUint8Array(this.encoder)\n }\n\n send(webSocket: any) {\n webSocket?.send(this.create())\n }\n\n broadcast(channel: string) {\n bc.publish(channel, this.create())\n }\n}\n","import { writeVarString, writeVarUint } from 'lib0/encoding'\nimport { writeAuthentication } from '@hocuspocus/common'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class AuthenticationMessage extends OutgoingMessage {\n type = MessageType.Auth\n\n description = 'Authentication'\n\n get(args: Partial) {\n if (typeof args.token === 'undefined') {\n throw new Error('The authentication message requires `token` as an argument.')\n }\n\n writeVarString(this.encoder, args.documentName!)\n writeVarUint(this.encoder, this.type)\n writeAuthentication(this.encoder, args.token)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport { encodeAwarenessUpdate } from 'y-protocols/awareness'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class AwarenessMessage extends OutgoingMessage {\n type = MessageType.Awareness\n\n description = 'Awareness states update'\n\n get(args: Partial) {\n if (typeof args.awareness === 'undefined') {\n throw new Error('The awareness message requires awareness as an argument')\n }\n\n if (typeof args.clients === 'undefined') {\n throw new Error('The awareness message requires clients as an argument')\n }\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n\n let awarenessUpdate\n if (args.states === undefined) {\n awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients)\n } else {\n awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients, args.states)\n }\n\n encoding.writeVarUint8Array(this.encoder, awarenessUpdate)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class CloseMessage extends OutgoingMessage {\n type = MessageType.CLOSE\n\n description = 'Ask the server to close the connection'\n\n get(args: Partial) {\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class QueryAwarenessMessage extends OutgoingMessage {\n type = MessageType.QueryAwareness\n\n description = 'Queries awareness states'\n\n get(args: Partial) {\n\n console.log('queryAwareness: writing string docName', args.documentName)\n console.log(this.encoder.cpos)\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n\n return this.encoder\n }\n}\n","import { writeVarString, writeVarUint } from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class StatelessMessage extends OutgoingMessage {\n type = MessageType.Stateless\n\n description = 'A stateless message'\n\n get(args: Partial) {\n writeVarString(this.encoder, args.documentName!)\n writeVarUint(this.encoder, this.type)\n writeVarString(this.encoder, args.payload ?? '')\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport * as syncProtocol from 'y-protocols/sync'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class SyncStepOneMessage extends OutgoingMessage {\n type = MessageType.Sync\n\n description = 'First sync step'\n\n get(args: Partial) {\n if (typeof args.document === 'undefined') {\n throw new Error('The sync step one message requires document as an argument')\n }\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n syncProtocol.writeSyncStep1(this.encoder, args.document)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport * as syncProtocol from 'y-protocols/sync'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class SyncStepTwoMessage extends OutgoingMessage {\n type = MessageType.Sync\n\n description = 'Second sync step'\n\n get(args: Partial) {\n if (typeof args.document === 'undefined') {\n throw new Error('The sync step two message requires document as an argument')\n }\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n syncProtocol.writeSyncStep2(this.encoder, args.document)\n\n return this.encoder\n }\n}\n","import { writeVarString, writeVarUint } from 'lib0/encoding'\nimport { writeUpdate } from 'y-protocols/sync'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class UpdateMessage extends OutgoingMessage {\n type = MessageType.Sync\n\n description = 'A document update'\n\n get(args: Partial) {\n writeVarString(this.encoder, args.documentName!)\n writeVarUint(this.encoder, this.type)\n\n writeUpdate(this.encoder, args.update)\n\n return this.encoder\n }\n}\n","import { awarenessStatesToArray } from '@hocuspocus/common'\nimport * as bc from 'lib0/broadcastchannel'\nimport * as mutex from 'lib0/mutex'\nimport type { CloseEvent, Event, MessageEvent } from 'ws'\nimport { Awareness, removeAwarenessStates } from 'y-protocols/awareness'\nimport * as Y from 'yjs'\nimport EventEmitter from './EventEmitter.js'\nimport {\n CompleteHocuspocusProviderWebsocketConfiguration,\n HocuspocusProviderWebsocket,\n} from './HocuspocusProviderWebsocket.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { MessageReceiver } from './MessageReceiver.js'\nimport { MessageSender } from './MessageSender.js'\nimport { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.js'\nimport { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.js'\nimport { CloseMessage } from './OutgoingMessages/CloseMessage.js'\nimport { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js'\nimport { StatelessMessage } from './OutgoingMessages/StatelessMessage.js'\nimport { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js'\nimport { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js'\nimport { UpdateMessage } from './OutgoingMessages/UpdateMessage.js'\nimport {\n ConstructableOutgoingMessage,\n WebSocketStatus,\n onAuthenticationFailedParameters,\n onAwarenessChangeParameters,\n onAwarenessUpdateParameters,\n onCloseParameters,\n onDisconnectParameters,\n onMessageParameters,\n onOpenParameters,\n onOutgoingMessageParameters, onStatelessParameters,\n onStatusParameters,\n onSyncedParameters,\n} from './types.js'\n\nexport type HocuspocusProviderConfiguration =\n Required>\n & Partial & (\n Required> |\n Required>\n )\n\nexport interface CompleteHocuspocusProviderConfiguration {\n /**\n * The identifier/name of your document\n */\n name: string,\n /**\n * The actual Y.js document\n */\n document: Y.Doc,\n\n /**\n * Pass false to disable broadcasting between browser tabs.\n */\n broadcast: boolean,\n /**\n * An Awareness instance to keep the presence state of all clients.\n */\n awareness: Awareness,\n /**\n * A token that’s sent to the backend for authentication purposes.\n */\n token: string | (() => string) | (() => Promise) | null,\n /**\n * URL parameters that should be added.\n */\n parameters: { [key: string]: any },\n /**\n * Hocuspocus websocket provider\n */\n websocketProvider: HocuspocusProviderWebsocket,\n /**\n * Force syncing the document in the defined interval.\n */\n forceSyncInterval: false | number,\n\n onAuthenticated: () => void,\n onAuthenticationFailed: (data: onAuthenticationFailedParameters) => void,\n onOpen: (data: onOpenParameters) => void,\n onConnect: () => void,\n onMessage: (data: onMessageParameters) => void,\n onOutgoingMessage: (data: onOutgoingMessageParameters) => void,\n onStatus: (data: onStatusParameters) => void,\n onSynced: (data: onSyncedParameters) => void,\n onDisconnect: (data: onDisconnectParameters) => void,\n onClose: (data: onCloseParameters) => void,\n onDestroy: () => void,\n onAwarenessUpdate: (data: onAwarenessUpdateParameters) => void,\n onAwarenessChange: (data: onAwarenessChangeParameters) => void,\n onStateless: (data: onStatelessParameters) => void\n\n /**\n * Don’t output any warnings.\n */\n quiet: boolean,\n}\n\nexport class HocuspocusProvider extends EventEmitter {\n public configuration: CompleteHocuspocusProviderConfiguration = {\n name: '',\n // @ts-ignore\n document: undefined,\n // @ts-ignore\n awareness: undefined,\n token: null,\n parameters: {},\n broadcast: true,\n forceSyncInterval: false,\n onAuthenticated: () => null,\n onAuthenticationFailed: () => null,\n onOpen: () => null,\n onConnect: () => null,\n onMessage: () => null,\n onOutgoingMessage: () => null,\n onStatus: () => null,\n onSynced: () => null,\n onDisconnect: () => null,\n onClose: () => null,\n onDestroy: () => null,\n onAwarenessUpdate: () => null,\n onAwarenessChange: () => null,\n onStateless: () => null,\n quiet: false,\n }\n\n subscribedToBroadcastChannel = false\n\n isSynced = false\n\n unsyncedChanges = 0\n\n status = WebSocketStatus.Disconnected\n\n isAuthenticated = false\n\n authorizedScope: string | undefined = undefined\n\n mux = mutex.createMutex()\n\n intervals: any = {\n forceSync: null,\n }\n\n isConnected = true\n\n constructor(configuration: HocuspocusProviderConfiguration) {\n super()\n this.setConfiguration(configuration)\n\n this.configuration.document = configuration.document ? configuration.document : new Y.Doc()\n this.configuration.awareness = configuration.awareness ? configuration.awareness : new Awareness(this.document)\n\n this.on('open', this.configuration.onOpen)\n this.on('message', this.configuration.onMessage)\n this.on('outgoingMessage', this.configuration.onOutgoingMessage)\n this.on('synced', this.configuration.onSynced)\n this.on('destroy', this.configuration.onDestroy)\n this.on('awarenessUpdate', this.configuration.onAwarenessUpdate)\n this.on('awarenessChange', this.configuration.onAwarenessChange)\n this.on('stateless', this.configuration.onStateless)\n\n this.on('authenticated', this.configuration.onAuthenticated)\n this.on('authenticationFailed', this.configuration.onAuthenticationFailed)\n\n this.configuration.websocketProvider.on('connect', this.configuration.onConnect)\n this.configuration.websocketProvider.on('connect', (e: Event) => this.emit('connect', e))\n\n this.configuration.websocketProvider.on('open', this.onOpen.bind(this))\n this.configuration.websocketProvider.on('open', (e: Event) => this.emit('open', e))\n\n this.configuration.websocketProvider.on('message', this.onMessage.bind(this))\n\n this.configuration.websocketProvider.on('close', this.onClose.bind(this))\n this.configuration.websocketProvider.on('close', this.configuration.onClose)\n this.configuration.websocketProvider.on('close', (e: Event) => this.emit('close', e))\n\n this.configuration.websocketProvider.on('status', this.onStatus.bind(this))\n\n this.configuration.websocketProvider.on('disconnect', this.configuration.onDisconnect)\n this.configuration.websocketProvider.on('disconnect', (e: Event) => this.emit('disconnect', e))\n\n this.configuration.websocketProvider.on('destroy', this.configuration.onDestroy)\n this.configuration.websocketProvider.on('destroy', (e: Event) => this.emit('destroy', e))\n\n this.awareness.on('update', () => {\n this.emit('awarenessUpdate', { states: awarenessStatesToArray(this.awareness.getStates()) })\n })\n\n this.awareness.on('change', () => {\n this.emit('awarenessChange', { states: awarenessStatesToArray(this.awareness.getStates()) })\n })\n\n this.document.on('update', this.documentUpdateHandler.bind(this))\n this.awareness.on('update', this.awarenessUpdateHandler.bind(this))\n this.registerEventListeners()\n\n if (this.configuration.forceSyncInterval) {\n this.intervals.forceSync = setInterval(\n this.forceSync.bind(this),\n this.configuration.forceSyncInterval,\n )\n }\n\n this.configuration.websocketProvider.attach(this)\n }\n\n public onStatus({ status } : onStatusParameters) {\n this.status = status\n\n this.configuration.onStatus({ status })\n this.emit('status', { status })\n }\n\n public setConfiguration(configuration: Partial = {}): void {\n if (!configuration.websocketProvider && (configuration as CompleteHocuspocusProviderWebsocketConfiguration).url) {\n const websocketProviderConfig = configuration as CompleteHocuspocusProviderWebsocketConfiguration\n\n this.configuration.websocketProvider = new HocuspocusProviderWebsocket({\n url: websocketProviderConfig.url,\n parameters: websocketProviderConfig.parameters,\n })\n }\n\n this.configuration = { ...this.configuration, ...configuration }\n }\n\n get document() {\n return this.configuration.document\n }\n\n get awareness() {\n return this.configuration.awareness\n }\n\n get hasUnsyncedChanges(): boolean {\n return this.unsyncedChanges > 0\n }\n\n incrementUnsyncedChanges() {\n this.unsyncedChanges += 1\n this.emit('unsyncedChanges', this.unsyncedChanges)\n }\n\n decrementUnsyncedChanges() {\n this.unsyncedChanges -= 1\n if (this.unsyncedChanges === 0) {\n this.synced = true\n }\n this.emit('unsyncedChanges', this.unsyncedChanges)\n }\n\n forceSync() {\n this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name })\n }\n\n boundBeforeUnload = this.beforeUnload.bind(this)\n\n beforeUnload() {\n removeAwarenessStates(this.awareness, [this.document.clientID], 'window unload')\n }\n\n registerEventListeners() {\n if (typeof window === 'undefined') {\n return\n }\n\n window.addEventListener('beforeunload', this.boundBeforeUnload)\n }\n\n sendStateless(payload: string) {\n this.send(StatelessMessage, { documentName: this.configuration.name, payload })\n }\n\n documentUpdateHandler(update: Uint8Array, origin: any) {\n if (origin === this) {\n return\n }\n\n this.incrementUnsyncedChanges()\n this.send(UpdateMessage, { update, documentName: this.configuration.name }, true)\n }\n\n awarenessUpdateHandler({ added, updated, removed }: any, origin: any) {\n const changedClients = added.concat(updated).concat(removed)\n\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: changedClients,\n documentName: this.configuration.name,\n }, true)\n }\n\n get synced(): boolean {\n return this.isSynced\n }\n\n set synced(state) {\n if (this.isSynced === state) {\n return\n }\n\n this.isSynced = state\n this.emit('synced', { state })\n this.emit('sync', { state })\n }\n\n receiveStateless(payload: string) {\n this.emit('stateless', { payload })\n }\n\n get isAuthenticationRequired(): boolean {\n return !!this.configuration.token && !this.isAuthenticated\n }\n\n // not needed, but provides backward compatibility with e.g. lexicla/yjs\n async connect() {\n return this.configuration.websocketProvider.connect()\n }\n\n disconnect() {\n this.disconnectBroadcastChannel()\n this.configuration.websocketProvider.detach(this)\n }\n\n async onOpen(event: Event) {\n this.isAuthenticated = false\n\n this.emit('open', { event })\n\n if (this.isAuthenticationRequired) {\n this.send(AuthenticationMessage, {\n token: await this.getToken(),\n documentName: this.configuration.name,\n })\n }\n\n this.startSync()\n }\n\n async getToken() {\n if (typeof this.configuration.token === 'function') {\n const token = await this.configuration.token()\n return token\n }\n\n return this.configuration.token\n }\n\n startSync() {\n this.incrementUnsyncedChanges()\n this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name })\n\n if (this.awareness.getLocalState() !== null) {\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: [this.document.clientID],\n documentName: this.configuration.name,\n })\n }\n }\n\n send(message: ConstructableOutgoingMessage, args: any, broadcast = false) {\n if (!this.isConnected) {\n return\n }\n\n if (broadcast) {\n this.mux(() => { this.broadcast(message, args) })\n }\n\n const messageSender = new MessageSender(message, args)\n\n this.emit('outgoingMessage', { message: messageSender.message })\n messageSender.send(this.configuration.websocketProvider)\n }\n\n onMessage(event: MessageEvent) {\n const message = new IncomingMessage(event.data)\n\n const documentName = message.readVarString()\n\n if (documentName !== this.configuration.name) {\n return // message is meant for another provider\n }\n\n message.writeVarString(documentName)\n\n this.emit('message', { event, message: new IncomingMessage(event.data) })\n\n new MessageReceiver(message).apply(this, true)\n }\n\n onClose(event: CloseEvent) {\n this.isAuthenticated = false\n this.synced = false\n\n // update awareness (all users except local left)\n removeAwarenessStates(\n this.awareness,\n Array.from(this.awareness.getStates().keys()).filter(client => client !== this.document.clientID),\n this,\n )\n }\n\n destroy() {\n this.emit('destroy')\n\n if (this.intervals.forceSync) {\n clearInterval(this.intervals.forceSync)\n }\n\n removeAwarenessStates(this.awareness, [this.document.clientID], 'provider destroy')\n\n this.disconnect()\n\n this.awareness.off('update', this.awarenessUpdateHandler)\n this.document.off('update', this.documentUpdateHandler)\n\n this.removeAllListeners()\n\n this.send(CloseMessage, { documentName: this.configuration.name })\n this.isConnected = false\n\n if (typeof window === 'undefined') {\n return\n }\n\n window.removeEventListener('beforeunload', this.boundBeforeUnload)\n }\n\n permissionDeniedHandler(reason: string) {\n this.emit('authenticationFailed', { reason })\n this.isAuthenticated = false\n this.disconnect()\n this.status = WebSocketStatus.Disconnected\n }\n\n authenticatedHandler(scope: string) {\n this.isAuthenticated = true\n this.authorizedScope = scope\n\n this.emit('authenticated')\n this.startSync()\n }\n\n get broadcastChannel() {\n return `${this.configuration.name}`\n }\n\n boundBroadcastChannelSubscriber = this.broadcastChannelSubscriber.bind(this)\n\n broadcastChannelSubscriber(data: ArrayBuffer) {\n this.mux(() => {\n const message = new IncomingMessage(data)\n\n const documentName = message.readVarString()\n\n message.writeVarString(documentName)\n\n new MessageReceiver(message)\n .setBroadcasted(true)\n .apply(this, false)\n })\n }\n\n subscribeToBroadcastChannel() {\n if (!this.subscribedToBroadcastChannel) {\n bc.subscribe(this.broadcastChannel, this.boundBroadcastChannelSubscriber)\n this.subscribedToBroadcastChannel = true\n }\n\n this.mux(() => {\n this.broadcast(SyncStepOneMessage, { document: this.document })\n this.broadcast(SyncStepTwoMessage, { document: this.document })\n this.broadcast(QueryAwarenessMessage, { document: this.document })\n this.broadcast(AwarenessMessage, { awareness: this.awareness, clients: [this.document.clientID], document: this.document })\n })\n }\n\n disconnectBroadcastChannel() {\n // broadcast message with local awareness state set to null (indicating disconnect)\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: [this.document.clientID],\n states: new Map(),\n documentName: this.configuration.name,\n }, true)\n\n if (this.subscribedToBroadcastChannel) {\n bc.unsubscribe(this.broadcastChannel, this.boundBroadcastChannelSubscriber)\n this.subscribedToBroadcastChannel = false\n }\n }\n\n broadcast(Message: ConstructableOutgoingMessage, args?: any) {\n if (!this.configuration.broadcast) {\n return\n }\n\n if (!this.subscribedToBroadcastChannel) {\n return\n }\n\n new MessageSender(Message, args).broadcast(this.broadcastChannel)\n }\n\n setAwarenessField(key: string, value: any) {\n this.awareness.setLocalStateField(key, value)\n }\n}\n","import {\n CompleteHocuspocusProviderWebsocketConfiguration,\n HocuspocusProviderWebsocket, HocuspocusProviderWebsocketConfiguration,\n} from './HocuspocusProviderWebsocket.js'\n\nexport type TiptapCollabProviderWebsocketConfiguration =\n Partial &\n AdditionalTiptapCollabProviderWebsocketConfiguration\n\nexport interface AdditionalTiptapCollabProviderWebsocketConfiguration {\n /**\n * A Hocuspocus Cloud App ID, get one here: https://collab.tiptap.dev\n */\n appId: string,\n}\n\nexport class TiptapCollabProviderWebsocket extends HocuspocusProviderWebsocket {\n constructor(configuration: TiptapCollabProviderWebsocketConfiguration) {\n super({ ...configuration as HocuspocusProviderWebsocketConfiguration, url: `wss://${configuration.appId}.collab.tiptap.cloud` })\n }\n}\n","import {\n HocuspocusProvider,\n HocuspocusProviderConfiguration,\n} from './HocuspocusProvider.js'\n\nimport { TiptapCollabProviderWebsocket } from './TiptapCollabProviderWebsocket.js'\n\nexport type TiptapCollabProviderConfiguration =\n Required> &\n Partial &\n AdditionalTiptapCollabProviderConfiguration\n\nexport interface AdditionalTiptapCollabProviderConfiguration {\n /**\n * A Hocuspocus Cloud App ID, get one here: https://collab.tiptap.dev\n */\n appId: string,\n}\n\nexport class TiptapCollabProvider extends HocuspocusProvider {\n constructor(configuration: TiptapCollabProviderConfiguration) {\n if (!configuration.websocketProvider) {\n configuration.websocketProvider = new TiptapCollabProviderWebsocket({ appId: configuration.appId })\n }\n\n if (!configuration.token) {\n configuration.token = 'notoken' // need to send a token anyway (which will be ignored)\n }\n\n super(configuration as HocuspocusProviderConfiguration)\n }\n}\n"],"names":["create","length","object.length","object.hasProperty","map.create","string.fromCamelCase","conditions.undefinedToNull","storage.varStorage","f.isOneOf","buffer.createUint8ArrayViewFromArrayBuffer","binary.BITS7","binary.BIT8","math.floor","string.utf8TextEncoder","string.encodeUtf8","math.min","math.max","error.create","number.MAX_SAFE_INTEGER","binary.BITS6","binary.BIT7","string.utf8TextDecoder","string.fromCharCode","env.isBrowser","buffer.fromBase64","storage.onChange","buffer.toBase64","buffer.createUint8ArrayFromArrayBuffer","storage.offChange","map.setIfUndefined","set.create","array.from","time.getUnixTime","f.equalityDeep","encoding.createEncoder","encoding.writeVarUint","encoding.writeVarString","encoding.toUint8Array","decoding.createDecoder","decoding.readVarUint","decoding.readVarString","object.map","MessageType","WebSocketStatus","mutex.createMutex","retry","url.encodeQueryParams","WsReadyStates","Unauthorized","Forbidden","MessageTooBig","Y","encoding.writeVarUint8Array","decoding.readVarUint8Array","awarenessProtocol.applyAwarenessUpdate","readAuthMessage","awarenessProtocol.encodeAwarenessUpdate","bc.publish","writeAuthentication","syncProtocol.writeSyncStep1","syncProtocol.writeSyncStep2","awarenessStatesToArray","bc.subscribe","bc.unsubscribe"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.esm.js b/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.esm.js +index e0b6d8d..0e4dfc7 100644 +--- a/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.esm.js ++++ b/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.esm.js +@@ -1,5 +1,5 @@ ++import { WsReadyStates, Unauthorized, Forbidden, MessageTooBig, readAuthMessage, writeAuthentication, awarenessStatesToArray } from '@hocuspocus/common'; + import * as Y from 'yjs'; +-import { readAuthMessage, writeAuthentication, WsReadyStates, Unauthorized, Forbidden, MessageTooBig, awarenessStatesToArray } from '@hocuspocus/common'; + import { retry } from '@lifeomic/attempt'; + + /** +@@ -50,6 +50,22 @@ const setIfUndefined = (map, key, createT) => { + + const create$1 = () => new Set(); + ++/** ++ * Utility module to work with Arrays. ++ * ++ * @module array ++ */ ++ ++/** ++ * Transforms something array-like to an actual Array. ++ * ++ * @function ++ * @template T ++ * @param {ArrayLike|Iterable} arraylike ++ * @return {T} ++ */ ++const from = Array.from; ++ + /** + * Utility module to work with strings. + * +@@ -212,22 +228,6 @@ const onChange = eventHandler => usePolyfill || addEventListener('storage', /** + /* c8 ignore next */ + const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler)); + +-/** +- * Utility module to work with Arrays. +- * +- * @module array +- */ +- +-/** +- * Transforms something array-like to an actual Array. +- * +- * @function +- * @template T +- * @param {ArrayLike|Iterable} arraylike +- * @return {T} +- */ +-const from = Array.from; +- + /** + * Utility functions for working with EcmaScript objects. + * +@@ -375,7 +375,6 @@ const equalityDeep = (a, b) => { + */ + // @ts-ignore + const isOneOf = (value, options) => options.includes(value); +-/* c8 ignore stop */ + + /** + * Isomorphic module to work access the environment (query params, env variables). +@@ -507,7 +506,9 @@ const min = (a, b) => a < b ? a : b; + const max = (a, b) => a > b ? a : b; + + /* eslint-env browser */ ++const BIT7 = 64; + const BIT8 = 128; ++const BITS6 = 63; + const BITS7 = 127; + + /** +@@ -865,6 +866,44 @@ const readVarUint = decoder => { + throw errorUnexpectedEndOfArray + }; + ++/** ++ * Read signed integer (32bit) with variable length. ++ * 1/8th of the storage is used as encoding overhead. ++ * * numbers < 2^7 is stored in one bytlength ++ * * numbers < 2^14 is stored in two bylength ++ * @todo This should probably create the inverse ~num if number is negative - but this would be a breaking change. ++ * ++ * @function ++ * @param {Decoder} decoder ++ * @return {number} An unsigned integer.length ++ */ ++const readVarInt = decoder => { ++ let r = decoder.arr[decoder.pos++]; ++ let num = r & BITS6; ++ let mult = 64; ++ const sign = (r & BIT7) > 0 ? -1 : 1; ++ if ((r & BIT8) === 0) { ++ // don't continue reading ++ return sign * num ++ } ++ const len = decoder.arr.length; ++ while (decoder.pos < len) { ++ r = decoder.arr[decoder.pos++]; ++ // num = num | ((r & binary.BITS7) << len) ++ num = num + (r & BITS7) * mult; ++ mult *= 128; ++ if (r < BIT8) { ++ return sign * num ++ } ++ /* c8 ignore start */ ++ if (num > MAX_SAFE_INTEGER) { ++ throw errorIntegerOutOfRange ++ } ++ /* c8 ignore stop */ ++ } ++ throw errorUnexpectedEndOfArray ++}; ++ + /** + * We don't test this function anymore as we use native decoding/encoding by default now. + * Better not modify this anymore.. +@@ -1112,6 +1151,50 @@ const publish = (room, data, origin = null) => { + c.subs.forEach(sub => sub(data, origin)); + }; + ++/** ++ * Mutual exclude for JavaScript. ++ * ++ * @module mutex ++ */ ++ ++/** ++ * @callback mutex ++ * @param {function():void} cb Only executed when this mutex is not in the current stack ++ * @param {function():void} [elseCb] Executed when this mutex is in the current stack ++ */ ++ ++/** ++ * Creates a mutual exclude function with the following property: ++ * ++ * ```js ++ * const mutex = createMutex() ++ * mutex(() => { ++ * // This function is immediately executed ++ * mutex(() => { ++ * // This function is not executed, as the mutex is already active. ++ * }) ++ * }) ++ * ``` ++ * ++ * @return {mutex} A mutual exclude function ++ * @public ++ */ ++const createMutex = () => { ++ let token = true; ++ return (f, g) => { ++ if (token) { ++ token = false; ++ try { ++ f(); ++ } finally { ++ token = true; ++ } ++ } else if (g !== undefined) { ++ g(); ++ } ++ } ++}; ++ + /** + * Utility module to work with time. + * +@@ -1462,50 +1545,6 @@ const applyAwarenessUpdate = (awareness, update, origin) => { + } + }; + +-/** +- * Mutual exclude for JavaScript. +- * +- * @module mutex +- */ +- +-/** +- * @callback mutex +- * @param {function():void} cb Only executed when this mutex is not in the current stack +- * @param {function():void} [elseCb] Executed when this mutex is in the current stack +- */ +- +-/** +- * Creates a mutual exclude function with the following property: +- * +- * ```js +- * const mutex = createMutex() +- * mutex(() => { +- * // This function is immediately executed +- * mutex(() => { +- * // This function is not executed, as the mutex is already active. +- * }) +- * }) +- * ``` +- * +- * @return {mutex} A mutual exclude function +- * @public +- */ +-const createMutex = () => { +- let token = true; +- return (f, g) => { +- if (token) { +- token = false; +- try { +- f(); +- } finally { +- token = true; +- } +- } else if (g !== undefined) { +- g(); +- } +- } +-}; +- + class EventEmitter { + constructor() { + this.callbacks = {}; +@@ -1541,712 +1580,690 @@ class EventEmitter { + } + } + +-class IncomingMessage { +- constructor(data) { +- this.data = data; +- this.encoder = createEncoder(); +- this.decoder = createDecoder(new Uint8Array(this.data)); +- } +- readVarUint() { +- return readVarUint(this.decoder); +- } +- readVarString() { +- return readVarString(this.decoder); +- } +- readVarUint8Array() { +- return readVarUint8Array(this.decoder); +- } +- writeVarUint(type) { +- return writeVarUint(this.encoder, type); +- } +- writeVarString(string) { +- return writeVarString(this.encoder, string); +- } +- writeVarUint8Array(data) { +- return writeVarUint8Array(this.encoder, data); +- } +- length() { +- return length(this.encoder); +- } +-} +- +-/** +- * @module sync-protocol +- */ +- +-/** +- * @typedef {Map} StateMap +- */ +- +-/** +- * Core Yjs defines two message types: +- * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2. +- * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it +- * received all information from the remote client. +- * +- * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection +- * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both +- * SyncStep2 and SyncDone, it is assured that it is synced to the remote client. +- * +- * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1. +- * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies +- * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the +- * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can +- * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them. +- * Therefore it is necesarry that the client initiates the sync. +- * +- * Construction of a message: +- * [messageType : varUint, message definition..] +- * +- * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol! +- * +- * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer) +- */ +- +-const messageYjsSyncStep1 = 0; +-const messageYjsSyncStep2 = 1; +-const messageYjsUpdate = 2; +- + /** +- * Create a sync step 1 message based on the state of the current shared document. ++ * Utility module to work with urls. + * +- * @param {encoding.Encoder} encoder +- * @param {Y.Doc} doc ++ * @module url + */ +-const writeSyncStep1 = (encoder, doc) => { +- writeVarUint(encoder, messageYjsSyncStep1); +- const sv = Y.encodeStateVector(doc); +- writeVarUint8Array(encoder, sv); +-}; + + /** +- * @param {encoding.Encoder} encoder +- * @param {Y.Doc} doc +- * @param {Uint8Array} [encodedStateVector] ++ * @param {Object} params ++ * @return {string} + */ +-const writeSyncStep2 = (encoder, doc, encodedStateVector) => { +- writeVarUint(encoder, messageYjsSyncStep2); +- writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector)); +-}; ++const encodeQueryParams = params => ++ map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&'); + +-/** +- * Read SyncStep1 message and reply with SyncStep2. +- * +- * @param {decoding.Decoder} decoder The reply to the received message +- * @param {encoding.Encoder} encoder The received message +- * @param {Y.Doc} doc +- */ +-const readSyncStep1 = (decoder, encoder, doc) => +- writeSyncStep2(encoder, doc, readVarUint8Array(decoder)); ++var MessageType; ++(function (MessageType) { ++ MessageType[MessageType["Sync"] = 0] = "Sync"; ++ MessageType[MessageType["Awareness"] = 1] = "Awareness"; ++ MessageType[MessageType["Auth"] = 2] = "Auth"; ++ MessageType[MessageType["QueryAwareness"] = 3] = "QueryAwareness"; ++ MessageType[MessageType["Stateless"] = 5] = "Stateless"; ++ MessageType[MessageType["CLOSE"] = 7] = "CLOSE"; ++ MessageType[MessageType["SyncStatus"] = 8] = "SyncStatus"; ++})(MessageType || (MessageType = {})); ++var WebSocketStatus; ++(function (WebSocketStatus) { ++ WebSocketStatus["Connecting"] = "connecting"; ++ WebSocketStatus["Connected"] = "connected"; ++ WebSocketStatus["Disconnected"] = "disconnected"; ++})(WebSocketStatus || (WebSocketStatus = {})); + +-/** +- * Read and apply Structs and then DeleteStore to a y instance. +- * +- * @param {decoding.Decoder} decoder +- * @param {Y.Doc} doc +- * @param {any} transactionOrigin +- */ +-const readSyncStep2 = (decoder, doc, transactionOrigin) => { +- try { +- Y.applyUpdate(doc, readVarUint8Array(decoder), transactionOrigin); +- } catch (error) { +- // This catches errors that are thrown by event handlers +- console.error('Caught error while handling a Yjs update', error); +- } +-}; +- +-/** +- * @param {encoding.Encoder} encoder +- * @param {Uint8Array} update +- */ +-const writeUpdate = (encoder, update) => { +- writeVarUint(encoder, messageYjsUpdate); +- writeVarUint8Array(encoder, update); +-}; +- +-/** +- * Read and apply Structs and then DeleteStore to a y instance. +- * +- * @param {decoding.Decoder} decoder +- * @param {Y.Doc} doc +- * @param {any} transactionOrigin +- */ +-const readUpdate = readSyncStep2; +- +-/** +- * @param {decoding.Decoder} decoder A message received from another client +- * @param {encoding.Encoder} encoder The reply message. Will not be sent if empty. +- * @param {Y.Doc} doc +- * @param {any} transactionOrigin +- */ +-const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => { +- const messageType = readVarUint(decoder); +- switch (messageType) { +- case messageYjsSyncStep1: +- readSyncStep1(decoder, encoder, doc); +- break +- case messageYjsSyncStep2: +- readSyncStep2(decoder, doc, transactionOrigin); +- break +- case messageYjsUpdate: +- readUpdate(decoder, doc, transactionOrigin); +- break +- default: +- throw new Error('Unknown message type') +- } +- return messageType +-}; +- +-var MessageType; +-(function (MessageType) { +- MessageType[MessageType["Sync"] = 0] = "Sync"; +- MessageType[MessageType["Awareness"] = 1] = "Awareness"; +- MessageType[MessageType["Auth"] = 2] = "Auth"; +- MessageType[MessageType["QueryAwareness"] = 3] = "QueryAwareness"; +- MessageType[MessageType["Stateless"] = 5] = "Stateless"; +- MessageType[MessageType["CLOSE"] = 7] = "CLOSE"; +-})(MessageType || (MessageType = {})); +-var WebSocketStatus; +-(function (WebSocketStatus) { +- WebSocketStatus["Connecting"] = "connecting"; +- WebSocketStatus["Connected"] = "connected"; +- WebSocketStatus["Disconnected"] = "disconnected"; +-})(WebSocketStatus || (WebSocketStatus = {})); +- +-class OutgoingMessage { +- constructor() { +- this.encoder = createEncoder(); ++class HocuspocusProviderWebsocket extends EventEmitter { ++ constructor(configuration) { ++ super(); ++ this.messageQueue = []; ++ this.configuration = { ++ url: '', ++ // @ts-ignore ++ document: undefined, ++ // @ts-ignore ++ awareness: undefined, ++ WebSocketPolyfill: undefined, ++ parameters: {}, ++ connect: true, ++ broadcast: true, ++ forceSyncInterval: false, ++ // TODO: this should depend on awareness.outdatedTime ++ messageReconnectTimeout: 30000, ++ // 1 second ++ delay: 1000, ++ // instant ++ initialDelay: 0, ++ // double the delay each time ++ factor: 2, ++ // unlimited retries ++ maxAttempts: 0, ++ // wait at least 1 second ++ minDelay: 1000, ++ // at least every 30 seconds ++ maxDelay: 30000, ++ // randomize ++ jitter: true, ++ // retry forever ++ timeout: 0, ++ onOpen: () => null, ++ onConnect: () => null, ++ onMessage: () => null, ++ onOutgoingMessage: () => null, ++ onStatus: () => null, ++ onDisconnect: () => null, ++ onClose: () => null, ++ onDestroy: () => null, ++ onAwarenessUpdate: () => null, ++ onAwarenessChange: () => null, ++ quiet: false, ++ }; ++ this.subscribedToBroadcastChannel = false; ++ this.webSocket = null; ++ this.shouldConnect = true; ++ this.status = WebSocketStatus.Disconnected; ++ this.lastMessageReceived = 0; ++ this.mux = createMutex(); ++ this.intervals = { ++ forceSync: null, ++ connectionChecker: null, ++ }; ++ this.connectionAttempt = null; ++ this.receivedOnOpenPayload = undefined; ++ this.receivedOnStatusPayload = undefined; ++ this.boundConnect = this.connect.bind(this); ++ this.setConfiguration(configuration); ++ this.configuration.WebSocketPolyfill = configuration.WebSocketPolyfill ? configuration.WebSocketPolyfill : WebSocket; ++ this.on('open', this.configuration.onOpen); ++ this.on('open', this.onOpen.bind(this)); ++ this.on('connect', this.configuration.onConnect); ++ this.on('message', this.configuration.onMessage); ++ this.on('outgoingMessage', this.configuration.onOutgoingMessage); ++ this.on('status', this.configuration.onStatus); ++ this.on('status', this.onStatus.bind(this)); ++ this.on('disconnect', this.configuration.onDisconnect); ++ this.on('close', this.configuration.onClose); ++ this.on('destroy', this.configuration.onDestroy); ++ this.on('awarenessUpdate', this.configuration.onAwarenessUpdate); ++ this.on('awarenessChange', this.configuration.onAwarenessChange); ++ this.on('close', this.onClose.bind(this)); ++ this.on('message', this.onMessage.bind(this)); ++ this.registerEventListeners(); ++ this.intervals.connectionChecker = setInterval(this.checkConnection.bind(this), this.configuration.messageReconnectTimeout / 10); ++ if (typeof configuration.connect !== 'undefined') { ++ this.shouldConnect = configuration.connect; ++ } ++ if (!this.shouldConnect) { ++ return; ++ } ++ this.connect(); + } +- get(args) { +- return args.encoder; ++ async onOpen(event) { ++ this.receivedOnOpenPayload = event; + } +- toUint8Array() { +- return toUint8Array(this.encoder); ++ async onStatus(data) { ++ this.receivedOnStatusPayload = data; + } +-} +- +-class MessageReceiver { +- constructor(message) { +- this.broadcasted = false; +- this.message = message; ++ attach(provider) { ++ if (this.receivedOnOpenPayload) { ++ provider.onOpen(this.receivedOnOpenPayload); ++ } ++ if (this.receivedOnStatusPayload) { ++ provider.onStatus(this.receivedOnStatusPayload); ++ } + } +- setBroadcasted(value) { +- this.broadcasted = value; +- return this; ++ detach(provider) { ++ // tell the server to remove the listener + } +- apply(provider, emitSynced = true) { +- const { message } = this; +- const type = message.readVarUint(); +- const emptyMessageLength = message.length(); +- switch (type) { +- case MessageType.Sync: +- this.applySyncMessage(provider, emitSynced); +- break; +- case MessageType.Awareness: +- this.applyAwarenessMessage(provider); +- break; +- case MessageType.Auth: +- this.applyAuthMessage(provider); +- break; +- case MessageType.QueryAwareness: +- this.applyQueryAwarenessMessage(provider); +- break; +- case MessageType.Stateless: +- provider.receiveStateless(readVarString(message.decoder)); +- break; +- default: +- throw new Error(`Can’t apply message of unknown type: ${type}`); ++ setConfiguration(configuration = {}) { ++ this.configuration = { ...this.configuration, ...configuration }; ++ } ++ async connect() { ++ if (this.status === WebSocketStatus.Connected) { ++ return; + } +- // Reply +- if (message.length() > emptyMessageLength + 1) { // length of documentName (considered in emptyMessageLength plus length of yjs sync type, set in applySyncMessage) +- if (this.broadcasted) { +- // TODO: Some weird TypeScript error +- // @ts-ignore +- provider.broadcast(OutgoingMessage, { encoder: message.encoder }); ++ // Always cancel any previously initiated connection retryer instances ++ if (this.cancelWebsocketRetry) { ++ this.cancelWebsocketRetry(); ++ this.cancelWebsocketRetry = undefined; ++ } ++ this.shouldConnect = true; ++ const abortableRetry = () => { ++ let cancelAttempt = false; ++ const retryPromise = retry(this.createWebSocketConnection.bind(this), { ++ delay: this.configuration.delay, ++ initialDelay: this.configuration.initialDelay, ++ factor: this.configuration.factor, ++ maxAttempts: this.configuration.maxAttempts, ++ minDelay: this.configuration.minDelay, ++ maxDelay: this.configuration.maxDelay, ++ jitter: this.configuration.jitter, ++ timeout: this.configuration.timeout, ++ beforeAttempt: context => { ++ if (!this.shouldConnect || cancelAttempt) { ++ context.abort(); ++ } ++ }, ++ }).catch((error) => { ++ // If we aborted the connection attempt then don’t throw an error ++ // ref: https://github.com/lifeomic/attempt/blob/master/src/index.ts#L136 ++ if (error && error.code !== 'ATTEMPT_ABORTED') { ++ throw error; ++ } ++ }); ++ return { ++ retryPromise, ++ cancelFunc: () => { ++ cancelAttempt = true; ++ }, ++ }; ++ }; ++ const { retryPromise, cancelFunc } = abortableRetry(); ++ this.cancelWebsocketRetry = cancelFunc; ++ return retryPromise; ++ } ++ createWebSocketConnection() { ++ return new Promise((resolve, reject) => { ++ if (this.webSocket) { ++ this.messageQueue = []; ++ this.webSocket.close(); ++ this.webSocket = null; ++ } ++ // Init the WebSocket connection ++ const ws = new this.configuration.WebSocketPolyfill(this.url); ++ ws.binaryType = 'arraybuffer'; ++ ws.onmessage = (payload) => this.emit('message', payload); ++ ws.onclose = (payload) => this.emit('close', { event: payload }); ++ ws.onopen = (payload) => this.emit('open', payload); ++ ws.onerror = (err) => { ++ reject(err); ++ }; ++ this.webSocket = ws; ++ // Reset the status ++ this.status = WebSocketStatus.Connecting; ++ this.emit('status', { status: WebSocketStatus.Connecting }); ++ // Store resolve/reject for later use ++ this.connectionAttempt = { ++ resolve, ++ reject, ++ }; ++ }); ++ } ++ onMessage(event) { ++ this.resolveConnectionAttempt(); ++ } ++ resolveConnectionAttempt() { ++ if (this.connectionAttempt) { ++ this.connectionAttempt.resolve(); ++ this.connectionAttempt = null; ++ this.status = WebSocketStatus.Connected; ++ this.emit('status', { status: WebSocketStatus.Connected }); ++ this.emit('connect'); ++ this.messageQueue.forEach(message => this.send(message)); ++ this.messageQueue = []; ++ } ++ } ++ stopConnectionAttempt() { ++ this.connectionAttempt = null; ++ } ++ rejectConnectionAttempt() { ++ var _a; ++ (_a = this.connectionAttempt) === null || _a === void 0 ? void 0 : _a.reject(); ++ this.connectionAttempt = null; ++ } ++ checkConnection() { ++ var _a; ++ // Don’t check the connection when it’s not even established ++ if (this.status !== WebSocketStatus.Connected) { ++ return; ++ } ++ // Don’t close then connection while waiting for the first message ++ if (!this.lastMessageReceived) { ++ return; ++ } ++ // Don’t close the connection when a message was received recently ++ if (this.configuration.messageReconnectTimeout >= getUnixTime() - this.lastMessageReceived) { ++ return; ++ } ++ // No message received in a long time, not even your own ++ // Awareness updates, which are updated every 15 seconds. ++ (_a = this.webSocket) === null || _a === void 0 ? void 0 : _a.close(); ++ this.messageQueue = []; ++ } ++ registerEventListeners() { ++ if (typeof window === 'undefined') { ++ return; ++ } ++ window.addEventListener('online', this.boundConnect); ++ } ++ // Ensure that the URL always ends with / ++ get serverUrl() { ++ while (this.configuration.url[this.configuration.url.length - 1] === '/') { ++ return this.configuration.url.slice(0, this.configuration.url.length - 1); ++ } ++ return this.configuration.url; ++ } ++ get url() { ++ const encodedParams = encodeQueryParams(this.configuration.parameters); ++ return `${this.serverUrl}${encodedParams.length === 0 ? '' : `?${encodedParams}`}`; ++ } ++ disconnect() { ++ this.shouldConnect = false; ++ if (this.webSocket === null) { ++ return; ++ } ++ try { ++ this.webSocket.close(); ++ this.messageQueue = []; ++ } ++ catch { ++ // ++ } ++ } ++ send(message) { ++ var _a; ++ if (((_a = this.webSocket) === null || _a === void 0 ? void 0 : _a.readyState) === WsReadyStates.Open) { ++ this.webSocket.send(message); ++ } ++ else { ++ this.messageQueue.push(message); ++ } ++ } ++ onClose({ event }) { ++ this.webSocket = null; ++ if (this.status === WebSocketStatus.Connected) { ++ this.status = WebSocketStatus.Disconnected; ++ this.emit('status', { status: WebSocketStatus.Disconnected }); ++ this.emit('disconnect', { event }); ++ } ++ if (event.code === Unauthorized.code) { ++ if (event.reason === Unauthorized.reason) { ++ console.warn('[HocuspocusProvider] An authentication token is required, but you didn’t send one. Try adding a `token` to your HocuspocusProvider configuration. Won’t try again.'); + } + else { +- // TODO: Some weird TypeScript error +- // @ts-ignore +- provider.send(OutgoingMessage, { encoder: message.encoder }); ++ console.warn(`[HocuspocusProvider] Connection closed with status Unauthorized: ${event.reason}`); + } ++ this.shouldConnect = false; ++ } ++ if (event.code === Forbidden.code) { ++ if (!this.configuration.quiet) { ++ console.warn('[HocuspocusProvider] The provided authentication token isn’t allowed to connect to this server. Will try again.'); ++ return; // TODO REMOVE ME ++ } ++ } ++ if (event.code === MessageTooBig.code) { ++ console.warn(`[HocuspocusProvider] Connection closed with status MessageTooBig: ${event.reason}`); ++ this.shouldConnect = false; ++ } ++ if (this.connectionAttempt) { ++ // That connection attempt failed. ++ this.rejectConnectionAttempt(); ++ } ++ else if (this.shouldConnect) { ++ // The connection was closed by the server. Let’s just try again. ++ this.connect(); ++ } ++ // If we’ll reconnect, we’re done for now. ++ if (this.shouldConnect) { ++ return; ++ } ++ // The status is set correctly already. ++ if (this.status === WebSocketStatus.Disconnected) { ++ return; + } ++ // Let’s update the connection status. ++ this.status = WebSocketStatus.Disconnected; ++ this.emit('status', { status: WebSocketStatus.Disconnected }); ++ this.emit('disconnect', { event }); + } +- applySyncMessage(provider, emitSynced) { +- const { message } = this; +- message.writeVarUint(MessageType.Sync); +- // Apply update +- const syncMessageType = readSyncMessage(message.decoder, message.encoder, provider.document, provider); +- // Synced once we receive Step2 +- if (emitSynced && syncMessageType === messageYjsSyncStep2) { +- provider.synced = true; ++ destroy() { ++ this.emit('destroy'); ++ if (this.intervals.forceSync) { ++ clearInterval(this.intervals.forceSync); + } +- if (syncMessageType === messageYjsUpdate || syncMessageType === messageYjsSyncStep2) { +- if (provider.unsyncedChanges > 0) { +- provider.updateUnsyncedChanges(-1); +- } ++ clearInterval(this.intervals.connectionChecker); ++ // If there is still a connection attempt outstanding then we should stop ++ // it before calling disconnect, otherwise it will be rejected in the onClose ++ // handler and trigger a retry ++ this.stopConnectionAttempt(); ++ this.disconnect(); ++ this.removeAllListeners(); ++ if (typeof window === 'undefined') { ++ return; + } +- } +- applyAwarenessMessage(provider) { +- const { message } = this; +- applyAwarenessUpdate(provider.awareness, message.readVarUint8Array(), provider); +- } +- applyAuthMessage(provider) { +- const { message } = this; +- readAuthMessage(message.decoder, provider.permissionDeniedHandler.bind(provider), provider.authenticatedHandler.bind(provider)); +- } +- applyQueryAwarenessMessage(provider) { +- const { message } = this; +- message.writeVarUint(MessageType.Awareness); +- message.writeVarUint8Array(encodeAwarenessUpdate(provider.awareness, Array.from(provider.awareness.getStates().keys()))); ++ window.removeEventListener('online', this.boundConnect); + } + } + +-class MessageSender { +- constructor(Message, args = {}) { +- this.message = new Message(); +- this.encoder = this.message.get(args); ++class IncomingMessage { ++ constructor(data) { ++ this.data = data; ++ this.encoder = createEncoder(); ++ this.decoder = createDecoder(new Uint8Array(this.data)); + } +- create() { +- return toUint8Array(this.encoder); ++ readVarUint() { ++ return readVarUint(this.decoder); + } +- send(webSocket) { +- webSocket === null || webSocket === void 0 ? void 0 : webSocket.send(this.create()); ++ readVarString() { ++ return readVarString(this.decoder); + } +- broadcast(channel) { +- publish(channel, this.create()); ++ readVarUint8Array() { ++ return readVarUint8Array(this.decoder); + } +-} +- +-class SyncStepOneMessage extends OutgoingMessage { +- constructor() { +- super(...arguments); +- this.type = MessageType.Sync; +- this.description = 'First sync step'; ++ writeVarUint(type) { ++ return writeVarUint(this.encoder, type); + } +- get(args) { +- if (typeof args.document === 'undefined') { +- throw new Error('The sync step one message requires document as an argument'); +- } +- writeVarString(this.encoder, args.documentName); +- writeVarUint(this.encoder, this.type); +- writeSyncStep1(this.encoder, args.document); +- return this.encoder; ++ writeVarString(string) { ++ return writeVarString(this.encoder, string); + } +-} +- +-class SyncStepTwoMessage extends OutgoingMessage { +- constructor() { +- super(...arguments); +- this.type = MessageType.Sync; +- this.description = 'Second sync step'; ++ writeVarUint8Array(data) { ++ return writeVarUint8Array(this.encoder, data); + } +- get(args) { +- if (typeof args.document === 'undefined') { +- throw new Error('The sync step two message requires document as an argument'); +- } +- writeVarString(this.encoder, args.documentName); +- writeVarUint(this.encoder, this.type); +- writeSyncStep2(this.encoder, args.document); +- return this.encoder; ++ length() { ++ return length(this.encoder); + } + } + +-class QueryAwarenessMessage extends OutgoingMessage { +- constructor() { +- super(...arguments); +- this.type = MessageType.QueryAwareness; +- this.description = 'Queries awareness states'; +- } +- get(args) { +- console.log('queryAwareness: writing string docName', args.documentName); +- console.log(this.encoder.cpos); +- writeVarString(this.encoder, args.documentName); +- writeVarUint(this.encoder, this.type); +- return this.encoder; +- } +-} ++/** ++ * @module sync-protocol ++ */ + +-class AuthenticationMessage extends OutgoingMessage { +- constructor() { +- super(...arguments); +- this.type = MessageType.Auth; +- this.description = 'Authentication'; +- } +- get(args) { +- if (typeof args.token === 'undefined') { +- throw new Error('The authentication message requires `token` as an argument.'); +- } +- writeVarString(this.encoder, args.documentName); +- writeVarUint(this.encoder, this.type); +- writeAuthentication(this.encoder, args.token); +- return this.encoder; +- } +-} ++/** ++ * @typedef {Map} StateMap ++ */ + +-class AwarenessMessage extends OutgoingMessage { +- constructor() { +- super(...arguments); +- this.type = MessageType.Awareness; +- this.description = 'Awareness states update'; +- } +- get(args) { +- if (typeof args.awareness === 'undefined') { +- throw new Error('The awareness message requires awareness as an argument'); +- } +- if (typeof args.clients === 'undefined') { +- throw new Error('The awareness message requires clients as an argument'); +- } +- writeVarString(this.encoder, args.documentName); +- writeVarUint(this.encoder, this.type); +- let awarenessUpdate; +- if (args.states === undefined) { +- awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients); +- } +- else { +- awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients, args.states); +- } +- writeVarUint8Array(this.encoder, awarenessUpdate); +- return this.encoder; +- } +-} ++/** ++ * Core Yjs defines two message types: ++ * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2. ++ * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it ++ * received all information from the remote client. ++ * ++ * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection ++ * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both ++ * SyncStep2 and SyncDone, it is assured that it is synced to the remote client. ++ * ++ * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1. ++ * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies ++ * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the ++ * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can ++ * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them. ++ * Therefore it is necesarry that the client initiates the sync. ++ * ++ * Construction of a message: ++ * [messageType : varUint, message definition..] ++ * ++ * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol! ++ * ++ * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer) ++ */ + +-class UpdateMessage extends OutgoingMessage { +- constructor() { +- super(...arguments); +- this.type = MessageType.Sync; +- this.description = 'A document update'; +- } +- get(args) { +- writeVarString(this.encoder, args.documentName); +- writeVarUint(this.encoder, this.type); +- writeUpdate(this.encoder, args.update); +- return this.encoder; +- } +-} ++const messageYjsSyncStep1 = 0; ++const messageYjsSyncStep2 = 1; ++const messageYjsUpdate = 2; ++ ++/** ++ * Create a sync step 1 message based on the state of the current shared document. ++ * ++ * @param {encoding.Encoder} encoder ++ * @param {Y.Doc} doc ++ */ ++const writeSyncStep1 = (encoder, doc) => { ++ writeVarUint(encoder, messageYjsSyncStep1); ++ const sv = Y.encodeStateVector(doc); ++ writeVarUint8Array(encoder, sv); ++}; ++ ++/** ++ * @param {encoding.Encoder} encoder ++ * @param {Y.Doc} doc ++ * @param {Uint8Array} [encodedStateVector] ++ */ ++const writeSyncStep2 = (encoder, doc, encodedStateVector) => { ++ writeVarUint(encoder, messageYjsSyncStep2); ++ writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector)); ++}; ++ ++/** ++ * Read SyncStep1 message and reply with SyncStep2. ++ * ++ * @param {decoding.Decoder} decoder The reply to the received message ++ * @param {encoding.Encoder} encoder The received message ++ * @param {Y.Doc} doc ++ */ ++const readSyncStep1 = (decoder, encoder, doc) => ++ writeSyncStep2(encoder, doc, readVarUint8Array(decoder)); ++ ++/** ++ * Read and apply Structs and then DeleteStore to a y instance. ++ * ++ * @param {decoding.Decoder} decoder ++ * @param {Y.Doc} doc ++ * @param {any} transactionOrigin ++ */ ++const readSyncStep2 = (decoder, doc, transactionOrigin) => { ++ try { ++ Y.applyUpdate(doc, readVarUint8Array(decoder), transactionOrigin); ++ } catch (error) { ++ // This catches errors that are thrown by event handlers ++ console.error('Caught error while handling a Yjs update', error); ++ } ++}; ++ ++/** ++ * @param {encoding.Encoder} encoder ++ * @param {Uint8Array} update ++ */ ++const writeUpdate = (encoder, update) => { ++ writeVarUint(encoder, messageYjsUpdate); ++ writeVarUint8Array(encoder, update); ++}; + + /** +- * Utility module to work with urls. ++ * Read and apply Structs and then DeleteStore to a y instance. + * +- * @module url ++ * @param {decoding.Decoder} decoder ++ * @param {Y.Doc} doc ++ * @param {any} transactionOrigin + */ ++const readUpdate = readSyncStep2; + + /** +- * @param {Object} params +- * @return {string} ++ * @param {decoding.Decoder} decoder A message received from another client ++ * @param {encoding.Encoder} encoder The reply message. Will not be sent if empty. ++ * @param {Y.Doc} doc ++ * @param {any} transactionOrigin + */ +-const encodeQueryParams = params => +- map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&'); ++const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => { ++ const messageType = readVarUint(decoder); ++ switch (messageType) { ++ case messageYjsSyncStep1: ++ readSyncStep1(decoder, encoder, doc); ++ break ++ case messageYjsSyncStep2: ++ readSyncStep2(decoder, doc, transactionOrigin); ++ break ++ case messageYjsUpdate: ++ readUpdate(decoder, doc, transactionOrigin); ++ break ++ default: ++ throw new Error('Unknown message type') ++ } ++ return messageType ++}; + +-class HocuspocusProviderWebsocket extends EventEmitter { +- constructor(configuration) { +- super(); +- this.configuration = { +- url: '', +- // @ts-ignore +- document: undefined, +- // @ts-ignore +- awareness: undefined, +- WebSocketPolyfill: undefined, +- parameters: {}, +- connect: true, +- broadcast: true, +- forceSyncInterval: false, +- // TODO: this should depend on awareness.outdatedTime +- messageReconnectTimeout: 30000, +- // 1 second +- delay: 1000, +- // instant +- initialDelay: 0, +- // double the delay each time +- factor: 2, +- // unlimited retries +- maxAttempts: 0, +- // wait at least 1 second +- minDelay: 1000, +- // at least every 30 seconds +- maxDelay: 30000, +- // randomize +- jitter: true, +- // retry forever +- timeout: 0, +- onOpen: () => null, +- onConnect: () => null, +- onMessage: () => null, +- onOutgoingMessage: () => null, +- onStatus: () => null, +- onDisconnect: () => null, +- onClose: () => null, +- onDestroy: () => null, +- onAwarenessUpdate: () => null, +- onAwarenessChange: () => null, +- quiet: false, +- }; +- this.subscribedToBroadcastChannel = false; +- this.webSocket = null; +- this.shouldConnect = true; +- this.status = WebSocketStatus.Disconnected; +- this.lastMessageReceived = 0; +- this.mux = createMutex(); +- this.intervals = { +- forceSync: null, +- connectionChecker: null, +- }; +- this.connectionAttempt = null; +- this.receivedOnOpenPayload = undefined; +- this.receivedOnStatusPayload = undefined; +- this.boundConnect = this.connect.bind(this); +- this.setConfiguration(configuration); +- this.configuration.WebSocketPolyfill = configuration.WebSocketPolyfill ? configuration.WebSocketPolyfill : WebSocket; +- this.on('open', this.configuration.onOpen); +- this.on('open', this.onOpen.bind(this)); +- this.on('connect', this.configuration.onConnect); +- this.on('message', this.configuration.onMessage); +- this.on('outgoingMessage', this.configuration.onOutgoingMessage); +- this.on('status', this.configuration.onStatus); +- this.on('status', this.onStatus.bind(this)); +- this.on('disconnect', this.configuration.onDisconnect); +- this.on('close', this.configuration.onClose); +- this.on('destroy', this.configuration.onDestroy); +- this.on('awarenessUpdate', this.configuration.onAwarenessUpdate); +- this.on('awarenessChange', this.configuration.onAwarenessChange); +- this.on('close', this.onClose.bind(this)); +- this.on('message', this.onMessage.bind(this)); +- this.registerEventListeners(); +- this.intervals.connectionChecker = setInterval(this.checkConnection.bind(this), this.configuration.messageReconnectTimeout / 10); +- if (typeof configuration.connect !== 'undefined') { +- this.shouldConnect = configuration.connect; +- } +- if (!this.shouldConnect) { +- return; +- } +- this.connect(); +- } +- async onOpen(event) { +- this.receivedOnOpenPayload = event; ++class OutgoingMessage { ++ constructor() { ++ this.encoder = createEncoder(); + } +- async onStatus(data) { +- this.receivedOnStatusPayload = data; ++ get(args) { ++ return args.encoder; + } +- attach(provider) { +- if (this.receivedOnOpenPayload) { +- provider.onOpen(this.receivedOnOpenPayload); +- } +- if (this.receivedOnStatusPayload) { +- provider.onStatus(this.receivedOnStatusPayload); +- } ++ toUint8Array() { ++ return toUint8Array(this.encoder); + } +- detach(provider) { +- // tell the server to remove the listener ++} ++ ++class MessageReceiver { ++ constructor(message) { ++ this.broadcasted = false; ++ this.message = message; + } +- setConfiguration(configuration = {}) { +- this.configuration = { ...this.configuration, ...configuration }; ++ setBroadcasted(value) { ++ this.broadcasted = value; ++ return this; + } +- async connect() { +- if (this.status === WebSocketStatus.Connected) { +- return; +- } +- // Always cancel any previously initiated connection retryer instances +- if (this.cancelWebsocketRetry) { +- this.cancelWebsocketRetry(); +- this.cancelWebsocketRetry = undefined; ++ apply(provider, emitSynced) { ++ const { message } = this; ++ const type = message.readVarUint(); ++ const emptyMessageLength = message.length(); ++ switch (type) { ++ case MessageType.Sync: ++ this.applySyncMessage(provider, emitSynced); ++ break; ++ case MessageType.Awareness: ++ this.applyAwarenessMessage(provider); ++ break; ++ case MessageType.Auth: ++ this.applyAuthMessage(provider); ++ break; ++ case MessageType.QueryAwareness: ++ this.applyQueryAwarenessMessage(provider); ++ break; ++ case MessageType.Stateless: ++ provider.receiveStateless(readVarString(message.decoder)); ++ break; ++ case MessageType.SyncStatus: ++ this.applySyncStatusMessage(provider, readVarInt(message.decoder) === 1); ++ break; ++ default: ++ throw new Error(`Can’t apply message of unknown type: ${type}`); + } +- this.shouldConnect = true; +- const abortableRetry = () => { +- let cancelAttempt = false; +- const retryPromise = retry(this.createWebSocketConnection.bind(this), { +- delay: this.configuration.delay, +- initialDelay: this.configuration.initialDelay, +- factor: this.configuration.factor, +- maxAttempts: this.configuration.maxAttempts, +- minDelay: this.configuration.minDelay, +- maxDelay: this.configuration.maxDelay, +- jitter: this.configuration.jitter, +- timeout: this.configuration.timeout, +- beforeAttempt: context => { +- if (!this.shouldConnect || cancelAttempt) { +- context.abort(); +- } +- }, +- }).catch((error) => { +- // If we aborted the connection attempt then don’t throw an error +- // ref: https://github.com/lifeomic/attempt/blob/master/src/index.ts#L136 +- if (error && error.code !== 'ATTEMPT_ABORTED') { +- throw error; +- } +- }); +- return { +- retryPromise, +- cancelFunc: () => { +- cancelAttempt = true; +- }, +- }; +- }; +- const { retryPromise, cancelFunc } = abortableRetry(); +- this.cancelWebsocketRetry = cancelFunc; +- return retryPromise; +- } +- createWebSocketConnection() { +- return new Promise((resolve, reject) => { +- if (this.webSocket) { +- this.webSocket.close(); +- this.webSocket = null; ++ // Reply ++ if (message.length() > emptyMessageLength + 1) { // length of documentName (considered in emptyMessageLength plus length of yjs sync type, set in applySyncMessage) ++ if (this.broadcasted) { ++ // TODO: Some weird TypeScript error ++ // @ts-ignore ++ provider.broadcast(OutgoingMessage, { encoder: message.encoder }); + } +- // Init the WebSocket connection +- const ws = new this.configuration.WebSocketPolyfill(this.url); +- ws.binaryType = 'arraybuffer'; +- ws.onmessage = (payload) => this.emit('message', payload); +- ws.onclose = (payload) => this.emit('close', { event: payload }); +- ws.onopen = (payload) => this.emit('open', payload); +- ws.onerror = (err) => { +- reject(err); +- }; +- this.webSocket = ws; +- // Reset the status +- this.status = WebSocketStatus.Connecting; +- this.emit('status', { status: WebSocketStatus.Connecting }); +- // Store resolve/reject for later use +- this.connectionAttempt = { +- resolve, +- reject, +- }; +- }); ++ else { ++ // TODO: Some weird TypeScript error ++ // @ts-ignore ++ provider.send(OutgoingMessage, { encoder: message.encoder }); ++ } ++ } + } +- onMessage(event) { +- this.resolveConnectionAttempt(); ++ applySyncMessage(provider, emitSynced) { ++ const { message } = this; ++ message.writeVarUint(MessageType.Sync); ++ // Apply update ++ const syncMessageType = readSyncMessage(message.decoder, message.encoder, provider.document, provider); ++ // Synced once we receive Step2 ++ if (emitSynced && syncMessageType === messageYjsSyncStep2) { ++ provider.synced = true; ++ } + } +- resolveConnectionAttempt() { +- if (this.connectionAttempt) { +- this.connectionAttempt.resolve(); +- this.connectionAttempt = null; +- this.status = WebSocketStatus.Connected; +- this.emit('status', { status: WebSocketStatus.Connected }); +- this.emit('connect'); ++ applySyncStatusMessage(provider, applied) { ++ if (applied) { ++ provider.decrementUnsyncedChanges(); + } + } +- stopConnectionAttempt() { +- this.connectionAttempt = null; ++ applyAwarenessMessage(provider) { ++ const { message } = this; ++ applyAwarenessUpdate(provider.awareness, message.readVarUint8Array(), provider); + } +- rejectConnectionAttempt() { +- var _a; +- (_a = this.connectionAttempt) === null || _a === void 0 ? void 0 : _a.reject(); +- this.connectionAttempt = null; ++ applyAuthMessage(provider) { ++ const { message } = this; ++ readAuthMessage(message.decoder, provider.permissionDeniedHandler.bind(provider), provider.authenticatedHandler.bind(provider)); + } +- checkConnection() { +- var _a; +- // Don’t check the connection when it’s not even established +- if (this.status !== WebSocketStatus.Connected) { +- return; +- } +- // Don’t close then connection while waiting for the first message +- if (!this.lastMessageReceived) { +- return; +- } +- // Don’t close the connection when a message was received recently +- if (this.configuration.messageReconnectTimeout >= getUnixTime() - this.lastMessageReceived) { +- return; +- } +- // No message received in a long time, not even your own +- // Awareness updates, which are updated every 15 seconds. +- (_a = this.webSocket) === null || _a === void 0 ? void 0 : _a.close(); ++ applyQueryAwarenessMessage(provider) { ++ const { message } = this; ++ message.writeVarUint(MessageType.Awareness); ++ message.writeVarUint8Array(encodeAwarenessUpdate(provider.awareness, Array.from(provider.awareness.getStates().keys()))); + } +- registerEventListeners() { +- if (typeof window === 'undefined') { +- return; +- } +- window.addEventListener('online', this.boundConnect); ++} ++ ++class MessageSender { ++ constructor(Message, args = {}) { ++ this.message = new Message(); ++ this.encoder = this.message.get(args); + } +- // Ensure that the URL always ends with / +- get serverUrl() { +- while (this.configuration.url[this.configuration.url.length - 1] === '/') { +- return this.configuration.url.slice(0, this.configuration.url.length - 1); +- } +- return this.configuration.url; ++ create() { ++ return toUint8Array(this.encoder); + } +- get url() { +- const encodedParams = encodeQueryParams(this.configuration.parameters); +- return `${this.serverUrl}${encodedParams.length === 0 ? '' : `?${encodedParams}`}`; ++ send(webSocket) { ++ webSocket === null || webSocket === void 0 ? void 0 : webSocket.send(this.create()); + } +- disconnect() { +- this.shouldConnect = false; +- if (this.webSocket === null) { +- return; +- } +- try { +- this.webSocket.close(); +- } +- catch { +- // +- } ++ broadcast(channel) { ++ publish(channel, this.create()); + } +- send(message) { +- var _a; +- if (((_a = this.webSocket) === null || _a === void 0 ? void 0 : _a.readyState) === WsReadyStates.Open) { +- this.webSocket.send(message); +- } ++} ++ ++class AuthenticationMessage extends OutgoingMessage { ++ constructor() { ++ super(...arguments); ++ this.type = MessageType.Auth; ++ this.description = 'Authentication'; + } +- onClose({ event }) { +- this.webSocket = null; +- if (this.status === WebSocketStatus.Connected) { +- this.status = WebSocketStatus.Disconnected; +- this.emit('status', { status: WebSocketStatus.Disconnected }); +- this.emit('disconnect', { event }); +- } +- if (event.code === Unauthorized.code) { +- if (event.reason === Unauthorized.reason) { +- console.warn('[HocuspocusProvider] An authentication token is required, but you didn’t send one. Try adding a `token` to your HocuspocusProvider configuration. Won’t try again.'); +- } +- else { +- console.warn(`[HocuspocusProvider] Connection closed with status Unauthorized: ${event.reason}`); +- } +- this.shouldConnect = false; +- } +- if (event.code === Forbidden.code) { +- if (!this.configuration.quiet) { +- console.warn('[HocuspocusProvider] The provided authentication token isn’t allowed to connect to this server. Will try again.'); +- return; // TODO REMOVE ME +- } +- } +- if (event.code === MessageTooBig.code) { +- console.warn(`[HocuspocusProvider] Connection closed with status MessageTooBig: ${event.reason}`); +- this.shouldConnect = false; ++ get(args) { ++ if (typeof args.token === 'undefined') { ++ throw new Error('The authentication message requires `token` as an argument.'); + } +- if (this.connectionAttempt) { +- // That connection attempt failed. +- this.rejectConnectionAttempt(); ++ writeVarString(this.encoder, args.documentName); ++ writeVarUint(this.encoder, this.type); ++ writeAuthentication(this.encoder, args.token); ++ return this.encoder; ++ } ++} ++ ++class AwarenessMessage extends OutgoingMessage { ++ constructor() { ++ super(...arguments); ++ this.type = MessageType.Awareness; ++ this.description = 'Awareness states update'; ++ } ++ get(args) { ++ if (typeof args.awareness === 'undefined') { ++ throw new Error('The awareness message requires awareness as an argument'); + } +- else if (this.shouldConnect) { +- // The connection was closed by the server. Let’s just try again. +- this.connect(); ++ if (typeof args.clients === 'undefined') { ++ throw new Error('The awareness message requires clients as an argument'); + } +- // If we’ll reconnect, we’re done for now. +- if (this.shouldConnect) { +- return; ++ writeVarString(this.encoder, args.documentName); ++ writeVarUint(this.encoder, this.type); ++ let awarenessUpdate; ++ if (args.states === undefined) { ++ awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients); + } +- // The status is set correctly already. +- if (this.status === WebSocketStatus.Disconnected) { +- return; ++ else { ++ awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients, args.states); + } +- // Let’s update the connection status. +- this.status = WebSocketStatus.Disconnected; +- this.emit('status', { status: WebSocketStatus.Disconnected }); +- this.emit('disconnect', { event }); ++ writeVarUint8Array(this.encoder, awarenessUpdate); ++ return this.encoder; + } +- destroy() { +- this.emit('destroy'); +- if (this.intervals.forceSync) { +- clearInterval(this.intervals.forceSync); +- } +- clearInterval(this.intervals.connectionChecker); +- // If there is still a connection attempt outstanding then we should stop +- // it before calling disconnect, otherwise it will be rejected in the onClose +- // handler and trigger a retry +- this.stopConnectionAttempt(); +- this.disconnect(); +- this.removeAllListeners(); +- if (typeof window === 'undefined') { +- return; +- } +- window.removeEventListener('online', this.boundConnect); ++} ++ ++class CloseMessage extends OutgoingMessage { ++ constructor() { ++ super(...arguments); ++ this.type = MessageType.CLOSE; ++ this.description = 'Ask the server to close the connection'; ++ } ++ get(args) { ++ writeVarString(this.encoder, args.documentName); ++ writeVarUint(this.encoder, this.type); ++ return this.encoder; ++ } ++} ++ ++class QueryAwarenessMessage extends OutgoingMessage { ++ constructor() { ++ super(...arguments); ++ this.type = MessageType.QueryAwareness; ++ this.description = 'Queries awareness states'; ++ } ++ get(args) { ++ console.log('queryAwareness: writing string docName', args.documentName); ++ console.log(this.encoder.cpos); ++ writeVarString(this.encoder, args.documentName); ++ writeVarUint(this.encoder, this.type); ++ return this.encoder; + } + } + +@@ -2265,15 +2282,50 @@ class StatelessMessage extends OutgoingMessage { + } + } + +-class CloseMessage extends OutgoingMessage { ++class SyncStepOneMessage extends OutgoingMessage { + constructor() { + super(...arguments); +- this.type = MessageType.CLOSE; +- this.description = 'Ask the server to close the connection'; ++ this.type = MessageType.Sync; ++ this.description = 'First sync step'; ++ } ++ get(args) { ++ if (typeof args.document === 'undefined') { ++ throw new Error('The sync step one message requires document as an argument'); ++ } ++ writeVarString(this.encoder, args.documentName); ++ writeVarUint(this.encoder, this.type); ++ writeSyncStep1(this.encoder, args.document); ++ return this.encoder; ++ } ++} ++ ++class SyncStepTwoMessage extends OutgoingMessage { ++ constructor() { ++ super(...arguments); ++ this.type = MessageType.Sync; ++ this.description = 'Second sync step'; ++ } ++ get(args) { ++ if (typeof args.document === 'undefined') { ++ throw new Error('The sync step two message requires document as an argument'); ++ } ++ writeVarString(this.encoder, args.documentName); ++ writeVarUint(this.encoder, this.type); ++ writeSyncStep2(this.encoder, args.document); ++ return this.encoder; ++ } ++} ++ ++class UpdateMessage extends OutgoingMessage { ++ constructor() { ++ super(...arguments); ++ this.type = MessageType.Sync; ++ this.description = 'A document update'; + } + get(args) { + writeVarString(this.encoder, args.documentName); + writeVarUint(this.encoder, this.type); ++ writeUpdate(this.encoder, args.update); + return this.encoder; + } + } +@@ -2384,8 +2436,15 @@ class HocuspocusProvider extends EventEmitter { + get hasUnsyncedChanges() { + return this.unsyncedChanges > 0; + } +- updateUnsyncedChanges(unsyncedChanges = 0) { +- this.unsyncedChanges += unsyncedChanges; ++ incrementUnsyncedChanges() { ++ this.unsyncedChanges += 1; ++ this.emit('unsyncedChanges', this.unsyncedChanges); ++ } ++ decrementUnsyncedChanges() { ++ this.unsyncedChanges -= 1; ++ if (this.unsyncedChanges === 0) { ++ this.synced = true; ++ } + this.emit('unsyncedChanges', this.unsyncedChanges); + } + forceSync() { +@@ -2407,7 +2466,7 @@ class HocuspocusProvider extends EventEmitter { + if (origin === this) { + return; + } +- this.updateUnsyncedChanges(1); ++ this.incrementUnsyncedChanges(); + this.send(UpdateMessage, { update, documentName: this.configuration.name }, true); + } + awarenessUpdateHandler({ added, updated, removed }, origin) { +@@ -2425,9 +2484,6 @@ class HocuspocusProvider extends EventEmitter { + if (this.isSynced === state) { + return; + } +- if (state && this.unsyncedChanges > 0) { +- this.updateUnsyncedChanges(-1 * this.unsyncedChanges); +- } + this.isSynced = state; + this.emit('synced', { state }); + this.emit('sync', { state }); +@@ -2465,6 +2521,7 @@ class HocuspocusProvider extends EventEmitter { + return this.configuration.token; + } + startSync() { ++ this.incrementUnsyncedChanges(); + this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name }); + if (this.awareness.getLocalState() !== null) { + this.send(AwarenessMessage, { +@@ -2475,8 +2532,9 @@ class HocuspocusProvider extends EventEmitter { + } + } + send(message, args, broadcast = false) { +- if (!this.isConnected) ++ if (!this.isConnected) { + return; ++ } + if (broadcast) { + this.mux(() => { this.broadcast(message, args); }); + } +@@ -2492,7 +2550,7 @@ class HocuspocusProvider extends EventEmitter { + } + message.writeVarString(documentName); + this.emit('message', { event, message: new IncomingMessage(event.data) }); +- new MessageReceiver(message).apply(this); ++ new MessageReceiver(message).apply(this, true); + } + onClose(event) { + this.isAuthenticated = false; +diff --git a/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.esm.js.map b/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.esm.js.map +index a18b6bc..8578e37 100644 +--- a/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.esm.js.map ++++ b/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.esm.js.map +@@ -1 +1 @@ +-{"version":3,"file":"hocuspocus-provider.esm.js","sources":["../../../node_modules/lib0/map.js","../../../node_modules/lib0/set.js","../../../node_modules/lib0/string.js","../../../node_modules/lib0/conditions.js","../../../node_modules/lib0/storage.js","../../../node_modules/lib0/array.js","../../../node_modules/lib0/object.js","../../../node_modules/lib0/function.js","../../../node_modules/lib0/environment.js","../../../node_modules/lib0/math.js","../../../node_modules/lib0/binary.js","../../../node_modules/lib0/number.js","../../../node_modules/lib0/encoding.js","../../../node_modules/lib0/error.js","../../../node_modules/lib0/decoding.js","../../../node_modules/lib0/buffer.js","../../../node_modules/lib0/broadcastchannel.js","../../../node_modules/lib0/time.js","../../../node_modules/lib0/observable.js","../../../node_modules/y-protocols/awareness.js","../../../node_modules/lib0/mutex.js","../src/EventEmitter.ts","../src/IncomingMessage.ts","../../../node_modules/y-protocols/sync.js","../src/types.ts","../src/OutgoingMessage.ts","../src/MessageReceiver.ts","../src/MessageSender.ts","../src/OutgoingMessages/SyncStepOneMessage.ts","../src/OutgoingMessages/SyncStepTwoMessage.ts","../src/OutgoingMessages/QueryAwarenessMessage.ts","../src/OutgoingMessages/AuthenticationMessage.ts","../src/OutgoingMessages/AwarenessMessage.ts","../src/OutgoingMessages/UpdateMessage.ts","../../../node_modules/lib0/url.js","../src/HocuspocusProviderWebsocket.ts","../src/OutgoingMessages/StatelessMessage.ts","../src/OutgoingMessages/CloseMessage.ts","../src/HocuspocusProvider.ts","../src/TiptapCollabProviderWebsocket.ts","../src/TiptapCollabProvider.ts"],"sourcesContent":["/**\n * Utility module to work with key-value stores.\n *\n * @module map\n */\n\n/**\n * Creates a new Map instance.\n *\n * @function\n * @return {Map}\n *\n * @function\n */\nexport const create = () => new Map()\n\n/**\n * Copy a Map object into a fresh Map object.\n *\n * @function\n * @template X,Y\n * @param {Map} m\n * @return {Map}\n */\nexport const copy = m => {\n const r = create()\n m.forEach((v, k) => { r.set(k, v) })\n return r\n}\n\n/**\n * Get map property. Create T if property is undefined and set T on map.\n *\n * ```js\n * const listeners = map.setIfUndefined(events, 'eventName', set.create)\n * listeners.add(listener)\n * ```\n *\n * @function\n * @template V,K\n * @template {Map} MAP\n * @param {MAP} map\n * @param {K} key\n * @param {function():V} createT\n * @return {V}\n */\nexport const setIfUndefined = (map, key, createT) => {\n let set = map.get(key)\n if (set === undefined) {\n map.set(key, set = createT())\n }\n return set\n}\n\n/**\n * Creates an Array and populates it with the content of all key-value pairs using the `f(value, key)` function.\n *\n * @function\n * @template K\n * @template V\n * @template R\n * @param {Map} m\n * @param {function(V,K):R} f\n * @return {Array}\n */\nexport const map = (m, f) => {\n const res = []\n for (const [key, value] of m) {\n res.push(f(value, key))\n }\n return res\n}\n\n/**\n * Tests whether any key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @todo should rename to some - similarly to Array.some\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const any = (m, f) => {\n for (const [key, value] of m) {\n if (f(value, key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * Tests whether all key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const all = (m, f) => {\n for (const [key, value] of m) {\n if (!f(value, key)) {\n return false\n }\n }\n return true\n}\n","/**\n * Utility module to work with sets.\n *\n * @module set\n */\n\nexport const create = () => new Set()\n\n/**\n * @template T\n * @param {Set} set\n * @return {Array}\n */\nexport const toArray = set => Array.from(set)\n\n/**\n * @template T\n * @param {Set} set\n * @return {T}\n */\nexport const first = set =>\n set.values().next().value || undefined\n\n/**\n * @template T\n * @param {Iterable} entries\n * @return {Set}\n */\nexport const from = entries => new Set(entries)\n","/**\n * Utility module to work with strings.\n *\n * @module string\n */\n\nexport const fromCharCode = String.fromCharCode\nexport const fromCodePoint = String.fromCodePoint\n\n/**\n * @param {string} s\n * @return {string}\n */\nconst toLowerCase = s => s.toLowerCase()\n\nconst trimLeftRegex = /^\\s*/g\n\n/**\n * @param {string} s\n * @return {string}\n */\nexport const trimLeft = s => s.replace(trimLeftRegex, '')\n\nconst fromCamelCaseRegex = /([A-Z])/g\n\n/**\n * @param {string} s\n * @param {string} separator\n * @return {string}\n */\nexport const fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, match => `${separator}${toLowerCase(match)}`))\n\n/**\n * Compute the utf8ByteLength\n * @param {string} str\n * @return {number}\n */\nexport const utf8ByteLength = str => unescape(encodeURIComponent(str)).length\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Polyfill = str => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n const buf = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n buf[i] = /** @type {number} */ (encodedString.codePointAt(i))\n }\n return buf\n}\n\n/* c8 ignore next */\nexport const utf8TextEncoder = /** @type {TextEncoder} */ (typeof TextEncoder !== 'undefined' ? new TextEncoder() : null)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Native = str => utf8TextEncoder.encode(str)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nexport const encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Polyfill = buf => {\n let remainingLen = buf.length\n let encodedString = ''\n let bufPos = 0\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n const bytes = buf.subarray(bufPos, bufPos + nextLen)\n bufPos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n return decodeURIComponent(escape(encodedString))\n}\n\n/* c8 ignore next */\nexport let utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })\n\n/* c8 ignore start */\nif (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {\n // Safari doesn't handle BOM correctly.\n // This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call\n // Another issue is that from then on no BOM chars are recognized anymore\n /* c8 ignore next */\n utf8TextDecoder = null\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Native = buf => /** @type {TextDecoder} */ (utf8TextDecoder).decode(buf)\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\n/* c8 ignore next */\nexport const decodeUtf8 = utf8TextDecoder ? _decodeUtf8Native : _decodeUtf8Polyfill\n\n/**\n * @param {string} str The initial string\n * @param {number} index Starting position\n * @param {number} remove Number of characters to remove\n * @param {string} insert New content to insert\n */\nexport const splice = (str, index, remove, insert = '') => str.slice(0, index) + insert + str.slice(index + remove)\n","/**\n * Often used conditions.\n *\n * @module conditions\n */\n\n/**\n * @template T\n * @param {T|null|undefined} v\n * @return {T|null}\n */\n/* c8 ignore next */\nexport const undefinedToNull = v => v === undefined ? null : v\n","/* eslint-env browser */\n\n/**\n * Isomorphic variable storage.\n *\n * Uses LocalStorage in the browser and falls back to in-memory storage.\n *\n * @module storage\n */\n\n/* c8 ignore start */\nclass VarStoragePolyfill {\n constructor () {\n this.map = new Map()\n }\n\n /**\n * @param {string} key\n * @param {any} newValue\n */\n setItem (key, newValue) {\n this.map.set(key, newValue)\n }\n\n /**\n * @param {string} key\n */\n getItem (key) {\n return this.map.get(key)\n }\n}\n/* c8 ignore stop */\n\n/**\n * @type {any}\n */\nlet _localStorage = new VarStoragePolyfill()\nlet usePolyfill = true\n\n/* c8 ignore start */\ntry {\n // if the same-origin rule is violated, accessing localStorage might thrown an error\n if (typeof localStorage !== 'undefined') {\n _localStorage = localStorage\n usePolyfill = false\n }\n} catch (e) { }\n/* c8 ignore stop */\n\n/**\n * This is basically localStorage in browser, or a polyfill in nodejs\n */\n/* c8 ignore next */\nexport const varStorage = _localStorage\n\n/**\n * A polyfill for `addEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const onChange = eventHandler => usePolyfill || addEventListener('storage', /** @type {any} */ (eventHandler))\n\n/**\n * A polyfill for `removeEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler))\n","/**\n * Utility module to work with Arrays.\n *\n * @module array\n */\n\nimport * as set from './set.js'\n\n/**\n * Return the last element of an array. The element must exist\n *\n * @template L\n * @param {ArrayLike} arr\n * @return {L}\n */\nexport const last = arr => arr[arr.length - 1]\n\n/**\n * @template C\n * @return {Array}\n */\nexport const create = () => /** @type {Array} */ ([])\n\n/**\n * @template D\n * @param {Array} a\n * @return {Array}\n */\nexport const copy = a => /** @type {Array} */ (a.slice())\n\n/**\n * Append elements from src to dest\n *\n * @template M\n * @param {Array} dest\n * @param {Array} src\n */\nexport const appendTo = (dest, src) => {\n for (let i = 0; i < src.length; i++) {\n dest.push(src[i])\n }\n}\n\n/**\n * Transforms something array-like to an actual Array.\n *\n * @function\n * @template T\n * @param {ArrayLike|Iterable} arraylike\n * @return {T}\n */\nexport const from = Array.from\n\n/**\n * True iff condition holds on every element in the Array.\n *\n * @function\n * @template ITEM\n * @template {ArrayLike} ARR\n *\n * @param {ARR} arr\n * @param {function(ITEM, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const every = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (!f(arr[i], i, arr)) {\n return false\n }\n }\n return true\n}\n\n/**\n * True iff condition holds on some element in the Array.\n *\n * @function\n * @template S\n * @template {ArrayLike} ARR\n * @param {ARR} arr\n * @param {function(S, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const some = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (f(arr[i], i, arr)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @template ELEM\n *\n * @param {ArrayLike} a\n * @param {ArrayLike} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a.length === b.length && every(a, (item, index) => item === b[index])\n\n/**\n * @template ELEM\n * @param {Array>} arr\n * @return {Array}\n */\nexport const flatten = arr => arr.reduce((acc, val) => acc.concat(val), [])\n\nexport const isArray = Array.isArray\n\n/**\n * @template T\n * @param {Array} arr\n * @return {Array}\n */\nexport const unique = arr => from(set.from(arr))\n\n/**\n * @template T\n * @template M\n * @param {ArrayLike} arr\n * @param {function(T):M} mapper\n * @return {Array}\n */\nexport const uniqueBy = (arr, mapper) => {\n /**\n * @type {Set}\n */\n const happened = set.create()\n /**\n * @type {Array}\n */\n const result = []\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i]\n const mapped = mapper(el)\n if (!happened.has(mapped)) {\n happened.add(mapped)\n result.push(el)\n }\n }\n return result\n}\n","/**\n * Utility functions for working with EcmaScript objects.\n *\n * @module object\n */\n\n/**\n * @return {Object} obj\n */\nexport const create = () => Object.create(null)\n\n/**\n * Object.assign\n */\nexport const assign = Object.assign\n\n/**\n * @param {Object} obj\n */\nexport const keys = Object.keys\n\n/**\n * @template V\n * @param {{[k:string]:V}} obj\n * @param {function(V,string):any} f\n */\nexport const forEach = (obj, f) => {\n for (const key in obj) {\n f(obj[key], key)\n }\n}\n\n/**\n * @todo implement mapToArray & map\n *\n * @template R\n * @param {Object} obj\n * @param {function(any,string):R} f\n * @return {Array}\n */\nexport const map = (obj, f) => {\n const results = []\n for (const key in obj) {\n results.push(f(obj[key], key))\n }\n return results\n}\n\n/**\n * @param {Object} obj\n * @return {number}\n */\nexport const length = obj => keys(obj).length\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const some = (obj, f) => {\n for (const key in obj) {\n if (f(obj[key], key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @param {Object|undefined} obj\n */\nexport const isEmpty = obj => {\n for (const _k in obj) {\n return false\n }\n return true\n}\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const every = (obj, f) => {\n for (const key in obj) {\n if (!f(obj[key], key)) {\n return false\n }\n }\n return true\n}\n\n/**\n * Calls `Object.prototype.hasOwnProperty`.\n *\n * @param {any} obj\n * @param {string|symbol} key\n * @return {boolean}\n */\nexport const hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key)\n\n/**\n * @param {Object} a\n * @param {Object} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a === b || (length(a) === length(b) && every(a, (val, key) => (val !== undefined || hasProperty(b, key)) && b[key] === val))\n","/**\n * Common functions and function call helpers.\n *\n * @module function\n */\n\nimport * as array from './array.js'\nimport * as object from './object.js'\n\n/**\n * Calls all functions in `fs` with args. Only throws after all functions were called.\n *\n * @param {Array} fs\n * @param {Array} args\n */\nexport const callAll = (fs, args, i = 0) => {\n try {\n for (; i < fs.length; i++) {\n fs[i](...args)\n }\n } finally {\n if (i < fs.length) {\n callAll(fs, args, i + 1)\n }\n }\n}\n\nexport const nop = () => {}\n\n/**\n * @template T\n * @param {function():T} f\n * @return {T}\n */\nexport const apply = f => f()\n\n/**\n * @template A\n *\n * @param {A} a\n * @return {A}\n */\nexport const id = a => a\n\n/**\n * @template T\n *\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n */\nexport const equalityStrict = (a, b) => a === b\n\n/**\n * @template T\n *\n * @param {Array|object} a\n * @param {Array|object} b\n * @return {boolean}\n */\nexport const equalityFlat = (a, b) => a === b || (a != null && b != null && a.constructor === b.constructor && ((a instanceof Array && array.equalFlat(a, /** @type {Array} */ (b))) || (typeof a === 'object' && object.equalFlat(a, b))))\n\n/* c8 ignore start */\n\n/**\n * @param {any} a\n * @param {any} b\n * @return {boolean}\n */\nexport const equalityDeep = (a, b) => {\n if (a == null || b == null) {\n return equalityStrict(a, b)\n }\n if (a.constructor !== b.constructor) {\n return false\n }\n if (a === b) {\n return true\n }\n switch (a.constructor) {\n case ArrayBuffer:\n a = new Uint8Array(a)\n b = new Uint8Array(b)\n // eslint-disable-next-line no-fallthrough\n case Uint8Array: {\n if (a.byteLength !== b.byteLength) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n break\n }\n case Set: {\n if (a.size !== b.size) {\n return false\n }\n for (const value of a) {\n if (!b.has(value)) {\n return false\n }\n }\n break\n }\n case Map: {\n if (a.size !== b.size) {\n return false\n }\n for (const key of a.keys()) {\n if (!b.has(key) || !equalityDeep(a.get(key), b.get(key))) {\n return false\n }\n }\n break\n }\n case Object:\n if (object.length(a) !== object.length(b)) {\n return false\n }\n for (const key in a) {\n if (!object.hasProperty(a, key) || !equalityDeep(a[key], b[key])) {\n return false\n }\n }\n break\n case Array:\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!equalityDeep(a[i], b[i])) {\n return false\n }\n }\n break\n default:\n return false\n }\n return true\n}\n\n/**\n * @template V\n * @template {V} OPTS\n *\n * @param {V} value\n * @param {Array} options\n */\n// @ts-ignore\nexport const isOneOf = (value, options) => options.includes(value)\n/* c8 ignore stop */\n","/**\n * Isomorphic module to work access the environment (query params, env variables).\n *\n * @module map\n */\n\nimport * as map from './map.js'\nimport * as string from './string.js'\nimport * as conditions from './conditions.js'\nimport * as storage from './storage.js'\nimport * as f from './function.js'\n\n/* c8 ignore next */\n// @ts-ignore\nexport const isNode = typeof process !== 'undefined' && process.release &&\n /node|io\\.js/.test(process.release.name)\n/* c8 ignore next */\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && !isNode\n/* c8 ignore next 3 */\nexport const isMac = typeof navigator !== 'undefined'\n ? /Mac/.test(navigator.platform)\n : false\n\n/**\n * @type {Map}\n */\nlet params\nconst args = []\n\n/* c8 ignore start */\nconst computeParams = () => {\n if (params === undefined) {\n if (isNode) {\n params = map.create()\n const pargs = process.argv\n let currParamName = null\n for (let i = 0; i < pargs.length; i++) {\n const parg = pargs[i]\n if (parg[0] === '-') {\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n currParamName = parg\n } else {\n if (currParamName !== null) {\n params.set(currParamName, parg)\n currParamName = null\n } else {\n args.push(parg)\n }\n }\n }\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n // in ReactNative for example this would not be true (unless connected to the Remote Debugger)\n } else if (typeof location === 'object') {\n params = map.create(); // eslint-disable-next-line no-undef\n (location.search || '?').slice(1).split('&').forEach((kv) => {\n if (kv.length !== 0) {\n const [key, value] = kv.split('=')\n params.set(`--${string.fromCamelCase(key, '-')}`, value)\n params.set(`-${string.fromCamelCase(key, '-')}`, value)\n }\n })\n } else {\n params = map.create()\n }\n }\n return params\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next */\nexport const hasParam = (name) => computeParams().has(name)\n\n/**\n * @param {string} name\n * @param {string} defaultVal\n * @return {string}\n */\n/* c8 ignore next 2 */\nexport const getParam = (name, defaultVal) =>\n computeParams().get(name) || defaultVal\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 4 */\nexport const getVariable = (name) =>\n isNode\n ? conditions.undefinedToNull(process.env[name.toUpperCase()])\n : conditions.undefinedToNull(storage.varStorage.getItem(name))\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 2 */\nexport const getConf = (name) =>\n computeParams().get('--' + name) || getVariable(name)\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next 2 */\nexport const hasConf = (name) =>\n hasParam('--' + name) || getVariable(name) !== null\n\n/* c8 ignore next */\nexport const production = hasConf('production')\n\n/* c8 ignore next 2 */\nconst forceColor = isNode &&\n f.isOneOf(process.env.FORCE_COLOR, ['true', '1', '2'])\n\n/* c8 ignore start */\nexport const supportsColor = !hasParam('no-colors') &&\n (!isNode || process.stdout.isTTY || forceColor) && (\n !isNode || hasParam('color') || forceColor ||\n getVariable('COLORTERM') !== null ||\n (getVariable('TERM') || '').includes('color')\n)\n/* c8 ignore stop */\n","/**\n * Common Math expressions.\n *\n * @module math\n */\n\nexport const floor = Math.floor\nexport const ceil = Math.ceil\nexport const abs = Math.abs\nexport const imul = Math.imul\nexport const round = Math.round\nexport const log10 = Math.log10\nexport const log2 = Math.log2\nexport const log = Math.log\nexport const sqrt = Math.sqrt\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The sum of a and b\n */\nexport const add = (a, b) => a + b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The smaller element of a and b\n */\nexport const min = (a, b) => a < b ? a : b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The bigger element of a and b\n */\nexport const max = (a, b) => a > b ? a : b\n\nexport const isNaN = Number.isNaN\n\nexport const pow = Math.pow\n/**\n * Base 10 exponential function. Returns the value of 10 raised to the power of pow.\n *\n * @param {number} exp\n * @return {number}\n */\nexport const exp10 = exp => Math.pow(10, exp)\n\nexport const sign = Math.sign\n\n/**\n * @param {number} n\n * @return {boolean} Wether n is negative. This function also differentiates between -0 and +0\n */\nexport const isNegativeZero = n => n !== 0 ? n < 0 : 1 / n < 0\n","/* eslint-env browser */\n\n/**\n * Binary data constants.\n *\n * @module binary\n */\n\n/**\n * n-th bit activated.\n *\n * @type {number}\n */\nexport const BIT1 = 1\nexport const BIT2 = 2\nexport const BIT3 = 4\nexport const BIT4 = 8\nexport const BIT5 = 16\nexport const BIT6 = 32\nexport const BIT7 = 64\nexport const BIT8 = 128\nexport const BIT9 = 256\nexport const BIT10 = 512\nexport const BIT11 = 1024\nexport const BIT12 = 2048\nexport const BIT13 = 4096\nexport const BIT14 = 8192\nexport const BIT15 = 16384\nexport const BIT16 = 32768\nexport const BIT17 = 65536\nexport const BIT18 = 1 << 17\nexport const BIT19 = 1 << 18\nexport const BIT20 = 1 << 19\nexport const BIT21 = 1 << 20\nexport const BIT22 = 1 << 21\nexport const BIT23 = 1 << 22\nexport const BIT24 = 1 << 23\nexport const BIT25 = 1 << 24\nexport const BIT26 = 1 << 25\nexport const BIT27 = 1 << 26\nexport const BIT28 = 1 << 27\nexport const BIT29 = 1 << 28\nexport const BIT30 = 1 << 29\nexport const BIT31 = 1 << 30\nexport const BIT32 = 1 << 31\n\n/**\n * First n bits activated.\n *\n * @type {number}\n */\nexport const BITS0 = 0\nexport const BITS1 = 1\nexport const BITS2 = 3\nexport const BITS3 = 7\nexport const BITS4 = 15\nexport const BITS5 = 31\nexport const BITS6 = 63\nexport const BITS7 = 127\nexport const BITS8 = 255\nexport const BITS9 = 511\nexport const BITS10 = 1023\nexport const BITS11 = 2047\nexport const BITS12 = 4095\nexport const BITS13 = 8191\nexport const BITS14 = 16383\nexport const BITS15 = 32767\nexport const BITS16 = 65535\nexport const BITS17 = BIT18 - 1\nexport const BITS18 = BIT19 - 1\nexport const BITS19 = BIT20 - 1\nexport const BITS20 = BIT21 - 1\nexport const BITS21 = BIT22 - 1\nexport const BITS22 = BIT23 - 1\nexport const BITS23 = BIT24 - 1\nexport const BITS24 = BIT25 - 1\nexport const BITS25 = BIT26 - 1\nexport const BITS26 = BIT27 - 1\nexport const BITS27 = BIT28 - 1\nexport const BITS28 = BIT29 - 1\nexport const BITS29 = BIT30 - 1\nexport const BITS30 = BIT31 - 1\n/**\n * @type {number}\n */\nexport const BITS31 = 0x7FFFFFFF\n/**\n * @type {number}\n */\nexport const BITS32 = 0xFFFFFFFF\n","/**\n * Utility helpers for working with numbers.\n *\n * @module number\n */\n\nimport * as math from './math.js'\nimport * as binary from './binary.js'\n\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER\n\nexport const LOWEST_INT32 = 1 << 31\n/**\n * @type {number}\n */\nexport const HIGHEST_INT32 = binary.BITS31\n\n/**\n * @module number\n */\n\n/* c8 ignore next */\nexport const isInteger = Number.isInteger || (num => typeof num === 'number' && isFinite(num) && math.floor(num) === num)\nexport const isNaN = Number.isNaN\nexport const parseInt = Number.parseInt\n","/**\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module encoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as binary from './binary.js'\nimport * as string from './string.js'\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nexport class Encoder {\n constructor () {\n this.cpos = 0\n this.cbuf = new Uint8Array(100)\n /**\n * @type {Array}\n */\n this.bufs = []\n }\n}\n\n/**\n * @function\n * @return {Encoder}\n */\nexport const createEncoder = () => new Encoder()\n\n/**\n * The current length of the encoded data.\n *\n * @function\n * @param {Encoder} encoder\n * @return {number}\n */\nexport const length = encoder => {\n let len = encoder.cpos\n for (let i = 0; i < encoder.bufs.length; i++) {\n len += encoder.bufs[i].length\n }\n return len\n}\n\n/**\n * Transform to Uint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @return {Uint8Array} The created ArrayBuffer.\n */\nexport const toUint8Array = encoder => {\n const uint8arr = new Uint8Array(length(encoder))\n let curPos = 0\n for (let i = 0; i < encoder.bufs.length; i++) {\n const d = encoder.bufs[i]\n uint8arr.set(d, curPos)\n curPos += d.length\n }\n uint8arr.set(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos), curPos)\n return uint8arr\n}\n\n/**\n * Verify that it is possible to write `len` bytes wtihout checking. If\n * necessary, a new Buffer with the required length is attached.\n *\n * @param {Encoder} encoder\n * @param {number} len\n */\nexport const verifyLen = (encoder, len) => {\n const bufferLen = encoder.cbuf.length\n if (bufferLen - encoder.cpos < len) {\n encoder.bufs.push(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos))\n encoder.cbuf = new Uint8Array(math.max(bufferLen, len) * 2)\n encoder.cpos = 0\n }\n}\n\n/**\n * Write one byte to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The byte that is to be encoded.\n */\nexport const write = (encoder, num) => {\n const bufferLen = encoder.cbuf.length\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf)\n encoder.cbuf = new Uint8Array(bufferLen * 2)\n encoder.cpos = 0\n }\n encoder.cbuf[encoder.cpos++] = num\n}\n\n/**\n * Write one byte at a specific position.\n * Position must already be written (i.e. encoder.length > pos)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos Position to which to write data\n * @param {number} num Unsigned 8-bit integer\n */\nexport const set = (encoder, pos, num) => {\n let buffer = null\n // iterate all buffers and adjust position\n for (let i = 0; i < encoder.bufs.length && buffer === null; i++) {\n const b = encoder.bufs[i]\n if (pos < b.length) {\n buffer = b // found buffer\n } else {\n pos -= b.length\n }\n }\n if (buffer === null) {\n // use current buffer\n buffer = encoder.cbuf\n }\n buffer[pos] = num\n}\n\n/**\n * Write one byte as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint8 = write\n\n/**\n * Write one byte as an unsigned Integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint8 = set\n\n/**\n * Write two bytes as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint16 = (encoder, num) => {\n write(encoder, num & binary.BITS8)\n write(encoder, (num >>> 8) & binary.BITS8)\n}\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint16 = (encoder, pos, num) => {\n set(encoder, pos, num & binary.BITS8)\n set(encoder, pos + 1, (num >>> 8) & binary.BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32 = (encoder, num) => {\n for (let i = 0; i < 4; i++) {\n write(encoder, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write two bytes as an unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32BigEndian = (encoder, num) => {\n for (let i = 3; i >= 0; i--) {\n write(encoder, (num >>> (8 * i)) & binary.BITS8)\n }\n}\n\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint32 = (encoder, pos, num) => {\n for (let i = 0; i < 4; i++) {\n set(encoder, pos + i, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarUint = (encoder, num) => {\n while (num > binary.BITS7) {\n write(encoder, binary.BIT8 | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n write(encoder, binary.BITS7 & num)\n}\n\n/**\n * Write a variable length integer.\n *\n * We use the 7th bit instead for signaling that this is a negative number.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarInt = (encoder, num) => {\n const isNegative = math.isNegativeZero(num)\n if (isNegative) {\n num = -num\n }\n // |- whether to continue reading |- whether is negative |- number\n write(encoder, (num > binary.BITS6 ? binary.BIT8 : 0) | (isNegative ? binary.BIT7 : 0) | (binary.BITS6 & num))\n num = math.floor(num / 64) // shift >>> 6\n // We don't need to consider the case of num === 0 so we can use a different\n // pattern here than above.\n while (num > 0) {\n write(encoder, (num > binary.BITS7 ? binary.BIT8 : 0) | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n}\n\n/**\n * A cache to store strings temporarily\n */\nconst _strBuffer = new Uint8Array(30000)\nconst _maxStrBSize = _strBuffer.length / 3\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringNative = (encoder, str) => {\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n /* c8 ignore next */\n const written = string.utf8TextEncoder.encodeInto(str, _strBuffer).written || 0\n writeVarUint(encoder, written)\n for (let i = 0; i < written; i++) {\n write(encoder, _strBuffer[i])\n }\n } else {\n writeVarUint8Array(encoder, string.encodeUtf8(str))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringPolyfill = (encoder, str) => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n write(encoder, /** @type {number} */ (encodedString.codePointAt(i)))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\n/* c8 ignore next */\nexport const writeVarString = (string.utf8TextEncoder && /** @type {any} */ (string.utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill\n\n/**\n * Write the content of another Encoder.\n *\n * @TODO: can be improved!\n * - Note: Should consider that when appending a lot of small Encoders, we should rather clone than referencing the old structure.\n * Encoders start with a rather big initial buffer.\n *\n * @function\n * @param {Encoder} encoder The enUint8Arr\n * @param {Encoder} append The BinaryEncoder to be written.\n */\nexport const writeBinaryEncoder = (encoder, append) => writeUint8Array(encoder, toUint8Array(append))\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeUint8Array = (encoder, uint8Array) => {\n const bufferLen = encoder.cbuf.length\n const cpos = encoder.cpos\n const leftCopyLen = math.min(bufferLen - cpos, uint8Array.length)\n const rightCopyLen = uint8Array.length - leftCopyLen\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos)\n encoder.cpos += leftCopyLen\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf)\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(math.max(bufferLen * 2, rightCopyLen))\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen))\n encoder.cpos = rightCopyLen\n }\n}\n\n/**\n * Append an Uint8Array to Encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeVarUint8Array = (encoder, uint8Array) => {\n writeVarUint(encoder, uint8Array.byteLength)\n writeUint8Array(encoder, uint8Array)\n}\n\n/**\n * Create an DataView of the next `len` bytes. Use it to write data after\n * calling this function.\n *\n * ```js\n * // write float32 using DataView\n * const dv = writeOnDataView(encoder, 4)\n * dv.setFloat32(0, 1.1)\n * // read float32 using DataView\n * const dv = readFromDataView(encoder, 4)\n * dv.getFloat32(0) // => 1.100000023841858 (leaving it to the reader to find out why this is the correct result)\n * ```\n *\n * @param {Encoder} encoder\n * @param {number} len\n * @return {DataView}\n */\nexport const writeOnDataView = (encoder, len) => {\n verifyLen(encoder, len)\n const dview = new DataView(encoder.cbuf.buffer, encoder.cpos, len)\n encoder.cpos += len\n return dview\n}\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat32 = (encoder, num) => writeOnDataView(encoder, 4).setFloat32(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat64 = (encoder, num) => writeOnDataView(encoder, 8).setFloat64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigInt64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigInt64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigUint64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigUint64(0, num, false)\n\nconst floatTestBed = new DataView(new ArrayBuffer(4))\n/**\n * Check if a number can be encoded as a 32 bit float.\n *\n * @param {number} num\n * @return {boolean}\n */\nconst isFloat32 = num => {\n floatTestBed.setFloat32(0, num)\n return floatTestBed.getFloat32(0) === num\n}\n\n/**\n * Encode data with efficient binary format.\n *\n * Differences to JSON:\n * • Transforms data to a binary format (not to a string)\n * • Encodes undefined, NaN, and ArrayBuffer (these can't be represented in JSON)\n * • Numbers are efficiently encoded either as a variable length integer, as a\n * 32 bit float, as a 64 bit float, or as a 64 bit bigint.\n *\n * Encoding table:\n *\n * | Data Type | Prefix | Encoding Method | Comment |\n * | ------------------- | -------- | ------------------ | ------- |\n * | undefined | 127 | | Functions, symbol, and everything that cannot be identified is encoded as undefined |\n * | null | 126 | | |\n * | integer | 125 | writeVarInt | Only encodes 32 bit signed integers |\n * | float32 | 124 | writeFloat32 | |\n * | float64 | 123 | writeFloat64 | |\n * | bigint | 122 | writeBigInt64 | |\n * | boolean (false) | 121 | | True and false are different data types so we save the following byte |\n * | boolean (true) | 120 | | - 0b01111000 so the last bit determines whether true or false |\n * | string | 119 | writeVarString | |\n * | object | 118 | custom | Writes {length} then {length} key-value pairs |\n * | array | 117 | custom | Writes {length} then {length} json values |\n * | Uint8Array | 116 | writeVarUint8Array | We use Uint8Array for any kind of binary data |\n *\n * Reasons for the decreasing prefix:\n * We need the first bit for extendability (later we may want to encode the\n * prefix with writeVarUint). The remaining 7 bits are divided as follows:\n * [0-30] the beginning of the data range is used for custom purposes\n * (defined by the function that uses this library)\n * [31-127] the end of the data range is used for data encoding by\n * lib0/encoding.js\n *\n * @param {Encoder} encoder\n * @param {undefined|null|number|bigint|boolean|string|Object|Array|Uint8Array} data\n */\nexport const writeAny = (encoder, data) => {\n switch (typeof data) {\n case 'string':\n // TYPE 119: STRING\n write(encoder, 119)\n writeVarString(encoder, data)\n break\n case 'number':\n if (number.isInteger(data) && math.abs(data) <= binary.BITS31) {\n // TYPE 125: INTEGER\n write(encoder, 125)\n writeVarInt(encoder, data)\n } else if (isFloat32(data)) {\n // TYPE 124: FLOAT32\n write(encoder, 124)\n writeFloat32(encoder, data)\n } else {\n // TYPE 123: FLOAT64\n write(encoder, 123)\n writeFloat64(encoder, data)\n }\n break\n case 'bigint':\n // TYPE 122: BigInt\n write(encoder, 122)\n writeBigInt64(encoder, data)\n break\n case 'object':\n if (data === null) {\n // TYPE 126: null\n write(encoder, 126)\n } else if (data instanceof Array) {\n // TYPE 117: Array\n write(encoder, 117)\n writeVarUint(encoder, data.length)\n for (let i = 0; i < data.length; i++) {\n writeAny(encoder, data[i])\n }\n } else if (data instanceof Uint8Array) {\n // TYPE 116: ArrayBuffer\n write(encoder, 116)\n writeVarUint8Array(encoder, data)\n } else {\n // TYPE 118: Object\n write(encoder, 118)\n const keys = Object.keys(data)\n writeVarUint(encoder, keys.length)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n writeVarString(encoder, key)\n writeAny(encoder, data[key])\n }\n }\n break\n case 'boolean':\n // TYPE 120/121: boolean (true/false)\n write(encoder, data ? 120 : 121)\n break\n default:\n // TYPE 127: undefined\n write(encoder, 127)\n }\n}\n\n/**\n * Now come a few stateful encoder that have their own classes.\n */\n\n/**\n * Basic Run Length Encoder - a basic compression implementation.\n *\n * Encodes [1,1,1,7] to [1,3,7,1] (3 times 1, 1 time 7). This encoder might do more harm than good if there are a lot of values that are not repeated.\n *\n * It was originally used for image compression. Cool .. article http://csbruce.com/cbm/transactor/pdfs/trans_v7_i06.pdf\n *\n * @note T must not be null!\n *\n * @template T\n */\nexport class RleEncoder extends Encoder {\n /**\n * @param {function(Encoder, T):void} writer\n */\n constructor (writer) {\n super()\n /**\n * The writer\n */\n this.w = writer\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n /**\n * @param {T} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n this.w(this, v)\n this.s = v\n }\n }\n}\n\n/**\n * Basic diff decoder using variable length encoding.\n *\n * Encodes the values [3, 1100, 1101, 1050, 0] to [3, 1097, 1, -51, -1050] using writeVarInt.\n */\nexport class IntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n writeVarInt(this, v - this.s)\n this.s = v\n }\n}\n\n/**\n * A combination of IntDiffEncoder and RleEncoder.\n *\n * Basically first writes the IntDiffEncoder and then counts duplicate diffs using RleEncoding.\n *\n * Encodes the values [1,1,1,2,3,4,5,6] as [1,1,0,2,1,5] (RLE([1,0,0,1,1,1,1,1]) ⇒ RleIntDiff[1,1,0,2,1,5])\n */\nexport class RleIntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v && this.count > 0) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n writeVarInt(this, v - this.s)\n this.s = v\n }\n }\n}\n\n/**\n * @param {UintOptRleEncoder} encoder\n */\nconst flushUintOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set sign to positive\n // case 2: write several values. set sign to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encoder.count === 1 ? encoder.s : -encoder.s)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * Optimized Rle encoder that does not suffer from the mentioned problem of the basic Rle encoder.\n *\n * Internally uses VarInt encoder to write unsigned integers. If the input occurs multiple times, we write\n * write it as a negative number. The UintOptRleDecoder then understands that it needs to read a count.\n *\n * Encodes [1,2,3,3,3] as [1,2,-3,3] (once 1, once 2, three times 3)\n */\nexport class UintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Increasing Uint Optimized RLE Encoder\n *\n * The RLE encoder counts the number of same occurences of the same value.\n * The IncUintOptRle encoder counts if the value increases.\n * I.e. 7, 8, 9, 10 will be encoded as [-7, 4]. 1, 3, 5 will be encoded\n * as [1, 3, 5].\n */\nexport class IncUintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s + this.count === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * @param {IntDiffOptRleEncoder} encoder\n */\nconst flushIntDiffOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // 31 bit making up the diff | wether to write the counter\n // const encodedDiff = encoder.diff << 1 | (encoder.count === 1 ? 0 : 1)\n const encodedDiff = encoder.diff * 2 + (encoder.count === 1 ? 0 : 1)\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set first bit to positive\n // case 2: write several values. set first bit to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encodedDiff)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * A combination of the IntDiffEncoder and the UintOptRleEncoder.\n *\n * The count approach is similar to the UintDiffOptRleEncoder, but instead of using the negative bitflag, it encodes\n * in the LSB whether a count is to be read. Therefore this Encoder only supports 31 bit integers!\n *\n * Encodes [1, 2, 3, 2] as [3, 1, 6, -1] (more specifically [(1 << 1) | 1, (3 << 0) | 0, -1])\n *\n * Internally uses variable length encoding. Contrary to normal UintVar encoding, the first byte contains:\n * * 1 bit that denotes whether the next value is a count (LSB)\n * * 1 bit that denotes whether this value is negative (MSB - 1)\n * * 1 bit that denotes whether to continue reading the variable length integer (MSB)\n *\n * Therefore, only five bits remain to encode diff ranges.\n *\n * Use this Encoder only when appropriate. In most cases, this is probably a bad idea.\n */\nexport class IntDiffOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.diff === v - this.s) {\n this.s = v\n this.count++\n } else {\n flushIntDiffOptRleEncoder(this)\n this.count = 1\n this.diff = v - this.s\n this.s = v\n }\n }\n\n toUint8Array () {\n flushIntDiffOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Optimized String Encoder.\n *\n * Encoding many small strings in a simple Encoder is not very efficient. The function call to decode a string takes some time and creates references that must be eventually deleted.\n * In practice, when decoding several million small strings, the GC will kick in more and more often to collect orphaned string objects (or maybe there is another reason?).\n *\n * This string encoder solves the above problem. All strings are concatenated and written as a single string using a single encoding call.\n *\n * The lengths are encoded using a UintOptRleEncoder.\n */\nexport class StringEncoder {\n constructor () {\n /**\n * @type {Array}\n */\n this.sarr = []\n this.s = ''\n this.lensE = new UintOptRleEncoder()\n }\n\n /**\n * @param {string} string\n */\n write (string) {\n this.s += string\n if (this.s.length > 19) {\n this.sarr.push(this.s)\n this.s = ''\n }\n this.lensE.write(string.length)\n }\n\n toUint8Array () {\n const encoder = new Encoder()\n this.sarr.push(this.s)\n this.s = ''\n writeVarString(encoder, this.sarr.join(''))\n writeUint8Array(encoder, this.lensE.toUint8Array())\n return toUint8Array(encoder)\n }\n}\n","/**\n * Error helpers.\n *\n * @module error\n */\n\n/**\n * @param {string} s\n * @return {Error}\n */\n/* c8 ignore next */\nexport const create = s => new Error(s)\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const methodUnimplemented = () => {\n throw create('Method unimplemented')\n}\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const unexpectedCase = () => {\n throw create('Unexpected case')\n}\n","/**\n * Efficient schema-less binary decoding with support for variable length encoding.\n *\n * Use [lib0/decoding] with [lib0/encoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module decoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as binary from './binary.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as string from './string.js'\nimport * as error from './error.js'\n\nconst errorUnexpectedEndOfArray = error.create('Unexpected end of array')\nconst errorIntegerOutOfRange = error.create('Integer out of Range')\n\n/**\n * A Decoder handles the decoding of an Uint8Array.\n */\nexport class Decoder {\n /**\n * @param {Uint8Array} uint8Array Binary data to decode\n */\n constructor (uint8Array) {\n /**\n * Decoding target.\n *\n * @type {Uint8Array}\n */\n this.arr = uint8Array\n /**\n * Current decoding position.\n *\n * @type {number}\n */\n this.pos = 0\n }\n}\n\n/**\n * @function\n * @param {Uint8Array} uint8Array\n * @return {Decoder}\n */\nexport const createDecoder = uint8Array => new Decoder(uint8Array)\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {boolean}\n */\nexport const hasContent = decoder => decoder.pos !== decoder.arr.length\n\n/**\n * Clone a decoder instance.\n * Optionally set a new position parameter.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} [newPos] Defaults to current position\n * @return {Decoder} A clone of `decoder`\n */\nexport const clone = (decoder, newPos = decoder.pos) => {\n const _decoder = createDecoder(decoder.arr)\n _decoder.pos = newPos\n return _decoder\n}\n\n/**\n * Create an Uint8Array view of the next `len` bytes and advance the position by `len`.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} len The length of bytes to read\n * @return {Uint8Array}\n */\nexport const readUint8Array = (decoder, len) => {\n const view = buffer.createUint8ArrayViewFromArrayBuffer(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len)\n decoder.pos += len\n return view\n}\n\n/**\n * Read variable length Uint8Array.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readVarUint8Array = decoder => readUint8Array(decoder, readVarUint(decoder))\n\n/**\n * Read the rest of the content as an ArrayBuffer\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTailAsUint8Array = decoder => readUint8Array(decoder, decoder.arr.length - decoder.pos)\n\n/**\n * Skip one byte, jump to the next position.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} The next position\n */\nexport const skip8 = decoder => decoder.pos++\n\n/**\n * Read one byte as unsigned integer.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} Unsigned 8-bit integer\n */\nexport const readUint8 = decoder => decoder.arr[decoder.pos++]\n\n/**\n * Read 2 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint16 = decoder => {\n const uint =\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n decoder.pos += 2\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32 = decoder => {\n const uint =\n (decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32BigEndian = decoder => {\n const uint =\n (decoder.arr[decoder.pos + 3] +\n (decoder.arr[decoder.pos + 2] << 8) +\n (decoder.arr[decoder.pos + 1] << 16) +\n (decoder.arr[decoder.pos] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint8 = decoder => decoder.arr[decoder.pos]\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint16 = decoder =>\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint32 = decoder => (\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)\n) >>> 0\n\n/**\n * Read unsigned integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarUint = decoder => {\n let num = 0\n let mult = 1\n const len = decoder.arr.length\n while (decoder.pos < len) {\n const r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult // shift $r << (7*#iterations) and add it to num\n mult *= 128 // next iteration, shift 7 \"more\" to the left\n if (r < binary.BIT8) {\n return num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Read signed integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n * @todo This should probably create the inverse ~num if number is negative - but this would be a breaking change.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarInt = decoder => {\n let r = decoder.arr[decoder.pos++]\n let num = r & binary.BITS6\n let mult = 64\n const sign = (r & binary.BIT7) > 0 ? -1 : 1\n if ((r & binary.BIT8) === 0) {\n // don't continue reading\n return sign * num\n }\n const len = decoder.arr.length\n while (decoder.pos < len) {\n r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult\n mult *= 128\n if (r < binary.BIT8) {\n return sign * num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarUint = decoder => {\n const pos = decoder.pos\n const s = readVarUint(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarInt = decoder => {\n const pos = decoder.pos\n const s = readVarInt(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * We don't test this function anymore as we use native decoding/encoding by default now.\n * Better not modify this anymore..\n *\n * Transforming utf8 to a string is pretty expensive. The code performs 10x better\n * when String.fromCodePoint is fed with all characters as arguments.\n * But most environments have a maximum number of arguments per functions.\n * For effiency reasons we apply a maximum of 10000 characters at once.\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String.\n */\n/* c8 ignore start */\nexport const _readVarStringPolyfill = decoder => {\n let remainingLen = readVarUint(decoder)\n if (remainingLen === 0) {\n return ''\n } else {\n let encodedString = String.fromCodePoint(readUint8(decoder)) // remember to decrease remainingLen\n if (--remainingLen < 100) { // do not create a Uint8Array for small strings\n while (remainingLen--) {\n encodedString += String.fromCodePoint(readUint8(decoder))\n }\n } else {\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n // this is dangerous, we create a fresh array view from the existing buffer\n const bytes = decoder.arr.subarray(decoder.pos, decoder.pos + nextLen)\n decoder.pos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n }\n return decodeURIComponent(escape(encodedString))\n }\n}\n/* c8 ignore stop */\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n */\nexport const _readVarStringNative = decoder =>\n /** @type any */ (string.utf8TextDecoder).decode(readVarUint8Array(decoder))\n\n/**\n * Read string of variable length\n * * varUint is used to store the length of the string\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n *\n */\n/* c8 ignore next */\nexport const readVarString = string.utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill\n\n/**\n * Look ahead and read varString without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const peekVarString = decoder => {\n const pos = decoder.pos\n const s = readVarString(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * @param {Decoder} decoder\n * @param {number} len\n * @return {DataView}\n */\nexport const readFromDataView = (decoder, len) => {\n const dv = new DataView(decoder.arr.buffer, decoder.arr.byteOffset + decoder.pos, len)\n decoder.pos += len\n return dv\n}\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat32 = decoder => readFromDataView(decoder, 4).getFloat32(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat64 = decoder => readFromDataView(decoder, 8).getFloat64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigInt64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigInt64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigUint64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigUint64(0, false)\n\n/**\n * @type {Array}\n */\nconst readAnyLookupTable = [\n decoder => undefined, // CASE 127: undefined\n decoder => null, // CASE 126: null\n readVarInt, // CASE 125: integer\n readFloat32, // CASE 124: float32\n readFloat64, // CASE 123: float64\n readBigInt64, // CASE 122: bigint\n decoder => false, // CASE 121: boolean (false)\n decoder => true, // CASE 120: boolean (true)\n readVarString, // CASE 119: string\n decoder => { // CASE 118: object\n const len = readVarUint(decoder)\n /**\n * @type {Object}\n */\n const obj = {}\n for (let i = 0; i < len; i++) {\n const key = readVarString(decoder)\n obj[key] = readAny(decoder)\n }\n return obj\n },\n decoder => { // CASE 117: array\n const len = readVarUint(decoder)\n const arr = []\n for (let i = 0; i < len; i++) {\n arr.push(readAny(decoder))\n }\n return arr\n },\n readVarUint8Array // CASE 116: Uint8Array\n]\n\n/**\n * @param {Decoder} decoder\n */\nexport const readAny = decoder => readAnyLookupTable[127 - readUint8(decoder)](decoder)\n\n/**\n * T must not be null.\n *\n * @template T\n */\nexport class RleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {function(Decoder):T} reader\n */\n constructor (uint8Array, reader) {\n super(uint8Array)\n /**\n * The reader\n */\n this.reader = reader\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = this.reader(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {T} */ (this.s)\n }\n}\n\nexport class IntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @return {number}\n */\n read () {\n this.s += readVarInt(this)\n return this.s\n }\n}\n\nexport class RleIntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n this.s += readVarInt(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class UintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class IncUintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s++)\n }\n}\n\nexport class IntDiffOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n const diff = readVarInt(this)\n // if the first bit is set, we read more data\n const hasCount = diff & 1\n this.diff = math.floor(diff / 2) // shift >> 1\n this.count = 1\n if (hasCount) {\n this.count = readVarUint(this) + 2\n }\n }\n this.s += this.diff\n this.count--\n return this.s\n }\n}\n\nexport class StringDecoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n this.decoder = new UintOptRleDecoder(uint8Array)\n this.str = readVarString(this.decoder)\n /**\n * @type {number}\n */\n this.spos = 0\n }\n\n /**\n * @return {string}\n */\n read () {\n const end = this.spos + this.decoder.read()\n const res = this.str.slice(this.spos, end)\n this.spos = end\n return res\n }\n}\n","/**\n * Utility functions to work with buffers (Uint8Array).\n *\n * @module buffer\n */\n\nimport * as string from './string.js'\nimport * as env from './environment.js'\nimport * as encoding from './encoding.js'\nimport * as decoding from './decoding.js'\n\n/**\n * @param {number} len\n */\nexport const createUint8ArrayFromLen = len => new Uint8Array(len)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n * @param {number} byteOffset\n * @param {number} length\n */\nexport const createUint8ArrayViewFromArrayBuffer = (buffer, byteOffset, length) => new Uint8Array(buffer, byteOffset, length)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n */\nexport const createUint8ArrayFromArrayBuffer = buffer => new Uint8Array(buffer)\n\n/* c8 ignore start */\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Browser = bytes => {\n let s = ''\n for (let i = 0; i < bytes.byteLength; i++) {\n s += string.fromCharCode(bytes[i])\n }\n // eslint-disable-next-line no-undef\n return btoa(s)\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Node = bytes => Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64')\n\n/* c8 ignore start */\n/**\n * @param {string} s\n * @return {Uint8Array}\n */\nconst fromBase64Browser = s => {\n // eslint-disable-next-line no-undef\n const a = atob(s)\n const bytes = createUint8ArrayFromLen(a.length)\n for (let i = 0; i < a.length; i++) {\n bytes[i] = a.charCodeAt(i)\n }\n return bytes\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} s\n */\nconst fromBase64Node = s => {\n const buf = Buffer.from(s, 'base64')\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/* c8 ignore next */\nexport const toBase64 = env.isBrowser ? toBase64Browser : toBase64Node\n\n/* c8 ignore next */\nexport const fromBase64 = env.isBrowser ? fromBase64Browser : fromBase64Node\n\n/**\n * Copy the content of an Uint8Array view to a new ArrayBuffer.\n *\n * @param {Uint8Array} uint8Array\n * @return {Uint8Array}\n */\nexport const copyUint8Array = uint8Array => {\n const newBuf = createUint8ArrayFromLen(uint8Array.byteLength)\n newBuf.set(uint8Array)\n return newBuf\n}\n\n/**\n * Encode anything as a UInt8Array. It's a pun on typescripts's `any` type.\n * See encoding.writeAny for more information.\n *\n * @param {any} data\n * @return {Uint8Array}\n */\nexport const encodeAny = data => {\n const encoder = encoding.createEncoder()\n encoding.writeAny(encoder, data)\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Decode an any-encoded value.\n *\n * @param {Uint8Array} buf\n * @return {any}\n */\nexport const decodeAny = buf => decoding.readAny(decoding.createDecoder(buf))\n","/* eslint-env browser */\n\n/**\n * Helpers for cross-tab communication using broadcastchannel with LocalStorage fallback.\n *\n * ```js\n * // In browser window A:\n * broadcastchannel.subscribe('my events', data => console.log(data))\n * broadcastchannel.publish('my events', 'Hello world!') // => A: 'Hello world!' fires synchronously in same tab\n *\n * // In browser window B:\n * broadcastchannel.publish('my events', 'hello from tab B') // => A: 'hello from tab B'\n * ```\n *\n * @module broadcastchannel\n */\n\n// @todo before next major: use Uint8Array instead as buffer object\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as buffer from './buffer.js'\nimport * as storage from './storage.js'\n\n/**\n * @typedef {Object} Channel\n * @property {Set} Channel.subs\n * @property {any} Channel.bc\n */\n\n/**\n * @type {Map}\n */\nconst channels = new Map()\n\n/* c8 ignore start */\nclass LocalStoragePolyfill {\n /**\n * @param {string} room\n */\n constructor (room) {\n this.room = room\n /**\n * @type {null|function({data:ArrayBuffer}):void}\n */\n this.onmessage = null\n /**\n * @param {any} e\n */\n this._onChange = e => e.key === room && this.onmessage !== null && this.onmessage({ data: buffer.fromBase64(e.newValue || '') })\n storage.onChange(this._onChange)\n }\n\n /**\n * @param {ArrayBuffer} buf\n */\n postMessage (buf) {\n storage.varStorage.setItem(this.room, buffer.toBase64(buffer.createUint8ArrayFromArrayBuffer(buf)))\n }\n\n close () {\n storage.offChange(this._onChange)\n }\n}\n/* c8 ignore stop */\n\n// Use BroadcastChannel or Polyfill\n/* c8 ignore next */\nconst BC = typeof BroadcastChannel === 'undefined' ? LocalStoragePolyfill : BroadcastChannel\n\n/**\n * @param {string} room\n * @return {Channel}\n */\nconst getChannel = room =>\n map.setIfUndefined(channels, room, () => {\n const subs = set.create()\n const bc = new BC(room)\n /**\n * @param {{data:ArrayBuffer}} e\n */\n /* c8 ignore next */\n bc.onmessage = e => subs.forEach(sub => sub(e.data, 'broadcastchannel'))\n return {\n bc, subs\n }\n })\n\n/**\n * Subscribe to global `publish` events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const subscribe = (room, f) => {\n getChannel(room).subs.add(f)\n return f\n}\n\n/**\n * Unsubscribe from `publish` global events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const unsubscribe = (room, f) => {\n const channel = getChannel(room)\n const unsubscribed = channel.subs.delete(f)\n if (unsubscribed && channel.subs.size === 0) {\n channel.bc.close()\n channels.delete(room)\n }\n return unsubscribed\n}\n\n/**\n * Publish data to all subscribers (including subscribers on this tab)\n *\n * @function\n * @param {string} room\n * @param {any} data\n * @param {any} [origin]\n */\nexport const publish = (room, data, origin = null) => {\n const c = getChannel(room)\n c.bc.postMessage(data)\n c.subs.forEach(sub => sub(data, origin))\n}\n","/**\n * Utility module to work with time.\n *\n * @module time\n */\n\nimport * as metric from './metric.js'\nimport * as math from './math.js'\n\n/**\n * Return current time.\n *\n * @return {Date}\n */\nexport const getDate = () => new Date()\n\n/**\n * Return current unix time.\n *\n * @return {number}\n */\nexport const getUnixTime = Date.now\n\n/**\n * Transform time (in ms) to a human readable format. E.g. 1100 => 1.1s. 60s => 1min. .001 => 10μs.\n *\n * @param {number} d duration in milliseconds\n * @return {string} humanized approximation of time\n */\nexport const humanizeDuration = d => {\n if (d < 60000) {\n const p = metric.prefix(d, -1)\n return math.round(p.n * 100) / 100 + p.prefix + 's'\n }\n d = math.floor(d / 1000)\n const seconds = d % 60\n const minutes = math.floor(d / 60) % 60\n const hours = math.floor(d / 3600) % 24\n const days = math.floor(d / 86400)\n if (days > 0) {\n return days + 'd' + ((hours > 0 || minutes > 30) ? ' ' + (minutes > 30 ? hours + 1 : hours) + 'h' : '')\n }\n if (hours > 0) {\n /* c8 ignore next */\n return hours + 'h' + ((minutes > 0 || seconds > 30) ? ' ' + (seconds > 30 ? minutes + 1 : minutes) + 'min' : '')\n }\n return minutes + 'min' + (seconds > 0 ? ' ' + seconds + 's' : '')\n}\n","/**\n * Observable class prototype.\n *\n * @module observable\n */\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as array from './array.js'\n\n/**\n * Handles named events.\n *\n * @template N\n */\nexport class Observable {\n constructor () {\n /**\n * Some desc.\n * @type {Map}\n */\n this._observers = map.create()\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, name, set.create).add(f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, _f)\n f(...args)\n }\n this.on(name, _f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @param {N} name The event name.\n * @param {Array} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n","/**\n * @module awareness-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as time from 'lib0/time'\nimport * as math from 'lib0/math'\nimport { Observable } from 'lib0/observable'\nimport * as f from 'lib0/function'\nimport * as Y from 'yjs' // eslint-disable-line\n\nexport const outdatedTimeout = 30000\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable}\n */\nexport class Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super()\n this.doc = doc\n /**\n * @type {number}\n */\n this.clientID = doc.clientID\n /**\n * Maps from client id to client state\n * @type {Map>}\n */\n this.states = new Map()\n /**\n * @type {Map}\n */\n this.meta = new Map()\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = time.getUnixTime()\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState())\n }\n /**\n * @type {Array}\n */\n const remove = []\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid)\n }\n })\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout')\n }\n }, math.floor(outdatedTimeout / 10)))\n doc.on('destroy', () => {\n this.destroy()\n })\n this.setLocalState({})\n }\n\n destroy () {\n this.emit('destroy', [this])\n this.setLocalState(null)\n super.destroy()\n clearInterval(this._checkInterval)\n }\n\n /**\n * @return {Object|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID\n const currLocalMeta = this.meta.get(clientID)\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1\n const prevState = this.states.get(clientID)\n if (state === null) {\n this.states.delete(clientID)\n } else {\n this.states.set(clientID, state)\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: time.getUnixTime()\n })\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n if (state === null) {\n removed.push(clientID)\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID)\n }\n } else {\n updated.push(clientID)\n if (!f.equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID)\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local'])\n }\n this.emit('update', [{ added, updated, removed }, 'local'])\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState()\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n })\n }\n }\n\n /**\n * @return {Map>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array} clients\n * @param {any} origin\n */\nexport const removeAwarenessStates = (awareness, clients, origin) => {\n const removed = []\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i]\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID)\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID))\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: time.getUnixTime()\n })\n }\n removed.push(clientID)\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin])\n awareness.emit('update', [{ added: [], updated: [], removed }, origin])\n }\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Array} clients\n * @return {Uint8Array}\n */\nexport const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = clients[i]\n const state = states.get(clientID) || null\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(state))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Modify the content of an awareness update before re-encoding it to an awareness update.\n *\n * This might be useful when you have a central server that wants to ensure that clients\n * cant hijack somebody elses identity.\n *\n * @param {Uint8Array} update\n * @param {function(any):any} modify\n * @return {Uint8Array}\n */\nexport const modifyAwarenessUpdate = (update, modify) => {\n const decoder = decoding.createDecoder(update)\n const encoder = encoding.createEncoder()\n const len = decoding.readVarUint(decoder)\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n const clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const modifiedState = modify(state)\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(modifiedState))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nexport const applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = decoding.createDecoder(update)\n const timestamp = time.getUnixTime()\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n const len = decoding.readVarUint(decoder)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n let clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const clientMeta = awareness.meta.get(clientID)\n const prevState = awareness.states.get(clientID)\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++\n } else {\n awareness.states.delete(clientID)\n }\n } else {\n awareness.states.set(clientID, state)\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n })\n if (clientMeta === undefined && state !== null) {\n added.push(clientID)\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID)\n } else if (state !== null) {\n if (!f.equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID)\n }\n updated.push(clientID)\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin])\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin])\n }\n}\n","/**\n * Mutual exclude for JavaScript.\n *\n * @module mutex\n */\n\n/**\n * @callback mutex\n * @param {function():void} cb Only executed when this mutex is not in the current stack\n * @param {function():void} [elseCb] Executed when this mutex is in the current stack\n */\n\n/**\n * Creates a mutual exclude function with the following property:\n *\n * ```js\n * const mutex = createMutex()\n * mutex(() => {\n * // This function is immediately executed\n * mutex(() => {\n * // This function is not executed, as the mutex is already active.\n * })\n * })\n * ```\n *\n * @return {mutex} A mutual exclude function\n * @public\n */\nexport const createMutex = () => {\n let token = true\n return (f, g) => {\n if (token) {\n token = false\n try {\n f()\n } finally {\n token = true\n }\n } else if (g !== undefined) {\n g()\n }\n }\n}\n","export default class EventEmitter {\n\n public callbacks: { [key: string]: Function[] } = {}\n\n public on(event: string, fn: Function): this {\n if (!this.callbacks[event]) {\n this.callbacks[event] = []\n }\n\n this.callbacks[event].push(fn)\n\n return this\n }\n\n protected emit(event: string, ...args: any): this {\n const callbacks = this.callbacks[event]\n\n if (callbacks) {\n callbacks.forEach(callback => callback.apply(this, args))\n }\n\n return this\n }\n\n public off(event: string, fn?: Function): this {\n const callbacks = this.callbacks[event]\n\n if (callbacks) {\n if (fn) {\n this.callbacks[event] = callbacks.filter(callback => callback !== fn)\n } else {\n delete this.callbacks[event]\n }\n }\n\n return this\n }\n\n removeAllListeners(): void {\n this.callbacks = {}\n }\n}\n","import {\n createDecoder,\n readVarUint,\n readVarUint8Array,\n readVarString,\n Decoder,\n} from 'lib0/decoding'\nimport {\n Encoder,\n createEncoder,\n writeVarUint,\n writeVarUint8Array,\n writeVarString,\n length,\n} from 'lib0/encoding'\nimport { MessageType } from './types.js'\n\nexport class IncomingMessage {\n\n data: any\n\n encoder: Encoder\n\n decoder: Decoder\n\n constructor(data: any) {\n this.data = data\n this.encoder = createEncoder()\n this.decoder = createDecoder(new Uint8Array(this.data))\n }\n\n readVarUint(): MessageType {\n return readVarUint(this.decoder)\n }\n\n readVarString(): string {\n return readVarString(this.decoder)\n }\n\n readVarUint8Array() {\n return readVarUint8Array(this.decoder)\n }\n\n writeVarUint(type: MessageType) {\n return writeVarUint(this.encoder, type)\n }\n\n writeVarString(string: string) {\n return writeVarString(this.encoder, string)\n }\n\n writeVarUint8Array(data: Uint8Array) {\n return writeVarUint8Array(this.encoder, data)\n }\n\n length() {\n return length(this.encoder)\n }\n}\n","/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them.\n * Therefore it is necesarry that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Will not be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n","import { Awareness } from 'y-protocols/awareness'\nimport * as Y from 'yjs'\nimport { Encoder } from 'lib0/encoding'\nimport type { Event, CloseEvent, MessageEvent } from 'ws'\nimport { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.js'\nimport { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.js'\nimport { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js'\nimport { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js'\nimport { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js'\nimport { UpdateMessage } from './OutgoingMessages/UpdateMessage.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\n\nexport enum MessageType {\n Sync = 0,\n Awareness = 1,\n Auth = 2,\n QueryAwareness = 3,\n Stateless = 5,\n CLOSE = 7,\n}\n\nexport enum WebSocketStatus {\n Connecting = 'connecting',\n Connected = 'connected',\n Disconnected = 'disconnected',\n}\n\nexport interface OutgoingMessageInterface {\n encoder: Encoder\n type?: MessageType\n}\n\nexport interface OutgoingMessageArguments {\n documentName: string,\n token: string,\n document: Y.Doc,\n awareness: Awareness,\n clients: number[],\n states: Map,\n update: any,\n payload: string,\n encoder: Encoder,\n}\n\nexport interface Constructable {\n new(...args: any) : T\n}\n\nexport type ConstructableOutgoingMessage =\n Constructable |\n Constructable |\n Constructable |\n Constructable |\n Constructable |\n Constructable\n\nexport type onAuthenticationFailedParameters = {\n reason: string,\n}\n\nexport type onOpenParameters = {\n event: Event,\n}\n\nexport type onMessageParameters = {\n event: MessageEvent,\n message: IncomingMessage,\n}\n\nexport type onOutgoingMessageParameters = {\n message: OutgoingMessage,\n}\n\nexport type onStatusParameters = {\n status: WebSocketStatus,\n}\n\nexport type onSyncedParameters = {\n state: boolean,\n}\n\nexport type onDisconnectParameters = {\n event: CloseEvent,\n}\n\nexport type onCloseParameters = {\n event: CloseEvent,\n}\n\nexport type onAwarenessUpdateParameters = {\n states: StatesArray\n}\n\nexport type onAwarenessChangeParameters = {\n states: StatesArray\n}\n\nexport type onStatelessParameters = {\n payload: string\n}\n\nexport type StatesArray = { clientId: number, [key: string | number]: any }[]\n","import { Encoder, createEncoder, toUint8Array } from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments, OutgoingMessageInterface } from './types.js'\n\nexport class OutgoingMessage implements OutgoingMessageInterface {\n encoder: Encoder\n\n type?: MessageType\n\n constructor() {\n this.encoder = createEncoder()\n }\n\n get(args: Partial) {\n return args.encoder\n }\n\n toUint8Array() {\n return toUint8Array(this.encoder)\n }\n}\n","import * as awarenessProtocol from 'y-protocols/awareness'\nimport { readSyncMessage, messageYjsSyncStep2, messageYjsUpdate } from 'y-protocols/sync'\nimport { readAuthMessage } from '@hocuspocus/common'\nimport { readVarString } from 'lib0/decoding'\nimport { MessageType } from './types.js'\nimport { HocuspocusProvider } from './HocuspocusProvider.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\n\nexport class MessageReceiver {\n\n message: IncomingMessage\n\n broadcasted = false\n\n constructor(message: IncomingMessage) {\n this.message = message\n }\n\n public setBroadcasted(value: boolean) {\n this.broadcasted = value\n\n return this\n }\n\n public apply(provider: HocuspocusProvider, emitSynced = true) {\n const { message } = this\n const type = message.readVarUint()\n\n const emptyMessageLength = message.length()\n\n switch (type) {\n case MessageType.Sync:\n this.applySyncMessage(provider, emitSynced)\n break\n\n case MessageType.Awareness:\n this.applyAwarenessMessage(provider)\n break\n\n case MessageType.Auth:\n this.applyAuthMessage(provider)\n break\n\n case MessageType.QueryAwareness:\n this.applyQueryAwarenessMessage(provider)\n break\n\n case MessageType.Stateless:\n provider.receiveStateless(readVarString(message.decoder))\n break\n\n default:\n throw new Error(`Can’t apply message of unknown type: ${type}`)\n }\n\n // Reply\n if (message.length() > emptyMessageLength + 1) { // length of documentName (considered in emptyMessageLength plus length of yjs sync type, set in applySyncMessage)\n if (this.broadcasted) {\n // TODO: Some weird TypeScript error\n // @ts-ignore\n provider.broadcast(OutgoingMessage, { encoder: message.encoder })\n } else {\n // TODO: Some weird TypeScript error\n // @ts-ignore\n provider.send(OutgoingMessage, { encoder: message.encoder })\n }\n }\n }\n\n private applySyncMessage(provider: HocuspocusProvider, emitSynced: boolean) {\n const { message } = this\n\n message.writeVarUint(MessageType.Sync)\n\n // Apply update\n const syncMessageType = readSyncMessage(\n message.decoder,\n message.encoder,\n provider.document,\n provider,\n )\n\n // Synced once we receive Step2\n if (emitSynced && syncMessageType === messageYjsSyncStep2) {\n provider.synced = true\n }\n\n if (syncMessageType === messageYjsUpdate || syncMessageType === messageYjsSyncStep2) {\n if (provider.unsyncedChanges > 0) {\n provider.updateUnsyncedChanges(-1)\n }\n }\n }\n\n private applyAwarenessMessage(provider: HocuspocusProvider) {\n const { message } = this\n\n awarenessProtocol.applyAwarenessUpdate(\n provider.awareness,\n message.readVarUint8Array(),\n provider,\n )\n }\n\n private applyAuthMessage(provider: HocuspocusProvider) {\n const { message } = this\n\n readAuthMessage(\n message.decoder,\n provider.permissionDeniedHandler.bind(provider),\n provider.authenticatedHandler.bind(provider),\n )\n }\n\n private applyQueryAwarenessMessage(provider: HocuspocusProvider) {\n const { message } = this\n\n message.writeVarUint(MessageType.Awareness)\n message.writeVarUint8Array(\n awarenessProtocol.encodeAwarenessUpdate(\n provider.awareness,\n Array.from(provider.awareness.getStates().keys()),\n ),\n )\n }\n}\n","import { Encoder, toUint8Array } from 'lib0/encoding'\nimport * as bc from 'lib0/broadcastchannel'\nimport { ConstructableOutgoingMessage } from './types.js'\n\nexport class MessageSender {\n\n encoder: Encoder\n\n message: any\n\n constructor(Message: ConstructableOutgoingMessage, args: any = {}) {\n this.message = new Message()\n this.encoder = this.message.get(args)\n }\n\n create() {\n return toUint8Array(this.encoder)\n }\n\n send(webSocket: any) {\n webSocket?.send(this.create())\n }\n\n broadcast(channel: string) {\n bc.publish(channel, this.create())\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport * as syncProtocol from 'y-protocols/sync'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class SyncStepOneMessage extends OutgoingMessage {\n type = MessageType.Sync\n\n description = 'First sync step'\n\n get(args: Partial) {\n if (typeof args.document === 'undefined') {\n throw new Error('The sync step one message requires document as an argument')\n }\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n syncProtocol.writeSyncStep1(this.encoder, args.document)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport * as syncProtocol from 'y-protocols/sync'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class SyncStepTwoMessage extends OutgoingMessage {\n type = MessageType.Sync\n\n description = 'Second sync step'\n\n get(args: Partial) {\n if (typeof args.document === 'undefined') {\n throw new Error('The sync step two message requires document as an argument')\n }\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n syncProtocol.writeSyncStep2(this.encoder, args.document)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class QueryAwarenessMessage extends OutgoingMessage {\n type = MessageType.QueryAwareness\n\n description = 'Queries awareness states'\n\n get(args: Partial) {\n\n console.log('queryAwareness: writing string docName', args.documentName)\n console.log(this.encoder.cpos)\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n\n return this.encoder\n }\n}\n","import { writeVarString, writeVarUint } from 'lib0/encoding'\nimport { writeAuthentication } from '@hocuspocus/common'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class AuthenticationMessage extends OutgoingMessage {\n type = MessageType.Auth\n\n description = 'Authentication'\n\n get(args: Partial) {\n if (typeof args.token === 'undefined') {\n throw new Error('The authentication message requires `token` as an argument.')\n }\n\n writeVarString(this.encoder, args.documentName!)\n writeVarUint(this.encoder, this.type)\n writeAuthentication(this.encoder, args.token)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport { encodeAwarenessUpdate } from 'y-protocols/awareness'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class AwarenessMessage extends OutgoingMessage {\n type = MessageType.Awareness\n\n description = 'Awareness states update'\n\n get(args: Partial) {\n if (typeof args.awareness === 'undefined') {\n throw new Error('The awareness message requires awareness as an argument')\n }\n\n if (typeof args.clients === 'undefined') {\n throw new Error('The awareness message requires clients as an argument')\n }\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n\n let awarenessUpdate\n if (args.states === undefined) {\n awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients)\n } else {\n awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients, args.states)\n }\n\n encoding.writeVarUint8Array(this.encoder, awarenessUpdate)\n\n return this.encoder\n }\n}\n","import { writeVarString, writeVarUint } from 'lib0/encoding'\nimport { writeUpdate } from 'y-protocols/sync'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class UpdateMessage extends OutgoingMessage {\n type = MessageType.Sync\n\n description = 'A document update'\n\n get(args: Partial) {\n writeVarString(this.encoder, args.documentName!)\n writeVarUint(this.encoder, this.type)\n\n writeUpdate(this.encoder, args.update)\n\n return this.encoder\n }\n}\n","/**\n * Utility module to work with urls.\n *\n * @module url\n */\n\nimport * as object from './object.js'\n\n/**\n * Parse query parameters from an url.\n *\n * @param {string} url\n * @return {Object}\n */\nexport const decodeQueryParams = url => {\n /**\n * @type {Object}\n */\n const query = {}\n const urlQuerySplit = url.split('?')\n const pairs = urlQuerySplit[urlQuerySplit.length - 1].split('&')\n for (let i = 0; i < pairs.length; i++) {\n const item = pairs[i]\n if (item.length > 0) {\n const pair = item.split('=')\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '')\n }\n }\n return query\n}\n\n/**\n * @param {Object} params\n * @return {string}\n */\nexport const encodeQueryParams = params =>\n object.map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&')\n","import * as time from 'lib0/time'\nimport * as mutex from 'lib0/mutex'\nimport * as url from 'lib0/url'\nimport type { MessageEvent } from 'ws'\nimport { retry } from '@lifeomic/attempt'\nimport {\n Forbidden, MessageTooBig, Unauthorized, WsReadyStates,\n} from '@hocuspocus/common'\nimport { Event } from 'ws'\nimport EventEmitter from './EventEmitter.js'\nimport {\n onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatusParameters, WebSocketStatus,\n onAwarenessChangeParameters, onAwarenessUpdateParameters,\n} from './types.js'\nimport { HocuspocusProvider } from './HocuspocusProvider.js'\n\nexport type HocuspocusProviderWebsocketConfiguration =\n Required>\n & Partial\n\nexport interface CompleteHocuspocusProviderWebsocketConfiguration {\n /**\n * URL of your @hocuspocus/server instance\n */\n url: string,\n\n /**\n * Pass `false` to start the connection manually.\n */\n connect: boolean,\n\n /**\n * URL parameters that should be added.\n */\n parameters: { [key: string]: any },\n /**\n * An optional WebSocket polyfill, for example for Node.js\n */\n WebSocketPolyfill: any,\n\n /**\n * Disconnect when no message is received for the defined amount of milliseconds.\n */\n messageReconnectTimeout: number,\n /**\n * The delay between each attempt in milliseconds. You can provide a factor to have the delay grow exponentially.\n */\n delay: number,\n /**\n * The intialDelay is the amount of time to wait before making the first attempt. This option should typically be 0 since you typically want the first attempt to happen immediately.\n */\n initialDelay: number,\n /**\n * The factor option is used to grow the delay exponentially.\n */\n factor: number,\n /**\n * The maximum number of attempts or 0 if there is no limit on number of attempts.\n */\n maxAttempts: number,\n /**\n * minDelay is used to set a lower bound of delay when jitter is enabled. This property has no effect if jitter is disabled.\n */\n minDelay: number,\n /**\n * The maxDelay option is used to set an upper bound for the delay when factor is enabled. A value of 0 can be provided if there should be no upper bound when calculating delay.\n */\n maxDelay: number,\n /**\n * If jitter is true then the calculated delay will be a random integer value between minDelay and the calculated delay for the current iteration.\n */\n jitter: boolean,\n /**\n * A timeout in milliseconds. If timeout is non-zero then a timer is set using setTimeout. If the timeout is triggered then future attempts will be aborted.\n */\n timeout: number,\n onOpen: (data: onOpenParameters) => void,\n onConnect: () => void,\n onMessage: (data: onMessageParameters) => void,\n onOutgoingMessage: (data: onOutgoingMessageParameters) => void,\n onStatus: (data: onStatusParameters) => void,\n onDisconnect: (data: onDisconnectParameters) => void,\n onClose: (data: onCloseParameters) => void,\n onDestroy: () => void,\n onAwarenessUpdate: (data: onAwarenessUpdateParameters) => void,\n onAwarenessChange: (data: onAwarenessChangeParameters) => void,\n /**\n * Don’t output any warnings.\n */\n quiet: boolean,\n}\n\nexport class HocuspocusProviderWebsocket extends EventEmitter {\n public configuration: CompleteHocuspocusProviderWebsocketConfiguration = {\n url: '',\n // @ts-ignore\n document: undefined,\n // @ts-ignore\n awareness: undefined,\n WebSocketPolyfill: undefined,\n parameters: {},\n connect: true,\n broadcast: true,\n forceSyncInterval: false,\n // TODO: this should depend on awareness.outdatedTime\n messageReconnectTimeout: 30000,\n // 1 second\n delay: 1000,\n // instant\n initialDelay: 0,\n // double the delay each time\n factor: 2,\n // unlimited retries\n maxAttempts: 0,\n // wait at least 1 second\n minDelay: 1000,\n // at least every 30 seconds\n maxDelay: 30000,\n // randomize\n jitter: true,\n // retry forever\n timeout: 0,\n onOpen: () => null,\n onConnect: () => null,\n onMessage: () => null,\n onOutgoingMessage: () => null,\n onStatus: () => null,\n onDisconnect: () => null,\n onClose: () => null,\n onDestroy: () => null,\n onAwarenessUpdate: () => null,\n onAwarenessChange: () => null,\n quiet: false,\n }\n\n subscribedToBroadcastChannel = false\n\n webSocket: WebSocket | null = null\n\n shouldConnect = true\n\n status = WebSocketStatus.Disconnected\n\n lastMessageReceived = 0\n\n mux = mutex.createMutex()\n\n intervals: any = {\n forceSync: null,\n connectionChecker: null,\n }\n\n connectionAttempt: {\n resolve: (value?: any) => void\n reject: (reason?: any) => void\n } | null = null\n\n constructor(configuration: HocuspocusProviderWebsocketConfiguration) {\n super()\n this.setConfiguration(configuration)\n\n this.configuration.WebSocketPolyfill = configuration.WebSocketPolyfill ? configuration.WebSocketPolyfill : WebSocket\n\n this.on('open', this.configuration.onOpen)\n this.on('open', this.onOpen.bind(this))\n this.on('connect', this.configuration.onConnect)\n this.on('message', this.configuration.onMessage)\n this.on('outgoingMessage', this.configuration.onOutgoingMessage)\n this.on('status', this.configuration.onStatus)\n this.on('status', this.onStatus.bind(this))\n this.on('disconnect', this.configuration.onDisconnect)\n this.on('close', this.configuration.onClose)\n this.on('destroy', this.configuration.onDestroy)\n this.on('awarenessUpdate', this.configuration.onAwarenessUpdate)\n this.on('awarenessChange', this.configuration.onAwarenessChange)\n\n this.on('close', this.onClose.bind(this))\n this.on('message', this.onMessage.bind(this))\n\n this.registerEventListeners()\n\n this.intervals.connectionChecker = setInterval(\n this.checkConnection.bind(this),\n this.configuration.messageReconnectTimeout / 10,\n )\n\n if (typeof configuration.connect !== 'undefined') {\n this.shouldConnect = configuration.connect\n }\n\n if (!this.shouldConnect) {\n return\n }\n\n this.connect()\n }\n\n receivedOnOpenPayload?: Event | undefined = undefined\n\n receivedOnStatusPayload?: onStatusParameters | undefined = undefined\n\n async onOpen(event: Event) {\n this.receivedOnOpenPayload = event\n }\n\n async onStatus(data: onStatusParameters) {\n this.receivedOnStatusPayload = data\n }\n\n attach(provider: HocuspocusProvider) {\n if (this.receivedOnOpenPayload) {\n provider.onOpen(this.receivedOnOpenPayload)\n }\n\n if (this.receivedOnStatusPayload) {\n provider.onStatus(this.receivedOnStatusPayload)\n }\n }\n\n detach(provider: HocuspocusProvider) {\n // tell the server to remove the listener\n\n }\n\n public setConfiguration(configuration: Partial = {}): void {\n this.configuration = { ...this.configuration, ...configuration }\n }\n\n boundConnect = this.connect.bind(this)\n\n cancelWebsocketRetry?: () => void\n\n async connect() {\n if (this.status === WebSocketStatus.Connected) {\n return\n }\n\n // Always cancel any previously initiated connection retryer instances\n if (this.cancelWebsocketRetry) {\n this.cancelWebsocketRetry()\n this.cancelWebsocketRetry = undefined\n }\n\n this.shouldConnect = true\n\n const abortableRetry = () => {\n let cancelAttempt = false\n\n const retryPromise = retry(this.createWebSocketConnection.bind(this), {\n delay: this.configuration.delay,\n initialDelay: this.configuration.initialDelay,\n factor: this.configuration.factor,\n maxAttempts: this.configuration.maxAttempts,\n minDelay: this.configuration.minDelay,\n maxDelay: this.configuration.maxDelay,\n jitter: this.configuration.jitter,\n timeout: this.configuration.timeout,\n beforeAttempt: context => {\n if (!this.shouldConnect || cancelAttempt) {\n context.abort()\n }\n },\n }).catch((error: any) => {\n // If we aborted the connection attempt then don’t throw an error\n // ref: https://github.com/lifeomic/attempt/blob/master/src/index.ts#L136\n if (error && error.code !== 'ATTEMPT_ABORTED') {\n throw error\n }\n })\n\n return {\n retryPromise,\n cancelFunc: () => {\n cancelAttempt = true\n },\n }\n }\n\n const { retryPromise, cancelFunc } = abortableRetry()\n this.cancelWebsocketRetry = cancelFunc\n\n return retryPromise\n }\n\n createWebSocketConnection() {\n return new Promise((resolve, reject) => {\n if (this.webSocket) {\n this.webSocket.close()\n this.webSocket = null\n }\n\n // Init the WebSocket connection\n const ws = new this.configuration.WebSocketPolyfill(this.url)\n ws.binaryType = 'arraybuffer'\n ws.onmessage = (payload: any) => this.emit('message', payload)\n ws.onclose = (payload: any) => this.emit('close', { event: payload })\n ws.onopen = (payload: any) => this.emit('open', payload)\n ws.onerror = (err: any) => {\n reject(err)\n }\n this.webSocket = ws\n\n // Reset the status\n this.status = WebSocketStatus.Connecting\n this.emit('status', { status: WebSocketStatus.Connecting })\n\n // Store resolve/reject for later use\n this.connectionAttempt = {\n resolve,\n reject,\n }\n })\n }\n\n onMessage(event: MessageEvent) {\n this.resolveConnectionAttempt()\n }\n\n resolveConnectionAttempt() {\n if (this.connectionAttempt) {\n this.connectionAttempt.resolve()\n this.connectionAttempt = null\n\n this.status = WebSocketStatus.Connected\n this.emit('status', { status: WebSocketStatus.Connected })\n this.emit('connect')\n }\n }\n\n stopConnectionAttempt() {\n this.connectionAttempt = null\n }\n\n rejectConnectionAttempt() {\n this.connectionAttempt?.reject()\n this.connectionAttempt = null\n }\n\n checkConnection() {\n // Don’t check the connection when it’s not even established\n if (this.status !== WebSocketStatus.Connected) {\n return\n }\n\n // Don’t close then connection while waiting for the first message\n if (!this.lastMessageReceived) {\n return\n }\n\n // Don’t close the connection when a message was received recently\n if (this.configuration.messageReconnectTimeout >= time.getUnixTime() - this.lastMessageReceived) {\n return\n }\n\n // No message received in a long time, not even your own\n // Awareness updates, which are updated every 15 seconds.\n this.webSocket?.close()\n }\n\n registerEventListeners() {\n if (typeof window === 'undefined') {\n return\n }\n\n window.addEventListener('online', this.boundConnect)\n }\n\n // Ensure that the URL always ends with /\n get serverUrl() {\n while (this.configuration.url[this.configuration.url.length - 1] === '/') {\n return this.configuration.url.slice(0, this.configuration.url.length - 1)\n }\n\n return this.configuration.url\n }\n\n get url() {\n const encodedParams = url.encodeQueryParams(this.configuration.parameters)\n\n return `${this.serverUrl}${encodedParams.length === 0 ? '' : `?${encodedParams}`}`\n }\n\n disconnect() {\n this.shouldConnect = false\n\n if (this.webSocket === null) {\n return\n }\n\n try {\n this.webSocket.close()\n } catch {\n //\n }\n }\n\n send(message: any) {\n if (this.webSocket?.readyState === WsReadyStates.Open) {\n this.webSocket.send(message)\n }\n }\n\n onClose({ event }: onCloseParameters) {\n this.webSocket = null\n\n if (this.status === WebSocketStatus.Connected) {\n this.status = WebSocketStatus.Disconnected\n this.emit('status', { status: WebSocketStatus.Disconnected })\n this.emit('disconnect', { event })\n }\n\n if (event.code === Unauthorized.code) {\n if (event.reason === Unauthorized.reason) {\n console.warn('[HocuspocusProvider] An authentication token is required, but you didn’t send one. Try adding a `token` to your HocuspocusProvider configuration. Won’t try again.')\n } else {\n console.warn(`[HocuspocusProvider] Connection closed with status Unauthorized: ${event.reason}`)\n }\n\n this.shouldConnect = false\n }\n\n if (event.code === Forbidden.code) {\n if (!this.configuration.quiet) {\n console.warn('[HocuspocusProvider] The provided authentication token isn’t allowed to connect to this server. Will try again.')\n return // TODO REMOVE ME\n }\n }\n\n if (event.code === MessageTooBig.code) {\n console.warn(`[HocuspocusProvider] Connection closed with status MessageTooBig: ${event.reason}`)\n this.shouldConnect = false\n }\n\n if (this.connectionAttempt) {\n // That connection attempt failed.\n this.rejectConnectionAttempt()\n } else if (this.shouldConnect) {\n // The connection was closed by the server. Let’s just try again.\n this.connect()\n }\n\n // If we’ll reconnect, we’re done for now.\n if (this.shouldConnect) {\n return\n }\n\n // The status is set correctly already.\n if (this.status === WebSocketStatus.Disconnected) {\n return\n }\n\n // Let’s update the connection status.\n this.status = WebSocketStatus.Disconnected\n this.emit('status', { status: WebSocketStatus.Disconnected })\n this.emit('disconnect', { event })\n }\n\n destroy() {\n this.emit('destroy')\n\n if (this.intervals.forceSync) {\n clearInterval(this.intervals.forceSync)\n }\n\n clearInterval(this.intervals.connectionChecker)\n\n // If there is still a connection attempt outstanding then we should stop\n // it before calling disconnect, otherwise it will be rejected in the onClose\n // handler and trigger a retry\n this.stopConnectionAttempt()\n\n this.disconnect()\n\n this.removeAllListeners()\n\n if (typeof window === 'undefined') {\n return\n }\n\n window.removeEventListener('online', this.boundConnect)\n }\n\n}\n","import { writeVarString, writeVarUint } from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class StatelessMessage extends OutgoingMessage {\n type = MessageType.Stateless\n\n description = 'A stateless message'\n\n get(args: Partial) {\n writeVarString(this.encoder, args.documentName!)\n writeVarUint(this.encoder, this.type)\n writeVarString(this.encoder, args.payload ?? '')\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class CloseMessage extends OutgoingMessage {\n type = MessageType.CLOSE\n\n description = 'Ask the server to close the connection'\n\n get(args: Partial) {\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n\n return this.encoder\n }\n}\n","import * as Y from 'yjs'\nimport * as bc from 'lib0/broadcastchannel'\nimport { Awareness, removeAwarenessStates } from 'y-protocols/awareness'\nimport * as mutex from 'lib0/mutex'\nimport type { CloseEvent, Event, MessageEvent } from 'ws'\nimport { awarenessStatesToArray } from '@hocuspocus/common'\nimport EventEmitter from './EventEmitter.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { MessageReceiver } from './MessageReceiver.js'\nimport { MessageSender } from './MessageSender.js'\nimport { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js'\nimport { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js'\nimport { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js'\nimport { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.js'\nimport { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.js'\nimport { UpdateMessage } from './OutgoingMessages/UpdateMessage.js'\nimport {\n ConstructableOutgoingMessage,\n onAuthenticationFailedParameters,\n onCloseParameters,\n onDisconnectParameters,\n onMessageParameters,\n onOpenParameters,\n onOutgoingMessageParameters, onStatelessParameters,\n onStatusParameters,\n onSyncedParameters,\n WebSocketStatus,\n onAwarenessChangeParameters,\n onAwarenessUpdateParameters,\n} from './types.js'\nimport {\n CompleteHocuspocusProviderWebsocketConfiguration,\n HocuspocusProviderWebsocket,\n} from './HocuspocusProviderWebsocket.js'\nimport { StatelessMessage } from './OutgoingMessages/StatelessMessage.js'\nimport { CloseMessage } from './OutgoingMessages/CloseMessage.js'\n\nexport type HocuspocusProviderConfiguration =\n Required>\n & Partial & (\n Required> |\n Required>\n )\n\nexport interface CompleteHocuspocusProviderConfiguration {\n /**\n * The identifier/name of your document\n */\n name: string,\n /**\n * The actual Y.js document\n */\n document: Y.Doc,\n\n /**\n * Pass false to disable broadcasting between browser tabs.\n */\n broadcast: boolean,\n /**\n * An Awareness instance to keep the presence state of all clients.\n */\n awareness: Awareness,\n /**\n * A token that’s sent to the backend for authentication purposes.\n */\n token: string | (() => string) | (() => Promise) | null,\n /**\n * URL parameters that should be added.\n */\n parameters: { [key: string]: any },\n /**\n * Hocuspocus websocket provider\n */\n websocketProvider: HocuspocusProviderWebsocket,\n /**\n * Force syncing the document in the defined interval.\n */\n forceSyncInterval: false | number,\n\n onAuthenticated: () => void,\n onAuthenticationFailed: (data: onAuthenticationFailedParameters) => void,\n onOpen: (data: onOpenParameters) => void,\n onConnect: () => void,\n onMessage: (data: onMessageParameters) => void,\n onOutgoingMessage: (data: onOutgoingMessageParameters) => void,\n onStatus: (data: onStatusParameters) => void,\n onSynced: (data: onSyncedParameters) => void,\n onDisconnect: (data: onDisconnectParameters) => void,\n onClose: (data: onCloseParameters) => void,\n onDestroy: () => void,\n onAwarenessUpdate: (data: onAwarenessUpdateParameters) => void,\n onAwarenessChange: (data: onAwarenessChangeParameters) => void,\n onStateless: (data: onStatelessParameters) => void\n\n /**\n * Don’t output any warnings.\n */\n quiet: boolean,\n}\n\nexport class HocuspocusProvider extends EventEmitter {\n public configuration: CompleteHocuspocusProviderConfiguration = {\n name: '',\n // @ts-ignore\n document: undefined,\n // @ts-ignore\n awareness: undefined,\n token: null,\n parameters: {},\n broadcast: true,\n forceSyncInterval: false,\n onAuthenticated: () => null,\n onAuthenticationFailed: () => null,\n onOpen: () => null,\n onConnect: () => null,\n onMessage: () => null,\n onOutgoingMessage: () => null,\n onStatus: () => null,\n onSynced: () => null,\n onDisconnect: () => null,\n onClose: () => null,\n onDestroy: () => null,\n onAwarenessUpdate: () => null,\n onAwarenessChange: () => null,\n onStateless: () => null,\n quiet: false,\n }\n\n subscribedToBroadcastChannel = false\n\n isSynced = false\n\n unsyncedChanges = 0\n\n status = WebSocketStatus.Disconnected\n\n isAuthenticated = false\n\n authorizedScope: string | undefined = undefined\n\n mux = mutex.createMutex()\n\n intervals: any = {\n forceSync: null,\n }\n\n isConnected = true\n\n constructor(configuration: HocuspocusProviderConfiguration) {\n super()\n this.setConfiguration(configuration)\n\n this.configuration.document = configuration.document ? configuration.document : new Y.Doc()\n this.configuration.awareness = configuration.awareness ? configuration.awareness : new Awareness(this.document)\n\n this.on('open', this.configuration.onOpen)\n this.on('message', this.configuration.onMessage)\n this.on('outgoingMessage', this.configuration.onOutgoingMessage)\n this.on('synced', this.configuration.onSynced)\n this.on('destroy', this.configuration.onDestroy)\n this.on('awarenessUpdate', this.configuration.onAwarenessUpdate)\n this.on('awarenessChange', this.configuration.onAwarenessChange)\n this.on('stateless', this.configuration.onStateless)\n\n this.on('authenticated', this.configuration.onAuthenticated)\n this.on('authenticationFailed', this.configuration.onAuthenticationFailed)\n\n this.configuration.websocketProvider.on('connect', this.configuration.onConnect)\n this.configuration.websocketProvider.on('connect', (e: Event) => this.emit('connect', e))\n\n this.configuration.websocketProvider.on('open', this.onOpen.bind(this))\n this.configuration.websocketProvider.on('open', (e: Event) => this.emit('open', e))\n\n this.configuration.websocketProvider.on('message', this.onMessage.bind(this))\n\n this.configuration.websocketProvider.on('close', this.onClose.bind(this))\n this.configuration.websocketProvider.on('close', this.configuration.onClose)\n this.configuration.websocketProvider.on('close', (e: Event) => this.emit('close', e))\n\n this.configuration.websocketProvider.on('status', this.onStatus.bind(this))\n\n this.configuration.websocketProvider.on('disconnect', this.configuration.onDisconnect)\n this.configuration.websocketProvider.on('disconnect', (e: Event) => this.emit('disconnect', e))\n\n this.configuration.websocketProvider.on('destroy', this.configuration.onDestroy)\n this.configuration.websocketProvider.on('destroy', (e: Event) => this.emit('destroy', e))\n\n this.awareness.on('update', () => {\n this.emit('awarenessUpdate', { states: awarenessStatesToArray(this.awareness.getStates()) })\n })\n\n this.awareness.on('change', () => {\n this.emit('awarenessChange', { states: awarenessStatesToArray(this.awareness.getStates()) })\n })\n\n this.document.on('update', this.documentUpdateHandler.bind(this))\n this.awareness.on('update', this.awarenessUpdateHandler.bind(this))\n this.registerEventListeners()\n\n if (this.configuration.forceSyncInterval) {\n this.intervals.forceSync = setInterval(\n this.forceSync.bind(this),\n this.configuration.forceSyncInterval,\n )\n }\n\n this.configuration.websocketProvider.attach(this)\n }\n\n public onStatus({ status } : onStatusParameters) {\n this.status = status\n\n this.configuration.onStatus({ status })\n this.emit('status', { status })\n }\n\n public setConfiguration(configuration: Partial = {}): void {\n if (!configuration.websocketProvider && (configuration as CompleteHocuspocusProviderWebsocketConfiguration).url) {\n const websocketProviderConfig = configuration as CompleteHocuspocusProviderWebsocketConfiguration\n\n this.configuration.websocketProvider = new HocuspocusProviderWebsocket({\n url: websocketProviderConfig.url,\n parameters: websocketProviderConfig.parameters,\n })\n }\n\n this.configuration = { ...this.configuration, ...configuration }\n }\n\n get document() {\n return this.configuration.document\n }\n\n get awareness() {\n return this.configuration.awareness\n }\n\n get hasUnsyncedChanges(): boolean {\n return this.unsyncedChanges > 0\n }\n\n updateUnsyncedChanges(unsyncedChanges = 0) {\n this.unsyncedChanges += unsyncedChanges\n this.emit('unsyncedChanges', this.unsyncedChanges)\n }\n\n forceSync() {\n this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name })\n }\n\n boundBeforeUnload = this.beforeUnload.bind(this)\n\n beforeUnload() {\n removeAwarenessStates(this.awareness, [this.document.clientID], 'window unload')\n }\n\n registerEventListeners() {\n if (typeof window === 'undefined') {\n return\n }\n\n window.addEventListener('beforeunload', this.boundBeforeUnload)\n }\n\n sendStateless(payload: string) {\n this.send(StatelessMessage, { documentName: this.configuration.name, payload })\n }\n\n documentUpdateHandler(update: Uint8Array, origin: any) {\n if (origin === this) {\n return\n }\n\n this.updateUnsyncedChanges(1)\n this.send(UpdateMessage, { update, documentName: this.configuration.name }, true)\n }\n\n awarenessUpdateHandler({ added, updated, removed }: any, origin: any) {\n const changedClients = added.concat(updated).concat(removed)\n\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: changedClients,\n documentName: this.configuration.name,\n }, true)\n }\n\n get synced(): boolean {\n return this.isSynced\n }\n\n set synced(state) {\n if (this.isSynced === state) {\n return\n }\n\n if (state && this.unsyncedChanges > 0) {\n this.updateUnsyncedChanges(-1 * this.unsyncedChanges)\n }\n\n this.isSynced = state\n this.emit('synced', { state })\n this.emit('sync', { state })\n }\n\n receiveStateless(payload: string) {\n this.emit('stateless', { payload })\n }\n\n get isAuthenticationRequired(): boolean {\n return !!this.configuration.token && !this.isAuthenticated\n }\n\n // not needed, but provides backward compatibility with e.g. lexicla/yjs\n async connect() {\n return this.configuration.websocketProvider.connect()\n }\n\n disconnect() {\n this.disconnectBroadcastChannel()\n this.configuration.websocketProvider.detach(this)\n }\n\n async onOpen(event: Event) {\n this.isAuthenticated = false\n\n this.emit('open', { event })\n\n if (this.isAuthenticationRequired) {\n this.send(AuthenticationMessage, {\n token: await this.getToken(),\n documentName: this.configuration.name,\n })\n }\n\n this.startSync()\n }\n\n async getToken() {\n if (typeof this.configuration.token === 'function') {\n const token = await this.configuration.token()\n return token\n }\n\n return this.configuration.token\n }\n\n startSync() {\n this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name })\n\n if (this.awareness.getLocalState() !== null) {\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: [this.document.clientID],\n documentName: this.configuration.name,\n })\n }\n }\n\n send(message: ConstructableOutgoingMessage, args: any, broadcast = false) {\n if (!this.isConnected) return\n\n if (broadcast) {\n this.mux(() => { this.broadcast(message, args) })\n }\n\n const messageSender = new MessageSender(message, args)\n\n this.emit('outgoingMessage', { message: messageSender.message })\n messageSender.send(this.configuration.websocketProvider)\n }\n\n onMessage(event: MessageEvent) {\n const message = new IncomingMessage(event.data)\n\n const documentName = message.readVarString()\n\n if (documentName !== this.configuration.name) {\n return // message is meant for another provider\n }\n\n message.writeVarString(documentName)\n\n this.emit('message', { event, message: new IncomingMessage(event.data) })\n\n new MessageReceiver(message).apply(this)\n }\n\n onClose(event: CloseEvent) {\n this.isAuthenticated = false\n this.synced = false\n\n // update awareness (all users except local left)\n removeAwarenessStates(\n this.awareness,\n Array.from(this.awareness.getStates().keys()).filter(client => client !== this.document.clientID),\n this,\n )\n }\n\n destroy() {\n this.emit('destroy')\n\n if (this.intervals.forceSync) {\n clearInterval(this.intervals.forceSync)\n }\n\n removeAwarenessStates(this.awareness, [this.document.clientID], 'provider destroy')\n\n this.disconnect()\n\n this.awareness.off('update', this.awarenessUpdateHandler)\n this.document.off('update', this.documentUpdateHandler)\n\n this.removeAllListeners()\n\n this.send(CloseMessage, { documentName: this.configuration.name })\n this.isConnected = false\n\n if (typeof window === 'undefined') {\n return\n }\n\n window.removeEventListener('beforeunload', this.boundBeforeUnload)\n }\n\n permissionDeniedHandler(reason: string) {\n this.emit('authenticationFailed', { reason })\n this.isAuthenticated = false\n this.disconnect()\n this.status = WebSocketStatus.Disconnected\n }\n\n authenticatedHandler(scope: string) {\n this.isAuthenticated = true\n this.authorizedScope = scope\n\n this.emit('authenticated')\n this.startSync()\n }\n\n get broadcastChannel() {\n return `${this.configuration.name}`\n }\n\n boundBroadcastChannelSubscriber = this.broadcastChannelSubscriber.bind(this)\n\n broadcastChannelSubscriber(data: ArrayBuffer) {\n this.mux(() => {\n const message = new IncomingMessage(data)\n\n const documentName = message.readVarString()\n\n message.writeVarString(documentName)\n\n new MessageReceiver(message)\n .setBroadcasted(true)\n .apply(this, false)\n })\n }\n\n subscribeToBroadcastChannel() {\n if (!this.subscribedToBroadcastChannel) {\n bc.subscribe(this.broadcastChannel, this.boundBroadcastChannelSubscriber)\n this.subscribedToBroadcastChannel = true\n }\n\n this.mux(() => {\n this.broadcast(SyncStepOneMessage, { document: this.document })\n this.broadcast(SyncStepTwoMessage, { document: this.document })\n this.broadcast(QueryAwarenessMessage, { document: this.document })\n this.broadcast(AwarenessMessage, { awareness: this.awareness, clients: [this.document.clientID], document: this.document })\n })\n }\n\n disconnectBroadcastChannel() {\n // broadcast message with local awareness state set to null (indicating disconnect)\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: [this.document.clientID],\n states: new Map(),\n documentName: this.configuration.name,\n }, true)\n\n if (this.subscribedToBroadcastChannel) {\n bc.unsubscribe(this.broadcastChannel, this.boundBroadcastChannelSubscriber)\n this.subscribedToBroadcastChannel = false\n }\n }\n\n broadcast(Message: ConstructableOutgoingMessage, args?: any) {\n if (!this.configuration.broadcast) {\n return\n }\n\n if (!this.subscribedToBroadcastChannel) {\n return\n }\n\n new MessageSender(Message, args).broadcast(this.broadcastChannel)\n }\n\n setAwarenessField(key: string, value: any) {\n this.awareness.setLocalStateField(key, value)\n }\n}\n","import {\n CompleteHocuspocusProviderWebsocketConfiguration,\n HocuspocusProviderWebsocket, HocuspocusProviderWebsocketConfiguration,\n} from './HocuspocusProviderWebsocket.js'\n\nexport type TiptapCollabProviderWebsocketConfiguration =\n Partial &\n AdditionalTiptapCollabProviderWebsocketConfiguration\n\nexport interface AdditionalTiptapCollabProviderWebsocketConfiguration {\n /**\n * A Hocuspocus Cloud App ID, get one here: https://collab.tiptap.dev\n */\n appId: string,\n}\n\nexport class TiptapCollabProviderWebsocket extends HocuspocusProviderWebsocket {\n constructor(configuration: TiptapCollabProviderWebsocketConfiguration) {\n super({ ...configuration as HocuspocusProviderWebsocketConfiguration, url: `wss://${configuration.appId}.collab.tiptap.cloud` })\n }\n}\n","import {\n HocuspocusProvider,\n HocuspocusProviderConfiguration,\n} from './HocuspocusProvider.js'\n\nimport { TiptapCollabProviderWebsocket } from './TiptapCollabProviderWebsocket.js'\n\nexport type TiptapCollabProviderConfiguration =\n Required> &\n Partial &\n AdditionalTiptapCollabProviderConfiguration\n\nexport interface AdditionalTiptapCollabProviderConfiguration {\n /**\n * A Hocuspocus Cloud App ID, get one here: https://collab.tiptap.dev\n */\n appId: string,\n}\n\nexport class TiptapCollabProvider extends HocuspocusProvider {\n constructor(configuration: TiptapCollabProviderConfiguration) {\n if (!configuration.websocketProvider) {\n configuration.websocketProvider = new TiptapCollabProviderWebsocket({ appId: configuration.appId })\n }\n\n if (!configuration.token) {\n configuration.token = 'notoken' // need to send a token anyway (which will be ignored)\n }\n\n super(configuration as HocuspocusProviderConfiguration)\n }\n}\n"],"names":["create","length","object.length","object.hasProperty","map.create","string.fromCamelCase","conditions.undefinedToNull","storage.varStorage","f.isOneOf","buffer.createUint8ArrayViewFromArrayBuffer","binary.BITS7","binary.BIT8","math.floor","string.utf8TextEncoder","string.encodeUtf8","math.min","math.max","error.create","number.MAX_SAFE_INTEGER","string.utf8TextDecoder","string.fromCharCode","env.isBrowser","buffer.fromBase64","storage.onChange","buffer.toBase64","buffer.createUint8ArrayFromArrayBuffer","storage.offChange","map.setIfUndefined","set.create","array.from","time.getUnixTime","f.equalityDeep","encoding.createEncoder","encoding.writeVarUint","encoding.writeVarString","encoding.toUint8Array","decoding.createDecoder","decoding.readVarUint","decoding.readVarString","encoding.writeVarUint8Array","decoding.readVarUint8Array","awarenessProtocol.applyAwarenessUpdate","awarenessProtocol.encodeAwarenessUpdate","bc.publish","syncProtocol.writeSyncStep1","syncProtocol.writeSyncStep2","object.map","mutex.createMutex","url.encodeQueryParams","bc.subscribe","bc.unsubscribe"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,QAAM,GAAG,MAAM,IAAI,GAAG,GAAE;AAerC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,KAAK;AACrD,EAAE,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAC;AACxB,EAAE,IAAI,GAAG,KAAK,SAAS,EAAE;AACzB,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,EAAE,EAAC;AACjC,GAAG;AACH,EAAE,OAAO,GAAG;AACZ;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,QAAM,GAAG,MAAM,IAAI,GAAG;;ACNnC;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,YAAY,GAAG,MAAM,CAAC,aAAY;AAE/C;AACA;AACA;AACA;AACA;AACA,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,GAAE;AACxC;AACA,MAAM,aAAa,GAAG,QAAO;AAC7B;AACA;AACA;AACA;AACA;AACO,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,EAAC;AACzD;AACA,MAAM,kBAAkB,GAAG,WAAU;AACrC;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,KAAK,IAAI,CAAC,EAAE,SAAS,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC;AAQpI;AACA;AACA;AACA;AACA;AACO,MAAM,mBAAmB,GAAG,GAAG,IAAI;AAC1C,EAAE,MAAM,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAC;AACzD,EAAE,MAAM,GAAG,GAAG,aAAa,CAAC,OAAM;AAClC,EAAE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,EAAC;AACjC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAChC,IAAI,GAAG,CAAC,CAAC,CAAC,0BAA0B,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC;AACjE,GAAG;AACH,EAAE,OAAO,GAAG;AACZ,EAAC;AACD;AACA;AACO,MAAM,eAAe,+BAA+B,OAAO,WAAW,KAAK,WAAW,GAAG,IAAI,WAAW,EAAE,GAAG,IAAI,EAAC;AACzH;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,GAAG,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,GAAG,EAAC;AACnE;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,UAAU,GAAG,eAAe,GAAG,iBAAiB,GAAG,oBAAmB;AAoBnF;AACA;AACO,IAAI,eAAe,GAAG,OAAO,WAAW,KAAK,WAAW,GAAG,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAC;AACnI;AACA;AACA,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,eAAe,GAAG,KAAI;AACxB;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,GAAG,IAAI,GAAG;;ACZ7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,kBAAkB,CAAC;AACzB,EAAE,WAAW,CAAC,GAAG;AACjB,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,GAAE;AACxB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE;AAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAC;AAC/B,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE;AAChB,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5B,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG,IAAI,kBAAkB,GAAE;AAC5C,IAAI,WAAW,GAAG,KAAI;AACtB;AACA;AACA,IAAI;AACJ;AACA,EAAE,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AAC3C,IAAI,aAAa,GAAG,aAAY;AAChC,IAAI,WAAW,GAAG,MAAK;AACvB,GAAG;AACH,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG;AACf;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,UAAU,GAAG,cAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,QAAQ,GAAG,YAAY,IAAI,WAAW,IAAI,gBAAgB,CAAC,SAAS,sBAAsB,YAAY,GAAE;AACrH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,SAAS,GAAG,YAAY,IAAI,WAAW,IAAI,mBAAmB,CAAC,SAAS,sBAAsB,YAAY;;ACvEvH;AACA;AACA;AACA;AACA;AAsCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,IAAI,GAAG,KAAK,CAAC;;ACnD1B;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACO,MAAM,IAAI,GAAG,MAAM,CAAC,KAAI;AAY/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK;AAC/B,EAAE,MAAM,OAAO,GAAG,GAAE;AACpB,EAAE,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;AACzB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAC;AAClC,GAAG;AACH,EAAE,OAAO,OAAO;AAChB,EAAC;AACD;AACA;AACA;AACA;AACA;AACO,MAAMC,QAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAM;AAuC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG;;ACnGtF;AACA;AACA;AACA;AACA;AAuCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAC;AAU/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK;AACtC,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AAC9B,IAAI,OAAO,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/B,GAAG;AACH,EAAE,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,EAAE;AACvC,IAAI,OAAO,KAAK;AAChB,GAAG;AACH,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACf,IAAI,OAAO,IAAI;AACf,GAAG;AACH,EAAE,QAAQ,CAAC,CAAC,WAAW;AACvB,IAAI,KAAK,WAAW;AACpB,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,EAAC;AAC3B,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,EAAC;AAC3B;AACA,IAAI,KAAK,UAAU,EAAE;AACrB,MAAM,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE;AACzC,QAAQ,OAAO,KAAK;AACpB,OAAO;AACP,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3B,UAAU,OAAO,KAAK;AACtB,SAAS;AACT,OAAO;AACP,MAAM,KAAK;AACX,KAAK;AACL,IAAI,KAAK,GAAG,EAAE;AACd,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE;AAC7B,QAAQ,OAAO,KAAK;AACpB,OAAO;AACP,MAAM,KAAK,MAAM,KAAK,IAAI,CAAC,EAAE;AAC7B,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3B,UAAU,OAAO,KAAK;AACtB,SAAS;AACT,OAAO;AACP,MAAM,KAAK;AACX,KAAK;AACL,IAAI,KAAK,GAAG,EAAE;AACd,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE;AAC7B,QAAQ,OAAO,KAAK;AACpB,OAAO;AACP,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;AAClC,QAAQ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;AAClE,UAAU,OAAO,KAAK;AACtB,SAAS;AACT,OAAO;AACP,MAAM,KAAK;AACX,KAAK;AACL,IAAI,KAAK,MAAM;AACf,MAAM,IAAIC,QAAa,CAAC,CAAC,CAAC,KAAKA,QAAa,CAAC,CAAC,CAAC,EAAE;AACjD,QAAQ,OAAO,KAAK;AACpB,OAAO;AACP,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC,EAAE;AAC3B,QAAQ,IAAI,CAACC,WAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AAC1E,UAAU,OAAO,KAAK;AACtB,SAAS;AACT,OAAO;AACP,MAAM,KAAK;AACX,IAAI,KAAK,KAAK;AACd,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;AACjC,QAAQ,OAAO,KAAK;AACpB,OAAO;AACP,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACvC,UAAU,OAAO,KAAK;AACtB,SAAS;AACT,OAAO;AACP,MAAM,KAAK;AACX,IAAI;AACJ,MAAM,OAAO,KAAK;AAClB,GAAG;AACH,EAAE,OAAO,IAAI;AACb,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAC;AAClE;;ACxJA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACO,MAAM,MAAM,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,OAAO;AACvE,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAC;AAC1C;AACO,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,CAAC,OAAM;AACpG;AACqB,OAAO,SAAS,KAAK,WAAW;AACrD,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAClC,IAAI,MAAK;AACT;AACA;AACA;AACA;AACA,IAAI,OAAM;AAEV;AACA;AACA,MAAM,aAAa,GAAG,MAAM;AAC5B,EAAE,IAAI,MAAM,KAAK,SAAS,EAAE;AAC5B,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,MAAM,GAAGC,QAAU,GAAE;AAC3B,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,KAAI;AAChC,MAAM,IAAI,aAAa,GAAG,KAAI;AAC9B,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,QAAQ,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,EAAC;AAC7B,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC7B,UAAU,IAAI,aAAa,KAAK,IAAI,EAAE;AACtC,YAAY,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,EAAC;AACzC,WAAW;AACX,UAAU,aAAa,GAAG,KAAI;AAC9B,SAAS,MAAM;AACf,UAAU,IAAI,aAAa,KAAK,IAAI,EAAE;AACtC,YAAY,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAC;AAC3C,YAAY,aAAa,GAAG,KAAI;AAChC,WAEW;AACX,SAAS;AACT,OAAO;AACP,MAAM,IAAI,aAAa,KAAK,IAAI,EAAE;AAClC,QAAQ,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,EAAC;AACrC,OAAO;AACP;AACA,KAAK,MAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAC7C,MAAM,MAAM,GAAGA,QAAU,EAAE,CAAC;AAC5B,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK;AACnE,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,UAAU,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAC;AAC5C,UAAU,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAEC,aAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAC;AAClE,UAAU,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAEA,aAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAC;AACjE,SAAS;AACT,OAAO,EAAC;AACR,KAAK,MAAM;AACX,MAAM,MAAM,GAAGD,QAAU,GAAE;AAC3B,KAAK;AACL,GAAG;AACH,EAAE,OAAO,MAAM;AACf,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,QAAQ,GAAG,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,EAAC;AAU3D;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,WAAW,GAAG,CAAC,IAAI;AAChC,EAAE,MAAM;AACR,MAAME,eAA0B,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACjE,MAAMA,eAA0B,CAACC,UAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC;AASlE;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,OAAO,GAAG,CAAC,IAAI;AAC5B,EAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,KAAI;AACrD;AACA;AAC0B,OAAO,CAAC,YAAY,EAAC;AAC/C;AACA;AACA,MAAM,UAAU,GAAG,MAAM;AACzB,EAAEC,OAAS,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAC;AACxD;AACA;AAC6B,CAAC,QAAQ,CAAC,WAAW,CAAC;AACnD,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC;AACjD,EAAE,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU;AAC5C,IAAI,WAAW,CAAC,WAAW,CAAC,KAAK,IAAI;AACrC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC;AACjD,EAAC;AACD;;ACjIA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,KAAK,GAAG,IAAI,CAAC,MAAK;AAiB/B;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;;ACtCzC;AAoBO,MAAM,IAAI,GAAG,IAAG;AAsChB,MAAM,KAAK,GAAG;;AC1DrB;AACA;AACA;AACA;AACA;AAIA;AACO,MAAM,gBAAgB,GAAG,MAAM,CAAC;;ACTvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACO,MAAM,OAAO,CAAC;AACrB,EAAE,WAAW,CAAC,GAAG;AACjB,IAAI,IAAI,CAAC,IAAI,GAAG,EAAC;AACjB,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,EAAC;AACnC;AACA;AACA;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,GAAE;AAClB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,MAAM,aAAa,GAAG,MAAM,IAAI,OAAO,GAAE;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,MAAM,GAAG,OAAO,IAAI;AACjC,EAAE,IAAI,GAAG,GAAG,OAAO,CAAC,KAAI;AACxB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChD,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAM;AACjC,GAAG;AACH,EAAE,OAAO,GAAG;AACZ,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,YAAY,GAAG,OAAO,IAAI;AACvC,EAAE,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAC;AAClD,EAAE,IAAI,MAAM,GAAG,EAAC;AAChB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChD,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAC;AAC7B,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAC;AAC3B,IAAI,MAAM,IAAI,CAAC,CAAC,OAAM;AACtB,GAAG;AACH,EAAE,QAAQ,CAAC,GAAG,CAACC,mCAA0C,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAC;AACxG,EAAE,OAAO,QAAQ;AACjB,EAAC;AAiBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK;AACvC,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,OAAM;AACvC,EAAE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;AAClC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAC;AACnC,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,SAAS,GAAG,CAAC,EAAC;AAChD,IAAI,OAAO,CAAC,IAAI,GAAG,EAAC;AACpB,GAAG;AACH,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAG;AACpC,EAAC;AAkHD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK;AAC9C,EAAE,OAAO,GAAG,GAAGC,KAAY,EAAE;AAC7B,IAAI,KAAK,CAAC,OAAO,EAAEC,IAAW,IAAID,KAAY,GAAG,GAAG,CAAC,EAAC;AACtD,IAAI,GAAG,GAAGE,KAAU,CAAC,GAAG,GAAG,GAAG,EAAC;AAC/B,GAAG;AACH,EAAE,KAAK,CAAC,OAAO,EAAEF,KAAY,GAAG,GAAG,EAAC;AACpC,EAAC;AA0BD;AACA;AACA;AACA;AACA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,KAAK,EAAC;AACxC,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,EAAC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK;AACvD,EAAE,IAAI,GAAG,CAAC,MAAM,GAAG,YAAY,EAAE;AACjC;AACA;AACA,IAAI,MAAM,OAAO,GAAGG,eAAsB,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,OAAO,IAAI,EAAC;AACnF,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,EAAC;AAClC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AACtC,MAAM,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAC;AACnC,KAAK;AACL,GAAG,MAAM;AACT,IAAI,kBAAkB,CAAC,OAAO,EAAEC,UAAiB,CAAC,GAAG,CAAC,EAAC;AACvD,GAAG;AACH,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK;AACzD,EAAE,MAAM,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAC;AACzD,EAAE,MAAM,GAAG,GAAG,aAAa,CAAC,OAAM;AAClC,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,EAAC;AAC5B,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAChC,IAAI,KAAK,CAAC,OAAO,yBAAyB,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,GAAE;AACxE,GAAG;AACH,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG,CAACD,eAAsB,uBAAuB,CAACA,eAAsB,EAAE,UAAU,IAAI,qBAAqB,GAAG,wBAAuB;AAclK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,UAAU,KAAK;AACxD,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,OAAM;AACvC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAI;AAC3B,EAAE,MAAM,WAAW,GAAGE,GAAQ,CAAC,SAAS,GAAG,IAAI,EAAE,UAAU,CAAC,MAAM,EAAC;AACnE,EAAE,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,GAAG,YAAW;AACtD,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,IAAI,EAAC;AAC7D,EAAE,OAAO,CAAC,IAAI,IAAI,YAAW;AAC7B,EAAE,IAAI,YAAY,GAAG,CAAC,EAAE;AACxB;AACA;AACA,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAC;AACnC;AACA,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,UAAU,CAACC,GAAQ,CAAC,SAAS,GAAG,CAAC,EAAE,YAAY,CAAC,EAAC;AACxE;AACA,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAC;AACtD,IAAI,OAAO,CAAC,IAAI,GAAG,aAAY;AAC/B,GAAG;AACH,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,UAAU,KAAK;AAC3D,EAAE,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,UAAU,EAAC;AAC9C,EAAE,eAAe,CAAC,OAAO,EAAE,UAAU,EAAC;AACtC;;ACxXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;;ACXtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA;AACA,MAAM,yBAAyB,GAAGC,MAAY,CAAC,yBAAyB,EAAC;AACzE,MAAM,sBAAsB,GAAGA,MAAY,CAAC,sBAAsB,EAAC;AACnE;AACA;AACA;AACA;AACO,MAAM,OAAO,CAAC;AACrB;AACA;AACA;AACA,EAAE,WAAW,CAAC,CAAC,UAAU,EAAE;AAC3B;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,GAAG,GAAG,WAAU;AACzB;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,GAAG,GAAG,EAAC;AAChB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,aAAa,GAAG,UAAU,IAAI,IAAI,OAAO,CAAC,UAAU,EAAC;AAuBlE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK;AAChD,EAAE,MAAM,IAAI,GAAGR,mCAA0C,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,EAAC;AACxH,EAAE,OAAO,CAAC,GAAG,IAAI,IAAG;AACpB,EAAE,OAAO,IAAI;AACb,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,GAAG,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,EAAC;AAiBzF;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,SAAS,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAC;AAwF9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,WAAW,GAAG,OAAO,IAAI;AACtC,EAAE,IAAI,GAAG,GAAG,EAAC;AACb,EAAE,IAAI,IAAI,GAAG,EAAC;AACd,EAAE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,OAAM;AAChC,EAAE,OAAO,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE;AAC5B,IAAI,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAC;AACxC;AACA,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,GAAGC,KAAY,IAAI,KAAI;AACzC,IAAI,IAAI,IAAI,IAAG;AACf,IAAI,IAAI,CAAC,GAAGC,IAAW,EAAE;AACzB,MAAM,OAAO,GAAG;AAChB,KAAK;AACL;AACA,IAAI,IAAI,GAAG,GAAGO,gBAAuB,EAAE;AACvC,MAAM,MAAM,sBAAsB;AAClC,KAAK;AACL;AACA,GAAG;AACH,EAAE,MAAM,yBAAyB;AACjC,EAAC;AAmED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,sBAAsB,GAAG,OAAO,IAAI;AACjD,EAAE,IAAI,YAAY,GAAG,WAAW,CAAC,OAAO,EAAC;AACzC,EAAE,IAAI,YAAY,KAAK,CAAC,EAAE;AAC1B,IAAI,OAAO,EAAE;AACb,GAAG,MAAM;AACT,IAAI,IAAI,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,EAAC;AAChE,IAAI,IAAI,EAAE,YAAY,GAAG,GAAG,EAAE;AAC9B,MAAM,OAAO,YAAY,EAAE,EAAE;AAC7B,QAAQ,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,EAAC;AACjE,OAAO;AACP,KAAK,MAAM;AACX,MAAM,OAAO,YAAY,GAAG,CAAC,EAAE;AAC/B,QAAQ,MAAM,OAAO,GAAG,YAAY,GAAG,KAAK,GAAG,YAAY,GAAG,MAAK;AACnE;AACA,QAAQ,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,OAAO,EAAC;AAC9E,QAAQ,OAAO,CAAC,GAAG,IAAI,QAAO;AAC9B;AACA,QAAQ,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,sBAAsB,KAAK,GAAE;AACrF,QAAQ,YAAY,IAAI,QAAO;AAC/B,OAAO;AACP,KAAK;AACL,IAAI,OAAO,kBAAkB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AACpD,GAAG;AACH,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,GAAG,OAAO;AAC3C,mBAAmB,CAACC,eAAsB,EAAE,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,aAAa,GAAGA,eAAsB,GAAG,oBAAoB,GAAG;;ACjY7E;AACA;AACA;AACA;AACA;AAMA;AACA;AACA;AACA;AACO,MAAM,uBAAuB,GAAG,GAAG,IAAI,IAAI,UAAU,CAAC,GAAG,EAAC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,mCAAmC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAC;AAC7H;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,+BAA+B,GAAG,MAAM,IAAI,IAAI,UAAU,CAAC,MAAM,EAAC;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,eAAe,GAAG,KAAK,IAAI;AACjC,EAAE,IAAI,CAAC,GAAG,GAAE;AACZ,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;AAC7C,IAAI,CAAC,IAAIC,YAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC;AACtC,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;AAChB,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAC;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,iBAAiB,GAAG,CAAC,IAAI;AAC/B;AACA,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAC;AACnB,EAAE,MAAM,KAAK,GAAG,uBAAuB,CAAC,CAAC,CAAC,MAAM,EAAC;AACjD,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,EAAC;AAC9B,GAAG;AACH,EAAE,OAAO,KAAK;AACd,EAAC;AACD;AACA;AACA;AACA;AACA;AACA,MAAM,cAAc,GAAG,CAAC,IAAI;AAC5B,EAAE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAC;AACtC,EAAE,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;AACnE,EAAC;AACD;AACA;AACO,MAAM,QAAQ,GAAGC,SAAa,GAAG,eAAe,GAAG,aAAY;AACtE;AACA;AACO,MAAM,UAAU,GAAGA,SAAa,GAAG,iBAAiB,GAAG;;ACjF9D;AAuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,IAAI,GAAG,GAAE;AAC1B;AACA;AACA,MAAM,oBAAoB,CAAC;AAC3B;AACA;AACA;AACA,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE;AACrB,IAAI,IAAI,CAAC,IAAI,GAAG,KAAI;AACpB;AACA;AACA;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,KAAI;AACzB;AACA;AACA;AACA,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAEC,UAAiB,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,EAAC;AACpI,IAAIC,QAAgB,CAAC,IAAI,CAAC,SAAS,EAAC;AACpC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,CAAC,GAAG,EAAE;AACpB,IAAIhB,UAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAEiB,QAAe,CAACC,+BAAsC,CAAC,GAAG,CAAC,CAAC,EAAC;AACvG,GAAG;AACH;AACA,EAAE,KAAK,CAAC,GAAG;AACX,IAAIC,SAAiB,CAAC,IAAI,CAAC,SAAS,EAAC;AACrC,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA,MAAM,EAAE,GAAG,OAAO,gBAAgB,KAAK,WAAW,GAAG,oBAAoB,GAAG,iBAAgB;AAC5F;AACA;AACA;AACA;AACA;AACA,MAAM,UAAU,GAAG,IAAI;AACvB,EAAEC,cAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM;AAC3C,IAAI,MAAM,IAAI,GAAGC,QAAU,GAAE;AAC7B,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,IAAI,EAAC;AAC3B;AACA;AACA;AACA;AACA,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAC;AAC5E,IAAI,OAAO;AACX,MAAM,EAAE,EAAE,IAAI;AACd,KAAK;AACL,GAAG,EAAC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK;AACtC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC;AAC9B,EAAE,OAAO,CAAC;AACV,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK;AACxC,EAAE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAC;AAClC,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAC;AAC7C,EAAE,IAAI,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;AAC/C,IAAI,OAAO,CAAC,EAAE,CAAC,KAAK,GAAE;AACtB,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAC;AACzB,GAAG;AACH,EAAE,OAAO,YAAY;AACrB,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK;AACtD,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAC;AAC5B,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAC;AACxB,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAC;AAC1C;;ACjIA;AACA;AACA;AACA;AACA;AAWA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,WAAW,GAAG,IAAI,CAAC;;ACrBhC;AACA;AACA;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,UAAU,CAAC;AACxB,EAAE,WAAW,CAAC,GAAG;AACjB;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,UAAU,GAAGxB,QAAU,GAAE;AAClC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AACf,IAAIuB,cAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAEC,QAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAC;AAChE,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AACjB;AACA;AACA;AACA,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,KAAK;AAC5B,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAC;AACxB,MAAM,CAAC,CAAC,GAAG,IAAI,EAAC;AAChB,MAAK;AACL,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,EAAC;AACrB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AAChB,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAC;AAC/C,IAAI,IAAI,SAAS,KAAK,SAAS,EAAE;AACjC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,EAAC;AACzB,MAAM,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE;AAChC,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAC;AACpC,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE;AACpB;AACA,IAAI,OAAOC,IAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAIzB,QAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACpG,GAAG;AACH;AACA,EAAE,OAAO,CAAC,GAAG;AACb,IAAI,IAAI,CAAC,UAAU,GAAGA,QAAU,GAAE;AAClC,GAAG;AACH;;AC9EA;AACA;AACA;AASA;AACO,MAAM,eAAe,GAAG,MAAK;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,SAAS,SAAS,UAAU,CAAC;AAC1C;AACA;AACA;AACA,EAAE,WAAW,CAAC,CAAC,GAAG,EAAE;AACpB,IAAI,KAAK,GAAE;AACX,IAAI,IAAI,CAAC,GAAG,GAAG,IAAG;AAClB;AACA;AACA;AACA,IAAI,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAQ;AAChC;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,GAAE;AAC3B;AACA;AACA;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,GAAE;AACzB,IAAI,IAAI,CAAC,cAAc,uBAAuB,WAAW,CAAC,MAAM;AAChE,MAAM,MAAM,GAAG,GAAG0B,WAAgB,GAAE;AACpC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,KAAK,eAAe,GAAG,CAAC,IAAI,GAAG,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,EAAE;AAC1J;AACA,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,EAAC;AAChD,OAAO;AACP;AACA;AACA;AACA,MAAM,MAAM,MAAM,GAAG,GAAE;AACvB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK;AAC5C,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,eAAe,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAClH,UAAU,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAC;AAC/B,SAAS;AACT,OAAO,EAAC;AACR,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,QAAQ,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAC;AACtD,OAAO;AACP,KAAK,EAAElB,KAAU,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,EAAC;AACzC,IAAI,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM;AAC5B,MAAM,IAAI,CAAC,OAAO,GAAE;AACpB,KAAK,EAAC;AACN,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,EAAC;AAC1B,GAAG;AACH;AACA,EAAE,OAAO,CAAC,GAAG;AACb,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,EAAC;AAChC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAC;AAC5B,IAAI,KAAK,CAAC,OAAO,GAAE;AACnB,IAAI,aAAa,CAAC,IAAI,CAAC,cAAc,EAAC;AACtC,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,GAAG;AACnB,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI;AACjD,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,aAAa,CAAC,CAAC,KAAK,EAAE;AACxB,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAQ;AAClC,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAC;AACjD,IAAI,MAAM,KAAK,GAAG,aAAa,KAAK,SAAS,GAAG,CAAC,GAAG,aAAa,CAAC,KAAK,GAAG,EAAC;AAC3E,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAC;AAC/C,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE;AACxB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAC;AAClC,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAC;AACtC,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AAC5B,MAAM,KAAK;AACX,MAAM,WAAW,EAAEkB,WAAgB,EAAE;AACrC,KAAK,EAAC;AACN,IAAI,MAAM,KAAK,GAAG,GAAE;AACpB,IAAI,MAAM,OAAO,GAAG,GAAE;AACtB,IAAI,MAAM,eAAe,GAAG,GAAE;AAC9B,IAAI,MAAM,OAAO,GAAG,GAAE;AACtB,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE;AACxB,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAC;AAC5B,KAAK,MAAM,IAAI,SAAS,IAAI,IAAI,EAAE;AAClC,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE;AACzB,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAC;AAC5B,OAAO;AACP,KAAK,MAAM;AACX,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAC;AAC5B,MAAM,IAAI,CAACC,YAAc,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;AAC7C,QAAQ,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAC;AACtC,OAAO;AACP,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9E,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAC;AAClF,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAC;AAC/D,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,kBAAkB,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE;AACpC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,GAAE;AACtC,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE;AACxB,MAAM,IAAI,CAAC,aAAa,CAAC;AACzB,QAAQ,GAAG,KAAK;AAChB,QAAQ,CAAC,KAAK,GAAG,KAAK;AACtB,OAAO,EAAC;AACR,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,GAAG;AACf,IAAI,OAAO,IAAI,CAAC,MAAM;AACtB,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,qBAAqB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,KAAK;AACrE,EAAE,MAAM,OAAO,GAAG,GAAE;AACpB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,EAAC;AAC/B,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACxC,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAC;AACvC,MAAM,IAAI,QAAQ,KAAK,SAAS,CAAC,QAAQ,EAAE;AAC3C,QAAQ,MAAM,OAAO,mCAAmC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAC;AACrF,QAAQ,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AACrC,UAAU,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;AAClC,UAAU,WAAW,EAAED,WAAgB,EAAE;AACzC,SAAS,EAAC;AACV,OAAO;AACP,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAC;AAC5B,KAAK;AACL,GAAG;AACH,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAC;AAC3E,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAC;AAC3E,GAAG;AACH,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,qBAAqB,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,KAAK;AACxF,EAAE,MAAM,GAAG,GAAG,OAAO,CAAC,OAAM;AAC5B,EAAE,MAAM,OAAO,GAAGE,aAAsB,GAAE;AAC1C,EAAEC,YAAqB,CAAC,OAAO,EAAE,GAAG,EAAC;AACrC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAChC,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,EAAC;AAC/B,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAI;AAC9C,IAAI,MAAM,KAAK,kCAAkC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAK;AACrF,IAAIA,YAAqB,CAAC,OAAO,EAAE,QAAQ,EAAC;AAC5C,IAAIA,YAAqB,CAAC,OAAO,EAAE,KAAK,EAAC;AACzC,IAAIC,cAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAC;AAC3D,GAAG;AACH,EAAE,OAAOC,YAAqB,CAAC,OAAO,CAAC;AACvC,EAAC;AA4BD;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,KAAK;AACnE,EAAE,MAAM,OAAO,GAAGC,aAAsB,CAAC,MAAM,EAAC;AAChD,EAAE,MAAM,SAAS,GAAGN,WAAgB,GAAE;AACtC,EAAE,MAAM,KAAK,GAAG,GAAE;AAClB,EAAE,MAAM,OAAO,GAAG,GAAE;AACpB,EAAE,MAAM,eAAe,GAAG,GAAE;AAC5B,EAAE,MAAM,OAAO,GAAG,GAAE;AACpB,EAAE,MAAM,GAAG,GAAGO,WAAoB,CAAC,OAAO,EAAC;AAC3C,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAChC,IAAI,MAAM,QAAQ,GAAGA,WAAoB,CAAC,OAAO,EAAC;AAClD,IAAI,IAAI,KAAK,GAAGA,WAAoB,CAAC,OAAO,EAAC;AAC7C,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAACC,aAAsB,CAAC,OAAO,CAAC,EAAC;AAC7D,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAC;AACnD,IAAI,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAC;AACpD,IAAI,MAAM,SAAS,GAAG,UAAU,KAAK,SAAS,GAAG,CAAC,GAAG,UAAU,CAAC,MAAK;AACrE,IAAI,IAAI,SAAS,GAAG,KAAK,KAAK,SAAS,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE;AACxG,MAAM,IAAI,KAAK,KAAK,IAAI,EAAE;AAC1B;AACA,QAAQ,IAAI,QAAQ,KAAK,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,aAAa,EAAE,IAAI,IAAI,EAAE;AAClF;AACA;AACA,UAAU,KAAK,GAAE;AACjB,SAAS,MAAM;AACf,UAAU,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAC;AAC3C,SAAS;AACT,OAAO,MAAM;AACb,QAAQ,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAC;AAC7C,OAAO;AACP,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;AACnC,QAAQ,KAAK;AACb,QAAQ,WAAW,EAAE,SAAS;AAC9B,OAAO,EAAC;AACR,MAAM,IAAI,UAAU,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AACtD,QAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAC;AAC5B,OAAO,MAAM,IAAI,UAAU,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;AAC7D,QAAQ,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAC;AAC9B,OAAO,MAAM,IAAI,KAAK,KAAK,IAAI,EAAE;AACjC,QAAQ,IAAI,CAACP,YAAc,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;AAC/C,UAAU,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAC;AACxC,SAAS;AACT,QAAQ,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAC;AAC9B,OAAO;AACP,KAAK;AACL,GAAG;AACH,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5E,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC9B,MAAM,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO;AAC9C,KAAK,EAAE,MAAM,CAAC,EAAC;AACf,GAAG;AACH,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACpE,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC9B,MAAM,KAAK,EAAE,OAAO,EAAE,OAAO;AAC7B,KAAK,EAAE,MAAM,CAAC,EAAC;AACf,GAAG;AACH;;ACtSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,WAAW,GAAG,MAAM;AACjC,EAAE,IAAI,KAAK,GAAG,KAAI;AAClB,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK;AACnB,IAAI,IAAI,KAAK,EAAE;AACf,MAAM,KAAK,GAAG,MAAK;AACnB,MAAM,IAAI;AACV,QAAQ,CAAC,GAAE;AACX,OAAO,SAAS;AAChB,QAAQ,KAAK,GAAG,KAAI;AACpB,OAAO;AACP,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS,EAAE;AAChC,MAAM,CAAC,GAAE;AACT,KAAK;AACL,GAAG;AACH;;AC1Cc,MAAO,YAAY,CAAA;AAAjC,IAAA,WAAA,GAAA;QAES,IAAS,CAAA,SAAA,GAAkC,EAAE,CAAA;KAuCrD;IArCQ,EAAE,CAAC,KAAa,EAAE,EAAY,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;AAC3B,SAAA;QAED,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAE9B,QAAA,OAAO,IAAI,CAAA;KACZ;AAES,IAAA,IAAI,CAAC,KAAa,EAAE,GAAG,IAAS,EAAA;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAEvC,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAC1D,SAAA;AAED,QAAA,OAAO,IAAI,CAAA;KACZ;IAEM,GAAG,CAAC,KAAa,EAAE,EAAa,EAAA;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAEvC,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,EAAE,EAAE;AACN,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,KAAK,EAAE,CAAC,CAAA;AACtE,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC7B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAA;KACZ;IAED,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;KACpB;AACF;;MCxBY,eAAe,CAAA;AAQ1B,IAAA,WAAA,CAAY,IAAS,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,aAAa,EAAE,CAAA;AAC9B,QAAA,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;KACxD;IAED,WAAW,GAAA;AACT,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KACjC;IAED,aAAa,GAAA;AACX,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KACnC;IAED,iBAAiB,GAAA;AACf,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KACvC;AAED,IAAA,YAAY,CAAC,IAAiB,EAAA;QAC5B,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;KACxC;AAED,IAAA,cAAc,CAAC,MAAc,EAAA;QAC3B,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;KAC5C;AAED,IAAA,kBAAkB,CAAC,IAAgB,EAAA;QACjC,OAAO,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;KAC9C;IAED,MAAM,GAAA;AACJ,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KAC5B;AACF;;AC1DD;AACA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,mBAAmB,GAAG,EAAC;AAC7B,MAAM,mBAAmB,GAAG,EAAC;AAC7B,MAAM,gBAAgB,GAAG,EAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK;AAChD,EAAEE,YAAqB,CAAC,OAAO,EAAE,mBAAmB,EAAC;AACrD,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,GAAG,EAAC;AACrC,EAAEM,kBAA2B,CAAC,OAAO,EAAE,EAAE,EAAC;AAC1C,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,kBAAkB,KAAK;AACpE,EAAEN,YAAqB,CAAC,OAAO,EAAE,mBAAmB,EAAC;AACrD,EAAEM,kBAA2B,CAAC,OAAO,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAC;AACtF,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG;AACnD,EAAE,cAAc,CAAC,OAAO,EAAE,GAAG,EAAEC,iBAA0B,CAAC,OAAO,CAAC,EAAC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,iBAAiB,KAAK;AAClE,EAAE,IAAI;AACN,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,EAAEA,iBAA0B,CAAC,OAAO,CAAC,EAAE,iBAAiB,EAAC;AAC9E,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB;AACA,IAAI,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,EAAC;AACpE,GAAG;AACH,EAAC;AACD;AACA;AACA;AACA;AACA;AACO,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK;AAChD,EAAEP,YAAqB,CAAC,OAAO,EAAE,gBAAgB,EAAC;AAClD,EAAEM,kBAA2B,CAAC,OAAO,EAAE,MAAM,EAAC;AAC9C,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,UAAU,GAAG,cAAa;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,iBAAiB,KAAK;AAC7E,EAAE,MAAM,WAAW,GAAGF,WAAoB,CAAC,OAAO,EAAC;AACnD,EAAE,QAAQ,WAAW;AACrB,IAAI,KAAK,mBAAmB;AAC5B,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAC;AAC1C,MAAM,KAAK;AACX,IAAI,KAAK,mBAAmB;AAC5B,MAAM,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAC;AACpD,MAAM,KAAK;AACX,IAAI,KAAK,gBAAgB;AACzB,MAAM,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAC;AACjD,MAAM,KAAK;AACX,IAAI;AACJ,MAAM,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;AAC7C,GAAG;AACH,EAAE,OAAO,WAAW;AACpB;;ICpHY,YAOX;AAPD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,WAAA,CAAA,WAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACb,IAAA,WAAA,CAAA,WAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,WAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAkB,CAAA;AAClB,IAAA,WAAA,CAAA,WAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACb,IAAA,WAAA,CAAA,WAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACX,CAAC,EAPW,WAAW,KAAX,WAAW,GAOtB,EAAA,CAAA,CAAA,CAAA;IAEW,gBAIX;AAJD,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,eAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,eAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC/B,CAAC,EAJW,eAAe,KAAf,eAAe,GAI1B,EAAA,CAAA,CAAA;;MCvBY,eAAe,CAAA;AAK1B,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,OAAO,GAAG,aAAa,EAAE,CAAA;KAC/B;AAED,IAAA,GAAG,CAAC,IAAuC,EAAA;QACzC,OAAO,IAAI,CAAC,OAAO,CAAA;KACpB;IAED,YAAY,GAAA;AACV,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KAClC;AACF;;MCVY,eAAe,CAAA;AAM1B,IAAA,WAAA,CAAY,OAAwB,EAAA;QAFpC,IAAW,CAAA,WAAA,GAAG,KAAK,CAAA;AAGjB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;KACvB;AAEM,IAAA,cAAc,CAAC,KAAc,EAAA;AAClC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;AAExB,QAAA,OAAO,IAAI,CAAA;KACZ;AAEM,IAAA,KAAK,CAAC,QAA4B,EAAE,UAAU,GAAG,IAAI,EAAA;AAC1D,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;AACxB,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;AAElC,QAAA,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAA;AAE3C,QAAA,QAAQ,IAAI;YACV,KAAK,WAAW,CAAC,IAAI;AACnB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;gBAC3C,MAAK;YAEP,KAAK,WAAW,CAAC,SAAS;AACxB,gBAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAA;gBACpC,MAAK;YAEP,KAAK,WAAW,CAAC,IAAI;AACnB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;gBAC/B,MAAK;YAEP,KAAK,WAAW,CAAC,cAAc;AAC7B,gBAAA,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAA;gBACzC,MAAK;YAEP,KAAK,WAAW,CAAC,SAAS;gBACxB,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;gBACzD,MAAK;AAEP,YAAA;AACE,gBAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,CAAA,CAAE,CAAC,CAAA;AAClE,SAAA;;QAGD,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,kBAAkB,GAAG,CAAC,EAAE;YAC7C,IAAI,IAAI,CAAC,WAAW,EAAE;;;AAGpB,gBAAA,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;AAClE,aAAA;AAAM,iBAAA;;;AAGL,gBAAA,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;AAC7D,aAAA;AACF,SAAA;KACF;IAEO,gBAAgB,CAAC,QAA4B,EAAE,UAAmB,EAAA;AACxE,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;AAExB,QAAA,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;;AAGtC,QAAA,MAAM,eAAe,GAAG,eAAe,CACrC,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,OAAO,EACf,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CACT,CAAA;;AAGD,QAAA,IAAI,UAAU,IAAI,eAAe,KAAK,mBAAmB,EAAE;AACzD,YAAA,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAA;AACvB,SAAA;AAED,QAAA,IAAI,eAAe,KAAK,gBAAgB,IAAI,eAAe,KAAK,mBAAmB,EAAE;AACnF,YAAA,IAAI,QAAQ,CAAC,eAAe,GAAG,CAAC,EAAE;AAChC,gBAAA,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,aAAA;AACF,SAAA;KACF;AAEO,IAAA,qBAAqB,CAAC,QAA4B,EAAA;AACxD,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;AAExB,QAAAI,oBAAsC,CACpC,QAAQ,CAAC,SAAS,EAClB,OAAO,CAAC,iBAAiB,EAAE,EAC3B,QAAQ,CACT,CAAA;KACF;AAEO,IAAA,gBAAgB,CAAC,QAA4B,EAAA;AACnD,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;QAExB,eAAe,CACb,OAAO,CAAC,OAAO,EACf,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC/C,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC7C,CAAA;KACF;AAEO,IAAA,0BAA0B,CAAC,QAA4B,EAAA;AAC7D,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;AAExB,QAAA,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;QAC3C,OAAO,CAAC,kBAAkB,CACxBC,qBAAuC,CACrC,QAAQ,CAAC,SAAS,EAClB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,CAClD,CACF,CAAA;KACF;AACF;;MC1HY,aAAa,CAAA;IAMxB,WAAY,CAAA,OAAqC,EAAE,IAAA,GAAY,EAAE,EAAA;AAC/D,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;KACtC;IAED,MAAM,GAAA;AACJ,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KAClC;AAED,IAAA,IAAI,CAAC,SAAc,EAAA;AACjB,QAAA,SAAS,KAAT,IAAA,IAAA,SAAS,KAAT,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,SAAS,CAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;KAC/B;AAED,IAAA,SAAS,CAAC,OAAe,EAAA;QACvBC,OAAU,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;KACnC;AACF;;ACrBK,MAAO,kBAAmB,SAAQ,eAAe,CAAA;AAAvD,IAAA,WAAA,GAAA;;AACE,QAAA,IAAA,CAAA,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;QAEvB,IAAW,CAAA,WAAA,GAAG,iBAAiB,CAAA;KAahC;AAXC,IAAA,GAAG,CAAC,IAAuC,EAAA;AACzC,QAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE;AACxC,YAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;AAC9E,SAAA;QAEDT,cAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAa,CAAC,CAAA;QACzDD,YAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9CW,cAA2B,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAExD,OAAO,IAAI,CAAC,OAAO,CAAA;KACpB;AACF;;AChBK,MAAO,kBAAmB,SAAQ,eAAe,CAAA;AAAvD,IAAA,WAAA,GAAA;;AACE,QAAA,IAAA,CAAA,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;QAEvB,IAAW,CAAA,WAAA,GAAG,kBAAkB,CAAA;KAajC;AAXC,IAAA,GAAG,CAAC,IAAuC,EAAA;AACzC,QAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE;AACxC,YAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;AAC9E,SAAA;QAEDV,cAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAa,CAAC,CAAA;QACzDD,YAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9CY,cAA2B,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAExD,OAAO,IAAI,CAAC,OAAO,CAAA;KACpB;AACF;;ACjBK,MAAO,qBAAsB,SAAQ,eAAe,CAAA;AAA1D,IAAA,WAAA,GAAA;;AACE,QAAA,IAAA,CAAA,IAAI,GAAG,WAAW,CAAC,cAAc,CAAA;QAEjC,IAAW,CAAA,WAAA,GAAG,0BAA0B,CAAA;KAYzC;AAVC,IAAA,GAAG,CAAC,IAAuC,EAAA;QAEzC,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QACxE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAE9BX,cAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAa,CAAC,CAAA;QACzDD,YAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAE9C,OAAO,IAAI,CAAC,OAAO,CAAA;KACpB;AACF;;ACdK,MAAO,qBAAsB,SAAQ,eAAe,CAAA;AAA1D,IAAA,WAAA,GAAA;;AACE,QAAA,IAAA,CAAA,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;QAEvB,IAAW,CAAA,WAAA,GAAG,gBAAgB,CAAA;KAa/B;AAXC,IAAA,GAAG,CAAC,IAAuC,EAAA;AACzC,QAAA,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;AACrC,YAAA,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAA;AAC/E,SAAA;QAED,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAa,CAAC,CAAA;QAChD,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACrC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QAE7C,OAAO,IAAI,CAAC,OAAO,CAAA;KACpB;AACF;;AChBK,MAAO,gBAAiB,SAAQ,eAAe,CAAA;AAArD,IAAA,WAAA,GAAA;;AACE,QAAA,IAAA,CAAA,IAAI,GAAG,WAAW,CAAC,SAAS,CAAA;QAE5B,IAAW,CAAA,WAAA,GAAG,yBAAyB,CAAA;KAyBxC;AAvBC,IAAA,GAAG,CAAC,IAAuC,EAAA;AACzC,QAAA,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE;AACzC,YAAA,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;AAC3E,SAAA;AAED,QAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,WAAW,EAAE;AACvC,YAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;AACzE,SAAA;QAEDC,cAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAa,CAAC,CAAA;QACzDD,YAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;AAE9C,QAAA,IAAI,eAAe,CAAA;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;YAC7B,eAAe,GAAG,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;AACtE,SAAA;AAAM,aAAA;AACL,YAAA,eAAe,GAAG,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AACnF,SAAA;QAEDM,kBAA2B,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;QAE1D,OAAO,IAAI,CAAC,OAAO,CAAA;KACpB;AACF;;AC5BK,MAAO,aAAc,SAAQ,eAAe,CAAA;AAAlD,IAAA,WAAA,GAAA;;AACE,QAAA,IAAA,CAAA,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;QAEvB,IAAW,CAAA,WAAA,GAAG,mBAAmB,CAAA;KAUlC;AARC,IAAA,GAAG,CAAC,IAAuC,EAAA;QACzC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAa,CAAC,CAAA;QAChD,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAErC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAEtC,OAAO,IAAI,CAAC,OAAO,CAAA;KACpB;AACF;;AClBD;AACA;AACA;AACA;AACA;AA0BA;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,GAAG,MAAM;AACvC,EAAEO,GAAU,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;;ACwD9F,MAAO,2BAA4B,SAAQ,YAAY,CAAA;AAiE3D,IAAA,WAAA,CAAY,aAAuD,EAAA;AACjE,QAAA,KAAK,EAAE,CAAA;AAjEF,QAAA,IAAA,CAAA,aAAa,GAAqD;AACvE,YAAA,GAAG,EAAE,EAAE;;AAEP,YAAA,QAAQ,EAAE,SAAS;;AAEnB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,iBAAiB,EAAE,SAAS;AAC5B,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,iBAAiB,EAAE,KAAK;;AAExB,YAAA,uBAAuB,EAAE,KAAK;;AAE9B,YAAA,KAAK,EAAE,IAAI;;AAEX,YAAA,YAAY,EAAE,CAAC;;AAEf,YAAA,MAAM,EAAE,CAAC;;AAET,YAAA,WAAW,EAAE,CAAC;;AAEd,YAAA,QAAQ,EAAE,IAAI;;AAEd,YAAA,QAAQ,EAAE,KAAK;;AAEf,YAAA,MAAM,EAAE,IAAI;;AAEZ,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,MAAM,EAAE,MAAM,IAAI;AAClB,YAAA,SAAS,EAAE,MAAM,IAAI;AACrB,YAAA,SAAS,EAAE,MAAM,IAAI;AACrB,YAAA,iBAAiB,EAAE,MAAM,IAAI;AAC7B,YAAA,QAAQ,EAAE,MAAM,IAAI;AACpB,YAAA,YAAY,EAAE,MAAM,IAAI;AACxB,YAAA,OAAO,EAAE,MAAM,IAAI;AACnB,YAAA,SAAS,EAAE,MAAM,IAAI;AACrB,YAAA,iBAAiB,EAAE,MAAM,IAAI;AAC7B,YAAA,iBAAiB,EAAE,MAAM,IAAI;AAC7B,YAAA,KAAK,EAAE,KAAK;SACb,CAAA;QAED,IAA4B,CAAA,4BAAA,GAAG,KAAK,CAAA;QAEpC,IAAS,CAAA,SAAA,GAAqB,IAAI,CAAA;QAElC,IAAa,CAAA,aAAA,GAAG,IAAI,CAAA;AAEpB,QAAA,IAAA,CAAA,MAAM,GAAG,eAAe,CAAC,YAAY,CAAA;QAErC,IAAmB,CAAA,mBAAA,GAAG,CAAC,CAAA;AAEvB,QAAA,IAAA,CAAA,GAAG,GAAGC,WAAiB,EAAE,CAAA;AAEzB,QAAA,IAAA,CAAA,SAAS,GAAQ;AACf,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,iBAAiB,EAAE,IAAI;SACxB,CAAA;QAED,IAAiB,CAAA,iBAAA,GAGN,IAAI,CAAA;QA0Cf,IAAqB,CAAA,qBAAA,GAAuB,SAAS,CAAA;QAErD,IAAuB,CAAA,uBAAA,GAAoC,SAAS,CAAA;QA6BpE,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AArEpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;AAEpC,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,GAAG,SAAS,CAAA;QAEpH,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;AAC1C,QAAA,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACvC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;QAChD,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;QAChD,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAA;QAChE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;AAC9C,QAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC3C,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QACtD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC5C,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;QAChD,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAA;QAChE,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAA;AAEhE,QAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AACzC,QAAA,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAE7C,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAE7B,IAAI,CAAC,SAAS,CAAC,iBAAiB,GAAG,WAAW,CAC5C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAC/B,IAAI,CAAC,aAAa,CAAC,uBAAuB,GAAG,EAAE,CAChD,CAAA;AAED,QAAA,IAAI,OAAO,aAAa,CAAC,OAAO,KAAK,WAAW,EAAE;AAChD,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,OAAO,CAAA;AAC3C,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,OAAM;AACP,SAAA;QAED,IAAI,CAAC,OAAO,EAAE,CAAA;KACf;IAMD,MAAM,MAAM,CAAC,KAAY,EAAA;AACvB,QAAA,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAA;KACnC;IAED,MAAM,QAAQ,CAAC,IAAwB,EAAA;AACrC,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAA;KACpC;AAED,IAAA,MAAM,CAAC,QAA4B,EAAA;QACjC,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;AAC5C,SAAA;QAED,IAAI,IAAI,CAAC,uBAAuB,EAAE;AAChC,YAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;AAChD,SAAA;KACF;AAED,IAAA,MAAM,CAAC,QAA4B,EAAA;;KAGlC;IAEM,gBAAgB,CAAC,gBAAmE,EAAE,EAAA;AAC3F,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,aAAa,EAAE,CAAA;KACjE;AAMD,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,SAAS,EAAE;YAC7C,OAAM;AACP,SAAA;;QAGD,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAA;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS,CAAA;AACtC,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QAEzB,MAAM,cAAc,GAAG,MAAK;YAC1B,IAAI,aAAa,GAAG,KAAK,CAAA;AAEzB,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACpE,gBAAA,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK;AAC/B,gBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY;AAC7C,gBAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;AACjC,gBAAA,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW;AAC3C,gBAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;AACrC,gBAAA,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;AACrC,gBAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;AACjC,gBAAA,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO;gBACnC,aAAa,EAAE,OAAO,IAAG;AACvB,oBAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,EAAE;wBACxC,OAAO,CAAC,KAAK,EAAE,CAAA;AAChB,qBAAA;iBACF;AACF,aAAA,CAAC,CAAC,KAAK,CAAC,CAAC,KAAU,KAAI;;;AAGtB,gBAAA,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE;AAC7C,oBAAA,MAAM,KAAK,CAAA;AACZ,iBAAA;AACH,aAAC,CAAC,CAAA;YAEF,OAAO;gBACL,YAAY;gBACZ,UAAU,EAAE,MAAK;oBACf,aAAa,GAAG,IAAI,CAAA;iBACrB;aACF,CAAA;AACH,SAAC,CAAA;QAED,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,cAAc,EAAE,CAAA;AACrD,QAAA,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAA;AAEtC,QAAA,OAAO,YAAY,CAAA;KACpB;IAED,yBAAyB,GAAA;QACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACrC,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;AACtB,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;AACtB,aAAA;;AAGD,YAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7D,YAAA,EAAE,CAAC,UAAU,GAAG,aAAa,CAAA;AAC7B,YAAA,EAAE,CAAC,SAAS,GAAG,CAAC,OAAY,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAC9D,EAAE,CAAC,OAAO,GAAG,CAAC,OAAY,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;AACrE,YAAA,EAAE,CAAC,MAAM,GAAG,CAAC,OAAY,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AACxD,YAAA,EAAE,CAAC,OAAO,GAAG,CAAC,GAAQ,KAAI;gBACxB,MAAM,CAAC,GAAG,CAAC,CAAA;AACb,aAAC,CAAA;AACD,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;;AAGnB,YAAA,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,UAAU,CAAA;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,UAAU,EAAE,CAAC,CAAA;;YAG3D,IAAI,CAAC,iBAAiB,GAAG;gBACvB,OAAO;gBACP,MAAM;aACP,CAAA;AACH,SAAC,CAAC,CAAA;KACH;AAED,IAAA,SAAS,CAAC,KAAmB,EAAA;QAC3B,IAAI,CAAC,wBAAwB,EAAE,CAAA;KAChC;IAED,wBAAwB,GAAA;QACtB,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAA;AAChC,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;AAE7B,YAAA,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,SAAS,CAAA;AACvC,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,SAAS,EAAE,CAAC,CAAA;AAC1D,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AACrB,SAAA;KACF;IAED,qBAAqB,GAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;KAC9B;IAED,uBAAuB,GAAA;;AACrB,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,iBAAiB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,EAAE,CAAA;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;KAC9B;IAED,eAAe,GAAA;;;AAEb,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,SAAS,EAAE;YAC7C,OAAM;AACP,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC7B,OAAM;AACP,SAAA;;AAGD,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,uBAAuB,IAAIjB,WAAgB,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE;YAC/F,OAAM;AACP,SAAA;;;AAID,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,EAAE,CAAA;KACxB;IAED,sBAAsB,GAAA;AACpB,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,OAAM;AACP,SAAA;QAED,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;KACrD;;AAGD,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;YACxE,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAC1E,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAA;KAC9B;AAED,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,MAAM,aAAa,GAAGkB,iBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QAE1E,OAAO,CAAA,EAAG,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,CAAI,CAAA,EAAA,aAAa,CAAE,CAAA,CAAA,CAAE,CAAA;KACnF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;AAE1B,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;YAC3B,OAAM;AACP,SAAA;QAED,IAAI;AACF,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;AACvB,SAAA;QAAC,MAAM;;AAEP,SAAA;KACF;AAED,IAAA,IAAI,CAAC,OAAY,EAAA;;QACf,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAU,MAAK,aAAa,CAAC,IAAI,EAAE;AACrD,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC7B,SAAA;KACF;IAED,OAAO,CAAC,EAAE,KAAK,EAAqB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;AAErB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,SAAS,EAAE;AAC7C,YAAA,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,YAAY,CAAA;AAC1C,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,YAAY,EAAE,CAAC,CAAA;YAC7D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;AACnC,SAAA;AAED,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,EAAE;AACpC,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE;AACxC,gBAAA,OAAO,CAAC,IAAI,CAAC,oKAAoK,CAAC,CAAA;AACnL,aAAA;AAAM,iBAAA;gBACL,OAAO,CAAC,IAAI,CAAC,CAAA,iEAAA,EAAoE,KAAK,CAAC,MAAM,CAAE,CAAA,CAAC,CAAA;AACjG,aAAA;AAED,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;AAC3B,SAAA;AAED,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE;AACjC,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AAC7B,gBAAA,OAAO,CAAC,IAAI,CAAC,iHAAiH,CAAC,CAAA;AAC/H,gBAAA,OAAM;AACP,aAAA;AACF,SAAA;AAED,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE;YACrC,OAAO,CAAC,IAAI,CAAC,CAAA,kEAAA,EAAqE,KAAK,CAAC,MAAM,CAAE,CAAA,CAAC,CAAA;AACjG,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;AAC3B,SAAA;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;;YAE1B,IAAI,CAAC,uBAAuB,EAAE,CAAA;AAC/B,SAAA;aAAM,IAAI,IAAI,CAAC,aAAa,EAAE;;YAE7B,IAAI,CAAC,OAAO,EAAE,CAAA;AACf,SAAA;;QAGD,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,OAAM;AACP,SAAA;;AAGD,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,YAAY,EAAE;YAChD,OAAM;AACP,SAAA;;AAGD,QAAA,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,YAAY,CAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,YAAY,EAAE,CAAC,CAAA;QAC7D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;KACnC;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AAEpB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAC5B,YAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;AACxC,SAAA;AAED,QAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;;;;QAK/C,IAAI,CAAC,qBAAqB,EAAE,CAAA;QAE5B,IAAI,CAAC,UAAU,EAAE,CAAA;QAEjB,IAAI,CAAC,kBAAkB,EAAE,CAAA;AAEzB,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,OAAM;AACP,SAAA;QAED,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;KACxD;AAEF;;AC9dK,MAAO,gBAAiB,SAAQ,eAAe,CAAA;AAArD,IAAA,WAAA,GAAA;;AACE,QAAA,IAAA,CAAA,IAAI,GAAG,WAAW,CAAC,SAAS,CAAA;QAE5B,IAAW,CAAA,WAAA,GAAG,qBAAqB,CAAA;KASpC;AAPC,IAAA,GAAG,CAAC,IAAuC,EAAA;;QACzC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAa,CAAC,CAAA;QAChD,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;AACrC,QAAA,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC,CAAA;QAEhD,OAAO,IAAI,CAAC,OAAO,CAAA;KACpB;AACF;;ACZK,MAAO,YAAa,SAAQ,eAAe,CAAA;AAAjD,IAAA,WAAA,GAAA;;AACE,QAAA,IAAA,CAAA,IAAI,GAAG,WAAW,CAAC,KAAK,CAAA;QAExB,IAAW,CAAA,WAAA,GAAG,wCAAwC,CAAA;KAQvD;AANC,IAAA,GAAG,CAAC,IAAuC,EAAA;QACzCd,cAAuB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAa,CAAC,CAAA;QACzDD,YAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAE9C,OAAO,IAAI,CAAC,OAAO,CAAA;KACpB;AACF;;ACqFK,MAAO,kBAAmB,SAAQ,YAAY,CAAA;AAgDlD,IAAA,WAAA,CAAY,aAA8C,EAAA;AACxD,QAAA,KAAK,EAAE,CAAA;AAhDF,QAAA,IAAA,CAAA,aAAa,GAA4C;AAC9D,YAAA,IAAI,EAAE,EAAE;;AAER,YAAA,QAAQ,EAAE,SAAS;;AAEnB,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,iBAAiB,EAAE,KAAK;AACxB,YAAA,eAAe,EAAE,MAAM,IAAI;AAC3B,YAAA,sBAAsB,EAAE,MAAM,IAAI;AAClC,YAAA,MAAM,EAAE,MAAM,IAAI;AAClB,YAAA,SAAS,EAAE,MAAM,IAAI;AACrB,YAAA,SAAS,EAAE,MAAM,IAAI;AACrB,YAAA,iBAAiB,EAAE,MAAM,IAAI;AAC7B,YAAA,QAAQ,EAAE,MAAM,IAAI;AACpB,YAAA,QAAQ,EAAE,MAAM,IAAI;AACpB,YAAA,YAAY,EAAE,MAAM,IAAI;AACxB,YAAA,OAAO,EAAE,MAAM,IAAI;AACnB,YAAA,SAAS,EAAE,MAAM,IAAI;AACrB,YAAA,iBAAiB,EAAE,MAAM,IAAI;AAC7B,YAAA,iBAAiB,EAAE,MAAM,IAAI;AAC7B,YAAA,WAAW,EAAE,MAAM,IAAI;AACvB,YAAA,KAAK,EAAE,KAAK;SACb,CAAA;QAED,IAA4B,CAAA,4BAAA,GAAG,KAAK,CAAA;QAEpC,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAA;QAEhB,IAAe,CAAA,eAAA,GAAG,CAAC,CAAA;AAEnB,QAAA,IAAA,CAAA,MAAM,GAAG,eAAe,CAAC,YAAY,CAAA;QAErC,IAAe,CAAA,eAAA,GAAG,KAAK,CAAA;QAEvB,IAAe,CAAA,eAAA,GAAuB,SAAS,CAAA;AAE/C,QAAA,IAAA,CAAA,GAAG,GAAGc,WAAiB,EAAE,CAAA;AAEzB,QAAA,IAAA,CAAA,SAAS,GAAQ;AACf,YAAA,SAAS,EAAE,IAAI;SAChB,CAAA;QAED,IAAW,CAAA,WAAA,GAAG,IAAI,CAAA;QAwGlB,IAAiB,CAAA,iBAAA,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAmMhD,IAA+B,CAAA,+BAAA,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAvS1E,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;QAEpC,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAA;QAC3F,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,SAAS,GAAG,aAAa,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE/G,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC1C,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;QAChD,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAA;QAChE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;QAChD,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAA;QAChE,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAA;QAChE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;QAEpD,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;QAC5D,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAA;AAE1E,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;QAChF,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;AAEzF,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACvE,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;AAEnF,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAE7E,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AACzE,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;QAC5E,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;AAErF,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAE3E,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QACtF,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAA;AAE/F,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;QAChF,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAQ,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;QAEzF,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAK;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAA;AAC9F,SAAC,CAAC,CAAA;QAEF,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAK;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAA;AAC9F,SAAC,CAAC,CAAA;AAEF,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AACjE,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACnE,IAAI,CAAC,sBAAsB,EAAE,CAAA;AAE7B,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;YACxC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,WAAW,CACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EACzB,IAAI,CAAC,aAAa,CAAC,iBAAiB,CACrC,CAAA;AACF,SAAA;QAED,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KAClD;IAEM,QAAQ,CAAC,EAAE,MAAM,EAAuB,EAAA;AAC7C,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;KAChC;IAEM,gBAAgB,CAAC,gBAA0D,EAAE,EAAA;QAClF,IAAI,CAAC,aAAa,CAAC,iBAAiB,IAAK,aAAkE,CAAC,GAAG,EAAE;YAC/G,MAAM,uBAAuB,GAAG,aAAiE,CAAA;AAEjG,YAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,GAAG,IAAI,2BAA2B,CAAC;gBACrE,GAAG,EAAE,uBAAuB,CAAC,GAAG;gBAChC,UAAU,EAAE,uBAAuB,CAAC,UAAU;AAC/C,aAAA,CAAC,CAAA;AACH,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,aAAa,EAAE,CAAA;KACjE;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAA;KACnC;AAED,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAA;KACpC;AAED,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,eAAe,GAAG,CAAC,CAAA;KAChC;IAED,qBAAqB,CAAC,eAAe,GAAG,CAAC,EAAA;AACvC,QAAA,IAAI,CAAC,eAAe,IAAI,eAAe,CAAA;QACvC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;KACnD;IAED,SAAS,GAAA;QACP,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;KAClG;IAID,YAAY,GAAA;AACV,QAAA,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAA;KACjF;IAED,sBAAsB,GAAA;AACpB,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,OAAM;AACP,SAAA;QAED,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;KAChE;AAED,IAAA,aAAa,CAAC,OAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;KAChF;IAED,qBAAqB,CAAC,MAAkB,EAAE,MAAW,EAAA;QACnD,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,OAAM;AACP,SAAA;AAED,QAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;KAClF;IAED,sBAAsB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAO,EAAE,MAAW,EAAA;AAClE,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAE5D,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;SACtC,EAAE,IAAI,CAAC,CAAA;KACT;AAED,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,QAAQ,CAAA;KACrB;IAED,IAAI,MAAM,CAAC,KAAK,EAAA;AACd,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;YAC3B,OAAM;AACP,SAAA;AAED,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,EAAE;YACrC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAA;AACtD,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;KAC7B;AAED,IAAA,gBAAgB,CAAC,OAAe,EAAA;QAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;KACpC;AAED,IAAA,IAAI,wBAAwB,GAAA;AAC1B,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,CAAA;KAC3D;;AAGD,IAAA,MAAM,OAAO,GAAA;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAA;KACtD;IAED,UAAU,GAAA;QACR,IAAI,CAAC,0BAA0B,EAAE,CAAA;QACjC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;KAClD;IAED,MAAM,MAAM,CAAC,KAAY,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;QAE5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QAE5B,IAAI,IAAI,CAAC,wBAAwB,EAAE;AACjC,YAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC/B,gBAAA,KAAK,EAAE,MAAM,IAAI,CAAC,QAAQ,EAAE;AAC5B,gBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;AACtC,aAAA,CAAC,CAAA;AACH,SAAA;QAED,IAAI,CAAC,SAAS,EAAE,CAAA;KACjB;AAED,IAAA,MAAM,QAAQ,GAAA;QACZ,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,UAAU,EAAE;YAClD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAA;AAC9C,YAAA,OAAO,KAAK,CAAA;AACb,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAA;KAChC;IAED,SAAS,GAAA;QACP,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;QAEjG,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;AAC3C,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACjC,gBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;AACtC,aAAA,CAAC,CAAA;AACH,SAAA;KACF;AAED,IAAA,IAAI,CAAC,OAAqC,EAAE,IAAS,EAAE,SAAS,GAAG,KAAK,EAAA;QACtE,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAM;AAE7B,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,GAAG,CAAC,MAAK,EAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA,EAAE,CAAC,CAAA;AAClD,SAAA;QAED,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AAEtD,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAA;QAChE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAA;KACzD;AAED,IAAA,SAAS,CAAC,KAAmB,EAAA;QAC3B,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAE/C,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAA;AAE5C,QAAA,IAAI,YAAY,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;AAC5C,YAAA,OAAM;AACP,SAAA;AAED,QAAA,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;AAEpC,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEzE,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;KACzC;AAED,IAAA,OAAO,CAAC,KAAiB,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;;AAGnB,QAAA,qBAAqB,CACnB,IAAI,CAAC,SAAS,EACd,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACjG,IAAI,CACL,CAAA;KACF;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;AAEpB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAC5B,YAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;AACxC,SAAA;AAED,QAAA,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,CAAA;QAEnF,IAAI,CAAC,UAAU,EAAE,CAAA;QAEjB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAA;QACzD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAA;QAEvD,IAAI,CAAC,kBAAkB,EAAE,CAAA;AAEzB,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;AAClE,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;AAExB,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,OAAM;AACP,SAAA;QAED,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAA;KACnE;AAED,IAAA,uBAAuB,CAAC,MAAc,EAAA;QACpC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;AAC7C,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;QAC5B,IAAI,CAAC,UAAU,EAAE,CAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,YAAY,CAAA;KAC3C;AAED,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;AAE5B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC1B,IAAI,CAAC,SAAS,EAAE,CAAA;KACjB;AAED,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;KACpC;AAID,IAAA,0BAA0B,CAAC,IAAiB,EAAA;AAC1C,QAAA,IAAI,CAAC,GAAG,CAAC,MAAK;AACZ,YAAA,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAA;AAEzC,YAAA,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,EAAE,CAAA;AAE5C,YAAA,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;YAEpC,IAAI,eAAe,CAAC,OAAO,CAAC;iBACzB,cAAc,CAAC,IAAI,CAAC;AACpB,iBAAA,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AACvB,SAAC,CAAC,CAAA;KACH;IAED,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACtCE,SAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,+BAA+B,CAAC,CAAA;AACzE,YAAA,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAA;AACzC,SAAA;AAED,QAAA,IAAI,CAAC,GAAG,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;AAC/D,YAAA,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;AAC/D,YAAA,IAAI,CAAC,SAAS,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;AAClE,YAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;AAC7H,SAAC,CAAC,CAAA;KACH;IAED,0BAA0B,GAAA;;AAExB,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACjC,MAAM,EAAE,IAAI,GAAG,EAAE;AACjB,YAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI;SACtC,EAAE,IAAI,CAAC,CAAA;QAER,IAAI,IAAI,CAAC,4BAA4B,EAAE;YACrCC,WAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,+BAA+B,CAAC,CAAA;AAC3E,YAAA,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAA;AAC1C,SAAA;KACF;IAED,SAAS,CAAC,OAAqC,EAAE,IAAU,EAAA;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;YACjC,OAAM;AACP,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACtC,OAAM;AACP,SAAA;AAED,QAAA,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;KAClE;IAED,iBAAiB,CAAC,GAAW,EAAE,KAAU,EAAA;QACvC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;KAC9C;AACF;;ACzeK,MAAO,6BAA8B,SAAQ,2BAA2B,CAAA;AAC5E,IAAA,WAAA,CAAY,aAAyD,EAAA;AACnE,QAAA,KAAK,CAAC,EAAE,GAAG,aAAyD,EAAE,GAAG,EAAE,CAAS,MAAA,EAAA,aAAa,CAAC,KAAK,CAAsB,oBAAA,CAAA,EAAE,CAAC,CAAA;KACjI;AACF;;ACDK,MAAO,oBAAqB,SAAQ,kBAAkB,CAAA;AAC1D,IAAA,WAAA,CAAY,aAAgD,EAAA;AAC1D,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;AACpC,YAAA,aAAa,CAAC,iBAAiB,GAAG,IAAI,6BAA6B,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC,CAAA;AACpG,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;AACxB,YAAA,aAAa,CAAC,KAAK,GAAG,SAAS,CAAA;AAChC,SAAA;QAED,KAAK,CAAC,aAAgD,CAAC,CAAA;KACxD;AACF;;;;"} +\ No newline at end of file ++{"version":3,"file":"hocuspocus-provider.esm.js","sources":["../../../node_modules/lib0/map.js","../../../node_modules/lib0/set.js","../../../node_modules/lib0/array.js","../../../node_modules/lib0/string.js","../../../node_modules/lib0/conditions.js","../../../node_modules/lib0/storage.js","../../../node_modules/lib0/object.js","../../../node_modules/lib0/function.js","../../../node_modules/lib0/environment.js","../../../node_modules/lib0/math.js","../../../node_modules/lib0/binary.js","../../../node_modules/lib0/number.js","../../../node_modules/lib0/encoding.js","../../../node_modules/lib0/error.js","../../../node_modules/lib0/decoding.js","../../../node_modules/lib0/buffer.js","../../../node_modules/lib0/broadcastchannel.js","../../../node_modules/lib0/mutex.js","../../../node_modules/lib0/time.js","../../../node_modules/lib0/observable.js","../../../node_modules/y-protocols/awareness.js","../src/EventEmitter.ts","../../../node_modules/lib0/url.js","../src/types.ts","../src/HocuspocusProviderWebsocket.ts","../src/IncomingMessage.ts","../../../node_modules/y-protocols/sync.js","../src/OutgoingMessage.ts","../src/MessageReceiver.ts","../src/MessageSender.ts","../src/OutgoingMessages/AuthenticationMessage.ts","../src/OutgoingMessages/AwarenessMessage.ts","../src/OutgoingMessages/CloseMessage.ts","../src/OutgoingMessages/QueryAwarenessMessage.ts","../src/OutgoingMessages/StatelessMessage.ts","../src/OutgoingMessages/SyncStepOneMessage.ts","../src/OutgoingMessages/SyncStepTwoMessage.ts","../src/OutgoingMessages/UpdateMessage.ts","../src/HocuspocusProvider.ts","../src/TiptapCollabProviderWebsocket.ts","../src/TiptapCollabProvider.ts"],"sourcesContent":["/**\n * Utility module to work with key-value stores.\n *\n * @module map\n */\n\n/**\n * Creates a new Map instance.\n *\n * @function\n * @return {Map}\n *\n * @function\n */\nexport const create = () => new Map()\n\n/**\n * Copy a Map object into a fresh Map object.\n *\n * @function\n * @template X,Y\n * @param {Map} m\n * @return {Map}\n */\nexport const copy = m => {\n const r = create()\n m.forEach((v, k) => { r.set(k, v) })\n return r\n}\n\n/**\n * Get map property. Create T if property is undefined and set T on map.\n *\n * ```js\n * const listeners = map.setIfUndefined(events, 'eventName', set.create)\n * listeners.add(listener)\n * ```\n *\n * @function\n * @template V,K\n * @template {Map} MAP\n * @param {MAP} map\n * @param {K} key\n * @param {function():V} createT\n * @return {V}\n */\nexport const setIfUndefined = (map, key, createT) => {\n let set = map.get(key)\n if (set === undefined) {\n map.set(key, set = createT())\n }\n return set\n}\n\n/**\n * Creates an Array and populates it with the content of all key-value pairs using the `f(value, key)` function.\n *\n * @function\n * @template K\n * @template V\n * @template R\n * @param {Map} m\n * @param {function(V,K):R} f\n * @return {Array}\n */\nexport const map = (m, f) => {\n const res = []\n for (const [key, value] of m) {\n res.push(f(value, key))\n }\n return res\n}\n\n/**\n * Tests whether any key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @todo should rename to some - similarly to Array.some\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const any = (m, f) => {\n for (const [key, value] of m) {\n if (f(value, key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * Tests whether all key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const all = (m, f) => {\n for (const [key, value] of m) {\n if (!f(value, key)) {\n return false\n }\n }\n return true\n}\n","/**\n * Utility module to work with sets.\n *\n * @module set\n */\n\nexport const create = () => new Set()\n\n/**\n * @template T\n * @param {Set} set\n * @return {Array}\n */\nexport const toArray = set => Array.from(set)\n\n/**\n * @template T\n * @param {Set} set\n * @return {T}\n */\nexport const first = set =>\n set.values().next().value || undefined\n\n/**\n * @template T\n * @param {Iterable} entries\n * @return {Set}\n */\nexport const from = entries => new Set(entries)\n","/**\n * Utility module to work with Arrays.\n *\n * @module array\n */\n\nimport * as set from './set.js'\n\n/**\n * Return the last element of an array. The element must exist\n *\n * @template L\n * @param {ArrayLike} arr\n * @return {L}\n */\nexport const last = arr => arr[arr.length - 1]\n\n/**\n * @template C\n * @return {Array}\n */\nexport const create = () => /** @type {Array} */ ([])\n\n/**\n * @template D\n * @param {Array} a\n * @return {Array}\n */\nexport const copy = a => /** @type {Array} */ (a.slice())\n\n/**\n * Append elements from src to dest\n *\n * @template M\n * @param {Array} dest\n * @param {Array} src\n */\nexport const appendTo = (dest, src) => {\n for (let i = 0; i < src.length; i++) {\n dest.push(src[i])\n }\n}\n\n/**\n * Transforms something array-like to an actual Array.\n *\n * @function\n * @template T\n * @param {ArrayLike|Iterable} arraylike\n * @return {T}\n */\nexport const from = Array.from\n\n/**\n * True iff condition holds on every element in the Array.\n *\n * @function\n * @template ITEM\n * @template {ArrayLike} ARR\n *\n * @param {ARR} arr\n * @param {function(ITEM, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const every = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (!f(arr[i], i, arr)) {\n return false\n }\n }\n return true\n}\n\n/**\n * True iff condition holds on some element in the Array.\n *\n * @function\n * @template S\n * @template {ArrayLike} ARR\n * @param {ARR} arr\n * @param {function(S, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const some = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (f(arr[i], i, arr)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @template ELEM\n *\n * @param {ArrayLike} a\n * @param {ArrayLike} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a.length === b.length && every(a, (item, index) => item === b[index])\n\n/**\n * @template ELEM\n * @param {Array>} arr\n * @return {Array}\n */\nexport const flatten = arr => fold(arr, /** @type {Array} */ ([]), (acc, val) => acc.concat(val))\n\n/**\n * @template T\n * @param {number} len\n * @param {function(number, Array):T} f\n * @return {Array}\n */\nexport const unfold = (len, f) => {\n const array = new Array(len)\n for (let i = 0; i < len; i++) {\n array[i] = f(i, array)\n }\n return array\n}\n\n/**\n * @template T\n * @template RESULT\n * @param {Array} arr\n * @param {RESULT} seed\n * @param {function(RESULT, T, number):RESULT} folder\n */\nexport const fold = (arr, seed, folder) => arr.reduce(folder, seed)\n\nexport const isArray = Array.isArray\n\n/**\n * @template T\n * @param {Array} arr\n * @return {Array}\n */\nexport const unique = arr => from(set.from(arr))\n\n/**\n * @template T\n * @template M\n * @param {ArrayLike} arr\n * @param {function(T):M} mapper\n * @return {Array}\n */\nexport const uniqueBy = (arr, mapper) => {\n /**\n * @type {Set}\n */\n const happened = set.create()\n /**\n * @type {Array}\n */\n const result = []\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i]\n const mapped = mapper(el)\n if (!happened.has(mapped)) {\n happened.add(mapped)\n result.push(el)\n }\n }\n return result\n}\n","import * as array from './array.js'\n\n/**\n * Utility module to work with strings.\n *\n * @module string\n */\n\nexport const fromCharCode = String.fromCharCode\nexport const fromCodePoint = String.fromCodePoint\n\n/**\n * The largest utf16 character.\n * Corresponds to Uint8Array([255, 255]) or charcodeof(2x2^8)\n */\nexport const MAX_UTF16_CHARACTER = fromCharCode(65535)\n\n/**\n * @param {string} s\n * @return {string}\n */\nconst toLowerCase = s => s.toLowerCase()\n\nconst trimLeftRegex = /^\\s*/g\n\n/**\n * @param {string} s\n * @return {string}\n */\nexport const trimLeft = s => s.replace(trimLeftRegex, '')\n\nconst fromCamelCaseRegex = /([A-Z])/g\n\n/**\n * @param {string} s\n * @param {string} separator\n * @return {string}\n */\nexport const fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, match => `${separator}${toLowerCase(match)}`))\n\n/**\n * Compute the utf8ByteLength\n * @param {string} str\n * @return {number}\n */\nexport const utf8ByteLength = str => unescape(encodeURIComponent(str)).length\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Polyfill = str => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n const buf = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n buf[i] = /** @type {number} */ (encodedString.codePointAt(i))\n }\n return buf\n}\n\n/* c8 ignore next */\nexport const utf8TextEncoder = /** @type {TextEncoder} */ (typeof TextEncoder !== 'undefined' ? new TextEncoder() : null)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Native = str => utf8TextEncoder.encode(str)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nexport const encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Polyfill = buf => {\n let remainingLen = buf.length\n let encodedString = ''\n let bufPos = 0\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n const bytes = buf.subarray(bufPos, bufPos + nextLen)\n bufPos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n return decodeURIComponent(escape(encodedString))\n}\n\n/* c8 ignore next */\nexport let utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })\n\n/* c8 ignore start */\nif (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {\n // Safari doesn't handle BOM correctly.\n // This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call\n // Another issue is that from then on no BOM chars are recognized anymore\n /* c8 ignore next */\n utf8TextDecoder = null\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Native = buf => /** @type {TextDecoder} */ (utf8TextDecoder).decode(buf)\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\n/* c8 ignore next */\nexport const decodeUtf8 = utf8TextDecoder ? _decodeUtf8Native : _decodeUtf8Polyfill\n\n/**\n * @param {string} str The initial string\n * @param {number} index Starting position\n * @param {number} remove Number of characters to remove\n * @param {string} insert New content to insert\n */\nexport const splice = (str, index, remove, insert = '') => str.slice(0, index) + insert + str.slice(index + remove)\n\n/**\n * @param {string} source\n * @param {number} n\n */\nexport const repeat = (source, n) => array.unfold(n, () => source).join('')\n","/**\n * Often used conditions.\n *\n * @module conditions\n */\n\n/**\n * @template T\n * @param {T|null|undefined} v\n * @return {T|null}\n */\n/* c8 ignore next */\nexport const undefinedToNull = v => v === undefined ? null : v\n","/* eslint-env browser */\n\n/**\n * Isomorphic variable storage.\n *\n * Uses LocalStorage in the browser and falls back to in-memory storage.\n *\n * @module storage\n */\n\n/* c8 ignore start */\nclass VarStoragePolyfill {\n constructor () {\n this.map = new Map()\n }\n\n /**\n * @param {string} key\n * @param {any} newValue\n */\n setItem (key, newValue) {\n this.map.set(key, newValue)\n }\n\n /**\n * @param {string} key\n */\n getItem (key) {\n return this.map.get(key)\n }\n}\n/* c8 ignore stop */\n\n/**\n * @type {any}\n */\nlet _localStorage = new VarStoragePolyfill()\nlet usePolyfill = true\n\n/* c8 ignore start */\ntry {\n // if the same-origin rule is violated, accessing localStorage might thrown an error\n if (typeof localStorage !== 'undefined') {\n _localStorage = localStorage\n usePolyfill = false\n }\n} catch (e) { }\n/* c8 ignore stop */\n\n/**\n * This is basically localStorage in browser, or a polyfill in nodejs\n */\n/* c8 ignore next */\nexport const varStorage = _localStorage\n\n/**\n * A polyfill for `addEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const onChange = eventHandler => usePolyfill || addEventListener('storage', /** @type {any} */ (eventHandler))\n\n/**\n * A polyfill for `removeEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler))\n","/**\n * Utility functions for working with EcmaScript objects.\n *\n * @module object\n */\n\n/**\n * @return {Object} obj\n */\nexport const create = () => Object.create(null)\n\n/**\n * Object.assign\n */\nexport const assign = Object.assign\n\n/**\n * @param {Object} obj\n */\nexport const keys = Object.keys\n\n/**\n * @template V\n * @param {{[k:string]:V}} obj\n * @param {function(V,string):any} f\n */\nexport const forEach = (obj, f) => {\n for (const key in obj) {\n f(obj[key], key)\n }\n}\n\n/**\n * @todo implement mapToArray & map\n *\n * @template R\n * @param {Object} obj\n * @param {function(any,string):R} f\n * @return {Array}\n */\nexport const map = (obj, f) => {\n const results = []\n for (const key in obj) {\n results.push(f(obj[key], key))\n }\n return results\n}\n\n/**\n * @param {Object} obj\n * @return {number}\n */\nexport const length = obj => keys(obj).length\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const some = (obj, f) => {\n for (const key in obj) {\n if (f(obj[key], key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @param {Object|undefined} obj\n */\nexport const isEmpty = obj => {\n for (const _k in obj) {\n return false\n }\n return true\n}\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const every = (obj, f) => {\n for (const key in obj) {\n if (!f(obj[key], key)) {\n return false\n }\n }\n return true\n}\n\n/**\n * Calls `Object.prototype.hasOwnProperty`.\n *\n * @param {any} obj\n * @param {string|symbol} key\n * @return {boolean}\n */\nexport const hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key)\n\n/**\n * @param {Object} a\n * @param {Object} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a === b || (length(a) === length(b) && every(a, (val, key) => (val !== undefined || hasProperty(b, key)) && b[key] === val))\n","/**\n * Common functions and function call helpers.\n *\n * @module function\n */\n\nimport * as array from './array.js'\nimport * as object from './object.js'\n\n/**\n * Calls all functions in `fs` with args. Only throws after all functions were called.\n *\n * @param {Array} fs\n * @param {Array} args\n */\nexport const callAll = (fs, args, i = 0) => {\n try {\n for (; i < fs.length; i++) {\n fs[i](...args)\n }\n } finally {\n if (i < fs.length) {\n callAll(fs, args, i + 1)\n }\n }\n}\n\nexport const nop = () => {}\n\n/**\n * @template T\n * @param {function():T} f\n * @return {T}\n */\nexport const apply = f => f()\n\n/**\n * @template A\n *\n * @param {A} a\n * @return {A}\n */\nexport const id = a => a\n\n/**\n * @template T\n *\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n */\nexport const equalityStrict = (a, b) => a === b\n\n/**\n * @template T\n *\n * @param {Array|object} a\n * @param {Array|object} b\n * @return {boolean}\n */\nexport const equalityFlat = (a, b) => a === b || (a != null && b != null && a.constructor === b.constructor && ((array.isArray(a) && array.equalFlat(a, /** @type {Array} */ (b))) || (typeof a === 'object' && object.equalFlat(a, b))))\n\n/* c8 ignore start */\n\n/**\n * @param {any} a\n * @param {any} b\n * @return {boolean}\n */\nexport const equalityDeep = (a, b) => {\n if (a == null || b == null) {\n return equalityStrict(a, b)\n }\n if (a.constructor !== b.constructor) {\n return false\n }\n if (a === b) {\n return true\n }\n switch (a.constructor) {\n case ArrayBuffer:\n a = new Uint8Array(a)\n b = new Uint8Array(b)\n // eslint-disable-next-line no-fallthrough\n case Uint8Array: {\n if (a.byteLength !== b.byteLength) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n break\n }\n case Set: {\n if (a.size !== b.size) {\n return false\n }\n for (const value of a) {\n if (!b.has(value)) {\n return false\n }\n }\n break\n }\n case Map: {\n if (a.size !== b.size) {\n return false\n }\n for (const key of a.keys()) {\n if (!b.has(key) || !equalityDeep(a.get(key), b.get(key))) {\n return false\n }\n }\n break\n }\n case Object:\n if (object.length(a) !== object.length(b)) {\n return false\n }\n for (const key in a) {\n if (!object.hasProperty(a, key) || !equalityDeep(a[key], b[key])) {\n return false\n }\n }\n break\n case Array:\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!equalityDeep(a[i], b[i])) {\n return false\n }\n }\n break\n default:\n return false\n }\n return true\n}\n\n/**\n * @template V\n * @template {V} OPTS\n *\n * @param {V} value\n * @param {Array} options\n */\n// @ts-ignore\nexport const isOneOf = (value, options) => options.includes(value)\n/* c8 ignore stop */\n\nexport const isArray = array.isArray\n\n/**\n * @param {any} s\n * @return {s is String}\n */\nexport const isString = (s) => s && s.constructor === String\n\n/**\n * @param {any} n\n * @return {n is Number}\n */\nexport const isNumber = n => n != null && n.constructor === Number\n\n/**\n * @template {abstract new (...args: any) => any} TYPE\n * @param {any} n\n * @param {TYPE} T\n * @return {n is InstanceType}\n */\nexport const is = (n, T) => n && n.constructor === T\n\n/**\n * @template {abstract new (...args: any) => any} TYPE\n * @param {TYPE} T\n */\nexport const isTemplate = (T) =>\n /**\n * @param {any} n\n * @return {n is InstanceType}\n **/\n n => n && n.constructor === T\n","/**\n * Isomorphic module to work access the environment (query params, env variables).\n *\n * @module map\n */\n\nimport * as map from './map.js'\nimport * as string from './string.js'\nimport * as conditions from './conditions.js'\nimport * as storage from './storage.js'\nimport * as f from './function.js'\n\n/* c8 ignore next */\n// @ts-ignore\nexport const isNode = typeof process !== 'undefined' && process.release &&\n /node|io\\.js/.test(process.release.name)\n/* c8 ignore next */\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && !isNode\n/* c8 ignore next 3 */\nexport const isMac = typeof navigator !== 'undefined'\n ? /Mac/.test(navigator.platform)\n : false\n\n/**\n * @type {Map}\n */\nlet params\nconst args = []\n\n/* c8 ignore start */\nconst computeParams = () => {\n if (params === undefined) {\n if (isNode) {\n params = map.create()\n const pargs = process.argv\n let currParamName = null\n for (let i = 0; i < pargs.length; i++) {\n const parg = pargs[i]\n if (parg[0] === '-') {\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n currParamName = parg\n } else {\n if (currParamName !== null) {\n params.set(currParamName, parg)\n currParamName = null\n } else {\n args.push(parg)\n }\n }\n }\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n // in ReactNative for example this would not be true (unless connected to the Remote Debugger)\n } else if (typeof location === 'object') {\n params = map.create(); // eslint-disable-next-line no-undef\n (location.search || '?').slice(1).split('&').forEach((kv) => {\n if (kv.length !== 0) {\n const [key, value] = kv.split('=')\n params.set(`--${string.fromCamelCase(key, '-')}`, value)\n params.set(`-${string.fromCamelCase(key, '-')}`, value)\n }\n })\n } else {\n params = map.create()\n }\n }\n return params\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next */\nexport const hasParam = (name) => computeParams().has(name)\n\n/**\n * @param {string} name\n * @param {string} defaultVal\n * @return {string}\n */\n/* c8 ignore next 2 */\nexport const getParam = (name, defaultVal) =>\n computeParams().get(name) || defaultVal\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 4 */\nexport const getVariable = (name) =>\n isNode\n ? conditions.undefinedToNull(process.env[name.toUpperCase()])\n : conditions.undefinedToNull(storage.varStorage.getItem(name))\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 2 */\nexport const getConf = (name) =>\n computeParams().get('--' + name) || getVariable(name)\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next 2 */\nexport const hasConf = (name) =>\n hasParam('--' + name) || getVariable(name) !== null\n\n/* c8 ignore next */\nexport const production = hasConf('production')\n\n/* c8 ignore next 2 */\nconst forceColor = isNode &&\n f.isOneOf(process.env.FORCE_COLOR, ['true', '1', '2'])\n\n/* c8 ignore start */\nexport const supportsColor = !hasParam('no-colors') &&\n (!isNode || process.stdout.isTTY || forceColor) && (\n !isNode || hasParam('color') || forceColor ||\n getVariable('COLORTERM') !== null ||\n (getVariable('TERM') || '').includes('color')\n)\n/* c8 ignore stop */\n","/**\n * Common Math expressions.\n *\n * @module math\n */\n\nexport const floor = Math.floor\nexport const ceil = Math.ceil\nexport const abs = Math.abs\nexport const imul = Math.imul\nexport const round = Math.round\nexport const log10 = Math.log10\nexport const log2 = Math.log2\nexport const log = Math.log\nexport const sqrt = Math.sqrt\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The sum of a and b\n */\nexport const add = (a, b) => a + b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The smaller element of a and b\n */\nexport const min = (a, b) => a < b ? a : b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The bigger element of a and b\n */\nexport const max = (a, b) => a > b ? a : b\n\nexport const isNaN = Number.isNaN\n\nexport const pow = Math.pow\n/**\n * Base 10 exponential function. Returns the value of 10 raised to the power of pow.\n *\n * @param {number} exp\n * @return {number}\n */\nexport const exp10 = exp => Math.pow(10, exp)\n\nexport const sign = Math.sign\n\n/**\n * @param {number} n\n * @return {boolean} Wether n is negative. This function also differentiates between -0 and +0\n */\nexport const isNegativeZero = n => n !== 0 ? n < 0 : 1 / n < 0\n","/* eslint-env browser */\n\n/**\n * Binary data constants.\n *\n * @module binary\n */\n\n/**\n * n-th bit activated.\n *\n * @type {number}\n */\nexport const BIT1 = 1\nexport const BIT2 = 2\nexport const BIT3 = 4\nexport const BIT4 = 8\nexport const BIT5 = 16\nexport const BIT6 = 32\nexport const BIT7 = 64\nexport const BIT8 = 128\nexport const BIT9 = 256\nexport const BIT10 = 512\nexport const BIT11 = 1024\nexport const BIT12 = 2048\nexport const BIT13 = 4096\nexport const BIT14 = 8192\nexport const BIT15 = 16384\nexport const BIT16 = 32768\nexport const BIT17 = 65536\nexport const BIT18 = 1 << 17\nexport const BIT19 = 1 << 18\nexport const BIT20 = 1 << 19\nexport const BIT21 = 1 << 20\nexport const BIT22 = 1 << 21\nexport const BIT23 = 1 << 22\nexport const BIT24 = 1 << 23\nexport const BIT25 = 1 << 24\nexport const BIT26 = 1 << 25\nexport const BIT27 = 1 << 26\nexport const BIT28 = 1 << 27\nexport const BIT29 = 1 << 28\nexport const BIT30 = 1 << 29\nexport const BIT31 = 1 << 30\nexport const BIT32 = 1 << 31\n\n/**\n * First n bits activated.\n *\n * @type {number}\n */\nexport const BITS0 = 0\nexport const BITS1 = 1\nexport const BITS2 = 3\nexport const BITS3 = 7\nexport const BITS4 = 15\nexport const BITS5 = 31\nexport const BITS6 = 63\nexport const BITS7 = 127\nexport const BITS8 = 255\nexport const BITS9 = 511\nexport const BITS10 = 1023\nexport const BITS11 = 2047\nexport const BITS12 = 4095\nexport const BITS13 = 8191\nexport const BITS14 = 16383\nexport const BITS15 = 32767\nexport const BITS16 = 65535\nexport const BITS17 = BIT18 - 1\nexport const BITS18 = BIT19 - 1\nexport const BITS19 = BIT20 - 1\nexport const BITS20 = BIT21 - 1\nexport const BITS21 = BIT22 - 1\nexport const BITS22 = BIT23 - 1\nexport const BITS23 = BIT24 - 1\nexport const BITS24 = BIT25 - 1\nexport const BITS25 = BIT26 - 1\nexport const BITS26 = BIT27 - 1\nexport const BITS27 = BIT28 - 1\nexport const BITS28 = BIT29 - 1\nexport const BITS29 = BIT30 - 1\nexport const BITS30 = BIT31 - 1\n/**\n * @type {number}\n */\nexport const BITS31 = 0x7FFFFFFF\n/**\n * @type {number}\n */\nexport const BITS32 = 0xFFFFFFFF\n","/**\n * Utility helpers for working with numbers.\n *\n * @module number\n */\n\nimport * as math from './math.js'\nimport * as binary from './binary.js'\n\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER\n\nexport const LOWEST_INT32 = 1 << 31\nexport const HIGHEST_INT32 = binary.BITS31\nexport const HIGHEST_UINT32 = binary.BITS32\n\n/* c8 ignore next */\nexport const isInteger = Number.isInteger || (num => typeof num === 'number' && isFinite(num) && math.floor(num) === num)\nexport const isNaN = Number.isNaN\nexport const parseInt = Number.parseInt\n","/**\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module encoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as binary from './binary.js'\nimport * as string from './string.js'\nimport * as array from './array.js'\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nexport class Encoder {\n constructor () {\n this.cpos = 0\n this.cbuf = new Uint8Array(100)\n /**\n * @type {Array}\n */\n this.bufs = []\n }\n}\n\n/**\n * @function\n * @return {Encoder}\n */\nexport const createEncoder = () => new Encoder()\n\n/**\n * @param {function(Encoder):void} f\n */\nexport const encode = (f) => {\n const encoder = createEncoder()\n f(encoder)\n return toUint8Array(encoder)\n}\n\n/**\n * The current length of the encoded data.\n *\n * @function\n * @param {Encoder} encoder\n * @return {number}\n */\nexport const length = encoder => {\n let len = encoder.cpos\n for (let i = 0; i < encoder.bufs.length; i++) {\n len += encoder.bufs[i].length\n }\n return len\n}\n\n/**\n * Check whether encoder is empty.\n *\n * @function\n * @param {Encoder} encoder\n * @return {boolean}\n */\nexport const hasContent = encoder => encoder.cpos > 0 || encoder.bufs.length > 0\n\n/**\n * Transform to Uint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @return {Uint8Array} The created ArrayBuffer.\n */\nexport const toUint8Array = encoder => {\n const uint8arr = new Uint8Array(length(encoder))\n let curPos = 0\n for (let i = 0; i < encoder.bufs.length; i++) {\n const d = encoder.bufs[i]\n uint8arr.set(d, curPos)\n curPos += d.length\n }\n uint8arr.set(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos), curPos)\n return uint8arr\n}\n\n/**\n * Verify that it is possible to write `len` bytes wtihout checking. If\n * necessary, a new Buffer with the required length is attached.\n *\n * @param {Encoder} encoder\n * @param {number} len\n */\nexport const verifyLen = (encoder, len) => {\n const bufferLen = encoder.cbuf.length\n if (bufferLen - encoder.cpos < len) {\n encoder.bufs.push(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos))\n encoder.cbuf = new Uint8Array(math.max(bufferLen, len) * 2)\n encoder.cpos = 0\n }\n}\n\n/**\n * Write one byte to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The byte that is to be encoded.\n */\nexport const write = (encoder, num) => {\n const bufferLen = encoder.cbuf.length\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf)\n encoder.cbuf = new Uint8Array(bufferLen * 2)\n encoder.cpos = 0\n }\n encoder.cbuf[encoder.cpos++] = num\n}\n\n/**\n * Write one byte at a specific position.\n * Position must already be written (i.e. encoder.length > pos)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos Position to which to write data\n * @param {number} num Unsigned 8-bit integer\n */\nexport const set = (encoder, pos, num) => {\n let buffer = null\n // iterate all buffers and adjust position\n for (let i = 0; i < encoder.bufs.length && buffer === null; i++) {\n const b = encoder.bufs[i]\n if (pos < b.length) {\n buffer = b // found buffer\n } else {\n pos -= b.length\n }\n }\n if (buffer === null) {\n // use current buffer\n buffer = encoder.cbuf\n }\n buffer[pos] = num\n}\n\n/**\n * Write one byte as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint8 = write\n\n/**\n * Write one byte as an unsigned Integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint8 = set\n\n/**\n * Write two bytes as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint16 = (encoder, num) => {\n write(encoder, num & binary.BITS8)\n write(encoder, (num >>> 8) & binary.BITS8)\n}\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint16 = (encoder, pos, num) => {\n set(encoder, pos, num & binary.BITS8)\n set(encoder, pos + 1, (num >>> 8) & binary.BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32 = (encoder, num) => {\n for (let i = 0; i < 4; i++) {\n write(encoder, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write two bytes as an unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32BigEndian = (encoder, num) => {\n for (let i = 3; i >= 0; i--) {\n write(encoder, (num >>> (8 * i)) & binary.BITS8)\n }\n}\n\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint32 = (encoder, pos, num) => {\n for (let i = 0; i < 4; i++) {\n set(encoder, pos + i, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarUint = (encoder, num) => {\n while (num > binary.BITS7) {\n write(encoder, binary.BIT8 | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n write(encoder, binary.BITS7 & num)\n}\n\n/**\n * Write a variable length integer.\n *\n * We use the 7th bit instead for signaling that this is a negative number.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarInt = (encoder, num) => {\n const isNegative = math.isNegativeZero(num)\n if (isNegative) {\n num = -num\n }\n // |- whether to continue reading |- whether is negative |- number\n write(encoder, (num > binary.BITS6 ? binary.BIT8 : 0) | (isNegative ? binary.BIT7 : 0) | (binary.BITS6 & num))\n num = math.floor(num / 64) // shift >>> 6\n // We don't need to consider the case of num === 0 so we can use a different\n // pattern here than above.\n while (num > 0) {\n write(encoder, (num > binary.BITS7 ? binary.BIT8 : 0) | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n}\n\n/**\n * A cache to store strings temporarily\n */\nconst _strBuffer = new Uint8Array(30000)\nconst _maxStrBSize = _strBuffer.length / 3\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringNative = (encoder, str) => {\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n /* c8 ignore next */\n const written = string.utf8TextEncoder.encodeInto(str, _strBuffer).written || 0\n writeVarUint(encoder, written)\n for (let i = 0; i < written; i++) {\n write(encoder, _strBuffer[i])\n }\n } else {\n writeVarUint8Array(encoder, string.encodeUtf8(str))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringPolyfill = (encoder, str) => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n write(encoder, /** @type {number} */ (encodedString.codePointAt(i)))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\n/* c8 ignore next */\nexport const writeVarString = (string.utf8TextEncoder && /** @type {any} */ (string.utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill\n\n/**\n * Write a string terminated by a special byte sequence. This is not very performant and is\n * generally discouraged. However, the resulting byte arrays are lexiographically ordered which\n * makes this a nice feature for databases.\n *\n * The string will be encoded using utf8 and then terminated and escaped using writeTerminatingUint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const writeTerminatedString = (encoder, str) =>\n writeTerminatedUint8Array(encoder, string.encodeUtf8(str))\n\n/**\n * Write a terminating Uint8Array. Note that this is not performant and is generally\n * discouraged. There are few situations when this is needed.\n *\n * We use 0x0 as a terminating character. 0x1 serves as an escape character for 0x0 and 0x1.\n *\n * Example: [0,1,2] is encoded to [1,0,1,1,2,0]. 0x0, and 0x1 needed to be escaped using 0x1. Then\n * the result is terminated using the 0x0 character.\n *\n * This is basically how many systems implement null terminated strings. However, we use an escape\n * character 0x1 to avoid issues and potenial attacks on our database (if this is used as a key\n * encoder for NoSql databases).\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} buf The string that is to be encoded.\n */\nexport const writeTerminatedUint8Array = (encoder, buf) => {\n for (let i = 0; i < buf.length; i++) {\n const b = buf[i]\n if (b === 0 || b === 1) {\n write(encoder, 1)\n }\n write(encoder, buf[i])\n }\n write(encoder, 0)\n}\n\n/**\n * Write the content of another Encoder.\n *\n * @TODO: can be improved!\n * - Note: Should consider that when appending a lot of small Encoders, we should rather clone than referencing the old structure.\n * Encoders start with a rather big initial buffer.\n *\n * @function\n * @param {Encoder} encoder The enUint8Arr\n * @param {Encoder} append The BinaryEncoder to be written.\n */\nexport const writeBinaryEncoder = (encoder, append) => writeUint8Array(encoder, toUint8Array(append))\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeUint8Array = (encoder, uint8Array) => {\n const bufferLen = encoder.cbuf.length\n const cpos = encoder.cpos\n const leftCopyLen = math.min(bufferLen - cpos, uint8Array.length)\n const rightCopyLen = uint8Array.length - leftCopyLen\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos)\n encoder.cpos += leftCopyLen\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf)\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(math.max(bufferLen * 2, rightCopyLen))\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen))\n encoder.cpos = rightCopyLen\n }\n}\n\n/**\n * Append an Uint8Array to Encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeVarUint8Array = (encoder, uint8Array) => {\n writeVarUint(encoder, uint8Array.byteLength)\n writeUint8Array(encoder, uint8Array)\n}\n\n/**\n * Create an DataView of the next `len` bytes. Use it to write data after\n * calling this function.\n *\n * ```js\n * // write float32 using DataView\n * const dv = writeOnDataView(encoder, 4)\n * dv.setFloat32(0, 1.1)\n * // read float32 using DataView\n * const dv = readFromDataView(encoder, 4)\n * dv.getFloat32(0) // => 1.100000023841858 (leaving it to the reader to find out why this is the correct result)\n * ```\n *\n * @param {Encoder} encoder\n * @param {number} len\n * @return {DataView}\n */\nexport const writeOnDataView = (encoder, len) => {\n verifyLen(encoder, len)\n const dview = new DataView(encoder.cbuf.buffer, encoder.cpos, len)\n encoder.cpos += len\n return dview\n}\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat32 = (encoder, num) => writeOnDataView(encoder, 4).setFloat32(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat64 = (encoder, num) => writeOnDataView(encoder, 8).setFloat64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigInt64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigInt64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigUint64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigUint64(0, num, false)\n\nconst floatTestBed = new DataView(new ArrayBuffer(4))\n/**\n * Check if a number can be encoded as a 32 bit float.\n *\n * @param {number} num\n * @return {boolean}\n */\nconst isFloat32 = num => {\n floatTestBed.setFloat32(0, num)\n return floatTestBed.getFloat32(0) === num\n}\n\n/**\n * Encode data with efficient binary format.\n *\n * Differences to JSON:\n * • Transforms data to a binary format (not to a string)\n * • Encodes undefined, NaN, and ArrayBuffer (these can't be represented in JSON)\n * • Numbers are efficiently encoded either as a variable length integer, as a\n * 32 bit float, as a 64 bit float, or as a 64 bit bigint.\n *\n * Encoding table:\n *\n * | Data Type | Prefix | Encoding Method | Comment |\n * | ------------------- | -------- | ------------------ | ------- |\n * | undefined | 127 | | Functions, symbol, and everything that cannot be identified is encoded as undefined |\n * | null | 126 | | |\n * | integer | 125 | writeVarInt | Only encodes 32 bit signed integers |\n * | float32 | 124 | writeFloat32 | |\n * | float64 | 123 | writeFloat64 | |\n * | bigint | 122 | writeBigInt64 | |\n * | boolean (false) | 121 | | True and false are different data types so we save the following byte |\n * | boolean (true) | 120 | | - 0b01111000 so the last bit determines whether true or false |\n * | string | 119 | writeVarString | |\n * | object | 118 | custom | Writes {length} then {length} key-value pairs |\n * | array | 117 | custom | Writes {length} then {length} json values |\n * | Uint8Array | 116 | writeVarUint8Array | We use Uint8Array for any kind of binary data |\n *\n * Reasons for the decreasing prefix:\n * We need the first bit for extendability (later we may want to encode the\n * prefix with writeVarUint). The remaining 7 bits are divided as follows:\n * [0-30] the beginning of the data range is used for custom purposes\n * (defined by the function that uses this library)\n * [31-127] the end of the data range is used for data encoding by\n * lib0/encoding.js\n *\n * @param {Encoder} encoder\n * @param {undefined|null|number|bigint|boolean|string|Object|Array|Uint8Array} data\n */\nexport const writeAny = (encoder, data) => {\n switch (typeof data) {\n case 'string':\n // TYPE 119: STRING\n write(encoder, 119)\n writeVarString(encoder, data)\n break\n case 'number':\n if (number.isInteger(data) && math.abs(data) <= binary.BITS31) {\n // TYPE 125: INTEGER\n write(encoder, 125)\n writeVarInt(encoder, data)\n } else if (isFloat32(data)) {\n // TYPE 124: FLOAT32\n write(encoder, 124)\n writeFloat32(encoder, data)\n } else {\n // TYPE 123: FLOAT64\n write(encoder, 123)\n writeFloat64(encoder, data)\n }\n break\n case 'bigint':\n // TYPE 122: BigInt\n write(encoder, 122)\n writeBigInt64(encoder, data)\n break\n case 'object':\n if (data === null) {\n // TYPE 126: null\n write(encoder, 126)\n } else if (array.isArray(data)) {\n // TYPE 117: Array\n write(encoder, 117)\n writeVarUint(encoder, data.length)\n for (let i = 0; i < data.length; i++) {\n writeAny(encoder, data[i])\n }\n } else if (data instanceof Uint8Array) {\n // TYPE 116: ArrayBuffer\n write(encoder, 116)\n writeVarUint8Array(encoder, data)\n } else {\n // TYPE 118: Object\n write(encoder, 118)\n const keys = Object.keys(data)\n writeVarUint(encoder, keys.length)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n writeVarString(encoder, key)\n writeAny(encoder, data[key])\n }\n }\n break\n case 'boolean':\n // TYPE 120/121: boolean (true/false)\n write(encoder, data ? 120 : 121)\n break\n default:\n // TYPE 127: undefined\n write(encoder, 127)\n }\n}\n\n/**\n * Now come a few stateful encoder that have their own classes.\n */\n\n/**\n * Basic Run Length Encoder - a basic compression implementation.\n *\n * Encodes [1,1,1,7] to [1,3,7,1] (3 times 1, 1 time 7). This encoder might do more harm than good if there are a lot of values that are not repeated.\n *\n * It was originally used for image compression. Cool .. article http://csbruce.com/cbm/transactor/pdfs/trans_v7_i06.pdf\n *\n * @note T must not be null!\n *\n * @template T\n */\nexport class RleEncoder extends Encoder {\n /**\n * @param {function(Encoder, T):void} writer\n */\n constructor (writer) {\n super()\n /**\n * The writer\n */\n this.w = writer\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n /**\n * @param {T} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n this.w(this, v)\n this.s = v\n }\n }\n}\n\n/**\n * Basic diff decoder using variable length encoding.\n *\n * Encodes the values [3, 1100, 1101, 1050, 0] to [3, 1097, 1, -51, -1050] using writeVarInt.\n */\nexport class IntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n writeVarInt(this, v - this.s)\n this.s = v\n }\n}\n\n/**\n * A combination of IntDiffEncoder and RleEncoder.\n *\n * Basically first writes the IntDiffEncoder and then counts duplicate diffs using RleEncoding.\n *\n * Encodes the values [1,1,1,2,3,4,5,6] as [1,1,0,2,1,5] (RLE([1,0,0,1,1,1,1,1]) ⇒ RleIntDiff[1,1,0,2,1,5])\n */\nexport class RleIntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v && this.count > 0) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n writeVarInt(this, v - this.s)\n this.s = v\n }\n }\n}\n\n/**\n * @param {UintOptRleEncoder} encoder\n */\nconst flushUintOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set sign to positive\n // case 2: write several values. set sign to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encoder.count === 1 ? encoder.s : -encoder.s)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * Optimized Rle encoder that does not suffer from the mentioned problem of the basic Rle encoder.\n *\n * Internally uses VarInt encoder to write unsigned integers. If the input occurs multiple times, we write\n * write it as a negative number. The UintOptRleDecoder then understands that it needs to read a count.\n *\n * Encodes [1,2,3,3,3] as [1,2,-3,3] (once 1, once 2, three times 3)\n */\nexport class UintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Increasing Uint Optimized RLE Encoder\n *\n * The RLE encoder counts the number of same occurences of the same value.\n * The IncUintOptRle encoder counts if the value increases.\n * I.e. 7, 8, 9, 10 will be encoded as [-7, 4]. 1, 3, 5 will be encoded\n * as [1, 3, 5].\n */\nexport class IncUintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s + this.count === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * @param {IntDiffOptRleEncoder} encoder\n */\nconst flushIntDiffOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // 31 bit making up the diff | wether to write the counter\n // const encodedDiff = encoder.diff << 1 | (encoder.count === 1 ? 0 : 1)\n const encodedDiff = encoder.diff * 2 + (encoder.count === 1 ? 0 : 1)\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set first bit to positive\n // case 2: write several values. set first bit to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encodedDiff)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * A combination of the IntDiffEncoder and the UintOptRleEncoder.\n *\n * The count approach is similar to the UintDiffOptRleEncoder, but instead of using the negative bitflag, it encodes\n * in the LSB whether a count is to be read. Therefore this Encoder only supports 31 bit integers!\n *\n * Encodes [1, 2, 3, 2] as [3, 1, 6, -1] (more specifically [(1 << 1) | 1, (3 << 0) | 0, -1])\n *\n * Internally uses variable length encoding. Contrary to normal UintVar encoding, the first byte contains:\n * * 1 bit that denotes whether the next value is a count (LSB)\n * * 1 bit that denotes whether this value is negative (MSB - 1)\n * * 1 bit that denotes whether to continue reading the variable length integer (MSB)\n *\n * Therefore, only five bits remain to encode diff ranges.\n *\n * Use this Encoder only when appropriate. In most cases, this is probably a bad idea.\n */\nexport class IntDiffOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.diff === v - this.s) {\n this.s = v\n this.count++\n } else {\n flushIntDiffOptRleEncoder(this)\n this.count = 1\n this.diff = v - this.s\n this.s = v\n }\n }\n\n toUint8Array () {\n flushIntDiffOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Optimized String Encoder.\n *\n * Encoding many small strings in a simple Encoder is not very efficient. The function call to decode a string takes some time and creates references that must be eventually deleted.\n * In practice, when decoding several million small strings, the GC will kick in more and more often to collect orphaned string objects (or maybe there is another reason?).\n *\n * This string encoder solves the above problem. All strings are concatenated and written as a single string using a single encoding call.\n *\n * The lengths are encoded using a UintOptRleEncoder.\n */\nexport class StringEncoder {\n constructor () {\n /**\n * @type {Array}\n */\n this.sarr = []\n this.s = ''\n this.lensE = new UintOptRleEncoder()\n }\n\n /**\n * @param {string} string\n */\n write (string) {\n this.s += string\n if (this.s.length > 19) {\n this.sarr.push(this.s)\n this.s = ''\n }\n this.lensE.write(string.length)\n }\n\n toUint8Array () {\n const encoder = new Encoder()\n this.sarr.push(this.s)\n this.s = ''\n writeVarString(encoder, this.sarr.join(''))\n writeUint8Array(encoder, this.lensE.toUint8Array())\n return toUint8Array(encoder)\n }\n}\n","/**\n * Error helpers.\n *\n * @module error\n */\n\n/**\n * @param {string} s\n * @return {Error}\n */\n/* c8 ignore next */\nexport const create = s => new Error(s)\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const methodUnimplemented = () => {\n throw create('Method unimplemented')\n}\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const unexpectedCase = () => {\n throw create('Unexpected case')\n}\n","/**\n * Efficient schema-less binary decoding with support for variable length encoding.\n *\n * Use [lib0/decoding] with [lib0/encoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module decoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as binary from './binary.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as string from './string.js'\nimport * as error from './error.js'\nimport * as encoding from './encoding.js'\n\nconst errorUnexpectedEndOfArray = error.create('Unexpected end of array')\nconst errorIntegerOutOfRange = error.create('Integer out of Range')\n\n/**\n * A Decoder handles the decoding of an Uint8Array.\n */\nexport class Decoder {\n /**\n * @param {Uint8Array} uint8Array Binary data to decode\n */\n constructor (uint8Array) {\n /**\n * Decoding target.\n *\n * @type {Uint8Array}\n */\n this.arr = uint8Array\n /**\n * Current decoding position.\n *\n * @type {number}\n */\n this.pos = 0\n }\n}\n\n/**\n * @function\n * @param {Uint8Array} uint8Array\n * @return {Decoder}\n */\nexport const createDecoder = uint8Array => new Decoder(uint8Array)\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {boolean}\n */\nexport const hasContent = decoder => decoder.pos !== decoder.arr.length\n\n/**\n * Clone a decoder instance.\n * Optionally set a new position parameter.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} [newPos] Defaults to current position\n * @return {Decoder} A clone of `decoder`\n */\nexport const clone = (decoder, newPos = decoder.pos) => {\n const _decoder = createDecoder(decoder.arr)\n _decoder.pos = newPos\n return _decoder\n}\n\n/**\n * Create an Uint8Array view of the next `len` bytes and advance the position by `len`.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} len The length of bytes to read\n * @return {Uint8Array}\n */\nexport const readUint8Array = (decoder, len) => {\n const view = buffer.createUint8ArrayViewFromArrayBuffer(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len)\n decoder.pos += len\n return view\n}\n\n/**\n * Read variable length Uint8Array.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readVarUint8Array = decoder => readUint8Array(decoder, readVarUint(decoder))\n\n/**\n * Read the rest of the content as an ArrayBuffer\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTailAsUint8Array = decoder => readUint8Array(decoder, decoder.arr.length - decoder.pos)\n\n/**\n * Skip one byte, jump to the next position.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} The next position\n */\nexport const skip8 = decoder => decoder.pos++\n\n/**\n * Read one byte as unsigned integer.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} Unsigned 8-bit integer\n */\nexport const readUint8 = decoder => decoder.arr[decoder.pos++]\n\n/**\n * Read 2 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint16 = decoder => {\n const uint =\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n decoder.pos += 2\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32 = decoder => {\n const uint =\n (decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32BigEndian = decoder => {\n const uint =\n (decoder.arr[decoder.pos + 3] +\n (decoder.arr[decoder.pos + 2] << 8) +\n (decoder.arr[decoder.pos + 1] << 16) +\n (decoder.arr[decoder.pos] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint8 = decoder => decoder.arr[decoder.pos]\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint16 = decoder =>\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint32 = decoder => (\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)\n) >>> 0\n\n/**\n * Read unsigned integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarUint = decoder => {\n let num = 0\n let mult = 1\n const len = decoder.arr.length\n while (decoder.pos < len) {\n const r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult // shift $r << (7*#iterations) and add it to num\n mult *= 128 // next iteration, shift 7 \"more\" to the left\n if (r < binary.BIT8) {\n return num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Read signed integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n * @todo This should probably create the inverse ~num if number is negative - but this would be a breaking change.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarInt = decoder => {\n let r = decoder.arr[decoder.pos++]\n let num = r & binary.BITS6\n let mult = 64\n const sign = (r & binary.BIT7) > 0 ? -1 : 1\n if ((r & binary.BIT8) === 0) {\n // don't continue reading\n return sign * num\n }\n const len = decoder.arr.length\n while (decoder.pos < len) {\n r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult\n mult *= 128\n if (r < binary.BIT8) {\n return sign * num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarUint = decoder => {\n const pos = decoder.pos\n const s = readVarUint(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarInt = decoder => {\n const pos = decoder.pos\n const s = readVarInt(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * We don't test this function anymore as we use native decoding/encoding by default now.\n * Better not modify this anymore..\n *\n * Transforming utf8 to a string is pretty expensive. The code performs 10x better\n * when String.fromCodePoint is fed with all characters as arguments.\n * But most environments have a maximum number of arguments per functions.\n * For effiency reasons we apply a maximum of 10000 characters at once.\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String.\n */\n/* c8 ignore start */\nexport const _readVarStringPolyfill = decoder => {\n let remainingLen = readVarUint(decoder)\n if (remainingLen === 0) {\n return ''\n } else {\n let encodedString = String.fromCodePoint(readUint8(decoder)) // remember to decrease remainingLen\n if (--remainingLen < 100) { // do not create a Uint8Array for small strings\n while (remainingLen--) {\n encodedString += String.fromCodePoint(readUint8(decoder))\n }\n } else {\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n // this is dangerous, we create a fresh array view from the existing buffer\n const bytes = decoder.arr.subarray(decoder.pos, decoder.pos + nextLen)\n decoder.pos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n }\n return decodeURIComponent(escape(encodedString))\n }\n}\n/* c8 ignore stop */\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n */\nexport const _readVarStringNative = decoder =>\n /** @type any */ (string.utf8TextDecoder).decode(readVarUint8Array(decoder))\n\n/**\n * Read string of variable length\n * * varUint is used to store the length of the string\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n *\n */\n/* c8 ignore next */\nexport const readVarString = string.utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill\n\n/**\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTerminatedUint8Array = decoder => {\n const encoder = encoding.createEncoder()\n let b\n while (true) {\n b = readUint8(decoder)\n if (b === 0) {\n return encoding.toUint8Array(encoder)\n }\n if (b === 1) {\n b = readUint8(decoder)\n }\n encoding.write(encoder, b)\n }\n}\n\n/**\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const readTerminatedString = decoder => string.decodeUtf8(readTerminatedUint8Array(decoder))\n\n/**\n * Look ahead and read varString without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const peekVarString = decoder => {\n const pos = decoder.pos\n const s = readVarString(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * @param {Decoder} decoder\n * @param {number} len\n * @return {DataView}\n */\nexport const readFromDataView = (decoder, len) => {\n const dv = new DataView(decoder.arr.buffer, decoder.arr.byteOffset + decoder.pos, len)\n decoder.pos += len\n return dv\n}\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat32 = decoder => readFromDataView(decoder, 4).getFloat32(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat64 = decoder => readFromDataView(decoder, 8).getFloat64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigInt64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigInt64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigUint64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigUint64(0, false)\n\n/**\n * @type {Array}\n */\nconst readAnyLookupTable = [\n decoder => undefined, // CASE 127: undefined\n decoder => null, // CASE 126: null\n readVarInt, // CASE 125: integer\n readFloat32, // CASE 124: float32\n readFloat64, // CASE 123: float64\n readBigInt64, // CASE 122: bigint\n decoder => false, // CASE 121: boolean (false)\n decoder => true, // CASE 120: boolean (true)\n readVarString, // CASE 119: string\n decoder => { // CASE 118: object\n const len = readVarUint(decoder)\n /**\n * @type {Object}\n */\n const obj = {}\n for (let i = 0; i < len; i++) {\n const key = readVarString(decoder)\n obj[key] = readAny(decoder)\n }\n return obj\n },\n decoder => { // CASE 117: array\n const len = readVarUint(decoder)\n const arr = []\n for (let i = 0; i < len; i++) {\n arr.push(readAny(decoder))\n }\n return arr\n },\n readVarUint8Array // CASE 116: Uint8Array\n]\n\n/**\n * @param {Decoder} decoder\n */\nexport const readAny = decoder => readAnyLookupTable[127 - readUint8(decoder)](decoder)\n\n/**\n * T must not be null.\n *\n * @template T\n */\nexport class RleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {function(Decoder):T} reader\n */\n constructor (uint8Array, reader) {\n super(uint8Array)\n /**\n * The reader\n */\n this.reader = reader\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = this.reader(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {T} */ (this.s)\n }\n}\n\nexport class IntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @return {number}\n */\n read () {\n this.s += readVarInt(this)\n return this.s\n }\n}\n\nexport class RleIntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n this.s += readVarInt(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class UintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class IncUintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s++)\n }\n}\n\nexport class IntDiffOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n const diff = readVarInt(this)\n // if the first bit is set, we read more data\n const hasCount = diff & 1\n this.diff = math.floor(diff / 2) // shift >> 1\n this.count = 1\n if (hasCount) {\n this.count = readVarUint(this) + 2\n }\n }\n this.s += this.diff\n this.count--\n return this.s\n }\n}\n\nexport class StringDecoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n this.decoder = new UintOptRleDecoder(uint8Array)\n this.str = readVarString(this.decoder)\n /**\n * @type {number}\n */\n this.spos = 0\n }\n\n /**\n * @return {string}\n */\n read () {\n const end = this.spos + this.decoder.read()\n const res = this.str.slice(this.spos, end)\n this.spos = end\n return res\n }\n}\n","/**\n * Utility functions to work with buffers (Uint8Array).\n *\n * @module buffer\n */\n\nimport * as string from './string.js'\nimport * as env from './environment.js'\nimport * as encoding from './encoding.js'\nimport * as decoding from './decoding.js'\n\n/**\n * @param {number} len\n */\nexport const createUint8ArrayFromLen = len => new Uint8Array(len)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n * @param {number} byteOffset\n * @param {number} length\n */\nexport const createUint8ArrayViewFromArrayBuffer = (buffer, byteOffset, length) => new Uint8Array(buffer, byteOffset, length)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n */\nexport const createUint8ArrayFromArrayBuffer = buffer => new Uint8Array(buffer)\n\n/* c8 ignore start */\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Browser = bytes => {\n let s = ''\n for (let i = 0; i < bytes.byteLength; i++) {\n s += string.fromCharCode(bytes[i])\n }\n // eslint-disable-next-line no-undef\n return btoa(s)\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Node = bytes => Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64')\n\n/* c8 ignore start */\n/**\n * @param {string} s\n * @return {Uint8Array}\n */\nconst fromBase64Browser = s => {\n // eslint-disable-next-line no-undef\n const a = atob(s)\n const bytes = createUint8ArrayFromLen(a.length)\n for (let i = 0; i < a.length; i++) {\n bytes[i] = a.charCodeAt(i)\n }\n return bytes\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} s\n */\nconst fromBase64Node = s => {\n const buf = Buffer.from(s, 'base64')\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/* c8 ignore next */\nexport const toBase64 = env.isBrowser ? toBase64Browser : toBase64Node\n\n/* c8 ignore next */\nexport const fromBase64 = env.isBrowser ? fromBase64Browser : fromBase64Node\n\n/**\n * Copy the content of an Uint8Array view to a new ArrayBuffer.\n *\n * @param {Uint8Array} uint8Array\n * @return {Uint8Array}\n */\nexport const copyUint8Array = uint8Array => {\n const newBuf = createUint8ArrayFromLen(uint8Array.byteLength)\n newBuf.set(uint8Array)\n return newBuf\n}\n\n/**\n * Encode anything as a UInt8Array. It's a pun on typescripts's `any` type.\n * See encoding.writeAny for more information.\n *\n * @param {any} data\n * @return {Uint8Array}\n */\nexport const encodeAny = data => {\n const encoder = encoding.createEncoder()\n encoding.writeAny(encoder, data)\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Decode an any-encoded value.\n *\n * @param {Uint8Array} buf\n * @return {any}\n */\nexport const decodeAny = buf => decoding.readAny(decoding.createDecoder(buf))\n","/* eslint-env browser */\n\n/**\n * Helpers for cross-tab communication using broadcastchannel with LocalStorage fallback.\n *\n * ```js\n * // In browser window A:\n * broadcastchannel.subscribe('my events', data => console.log(data))\n * broadcastchannel.publish('my events', 'Hello world!') // => A: 'Hello world!' fires synchronously in same tab\n *\n * // In browser window B:\n * broadcastchannel.publish('my events', 'hello from tab B') // => A: 'hello from tab B'\n * ```\n *\n * @module broadcastchannel\n */\n\n// @todo before next major: use Uint8Array instead as buffer object\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as buffer from './buffer.js'\nimport * as storage from './storage.js'\n\n/**\n * @typedef {Object} Channel\n * @property {Set} Channel.subs\n * @property {any} Channel.bc\n */\n\n/**\n * @type {Map}\n */\nconst channels = new Map()\n\n/* c8 ignore start */\nclass LocalStoragePolyfill {\n /**\n * @param {string} room\n */\n constructor (room) {\n this.room = room\n /**\n * @type {null|function({data:ArrayBuffer}):void}\n */\n this.onmessage = null\n /**\n * @param {any} e\n */\n this._onChange = e => e.key === room && this.onmessage !== null && this.onmessage({ data: buffer.fromBase64(e.newValue || '') })\n storage.onChange(this._onChange)\n }\n\n /**\n * @param {ArrayBuffer} buf\n */\n postMessage (buf) {\n storage.varStorage.setItem(this.room, buffer.toBase64(buffer.createUint8ArrayFromArrayBuffer(buf)))\n }\n\n close () {\n storage.offChange(this._onChange)\n }\n}\n/* c8 ignore stop */\n\n// Use BroadcastChannel or Polyfill\n/* c8 ignore next */\nconst BC = typeof BroadcastChannel === 'undefined' ? LocalStoragePolyfill : BroadcastChannel\n\n/**\n * @param {string} room\n * @return {Channel}\n */\nconst getChannel = room =>\n map.setIfUndefined(channels, room, () => {\n const subs = set.create()\n const bc = new BC(room)\n /**\n * @param {{data:ArrayBuffer}} e\n */\n /* c8 ignore next */\n bc.onmessage = e => subs.forEach(sub => sub(e.data, 'broadcastchannel'))\n return {\n bc, subs\n }\n })\n\n/**\n * Subscribe to global `publish` events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const subscribe = (room, f) => {\n getChannel(room).subs.add(f)\n return f\n}\n\n/**\n * Unsubscribe from `publish` global events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nexport const unsubscribe = (room, f) => {\n const channel = getChannel(room)\n const unsubscribed = channel.subs.delete(f)\n if (unsubscribed && channel.subs.size === 0) {\n channel.bc.close()\n channels.delete(room)\n }\n return unsubscribed\n}\n\n/**\n * Publish data to all subscribers (including subscribers on this tab)\n *\n * @function\n * @param {string} room\n * @param {any} data\n * @param {any} [origin]\n */\nexport const publish = (room, data, origin = null) => {\n const c = getChannel(room)\n c.bc.postMessage(data)\n c.subs.forEach(sub => sub(data, origin))\n}\n","/**\n * Mutual exclude for JavaScript.\n *\n * @module mutex\n */\n\n/**\n * @callback mutex\n * @param {function():void} cb Only executed when this mutex is not in the current stack\n * @param {function():void} [elseCb] Executed when this mutex is in the current stack\n */\n\n/**\n * Creates a mutual exclude function with the following property:\n *\n * ```js\n * const mutex = createMutex()\n * mutex(() => {\n * // This function is immediately executed\n * mutex(() => {\n * // This function is not executed, as the mutex is already active.\n * })\n * })\n * ```\n *\n * @return {mutex} A mutual exclude function\n * @public\n */\nexport const createMutex = () => {\n let token = true\n return (f, g) => {\n if (token) {\n token = false\n try {\n f()\n } finally {\n token = true\n }\n } else if (g !== undefined) {\n g()\n }\n }\n}\n","/**\n * Utility module to work with time.\n *\n * @module time\n */\n\nimport * as metric from './metric.js'\nimport * as math from './math.js'\n\n/**\n * Return current time.\n *\n * @return {Date}\n */\nexport const getDate = () => new Date()\n\n/**\n * Return current unix time.\n *\n * @return {number}\n */\nexport const getUnixTime = Date.now\n\n/**\n * Transform time (in ms) to a human readable format. E.g. 1100 => 1.1s. 60s => 1min. .001 => 10μs.\n *\n * @param {number} d duration in milliseconds\n * @return {string} humanized approximation of time\n */\nexport const humanizeDuration = d => {\n if (d < 60000) {\n const p = metric.prefix(d, -1)\n return math.round(p.n * 100) / 100 + p.prefix + 's'\n }\n d = math.floor(d / 1000)\n const seconds = d % 60\n const minutes = math.floor(d / 60) % 60\n const hours = math.floor(d / 3600) % 24\n const days = math.floor(d / 86400)\n if (days > 0) {\n return days + 'd' + ((hours > 0 || minutes > 30) ? ' ' + (minutes > 30 ? hours + 1 : hours) + 'h' : '')\n }\n if (hours > 0) {\n /* c8 ignore next */\n return hours + 'h' + ((minutes > 0 || seconds > 30) ? ' ' + (seconds > 30 ? minutes + 1 : minutes) + 'min' : '')\n }\n return minutes + 'min' + (seconds > 0 ? ' ' + seconds + 's' : '')\n}\n","/**\n * Observable class prototype.\n *\n * @module observable\n */\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as array from './array.js'\n\n/**\n * Handles named events.\n *\n * @template N\n */\nexport class Observable {\n constructor () {\n /**\n * Some desc.\n * @type {Map}\n */\n this._observers = map.create()\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, name, set.create).add(f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, _f)\n f(...args)\n }\n this.on(name, _f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @param {N} name The event name.\n * @param {Array} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n","/**\n * @module awareness-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as time from 'lib0/time'\nimport * as math from 'lib0/math'\nimport { Observable } from 'lib0/observable'\nimport * as f from 'lib0/function'\nimport * as Y from 'yjs' // eslint-disable-line\n\nexport const outdatedTimeout = 30000\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable}\n */\nexport class Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super()\n this.doc = doc\n /**\n * @type {number}\n */\n this.clientID = doc.clientID\n /**\n * Maps from client id to client state\n * @type {Map>}\n */\n this.states = new Map()\n /**\n * @type {Map}\n */\n this.meta = new Map()\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = time.getUnixTime()\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState())\n }\n /**\n * @type {Array}\n */\n const remove = []\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid)\n }\n })\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout')\n }\n }, math.floor(outdatedTimeout / 10)))\n doc.on('destroy', () => {\n this.destroy()\n })\n this.setLocalState({})\n }\n\n destroy () {\n this.emit('destroy', [this])\n this.setLocalState(null)\n super.destroy()\n clearInterval(this._checkInterval)\n }\n\n /**\n * @return {Object|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID\n const currLocalMeta = this.meta.get(clientID)\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1\n const prevState = this.states.get(clientID)\n if (state === null) {\n this.states.delete(clientID)\n } else {\n this.states.set(clientID, state)\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: time.getUnixTime()\n })\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n if (state === null) {\n removed.push(clientID)\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID)\n }\n } else {\n updated.push(clientID)\n if (!f.equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID)\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local'])\n }\n this.emit('update', [{ added, updated, removed }, 'local'])\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState()\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n })\n }\n }\n\n /**\n * @return {Map>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array} clients\n * @param {any} origin\n */\nexport const removeAwarenessStates = (awareness, clients, origin) => {\n const removed = []\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i]\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID)\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID))\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: time.getUnixTime()\n })\n }\n removed.push(clientID)\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin])\n awareness.emit('update', [{ added: [], updated: [], removed }, origin])\n }\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Array} clients\n * @return {Uint8Array}\n */\nexport const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = clients[i]\n const state = states.get(clientID) || null\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(state))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Modify the content of an awareness update before re-encoding it to an awareness update.\n *\n * This might be useful when you have a central server that wants to ensure that clients\n * cant hijack somebody elses identity.\n *\n * @param {Uint8Array} update\n * @param {function(any):any} modify\n * @return {Uint8Array}\n */\nexport const modifyAwarenessUpdate = (update, modify) => {\n const decoder = decoding.createDecoder(update)\n const encoder = encoding.createEncoder()\n const len = decoding.readVarUint(decoder)\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n const clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const modifiedState = modify(state)\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(modifiedState))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nexport const applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = decoding.createDecoder(update)\n const timestamp = time.getUnixTime()\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n const len = decoding.readVarUint(decoder)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n let clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const clientMeta = awareness.meta.get(clientID)\n const prevState = awareness.states.get(clientID)\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++\n } else {\n awareness.states.delete(clientID)\n }\n } else {\n awareness.states.set(clientID, state)\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n })\n if (clientMeta === undefined && state !== null) {\n added.push(clientID)\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID)\n } else if (state !== null) {\n if (!f.equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID)\n }\n updated.push(clientID)\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin])\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin])\n }\n}\n","export default class EventEmitter {\n\n public callbacks: { [key: string]: Function[] } = {}\n\n public on(event: string, fn: Function): this {\n if (!this.callbacks[event]) {\n this.callbacks[event] = []\n }\n\n this.callbacks[event].push(fn)\n\n return this\n }\n\n protected emit(event: string, ...args: any): this {\n const callbacks = this.callbacks[event]\n\n if (callbacks) {\n callbacks.forEach(callback => callback.apply(this, args))\n }\n\n return this\n }\n\n public off(event: string, fn?: Function): this {\n const callbacks = this.callbacks[event]\n\n if (callbacks) {\n if (fn) {\n this.callbacks[event] = callbacks.filter(callback => callback !== fn)\n } else {\n delete this.callbacks[event]\n }\n }\n\n return this\n }\n\n removeAllListeners(): void {\n this.callbacks = {}\n }\n}\n","/**\n * Utility module to work with urls.\n *\n * @module url\n */\n\nimport * as object from './object.js'\n\n/**\n * Parse query parameters from an url.\n *\n * @param {string} url\n * @return {Object}\n */\nexport const decodeQueryParams = url => {\n /**\n * @type {Object}\n */\n const query = {}\n const urlQuerySplit = url.split('?')\n const pairs = urlQuerySplit[urlQuerySplit.length - 1].split('&')\n for (let i = 0; i < pairs.length; i++) {\n const item = pairs[i]\n if (item.length > 0) {\n const pair = item.split('=')\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '')\n }\n }\n return query\n}\n\n/**\n * @param {Object} params\n * @return {string}\n */\nexport const encodeQueryParams = params =>\n object.map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&')\n","import { Encoder } from 'lib0/encoding'\nimport type { CloseEvent, Event, MessageEvent } from 'ws'\nimport { Awareness } from 'y-protocols/awareness'\nimport * as Y from 'yjs'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.js'\nimport { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.js'\nimport { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js'\nimport { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js'\nimport { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js'\nimport { UpdateMessage } from './OutgoingMessages/UpdateMessage.js'\n\nexport enum MessageType {\n Sync = 0,\n Awareness = 1,\n Auth = 2,\n QueryAwareness = 3,\n Stateless = 5,\n CLOSE = 7,\n SyncStatus = 8,\n}\n\nexport enum WebSocketStatus {\n Connecting = 'connecting',\n Connected = 'connected',\n Disconnected = 'disconnected',\n}\n\nexport interface OutgoingMessageInterface {\n encoder: Encoder\n type?: MessageType\n}\n\nexport interface OutgoingMessageArguments {\n documentName: string,\n token: string,\n document: Y.Doc,\n awareness: Awareness,\n clients: number[],\n states: Map,\n update: any,\n payload: string,\n encoder: Encoder,\n}\n\nexport interface Constructable {\n new(...args: any) : T\n}\n\nexport type ConstructableOutgoingMessage =\n Constructable |\n Constructable |\n Constructable |\n Constructable |\n Constructable |\n Constructable\n\nexport type onAuthenticationFailedParameters = {\n reason: string,\n}\n\nexport type onOpenParameters = {\n event: Event,\n}\n\nexport type onMessageParameters = {\n event: MessageEvent,\n message: IncomingMessage,\n}\n\nexport type onOutgoingMessageParameters = {\n message: OutgoingMessage,\n}\n\nexport type onStatusParameters = {\n status: WebSocketStatus,\n}\n\nexport type onSyncedParameters = {\n state: boolean,\n}\n\nexport type onDisconnectParameters = {\n event: CloseEvent,\n}\n\nexport type onCloseParameters = {\n event: CloseEvent,\n}\n\nexport type onAwarenessUpdateParameters = {\n states: StatesArray\n}\n\nexport type onAwarenessChangeParameters = {\n states: StatesArray\n}\n\nexport type onStatelessParameters = {\n payload: string\n}\n\nexport type StatesArray = { clientId: number, [key: string | number]: any }[]\n","import {\n Forbidden, MessageTooBig, Unauthorized, WsReadyStates,\n} from '@hocuspocus/common'\nimport { retry } from '@lifeomic/attempt'\nimport * as mutex from 'lib0/mutex'\nimport * as time from 'lib0/time'\nimport * as url from 'lib0/url'\nimport type { MessageEvent } from 'ws'\nimport { Event } from 'ws'\nimport EventEmitter from './EventEmitter.js'\nimport { HocuspocusProvider } from './HocuspocusProvider.js'\nimport {\n WebSocketStatus,\n onAwarenessChangeParameters, onAwarenessUpdateParameters,\n onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatusParameters,\n} from './types.js'\n\nexport type HocuspocusProviderWebsocketConfiguration =\n Required>\n & Partial\n\nexport interface CompleteHocuspocusProviderWebsocketConfiguration {\n /**\n * URL of your @hocuspocus/server instance\n */\n url: string,\n\n /**\n * Pass `false` to start the connection manually.\n */\n connect: boolean,\n\n /**\n * URL parameters that should be added.\n */\n parameters: { [key: string]: any },\n /**\n * An optional WebSocket polyfill, for example for Node.js\n */\n WebSocketPolyfill: any,\n\n /**\n * Disconnect when no message is received for the defined amount of milliseconds.\n */\n messageReconnectTimeout: number,\n /**\n * The delay between each attempt in milliseconds. You can provide a factor to have the delay grow exponentially.\n */\n delay: number,\n /**\n * The intialDelay is the amount of time to wait before making the first attempt. This option should typically be 0 since you typically want the first attempt to happen immediately.\n */\n initialDelay: number,\n /**\n * The factor option is used to grow the delay exponentially.\n */\n factor: number,\n /**\n * The maximum number of attempts or 0 if there is no limit on number of attempts.\n */\n maxAttempts: number,\n /**\n * minDelay is used to set a lower bound of delay when jitter is enabled. This property has no effect if jitter is disabled.\n */\n minDelay: number,\n /**\n * The maxDelay option is used to set an upper bound for the delay when factor is enabled. A value of 0 can be provided if there should be no upper bound when calculating delay.\n */\n maxDelay: number,\n /**\n * If jitter is true then the calculated delay will be a random integer value between minDelay and the calculated delay for the current iteration.\n */\n jitter: boolean,\n /**\n * A timeout in milliseconds. If timeout is non-zero then a timer is set using setTimeout. If the timeout is triggered then future attempts will be aborted.\n */\n timeout: number,\n onOpen: (data: onOpenParameters) => void,\n onConnect: () => void,\n onMessage: (data: onMessageParameters) => void,\n onOutgoingMessage: (data: onOutgoingMessageParameters) => void,\n onStatus: (data: onStatusParameters) => void,\n onDisconnect: (data: onDisconnectParameters) => void,\n onClose: (data: onCloseParameters) => void,\n onDestroy: () => void,\n onAwarenessUpdate: (data: onAwarenessUpdateParameters) => void,\n onAwarenessChange: (data: onAwarenessChangeParameters) => void,\n /**\n * Don’t output any warnings.\n */\n quiet: boolean,\n}\n\nexport class HocuspocusProviderWebsocket extends EventEmitter {\n private messageQueue: any[] = []\n\n public configuration: CompleteHocuspocusProviderWebsocketConfiguration = {\n url: '',\n // @ts-ignore\n document: undefined,\n // @ts-ignore\n awareness: undefined,\n WebSocketPolyfill: undefined,\n parameters: {},\n connect: true,\n broadcast: true,\n forceSyncInterval: false,\n // TODO: this should depend on awareness.outdatedTime\n messageReconnectTimeout: 30000,\n // 1 second\n delay: 1000,\n // instant\n initialDelay: 0,\n // double the delay each time\n factor: 2,\n // unlimited retries\n maxAttempts: 0,\n // wait at least 1 second\n minDelay: 1000,\n // at least every 30 seconds\n maxDelay: 30000,\n // randomize\n jitter: true,\n // retry forever\n timeout: 0,\n onOpen: () => null,\n onConnect: () => null,\n onMessage: () => null,\n onOutgoingMessage: () => null,\n onStatus: () => null,\n onDisconnect: () => null,\n onClose: () => null,\n onDestroy: () => null,\n onAwarenessUpdate: () => null,\n onAwarenessChange: () => null,\n quiet: false,\n }\n\n subscribedToBroadcastChannel = false\n\n webSocket: WebSocket | null = null\n\n shouldConnect = true\n\n status = WebSocketStatus.Disconnected\n\n lastMessageReceived = 0\n\n mux = mutex.createMutex()\n\n intervals: any = {\n forceSync: null,\n connectionChecker: null,\n }\n\n connectionAttempt: {\n resolve: (value?: any) => void\n reject: (reason?: any) => void\n } | null = null\n\n constructor(configuration: HocuspocusProviderWebsocketConfiguration) {\n super()\n this.setConfiguration(configuration)\n\n this.configuration.WebSocketPolyfill = configuration.WebSocketPolyfill ? configuration.WebSocketPolyfill : WebSocket\n\n this.on('open', this.configuration.onOpen)\n this.on('open', this.onOpen.bind(this))\n this.on('connect', this.configuration.onConnect)\n this.on('message', this.configuration.onMessage)\n this.on('outgoingMessage', this.configuration.onOutgoingMessage)\n this.on('status', this.configuration.onStatus)\n this.on('status', this.onStatus.bind(this))\n this.on('disconnect', this.configuration.onDisconnect)\n this.on('close', this.configuration.onClose)\n this.on('destroy', this.configuration.onDestroy)\n this.on('awarenessUpdate', this.configuration.onAwarenessUpdate)\n this.on('awarenessChange', this.configuration.onAwarenessChange)\n\n this.on('close', this.onClose.bind(this))\n this.on('message', this.onMessage.bind(this))\n\n this.registerEventListeners()\n\n this.intervals.connectionChecker = setInterval(\n this.checkConnection.bind(this),\n this.configuration.messageReconnectTimeout / 10,\n )\n\n if (typeof configuration.connect !== 'undefined') {\n this.shouldConnect = configuration.connect\n }\n\n if (!this.shouldConnect) {\n return\n }\n\n this.connect()\n }\n\n receivedOnOpenPayload?: Event | undefined = undefined\n\n receivedOnStatusPayload?: onStatusParameters | undefined = undefined\n\n async onOpen(event: Event) {\n this.receivedOnOpenPayload = event\n }\n\n async onStatus(data: onStatusParameters) {\n this.receivedOnStatusPayload = data\n }\n\n attach(provider: HocuspocusProvider) {\n if (this.receivedOnOpenPayload) {\n provider.onOpen(this.receivedOnOpenPayload)\n }\n\n if (this.receivedOnStatusPayload) {\n provider.onStatus(this.receivedOnStatusPayload)\n }\n }\n\n detach(provider: HocuspocusProvider) {\n // tell the server to remove the listener\n\n }\n\n public setConfiguration(configuration: Partial = {}): void {\n this.configuration = { ...this.configuration, ...configuration }\n }\n\n boundConnect = this.connect.bind(this)\n\n cancelWebsocketRetry?: () => void\n\n async connect() {\n if (this.status === WebSocketStatus.Connected) {\n return\n }\n\n // Always cancel any previously initiated connection retryer instances\n if (this.cancelWebsocketRetry) {\n this.cancelWebsocketRetry()\n this.cancelWebsocketRetry = undefined\n }\n\n this.shouldConnect = true\n\n const abortableRetry = () => {\n let cancelAttempt = false\n\n const retryPromise = retry(this.createWebSocketConnection.bind(this), {\n delay: this.configuration.delay,\n initialDelay: this.configuration.initialDelay,\n factor: this.configuration.factor,\n maxAttempts: this.configuration.maxAttempts,\n minDelay: this.configuration.minDelay,\n maxDelay: this.configuration.maxDelay,\n jitter: this.configuration.jitter,\n timeout: this.configuration.timeout,\n beforeAttempt: context => {\n if (!this.shouldConnect || cancelAttempt) {\n context.abort()\n }\n },\n }).catch((error: any) => {\n // If we aborted the connection attempt then don’t throw an error\n // ref: https://github.com/lifeomic/attempt/blob/master/src/index.ts#L136\n if (error && error.code !== 'ATTEMPT_ABORTED') {\n throw error\n }\n })\n\n return {\n retryPromise,\n cancelFunc: () => {\n cancelAttempt = true\n },\n }\n }\n\n const { retryPromise, cancelFunc } = abortableRetry()\n this.cancelWebsocketRetry = cancelFunc\n\n return retryPromise\n }\n\n createWebSocketConnection() {\n return new Promise((resolve, reject) => {\n if (this.webSocket) {\n this.messageQueue = []\n this.webSocket.close()\n this.webSocket = null\n }\n\n // Init the WebSocket connection\n const ws = new this.configuration.WebSocketPolyfill(this.url)\n ws.binaryType = 'arraybuffer'\n ws.onmessage = (payload: any) => this.emit('message', payload)\n ws.onclose = (payload: any) => this.emit('close', { event: payload })\n ws.onopen = (payload: any) => this.emit('open', payload)\n ws.onerror = (err: any) => {\n reject(err)\n }\n this.webSocket = ws\n\n // Reset the status\n this.status = WebSocketStatus.Connecting\n this.emit('status', { status: WebSocketStatus.Connecting })\n\n // Store resolve/reject for later use\n this.connectionAttempt = {\n resolve,\n reject,\n }\n })\n }\n\n onMessage(event: MessageEvent) {\n this.resolveConnectionAttempt()\n }\n\n resolveConnectionAttempt() {\n if (this.connectionAttempt) {\n this.connectionAttempt.resolve()\n this.connectionAttempt = null\n\n this.status = WebSocketStatus.Connected\n this.emit('status', { status: WebSocketStatus.Connected })\n this.emit('connect')\n this.messageQueue.forEach(message => this.send(message))\n this.messageQueue = []\n }\n }\n\n stopConnectionAttempt() {\n this.connectionAttempt = null\n }\n\n rejectConnectionAttempt() {\n this.connectionAttempt?.reject()\n this.connectionAttempt = null\n }\n\n checkConnection() {\n // Don’t check the connection when it’s not even established\n if (this.status !== WebSocketStatus.Connected) {\n return\n }\n\n // Don’t close then connection while waiting for the first message\n if (!this.lastMessageReceived) {\n return\n }\n\n // Don’t close the connection when a message was received recently\n if (this.configuration.messageReconnectTimeout >= time.getUnixTime() - this.lastMessageReceived) {\n return\n }\n\n // No message received in a long time, not even your own\n // Awareness updates, which are updated every 15 seconds.\n this.webSocket?.close()\n this.messageQueue = []\n }\n\n registerEventListeners() {\n if (typeof window === 'undefined') {\n return\n }\n\n window.addEventListener('online', this.boundConnect)\n }\n\n // Ensure that the URL always ends with /\n get serverUrl() {\n while (this.configuration.url[this.configuration.url.length - 1] === '/') {\n return this.configuration.url.slice(0, this.configuration.url.length - 1)\n }\n\n return this.configuration.url\n }\n\n get url() {\n const encodedParams = url.encodeQueryParams(this.configuration.parameters)\n\n return `${this.serverUrl}${encodedParams.length === 0 ? '' : `?${encodedParams}`}`\n }\n\n disconnect() {\n this.shouldConnect = false\n\n if (this.webSocket === null) {\n return\n }\n\n try {\n this.webSocket.close()\n this.messageQueue = []\n } catch {\n //\n }\n }\n\n send(message: any) {\n if (this.webSocket?.readyState === WsReadyStates.Open) {\n this.webSocket.send(message)\n } else {\n this.messageQueue.push(message)\n }\n }\n\n onClose({ event }: onCloseParameters) {\n this.webSocket = null\n\n if (this.status === WebSocketStatus.Connected) {\n this.status = WebSocketStatus.Disconnected\n this.emit('status', { status: WebSocketStatus.Disconnected })\n this.emit('disconnect', { event })\n }\n\n if (event.code === Unauthorized.code) {\n if (event.reason === Unauthorized.reason) {\n console.warn('[HocuspocusProvider] An authentication token is required, but you didn’t send one. Try adding a `token` to your HocuspocusProvider configuration. Won’t try again.')\n } else {\n console.warn(`[HocuspocusProvider] Connection closed with status Unauthorized: ${event.reason}`)\n }\n\n this.shouldConnect = false\n }\n\n if (event.code === Forbidden.code) {\n if (!this.configuration.quiet) {\n console.warn('[HocuspocusProvider] The provided authentication token isn’t allowed to connect to this server. Will try again.')\n return // TODO REMOVE ME\n }\n }\n\n if (event.code === MessageTooBig.code) {\n console.warn(`[HocuspocusProvider] Connection closed with status MessageTooBig: ${event.reason}`)\n this.shouldConnect = false\n }\n\n if (this.connectionAttempt) {\n // That connection attempt failed.\n this.rejectConnectionAttempt()\n } else if (this.shouldConnect) {\n // The connection was closed by the server. Let’s just try again.\n this.connect()\n }\n\n // If we’ll reconnect, we’re done for now.\n if (this.shouldConnect) {\n return\n }\n\n // The status is set correctly already.\n if (this.status === WebSocketStatus.Disconnected) {\n return\n }\n\n // Let’s update the connection status.\n this.status = WebSocketStatus.Disconnected\n this.emit('status', { status: WebSocketStatus.Disconnected })\n this.emit('disconnect', { event })\n }\n\n destroy() {\n this.emit('destroy')\n\n if (this.intervals.forceSync) {\n clearInterval(this.intervals.forceSync)\n }\n\n clearInterval(this.intervals.connectionChecker)\n\n // If there is still a connection attempt outstanding then we should stop\n // it before calling disconnect, otherwise it will be rejected in the onClose\n // handler and trigger a retry\n this.stopConnectionAttempt()\n\n this.disconnect()\n\n this.removeAllListeners()\n\n if (typeof window === 'undefined') {\n return\n }\n\n window.removeEventListener('online', this.boundConnect)\n }\n\n}\n","import {\n createDecoder,\n readVarUint,\n readVarUint8Array,\n readVarString,\n Decoder,\n} from 'lib0/decoding'\nimport {\n Encoder,\n createEncoder,\n writeVarUint,\n writeVarUint8Array,\n writeVarString,\n length,\n} from 'lib0/encoding'\nimport { MessageType } from './types.js'\n\nexport class IncomingMessage {\n\n data: any\n\n encoder: Encoder\n\n decoder: Decoder\n\n constructor(data: any) {\n this.data = data\n this.encoder = createEncoder()\n this.decoder = createDecoder(new Uint8Array(this.data))\n }\n\n readVarUint(): MessageType {\n return readVarUint(this.decoder)\n }\n\n readVarString(): string {\n return readVarString(this.decoder)\n }\n\n readVarUint8Array() {\n return readVarUint8Array(this.decoder)\n }\n\n writeVarUint(type: MessageType) {\n return writeVarUint(this.encoder, type)\n }\n\n writeVarString(string: string) {\n return writeVarString(this.encoder, string)\n }\n\n writeVarUint8Array(data: Uint8Array) {\n return writeVarUint8Array(this.encoder, data)\n }\n\n length() {\n return length(this.encoder)\n }\n}\n","/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them.\n * Therefore it is necesarry that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Will not be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n","import { Encoder, createEncoder, toUint8Array } from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments, OutgoingMessageInterface } from './types.js'\n\nexport class OutgoingMessage implements OutgoingMessageInterface {\n encoder: Encoder\n\n type?: MessageType\n\n constructor() {\n this.encoder = createEncoder()\n }\n\n get(args: Partial) {\n return args.encoder\n }\n\n toUint8Array() {\n return toUint8Array(this.encoder)\n }\n}\n","import { readAuthMessage } from '@hocuspocus/common'\nimport { readVarInt, readVarString } from 'lib0/decoding'\nimport * as awarenessProtocol from 'y-protocols/awareness'\nimport { messageYjsSyncStep2, readSyncMessage } from 'y-protocols/sync'\nimport { HocuspocusProvider } from './HocuspocusProvider.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { MessageType } from './types.js'\n\nexport class MessageReceiver {\n\n message: IncomingMessage\n\n broadcasted = false\n\n constructor(message: IncomingMessage) {\n this.message = message\n }\n\n public setBroadcasted(value: boolean) {\n this.broadcasted = value\n\n return this\n }\n\n public apply(provider: HocuspocusProvider, emitSynced: boolean) {\n const { message } = this\n const type = message.readVarUint()\n\n const emptyMessageLength = message.length()\n\n switch (type) {\n case MessageType.Sync:\n this.applySyncMessage(provider, emitSynced)\n break\n\n case MessageType.Awareness:\n this.applyAwarenessMessage(provider)\n break\n\n case MessageType.Auth:\n this.applyAuthMessage(provider)\n break\n\n case MessageType.QueryAwareness:\n this.applyQueryAwarenessMessage(provider)\n break\n\n case MessageType.Stateless:\n provider.receiveStateless(readVarString(message.decoder))\n break\n\n case MessageType.SyncStatus:\n this.applySyncStatusMessage(provider, readVarInt(message.decoder) === 1)\n break\n default:\n throw new Error(`Can’t apply message of unknown type: ${type}`)\n }\n\n // Reply\n if (message.length() > emptyMessageLength + 1) { // length of documentName (considered in emptyMessageLength plus length of yjs sync type, set in applySyncMessage)\n if (this.broadcasted) {\n // TODO: Some weird TypeScript error\n // @ts-ignore\n provider.broadcast(OutgoingMessage, { encoder: message.encoder })\n } else {\n // TODO: Some weird TypeScript error\n // @ts-ignore\n provider.send(OutgoingMessage, { encoder: message.encoder })\n }\n }\n }\n\n private applySyncMessage(provider: HocuspocusProvider, emitSynced: boolean) {\n const { message } = this\n\n message.writeVarUint(MessageType.Sync)\n\n // Apply update\n const syncMessageType = readSyncMessage(\n message.decoder,\n message.encoder,\n provider.document,\n provider,\n )\n\n // Synced once we receive Step2\n if (emitSynced && syncMessageType === messageYjsSyncStep2) {\n provider.synced = true\n }\n }\n\n applySyncStatusMessage(provider: HocuspocusProvider, applied: boolean) {\n if (applied) {\n provider.decrementUnsyncedChanges()\n }\n }\n\n private applyAwarenessMessage(provider: HocuspocusProvider) {\n const { message } = this\n\n awarenessProtocol.applyAwarenessUpdate(\n provider.awareness,\n message.readVarUint8Array(),\n provider,\n )\n }\n\n private applyAuthMessage(provider: HocuspocusProvider) {\n const { message } = this\n\n readAuthMessage(\n message.decoder,\n provider.permissionDeniedHandler.bind(provider),\n provider.authenticatedHandler.bind(provider),\n )\n }\n\n private applyQueryAwarenessMessage(provider: HocuspocusProvider) {\n const { message } = this\n\n message.writeVarUint(MessageType.Awareness)\n message.writeVarUint8Array(\n awarenessProtocol.encodeAwarenessUpdate(\n provider.awareness,\n Array.from(provider.awareness.getStates().keys()),\n ),\n )\n }\n}\n","import { Encoder, toUint8Array } from 'lib0/encoding'\nimport * as bc from 'lib0/broadcastchannel'\nimport { ConstructableOutgoingMessage } from './types.js'\n\nexport class MessageSender {\n\n encoder: Encoder\n\n message: any\n\n constructor(Message: ConstructableOutgoingMessage, args: any = {}) {\n this.message = new Message()\n this.encoder = this.message.get(args)\n }\n\n create() {\n return toUint8Array(this.encoder)\n }\n\n send(webSocket: any) {\n webSocket?.send(this.create())\n }\n\n broadcast(channel: string) {\n bc.publish(channel, this.create())\n }\n}\n","import { writeVarString, writeVarUint } from 'lib0/encoding'\nimport { writeAuthentication } from '@hocuspocus/common'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class AuthenticationMessage extends OutgoingMessage {\n type = MessageType.Auth\n\n description = 'Authentication'\n\n get(args: Partial) {\n if (typeof args.token === 'undefined') {\n throw new Error('The authentication message requires `token` as an argument.')\n }\n\n writeVarString(this.encoder, args.documentName!)\n writeVarUint(this.encoder, this.type)\n writeAuthentication(this.encoder, args.token)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport { encodeAwarenessUpdate } from 'y-protocols/awareness'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class AwarenessMessage extends OutgoingMessage {\n type = MessageType.Awareness\n\n description = 'Awareness states update'\n\n get(args: Partial) {\n if (typeof args.awareness === 'undefined') {\n throw new Error('The awareness message requires awareness as an argument')\n }\n\n if (typeof args.clients === 'undefined') {\n throw new Error('The awareness message requires clients as an argument')\n }\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n\n let awarenessUpdate\n if (args.states === undefined) {\n awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients)\n } else {\n awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients, args.states)\n }\n\n encoding.writeVarUint8Array(this.encoder, awarenessUpdate)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class CloseMessage extends OutgoingMessage {\n type = MessageType.CLOSE\n\n description = 'Ask the server to close the connection'\n\n get(args: Partial) {\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class QueryAwarenessMessage extends OutgoingMessage {\n type = MessageType.QueryAwareness\n\n description = 'Queries awareness states'\n\n get(args: Partial) {\n\n console.log('queryAwareness: writing string docName', args.documentName)\n console.log(this.encoder.cpos)\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n\n return this.encoder\n }\n}\n","import { writeVarString, writeVarUint } from 'lib0/encoding'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class StatelessMessage extends OutgoingMessage {\n type = MessageType.Stateless\n\n description = 'A stateless message'\n\n get(args: Partial) {\n writeVarString(this.encoder, args.documentName!)\n writeVarUint(this.encoder, this.type)\n writeVarString(this.encoder, args.payload ?? '')\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport * as syncProtocol from 'y-protocols/sync'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class SyncStepOneMessage extends OutgoingMessage {\n type = MessageType.Sync\n\n description = 'First sync step'\n\n get(args: Partial) {\n if (typeof args.document === 'undefined') {\n throw new Error('The sync step one message requires document as an argument')\n }\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n syncProtocol.writeSyncStep1(this.encoder, args.document)\n\n return this.encoder\n }\n}\n","import * as encoding from 'lib0/encoding'\nimport * as syncProtocol from 'y-protocols/sync'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class SyncStepTwoMessage extends OutgoingMessage {\n type = MessageType.Sync\n\n description = 'Second sync step'\n\n get(args: Partial) {\n if (typeof args.document === 'undefined') {\n throw new Error('The sync step two message requires document as an argument')\n }\n\n encoding.writeVarString(this.encoder, args.documentName!)\n encoding.writeVarUint(this.encoder, this.type)\n syncProtocol.writeSyncStep2(this.encoder, args.document)\n\n return this.encoder\n }\n}\n","import { writeVarString, writeVarUint } from 'lib0/encoding'\nimport { writeUpdate } from 'y-protocols/sync'\nimport { MessageType, OutgoingMessageArguments } from '../types.js'\nimport { OutgoingMessage } from '../OutgoingMessage.js'\n\nexport class UpdateMessage extends OutgoingMessage {\n type = MessageType.Sync\n\n description = 'A document update'\n\n get(args: Partial) {\n writeVarString(this.encoder, args.documentName!)\n writeVarUint(this.encoder, this.type)\n\n writeUpdate(this.encoder, args.update)\n\n return this.encoder\n }\n}\n","import { awarenessStatesToArray } from '@hocuspocus/common'\nimport * as bc from 'lib0/broadcastchannel'\nimport * as mutex from 'lib0/mutex'\nimport type { CloseEvent, Event, MessageEvent } from 'ws'\nimport { Awareness, removeAwarenessStates } from 'y-protocols/awareness'\nimport * as Y from 'yjs'\nimport EventEmitter from './EventEmitter.js'\nimport {\n CompleteHocuspocusProviderWebsocketConfiguration,\n HocuspocusProviderWebsocket,\n} from './HocuspocusProviderWebsocket.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { MessageReceiver } from './MessageReceiver.js'\nimport { MessageSender } from './MessageSender.js'\nimport { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.js'\nimport { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.js'\nimport { CloseMessage } from './OutgoingMessages/CloseMessage.js'\nimport { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js'\nimport { StatelessMessage } from './OutgoingMessages/StatelessMessage.js'\nimport { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js'\nimport { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js'\nimport { UpdateMessage } from './OutgoingMessages/UpdateMessage.js'\nimport {\n ConstructableOutgoingMessage,\n WebSocketStatus,\n onAuthenticationFailedParameters,\n onAwarenessChangeParameters,\n onAwarenessUpdateParameters,\n onCloseParameters,\n onDisconnectParameters,\n onMessageParameters,\n onOpenParameters,\n onOutgoingMessageParameters, onStatelessParameters,\n onStatusParameters,\n onSyncedParameters,\n} from './types.js'\n\nexport type HocuspocusProviderConfiguration =\n Required>\n & Partial & (\n Required> |\n Required>\n )\n\nexport interface CompleteHocuspocusProviderConfiguration {\n /**\n * The identifier/name of your document\n */\n name: string,\n /**\n * The actual Y.js document\n */\n document: Y.Doc,\n\n /**\n * Pass false to disable broadcasting between browser tabs.\n */\n broadcast: boolean,\n /**\n * An Awareness instance to keep the presence state of all clients.\n */\n awareness: Awareness,\n /**\n * A token that’s sent to the backend for authentication purposes.\n */\n token: string | (() => string) | (() => Promise) | null,\n /**\n * URL parameters that should be added.\n */\n parameters: { [key: string]: any },\n /**\n * Hocuspocus websocket provider\n */\n websocketProvider: HocuspocusProviderWebsocket,\n /**\n * Force syncing the document in the defined interval.\n */\n forceSyncInterval: false | number,\n\n onAuthenticated: () => void,\n onAuthenticationFailed: (data: onAuthenticationFailedParameters) => void,\n onOpen: (data: onOpenParameters) => void,\n onConnect: () => void,\n onMessage: (data: onMessageParameters) => void,\n onOutgoingMessage: (data: onOutgoingMessageParameters) => void,\n onStatus: (data: onStatusParameters) => void,\n onSynced: (data: onSyncedParameters) => void,\n onDisconnect: (data: onDisconnectParameters) => void,\n onClose: (data: onCloseParameters) => void,\n onDestroy: () => void,\n onAwarenessUpdate: (data: onAwarenessUpdateParameters) => void,\n onAwarenessChange: (data: onAwarenessChangeParameters) => void,\n onStateless: (data: onStatelessParameters) => void\n\n /**\n * Don’t output any warnings.\n */\n quiet: boolean,\n}\n\nexport class HocuspocusProvider extends EventEmitter {\n public configuration: CompleteHocuspocusProviderConfiguration = {\n name: '',\n // @ts-ignore\n document: undefined,\n // @ts-ignore\n awareness: undefined,\n token: null,\n parameters: {},\n broadcast: true,\n forceSyncInterval: false,\n onAuthenticated: () => null,\n onAuthenticationFailed: () => null,\n onOpen: () => null,\n onConnect: () => null,\n onMessage: () => null,\n onOutgoingMessage: () => null,\n onStatus: () => null,\n onSynced: () => null,\n onDisconnect: () => null,\n onClose: () => null,\n onDestroy: () => null,\n onAwarenessUpdate: () => null,\n onAwarenessChange: () => null,\n onStateless: () => null,\n quiet: false,\n }\n\n subscribedToBroadcastChannel = false\n\n isSynced = false\n\n unsyncedChanges = 0\n\n status = WebSocketStatus.Disconnected\n\n isAuthenticated = false\n\n authorizedScope: string | undefined = undefined\n\n mux = mutex.createMutex()\n\n intervals: any = {\n forceSync: null,\n }\n\n isConnected = true\n\n constructor(configuration: HocuspocusProviderConfiguration) {\n super()\n this.setConfiguration(configuration)\n\n this.configuration.document = configuration.document ? configuration.document : new Y.Doc()\n this.configuration.awareness = configuration.awareness ? configuration.awareness : new Awareness(this.document)\n\n this.on('open', this.configuration.onOpen)\n this.on('message', this.configuration.onMessage)\n this.on('outgoingMessage', this.configuration.onOutgoingMessage)\n this.on('synced', this.configuration.onSynced)\n this.on('destroy', this.configuration.onDestroy)\n this.on('awarenessUpdate', this.configuration.onAwarenessUpdate)\n this.on('awarenessChange', this.configuration.onAwarenessChange)\n this.on('stateless', this.configuration.onStateless)\n\n this.on('authenticated', this.configuration.onAuthenticated)\n this.on('authenticationFailed', this.configuration.onAuthenticationFailed)\n\n this.configuration.websocketProvider.on('connect', this.configuration.onConnect)\n this.configuration.websocketProvider.on('connect', (e: Event) => this.emit('connect', e))\n\n this.configuration.websocketProvider.on('open', this.onOpen.bind(this))\n this.configuration.websocketProvider.on('open', (e: Event) => this.emit('open', e))\n\n this.configuration.websocketProvider.on('message', this.onMessage.bind(this))\n\n this.configuration.websocketProvider.on('close', this.onClose.bind(this))\n this.configuration.websocketProvider.on('close', this.configuration.onClose)\n this.configuration.websocketProvider.on('close', (e: Event) => this.emit('close', e))\n\n this.configuration.websocketProvider.on('status', this.onStatus.bind(this))\n\n this.configuration.websocketProvider.on('disconnect', this.configuration.onDisconnect)\n this.configuration.websocketProvider.on('disconnect', (e: Event) => this.emit('disconnect', e))\n\n this.configuration.websocketProvider.on('destroy', this.configuration.onDestroy)\n this.configuration.websocketProvider.on('destroy', (e: Event) => this.emit('destroy', e))\n\n this.awareness.on('update', () => {\n this.emit('awarenessUpdate', { states: awarenessStatesToArray(this.awareness.getStates()) })\n })\n\n this.awareness.on('change', () => {\n this.emit('awarenessChange', { states: awarenessStatesToArray(this.awareness.getStates()) })\n })\n\n this.document.on('update', this.documentUpdateHandler.bind(this))\n this.awareness.on('update', this.awarenessUpdateHandler.bind(this))\n this.registerEventListeners()\n\n if (this.configuration.forceSyncInterval) {\n this.intervals.forceSync = setInterval(\n this.forceSync.bind(this),\n this.configuration.forceSyncInterval,\n )\n }\n\n this.configuration.websocketProvider.attach(this)\n }\n\n public onStatus({ status } : onStatusParameters) {\n this.status = status\n\n this.configuration.onStatus({ status })\n this.emit('status', { status })\n }\n\n public setConfiguration(configuration: Partial = {}): void {\n if (!configuration.websocketProvider && (configuration as CompleteHocuspocusProviderWebsocketConfiguration).url) {\n const websocketProviderConfig = configuration as CompleteHocuspocusProviderWebsocketConfiguration\n\n this.configuration.websocketProvider = new HocuspocusProviderWebsocket({\n url: websocketProviderConfig.url,\n parameters: websocketProviderConfig.parameters,\n })\n }\n\n this.configuration = { ...this.configuration, ...configuration }\n }\n\n get document() {\n return this.configuration.document\n }\n\n get awareness() {\n return this.configuration.awareness\n }\n\n get hasUnsyncedChanges(): boolean {\n return this.unsyncedChanges > 0\n }\n\n incrementUnsyncedChanges() {\n this.unsyncedChanges += 1\n this.emit('unsyncedChanges', this.unsyncedChanges)\n }\n\n decrementUnsyncedChanges() {\n this.unsyncedChanges -= 1\n if (this.unsyncedChanges === 0) {\n this.synced = true\n }\n this.emit('unsyncedChanges', this.unsyncedChanges)\n }\n\n forceSync() {\n this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name })\n }\n\n boundBeforeUnload = this.beforeUnload.bind(this)\n\n beforeUnload() {\n removeAwarenessStates(this.awareness, [this.document.clientID], 'window unload')\n }\n\n registerEventListeners() {\n if (typeof window === 'undefined') {\n return\n }\n\n window.addEventListener('beforeunload', this.boundBeforeUnload)\n }\n\n sendStateless(payload: string) {\n this.send(StatelessMessage, { documentName: this.configuration.name, payload })\n }\n\n documentUpdateHandler(update: Uint8Array, origin: any) {\n if (origin === this) {\n return\n }\n\n this.incrementUnsyncedChanges()\n this.send(UpdateMessage, { update, documentName: this.configuration.name }, true)\n }\n\n awarenessUpdateHandler({ added, updated, removed }: any, origin: any) {\n const changedClients = added.concat(updated).concat(removed)\n\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: changedClients,\n documentName: this.configuration.name,\n }, true)\n }\n\n get synced(): boolean {\n return this.isSynced\n }\n\n set synced(state) {\n if (this.isSynced === state) {\n return\n }\n\n this.isSynced = state\n this.emit('synced', { state })\n this.emit('sync', { state })\n }\n\n receiveStateless(payload: string) {\n this.emit('stateless', { payload })\n }\n\n get isAuthenticationRequired(): boolean {\n return !!this.configuration.token && !this.isAuthenticated\n }\n\n // not needed, but provides backward compatibility with e.g. lexicla/yjs\n async connect() {\n return this.configuration.websocketProvider.connect()\n }\n\n disconnect() {\n this.disconnectBroadcastChannel()\n this.configuration.websocketProvider.detach(this)\n }\n\n async onOpen(event: Event) {\n this.isAuthenticated = false\n\n this.emit('open', { event })\n\n if (this.isAuthenticationRequired) {\n this.send(AuthenticationMessage, {\n token: await this.getToken(),\n documentName: this.configuration.name,\n })\n }\n\n this.startSync()\n }\n\n async getToken() {\n if (typeof this.configuration.token === 'function') {\n const token = await this.configuration.token()\n return token\n }\n\n return this.configuration.token\n }\n\n startSync() {\n this.incrementUnsyncedChanges()\n this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name })\n\n if (this.awareness.getLocalState() !== null) {\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: [this.document.clientID],\n documentName: this.configuration.name,\n })\n }\n }\n\n send(message: ConstructableOutgoingMessage, args: any, broadcast = false) {\n if (!this.isConnected) {\n return\n }\n\n if (broadcast) {\n this.mux(() => { this.broadcast(message, args) })\n }\n\n const messageSender = new MessageSender(message, args)\n\n this.emit('outgoingMessage', { message: messageSender.message })\n messageSender.send(this.configuration.websocketProvider)\n }\n\n onMessage(event: MessageEvent) {\n const message = new IncomingMessage(event.data)\n\n const documentName = message.readVarString()\n\n if (documentName !== this.configuration.name) {\n return // message is meant for another provider\n }\n\n message.writeVarString(documentName)\n\n this.emit('message', { event, message: new IncomingMessage(event.data) })\n\n new MessageReceiver(message).apply(this, true)\n }\n\n onClose(event: CloseEvent) {\n this.isAuthenticated = false\n this.synced = false\n\n // update awareness (all users except local left)\n removeAwarenessStates(\n this.awareness,\n Array.from(this.awareness.getStates().keys()).filter(client => client !== this.document.clientID),\n this,\n )\n }\n\n destroy() {\n this.emit('destroy')\n\n if (this.intervals.forceSync) {\n clearInterval(this.intervals.forceSync)\n }\n\n removeAwarenessStates(this.awareness, [this.document.clientID], 'provider destroy')\n\n this.disconnect()\n\n this.awareness.off('update', this.awarenessUpdateHandler)\n this.document.off('update', this.documentUpdateHandler)\n\n this.removeAllListeners()\n\n this.send(CloseMessage, { documentName: this.configuration.name })\n this.isConnected = false\n\n if (typeof window === 'undefined') {\n return\n }\n\n window.removeEventListener('beforeunload', this.boundBeforeUnload)\n }\n\n permissionDeniedHandler(reason: string) {\n this.emit('authenticationFailed', { reason })\n this.isAuthenticated = false\n this.disconnect()\n this.status = WebSocketStatus.Disconnected\n }\n\n authenticatedHandler(scope: string) {\n this.isAuthenticated = true\n this.authorizedScope = scope\n\n this.emit('authenticated')\n this.startSync()\n }\n\n get broadcastChannel() {\n return `${this.configuration.name}`\n }\n\n boundBroadcastChannelSubscriber = this.broadcastChannelSubscriber.bind(this)\n\n broadcastChannelSubscriber(data: ArrayBuffer) {\n this.mux(() => {\n const message = new IncomingMessage(data)\n\n const documentName = message.readVarString()\n\n message.writeVarString(documentName)\n\n new MessageReceiver(message)\n .setBroadcasted(true)\n .apply(this, false)\n })\n }\n\n subscribeToBroadcastChannel() {\n if (!this.subscribedToBroadcastChannel) {\n bc.subscribe(this.broadcastChannel, this.boundBroadcastChannelSubscriber)\n this.subscribedToBroadcastChannel = true\n }\n\n this.mux(() => {\n this.broadcast(SyncStepOneMessage, { document: this.document })\n this.broadcast(SyncStepTwoMessage, { document: this.document })\n this.broadcast(QueryAwarenessMessage, { document: this.document })\n this.broadcast(AwarenessMessage, { awareness: this.awareness, clients: [this.document.clientID], document: this.document })\n })\n }\n\n disconnectBroadcastChannel() {\n // broadcast message with local awareness state set to null (indicating disconnect)\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: [this.document.clientID],\n states: new Map(),\n documentName: this.configuration.name,\n }, true)\n\n if (this.subscribedToBroadcastChannel) {\n bc.unsubscribe(this.broadcastChannel, this.boundBroadcastChannelSubscriber)\n this.subscribedToBroadcastChannel = false\n }\n }\n\n broadcast(Message: ConstructableOutgoingMessage, args?: any) {\n if (!this.configuration.broadcast) {\n return\n }\n\n if (!this.subscribedToBroadcastChannel) {\n return\n }\n\n new MessageSender(Message, args).broadcast(this.broadcastChannel)\n }\n\n setAwarenessField(key: string, value: any) {\n this.awareness.setLocalStateField(key, value)\n }\n}\n","import {\n CompleteHocuspocusProviderWebsocketConfiguration,\n HocuspocusProviderWebsocket, HocuspocusProviderWebsocketConfiguration,\n} from './HocuspocusProviderWebsocket.js'\n\nexport type TiptapCollabProviderWebsocketConfiguration =\n Partial &\n AdditionalTiptapCollabProviderWebsocketConfiguration\n\nexport interface AdditionalTiptapCollabProviderWebsocketConfiguration {\n /**\n * A Hocuspocus Cloud App ID, get one here: https://collab.tiptap.dev\n */\n appId: string,\n}\n\nexport class TiptapCollabProviderWebsocket extends HocuspocusProviderWebsocket {\n constructor(configuration: TiptapCollabProviderWebsocketConfiguration) {\n super({ ...configuration as HocuspocusProviderWebsocketConfiguration, url: `wss://${configuration.appId}.collab.tiptap.cloud` })\n }\n}\n","import {\n HocuspocusProvider,\n HocuspocusProviderConfiguration,\n} from './HocuspocusProvider.js'\n\nimport { TiptapCollabProviderWebsocket } from './TiptapCollabProviderWebsocket.js'\n\nexport type TiptapCollabProviderConfiguration =\n Required> &\n Partial &\n AdditionalTiptapCollabProviderConfiguration\n\nexport interface AdditionalTiptapCollabProviderConfiguration {\n /**\n * A Hocuspocus Cloud App ID, get one here: https://collab.tiptap.dev\n */\n appId: string,\n}\n\nexport class TiptapCollabProvider extends HocuspocusProvider {\n constructor(configuration: TiptapCollabProviderConfiguration) {\n if (!configuration.websocketProvider) {\n configuration.websocketProvider = new TiptapCollabProviderWebsocket({ appId: configuration.appId })\n }\n\n if (!configuration.token) {\n configuration.token = 'notoken' // need to send a token anyway (which will be ignored)\n }\n\n super(configuration as HocuspocusProviderConfiguration)\n }\n}\n"],"names":["create","length","object.length","object.hasProperty","map.create","string.fromCamelCase","conditions.undefinedToNull","storage.varStorage","f.isOneOf","buffer.createUint8ArrayViewFromArrayBuffer","binary.BITS7","binary.BIT8","math.floor","string.utf8TextEncoder","string.encodeUtf8","math.min","math.max","error.create","number.MAX_SAFE_INTEGER","binary.BITS6","binary.BIT7","string.utf8TextDecoder","string.fromCharCode","env.isBrowser","buffer.fromBase64","storage.onChange","buffer.toBase64","buffer.createUint8ArrayFromArrayBuffer","storage.offChange","map.setIfUndefined","set.create","array.from","time.getUnixTime","f.equalityDeep","encoding.createEncoder","encoding.writeVarUint","encoding.writeVarString","encoding.toUint8Array","decoding.createDecoder","decoding.readVarUint","decoding.readVarString","object.map","mutex.createMutex","url.encodeQueryParams","encoding.writeVarUint8Array","decoding.readVarUint8Array","awarenessProtocol.applyAwarenessUpdate","awarenessProtocol.encodeAwarenessUpdate","bc.publish","syncProtocol.writeSyncStep1","syncProtocol.writeSyncStep2","bc.subscribe","bc.unsubscribe"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@hocuspocus/provider/dist/packages/provider/src/HocuspocusProvider.d.ts b/node_modules/@hocuspocus/provider/dist/packages/provider/src/HocuspocusProvider.d.ts +index dffe09b..2168445 100644 +--- a/node_modules/@hocuspocus/provider/dist/packages/provider/src/HocuspocusProvider.d.ts ++++ b/node_modules/@hocuspocus/provider/dist/packages/provider/src/HocuspocusProvider.d.ts +@@ -1,10 +1,10 @@ +-import * as Y from 'yjs'; +-import { Awareness } from 'y-protocols/awareness'; + import * as mutex from 'lib0/mutex'; + import type { CloseEvent, Event, MessageEvent } from 'ws'; ++import { Awareness } from 'y-protocols/awareness'; ++import * as Y from 'yjs'; + import EventEmitter from './EventEmitter.js'; +-import { ConstructableOutgoingMessage, onAuthenticationFailedParameters, onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatelessParameters, onStatusParameters, onSyncedParameters, WebSocketStatus, onAwarenessChangeParameters, onAwarenessUpdateParameters } from './types.js'; + import { CompleteHocuspocusProviderWebsocketConfiguration, HocuspocusProviderWebsocket } from './HocuspocusProviderWebsocket.js'; ++import { ConstructableOutgoingMessage, WebSocketStatus, onAuthenticationFailedParameters, onAwarenessChangeParameters, onAwarenessUpdateParameters, onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatelessParameters, onStatusParameters, onSyncedParameters } from './types.js'; + export type HocuspocusProviderConfiguration = Required> & Partial & (Required> | Required>); + export interface CompleteHocuspocusProviderConfiguration { + /** +@@ -77,7 +77,8 @@ export declare class HocuspocusProvider extends EventEmitter { + get document(): Y.Doc; + get awareness(): Awareness; + get hasUnsyncedChanges(): boolean; +- updateUnsyncedChanges(unsyncedChanges?: number): void; ++ incrementUnsyncedChanges(): void; ++ decrementUnsyncedChanges(): void; + forceSync(): void; + boundBeforeUnload: () => void; + beforeUnload(): void; +diff --git a/node_modules/@hocuspocus/provider/dist/packages/provider/src/HocuspocusProviderWebsocket.d.ts b/node_modules/@hocuspocus/provider/dist/packages/provider/src/HocuspocusProviderWebsocket.d.ts +index a3abfae..866ab85 100644 +--- a/node_modules/@hocuspocus/provider/dist/packages/provider/src/HocuspocusProviderWebsocket.d.ts ++++ b/node_modules/@hocuspocus/provider/dist/packages/provider/src/HocuspocusProviderWebsocket.d.ts +@@ -2,8 +2,8 @@ import * as mutex from 'lib0/mutex'; + import type { MessageEvent } from 'ws'; + import { Event } from 'ws'; + import EventEmitter from './EventEmitter.js'; +-import { onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatusParameters, WebSocketStatus, onAwarenessChangeParameters, onAwarenessUpdateParameters } from './types.js'; + import { HocuspocusProvider } from './HocuspocusProvider.js'; ++import { WebSocketStatus, onAwarenessChangeParameters, onAwarenessUpdateParameters, onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatusParameters } from './types.js'; + export type HocuspocusProviderWebsocketConfiguration = Required> & Partial; + export interface CompleteHocuspocusProviderWebsocketConfiguration { + /** +@@ -76,6 +76,7 @@ export interface CompleteHocuspocusProviderWebsocketConfiguration { + quiet: boolean; + } + export declare class HocuspocusProviderWebsocket extends EventEmitter { ++ private messageQueue; + configuration: CompleteHocuspocusProviderWebsocketConfiguration; + subscribedToBroadcastChannel: boolean; + webSocket: WebSocket | null; +diff --git a/node_modules/@hocuspocus/provider/dist/packages/provider/src/MessageReceiver.d.ts b/node_modules/@hocuspocus/provider/dist/packages/provider/src/MessageReceiver.d.ts +index 8e5d55c..4d41340 100644 +--- a/node_modules/@hocuspocus/provider/dist/packages/provider/src/MessageReceiver.d.ts ++++ b/node_modules/@hocuspocus/provider/dist/packages/provider/src/MessageReceiver.d.ts +@@ -5,8 +5,9 @@ export declare class MessageReceiver { + broadcasted: boolean; + constructor(message: IncomingMessage); + setBroadcasted(value: boolean): this; +- apply(provider: HocuspocusProvider, emitSynced?: boolean): void; ++ apply(provider: HocuspocusProvider, emitSynced: boolean): void; + private applySyncMessage; ++ applySyncStatusMessage(provider: HocuspocusProvider, applied: boolean): void; + private applyAwarenessMessage; + private applyAuthMessage; + private applyQueryAwarenessMessage; +diff --git a/node_modules/@hocuspocus/provider/dist/packages/provider/src/types.d.ts b/node_modules/@hocuspocus/provider/dist/packages/provider/src/types.d.ts +index 1a67c25..fd3379e 100644 +--- a/node_modules/@hocuspocus/provider/dist/packages/provider/src/types.d.ts ++++ b/node_modules/@hocuspocus/provider/dist/packages/provider/src/types.d.ts +@@ -1,22 +1,23 @@ ++import { Encoder } from 'lib0/encoding'; ++import type { CloseEvent, Event, MessageEvent } from 'ws'; + import { Awareness } from 'y-protocols/awareness'; + import * as Y from 'yjs'; +-import { Encoder } from 'lib0/encoding'; +-import type { Event, CloseEvent, MessageEvent } from 'ws'; ++import { IncomingMessage } from './IncomingMessage.js'; ++import { OutgoingMessage } from './OutgoingMessage.js'; + import { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.js'; + import { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.js'; + import { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js'; + import { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js'; + import { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js'; + import { UpdateMessage } from './OutgoingMessages/UpdateMessage.js'; +-import { IncomingMessage } from './IncomingMessage.js'; +-import { OutgoingMessage } from './OutgoingMessage.js'; + export declare enum MessageType { + Sync = 0, + Awareness = 1, + Auth = 2, + QueryAwareness = 3, + Stateless = 5, +- CLOSE = 7 ++ CLOSE = 7, ++ SyncStatus = 8 + } + export declare enum WebSocketStatus { + Connecting = "connecting", +diff --git a/node_modules/@hocuspocus/provider/dist/packages/server/src/ClientConnection.d.ts b/node_modules/@hocuspocus/provider/dist/packages/server/src/ClientConnection.d.ts +new file mode 100644 +index 0000000..894206f +--- /dev/null ++++ b/node_modules/@hocuspocus/provider/dist/packages/server/src/ClientConnection.d.ts +@@ -0,0 +1,55 @@ ++/// ++import { IncomingMessage } from 'http'; ++import WebSocket from 'ws'; ++import { Debugger } from './Debugger.js'; ++import Document from './Document.js'; ++import { Hocuspocus } from './Hocuspocus.js'; ++import { onDisconnectPayload } from './types.js'; ++/** ++ * The `ClientConnection` class is responsible for handling an incoming WebSocket ++ * ++ * TODO-refactor: ++ * - use event handlers instead of calling hooks directly, hooks should probably be called from Hocuspocus.ts ++ */ ++export declare class ClientConnection { ++ private readonly websocket; ++ private readonly request; ++ private readonly documentProvider; ++ private readonly hooks; ++ private readonly debuggerTool; ++ private readonly opts; ++ private readonly documentConnections; ++ private readonly incomingMessageQueue; ++ private readonly documentConnectionsEstablished; ++ private readonly hookPayloads; ++ private readonly callbacks; ++ private readonly closeIdleConnectionTimeout; ++ private readonly socketId; ++ /** ++ * The `ClientConnection` class receives incoming WebSocket connections, ++ * runs all hooks: ++ * ++ * - onConnect for all connections ++ * - onAuthenticate only if required ++ * ++ * … and if nothings fails it’ll fully establish the connection and ++ * load the Document then. ++ */ ++ constructor(websocket: WebSocket, request: IncomingMessage, documentProvider: { ++ createDocument: Hocuspocus['createDocument']; ++ }, hooks: Hocuspocus['hooks'], debuggerTool: Debugger, opts: { ++ requiresAuthentication: boolean; ++ timeout: number; ++ }); ++ /** ++ * Set a callback that will be triggered when the connection is closed ++ */ ++ onClose(callback: (document: Document, payload: onDisconnectPayload) => void): ClientConnection; ++ /** ++ * Create a new connection by the given request and document ++ */ ++ private createConnection; ++ private setUpNewConnection; ++ private handleQueueingMessage; ++ private messageHandler; ++} +diff --git a/node_modules/@hocuspocus/provider/dist/packages/server/src/Hocuspocus.d.ts b/node_modules/@hocuspocus/provider/dist/packages/server/src/Hocuspocus.d.ts +index 2709615..90d46c5 100644 +--- a/node_modules/@hocuspocus/provider/dist/packages/server/src/Hocuspocus.d.ts ++++ b/node_modules/@hocuspocus/provider/dist/packages/server/src/Hocuspocus.d.ts +@@ -1,11 +1,11 @@ + /// + /// +-import { IncomingMessage, Server as HTTPServer } from 'http'; ++import { Server as HTTPServer, IncomingMessage } from 'http'; + import WebSocket, { AddressInfo, WebSocketServer } from 'ws'; +-import { Configuration, HookName, HookPayload, onListenPayload, onStoreDocumentPayload } from './types.js'; +-import Document from './Document.js'; + import { Debugger } from './Debugger.js'; + import { DirectConnection } from './DirectConnection.js'; ++import Document from './Document.js'; ++import { Configuration, ConnectionConfiguration, HookName, HookPayload, onListenPayload, onStoreDocumentPayload } from './types.js'; + export declare const defaultConfiguration: { + name: null; + port: number; +@@ -69,7 +69,7 @@ export declare class Hocuspocus { + * … and if nothings fails it’ll fully establish the connection and + * load the Document then. + */ +- handleConnection(incoming: WebSocket, request: IncomingMessage, context?: any): void; ++ handleConnection(incoming: WebSocket, request: IncomingMessage): void; + /** + * Handle update of the given document + */ +@@ -85,21 +85,13 @@ export declare class Hocuspocus { + /** + * Create a new document by the given request + */ +- private createDocument; +- /** +- * Create a new connection by the given request and document +- */ +- private createConnection; ++ createDocument(documentName: string, request: Partial>, socketId: string, connection: ConnectionConfiguration, context?: any): Promise; + storeDocumentHooks(document: Document, hookPayload: onStoreDocumentPayload): void; + /** + * Run the given hook on all configured extensions. + * Runs the given callback after each hook. + */ + hooks(name: HookName, payload: HookPayload, callback?: Function | null): Promise; +- /** +- * Get parameters by the given request +- */ +- private static getParameters; + enableDebugging(): void; + enableMessageLogging(): void; + disableLogging(): void; +diff --git a/node_modules/@hocuspocus/provider/dist/packages/server/src/MessageReceiver.d.ts b/node_modules/@hocuspocus/provider/dist/packages/server/src/MessageReceiver.d.ts +index 8a0a68a..7c12f51 100644 +--- a/node_modules/@hocuspocus/provider/dist/packages/server/src/MessageReceiver.d.ts ++++ b/node_modules/@hocuspocus/provider/dist/packages/server/src/MessageReceiver.d.ts +@@ -1,7 +1,7 @@ + import Connection from './Connection.js'; +-import { IncomingMessage } from './IncomingMessage.js'; + import { Debugger } from './Debugger.js'; + import Document from './Document.js'; ++import { IncomingMessage } from './IncomingMessage.js'; + export declare class MessageReceiver { + message: IncomingMessage; + logger: Debugger; +diff --git a/node_modules/@hocuspocus/provider/dist/packages/server/src/OutgoingMessage.d.ts b/node_modules/@hocuspocus/provider/dist/packages/server/src/OutgoingMessage.d.ts +index dbd17e3..8cb4f13 100644 +--- a/node_modules/@hocuspocus/provider/dist/packages/server/src/OutgoingMessage.d.ts ++++ b/node_modules/@hocuspocus/provider/dist/packages/server/src/OutgoingMessage.d.ts +@@ -16,5 +16,6 @@ export declare class OutgoingMessage { + writeUpdate(update: Uint8Array): OutgoingMessage; + writeStateless(payload: string): OutgoingMessage; + writeBroadcastStateless(payload: string): OutgoingMessage; ++ writeSyncStatus(updateSaved: boolean): OutgoingMessage; + toUint8Array(): Uint8Array; + } +diff --git a/node_modules/@hocuspocus/provider/dist/packages/server/src/types.d.ts b/node_modules/@hocuspocus/provider/dist/packages/server/src/types.d.ts +index 30e719d..d905fc0 100644 +--- a/node_modules/@hocuspocus/provider/dist/packages/server/src/types.d.ts ++++ b/node_modules/@hocuspocus/provider/dist/packages/server/src/types.d.ts +@@ -4,9 +4,9 @@ + import { IncomingHttpHeaders, IncomingMessage, ServerResponse } from 'http'; + import { URLSearchParams } from 'url'; + import { Awareness } from 'y-protocols/awareness'; ++import Connection from './Connection.js'; + import Document from './Document.js'; + import { Hocuspocus } from './Hocuspocus.js'; +-import Connection from './Connection.js'; + export declare enum MessageType { + Unknown = -1, + Sync = 0, +@@ -16,7 +16,8 @@ export declare enum MessageType { + SyncReply = 4, + Stateless = 5, + BroadcastStateless = 6, +- CLOSE = 7 ++ CLOSE = 7, ++ SyncStatus = 8 + } + export interface AwarenessUpdate { + added: Array; +diff --git a/node_modules/@hocuspocus/provider/dist/packages/server/src/util/getParameters.d.ts b/node_modules/@hocuspocus/provider/dist/packages/server/src/util/getParameters.d.ts +new file mode 100644 +index 0000000..9e5f4cf +--- /dev/null ++++ b/node_modules/@hocuspocus/provider/dist/packages/server/src/util/getParameters.d.ts +@@ -0,0 +1,8 @@ ++/// ++/// ++import { IncomingMessage } from 'http'; ++import { URLSearchParams } from 'url'; ++/** ++ * Get parameters by the given request ++ */ ++export declare function getParameters(request?: Pick): URLSearchParams; +diff --git a/node_modules/@hocuspocus/provider/dist/tests/provider/hasUnsyncedChanges.d.ts b/node_modules/@hocuspocus/provider/dist/tests/provider/hasUnsyncedChanges.d.ts +new file mode 100644 +index 0000000..cb0ff5c +--- /dev/null ++++ b/node_modules/@hocuspocus/provider/dist/tests/provider/hasUnsyncedChanges.d.ts +@@ -0,0 +1 @@ ++export {}; +diff --git a/node_modules/@hocuspocus/provider/src/HocuspocusProvider.ts b/node_modules/@hocuspocus/provider/src/HocuspocusProvider.ts +index 3a366e3..49b7856 100644 +--- a/node_modules/@hocuspocus/provider/src/HocuspocusProvider.ts ++++ b/node_modules/@hocuspocus/provider/src/HocuspocusProvider.ts +@@ -1,22 +1,31 @@ +-import * as Y from 'yjs' ++import { awarenessStatesToArray } from '@hocuspocus/common' + import * as bc from 'lib0/broadcastchannel' +-import { Awareness, removeAwarenessStates } from 'y-protocols/awareness' + import * as mutex from 'lib0/mutex' + import type { CloseEvent, Event, MessageEvent } from 'ws' +-import { awarenessStatesToArray } from '@hocuspocus/common' ++import { Awareness, removeAwarenessStates } from 'y-protocols/awareness' ++import * as Y from 'yjs' + import EventEmitter from './EventEmitter.js' ++import { ++ CompleteHocuspocusProviderWebsocketConfiguration, ++ HocuspocusProviderWebsocket, ++} from './HocuspocusProviderWebsocket.js' + import { IncomingMessage } from './IncomingMessage.js' + import { MessageReceiver } from './MessageReceiver.js' + import { MessageSender } from './MessageSender.js' +-import { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js' +-import { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js' +-import { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js' + import { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.js' + import { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.js' ++import { CloseMessage } from './OutgoingMessages/CloseMessage.js' ++import { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js' ++import { StatelessMessage } from './OutgoingMessages/StatelessMessage.js' ++import { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js' ++import { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js' + import { UpdateMessage } from './OutgoingMessages/UpdateMessage.js' + import { + ConstructableOutgoingMessage, ++ WebSocketStatus, + onAuthenticationFailedParameters, ++ onAwarenessChangeParameters, ++ onAwarenessUpdateParameters, + onCloseParameters, + onDisconnectParameters, + onMessageParameters, +@@ -24,16 +33,7 @@ import { + onOutgoingMessageParameters, onStatelessParameters, + onStatusParameters, + onSyncedParameters, +- WebSocketStatus, +- onAwarenessChangeParameters, +- onAwarenessUpdateParameters, + } from './types.js' +-import { +- CompleteHocuspocusProviderWebsocketConfiguration, +- HocuspocusProviderWebsocket, +-} from './HocuspocusProviderWebsocket.js' +-import { StatelessMessage } from './OutgoingMessages/StatelessMessage.js' +-import { CloseMessage } from './OutgoingMessages/CloseMessage.js' + + export type HocuspocusProviderConfiguration = + Required> +@@ -239,8 +239,16 @@ export class HocuspocusProvider extends EventEmitter { + return this.unsyncedChanges > 0 + } + +- updateUnsyncedChanges(unsyncedChanges = 0) { +- this.unsyncedChanges += unsyncedChanges ++ incrementUnsyncedChanges() { ++ this.unsyncedChanges += 1 ++ this.emit('unsyncedChanges', this.unsyncedChanges) ++ } ++ ++ decrementUnsyncedChanges() { ++ this.unsyncedChanges -= 1 ++ if (this.unsyncedChanges === 0) { ++ this.synced = true ++ } + this.emit('unsyncedChanges', this.unsyncedChanges) + } + +@@ -271,7 +279,7 @@ export class HocuspocusProvider extends EventEmitter { + return + } + +- this.updateUnsyncedChanges(1) ++ this.incrementUnsyncedChanges() + this.send(UpdateMessage, { update, documentName: this.configuration.name }, true) + } + +@@ -285,6 +293,12 @@ export class HocuspocusProvider extends EventEmitter { + }, true) + } + ++ /** ++ * Indicates whether a first handshake with the server has been established ++ * ++ * Note: this does not mean all updates from the client have been persisted to the backend. For this, ++ * use `hasUnsyncedChanges`. ++ */ + get synced(): boolean { + return this.isSynced + } +@@ -294,10 +308,6 @@ export class HocuspocusProvider extends EventEmitter { + return + } + +- if (state && this.unsyncedChanges > 0) { +- this.updateUnsyncedChanges(-1 * this.unsyncedChanges) +- } +- + this.isSynced = state + this.emit('synced', { state }) + this.emit('sync', { state }) +@@ -346,6 +356,7 @@ export class HocuspocusProvider extends EventEmitter { + } + + startSync() { ++ this.incrementUnsyncedChanges() + this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name }) + + if (this.awareness.getLocalState() !== null) { +@@ -358,7 +369,9 @@ export class HocuspocusProvider extends EventEmitter { + } + + send(message: ConstructableOutgoingMessage, args: any, broadcast = false) { +- if (!this.isConnected) return ++ if (!this.isConnected) { ++ return ++ } + + if (broadcast) { + this.mux(() => { this.broadcast(message, args) }) +@@ -383,7 +396,7 @@ export class HocuspocusProvider extends EventEmitter { + + this.emit('message', { event, message: new IncomingMessage(event.data) }) + +- new MessageReceiver(message).apply(this) ++ new MessageReceiver(message).apply(this, true) + } + + onClose(event: CloseEvent) { +diff --git a/node_modules/@hocuspocus/provider/src/HocuspocusProviderWebsocket.ts b/node_modules/@hocuspocus/provider/src/HocuspocusProviderWebsocket.ts +index eb2a7e1..82db71e 100644 +--- a/node_modules/@hocuspocus/provider/src/HocuspocusProviderWebsocket.ts ++++ b/node_modules/@hocuspocus/provider/src/HocuspocusProviderWebsocket.ts +@@ -1,18 +1,19 @@ +-import * as time from 'lib0/time' +-import * as mutex from 'lib0/mutex' +-import * as url from 'lib0/url' +-import type { MessageEvent } from 'ws' +-import { retry } from '@lifeomic/attempt' + import { + Forbidden, MessageTooBig, Unauthorized, WsReadyStates, + } from '@hocuspocus/common' ++import { retry } from '@lifeomic/attempt' ++import * as mutex from 'lib0/mutex' ++import * as time from 'lib0/time' ++import * as url from 'lib0/url' ++import type { MessageEvent } from 'ws' + import { Event } from 'ws' + import EventEmitter from './EventEmitter.js' ++import { HocuspocusProvider } from './HocuspocusProvider.js' + import { +- onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatusParameters, WebSocketStatus, ++ WebSocketStatus, + onAwarenessChangeParameters, onAwarenessUpdateParameters, ++ onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatusParameters, + } from './types.js' +-import { HocuspocusProvider } from './HocuspocusProvider.js' + + export type HocuspocusProviderWebsocketConfiguration = + Required> +@@ -91,6 +92,8 @@ export interface CompleteHocuspocusProviderWebsocketConfiguration { + } + + export class HocuspocusProviderWebsocket extends EventEmitter { ++ private messageQueue: any[] = [] ++ + public configuration: CompleteHocuspocusProviderWebsocketConfiguration = { + url: '', + // @ts-ignore +@@ -285,6 +288,7 @@ export class HocuspocusProviderWebsocket extends EventEmitter { + createWebSocketConnection() { + return new Promise((resolve, reject) => { + if (this.webSocket) { ++ this.messageQueue = [] + this.webSocket.close() + this.webSocket = null + } +@@ -324,6 +328,8 @@ export class HocuspocusProviderWebsocket extends EventEmitter { + this.status = WebSocketStatus.Connected + this.emit('status', { status: WebSocketStatus.Connected }) + this.emit('connect') ++ this.messageQueue.forEach(message => this.send(message)) ++ this.messageQueue = [] + } + } + +@@ -355,6 +361,7 @@ export class HocuspocusProviderWebsocket extends EventEmitter { + // No message received in a long time, not even your own + // Awareness updates, which are updated every 15 seconds. + this.webSocket?.close() ++ this.messageQueue = [] + } + + registerEventListeners() { +@@ -389,6 +396,7 @@ export class HocuspocusProviderWebsocket extends EventEmitter { + + try { + this.webSocket.close() ++ this.messageQueue = [] + } catch { + // + } +@@ -397,6 +405,8 @@ export class HocuspocusProviderWebsocket extends EventEmitter { + send(message: any) { + if (this.webSocket?.readyState === WsReadyStates.Open) { + this.webSocket.send(message) ++ } else { ++ this.messageQueue.push(message) + } + } + +diff --git a/node_modules/@hocuspocus/provider/src/MessageReceiver.ts b/node_modules/@hocuspocus/provider/src/MessageReceiver.ts +index b6847e9..08eac73 100644 +--- a/node_modules/@hocuspocus/provider/src/MessageReceiver.ts ++++ b/node_modules/@hocuspocus/provider/src/MessageReceiver.ts +@@ -1,11 +1,11 @@ +-import * as awarenessProtocol from 'y-protocols/awareness' +-import { readSyncMessage, messageYjsSyncStep2, messageYjsUpdate } from 'y-protocols/sync' + import { readAuthMessage } from '@hocuspocus/common' +-import { readVarString } from 'lib0/decoding' +-import { MessageType } from './types.js' ++import { readVarInt, readVarString } from 'lib0/decoding' ++import * as awarenessProtocol from 'y-protocols/awareness' ++import { messageYjsSyncStep2, readSyncMessage } from 'y-protocols/sync' + import { HocuspocusProvider } from './HocuspocusProvider.js' + import { IncomingMessage } from './IncomingMessage.js' + import { OutgoingMessage } from './OutgoingMessage.js' ++import { MessageType } from './types.js' + + export class MessageReceiver { + +@@ -23,7 +23,7 @@ export class MessageReceiver { + return this + } + +- public apply(provider: HocuspocusProvider, emitSynced = true) { ++ public apply(provider: HocuspocusProvider, emitSynced: boolean) { + const { message } = this + const type = message.readVarUint() + +@@ -50,6 +50,9 @@ export class MessageReceiver { + provider.receiveStateless(readVarString(message.decoder)) + break + ++ case MessageType.SyncStatus: ++ this.applySyncStatusMessage(provider, readVarInt(message.decoder) === 1) ++ break + default: + throw new Error(`Can’t apply message of unknown type: ${type}`) + } +@@ -85,11 +88,11 @@ export class MessageReceiver { + if (emitSynced && syncMessageType === messageYjsSyncStep2) { + provider.synced = true + } ++ } + +- if (syncMessageType === messageYjsUpdate || syncMessageType === messageYjsSyncStep2) { +- if (provider.unsyncedChanges > 0) { +- provider.updateUnsyncedChanges(-1) +- } ++ applySyncStatusMessage(provider: HocuspocusProvider, applied: boolean) { ++ if (applied) { ++ provider.decrementUnsyncedChanges() + } + } + +diff --git a/node_modules/@hocuspocus/provider/src/types.ts b/node_modules/@hocuspocus/provider/src/types.ts +index c7a6ede..f18eced 100644 +--- a/node_modules/@hocuspocus/provider/src/types.ts ++++ b/node_modules/@hocuspocus/provider/src/types.ts +@@ -1,15 +1,15 @@ ++import { Encoder } from 'lib0/encoding' ++import type { CloseEvent, Event, MessageEvent } from 'ws' + import { Awareness } from 'y-protocols/awareness' + import * as Y from 'yjs' +-import { Encoder } from 'lib0/encoding' +-import type { Event, CloseEvent, MessageEvent } from 'ws' ++import { IncomingMessage } from './IncomingMessage.js' ++import { OutgoingMessage } from './OutgoingMessage.js' + import { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.js' + import { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.js' + import { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js' + import { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js' + import { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js' + import { UpdateMessage } from './OutgoingMessages/UpdateMessage.js' +-import { IncomingMessage } from './IncomingMessage.js' +-import { OutgoingMessage } from './OutgoingMessage.js' + + export enum MessageType { + Sync = 0, +@@ -18,6 +18,7 @@ export enum MessageType { + QueryAwareness = 3, + Stateless = 5, + CLOSE = 7, ++ SyncStatus = 8, + } + + export enum WebSocketStatus { diff --git a/patches/@hocuspocus+server+2.1.0.patch b/patches/@hocuspocus+server+2.1.0.patch new file mode 100644 index 000000000..0358e03b5 --- /dev/null +++ b/patches/@hocuspocus+server+2.1.0.patch @@ -0,0 +1,4862 @@ +diff --git a/node_modules/@hocuspocus/server/CHANGELOG.md b/node_modules/@hocuspocus/server/CHANGELOG.md +new file mode 100644 +index 0000000..05afa13 +--- /dev/null ++++ b/node_modules/@hocuspocus/server/CHANGELOG.md +@@ -0,0 +1,1100 @@ ++# Change Log ++ ++All notable changes to this project will be documented in this file. ++See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. ++ ++# [2.1.0](https://github.com/ueberdosis/hocuspocus/compare/v2.0.6...v2.1.0) (2023-06-03) ++ ++ ++### Bug Fixes ++ ++* export typings for recent typescript ([#602](https://github.com/ueberdosis/hocuspocus/issues/602)) ([551d27f](https://github.com/ueberdosis/hocuspocus/commit/551d27fa6de9c746c67bf0f1e3bb56167aebbca5)), closes [/github.com/artalar/reatom/issues/560#issuecomment-1528997739](https://github.com//github.com/artalar/reatom/issues/560/issues/issuecomment-1528997739) ++ ++ ++ ++ ++ ++## [2.0.6](https://github.com/ueberdosis/hocuspocus/compare/v2.0.5...v2.0.6) (2023-04-25) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++## [2.0.5](https://github.com/ueberdosis/hocuspocus/compare/v2.0.4...v2.0.5) (2023-04-24) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++## [2.0.4](https://github.com/ueberdosis/hocuspocus/compare/v2.0.3...v2.0.4) (2023-04-23) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++## [2.0.3](https://github.com/ueberdosis/hocuspocus/compare/v2.0.2...v2.0.3) (2023-04-05) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++## [2.0.2](https://github.com/ueberdosis/hocuspocus/compare/v2.0.1...v2.0.2) (2023-04-04) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++## [2.0.1](https://github.com/ueberdosis/hocuspocus/compare/v2.0.0...v2.0.1) (2023-03-30) ++ ++ ++### Bug Fixes ++ ++* connection.sendStateless error when connections more than one ([#556](https://github.com/ueberdosis/hocuspocus/issues/556)) ([9a9260f](https://github.com/ueberdosis/hocuspocus/commit/9a9260ffd5ee559bdc4f8ba4e7c1b1c12c2944d0)) ++ ++ ++ ++ ++ ++# [2.0.0](https://github.com/ueberdosis/hocuspocus/compare/v1.1.3...v2.0.0) (2023-03-29) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [2.0.0-beta.0](https://github.com/ueberdosis/hocuspocus/compare/v1.1.1...v2.0.0-beta.0) (2023-03-28) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [2.0.0-alpha.1](https://github.com/ueberdosis/hocuspocus/compare/v2.0.0-alpha.0...v2.0.0-alpha.1) (2023-03-23) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [2.0.0-alpha.0](https://github.com/ueberdosis/hocuspocus/compare/v1.1.0...v2.0.0-alpha.0) (2023-02-28) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.1.0](https://github.com/ueberdosis/hocuspocus/compare/v1.0.2...v1.1.0) (2023-02-24) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++## [1.0.2](https://github.com/ueberdosis/hocuspocus/compare/v1.0.1...v1.0.2) (2023-02-16) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++## [1.0.1](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0...v1.0.1) (2023-01-30) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.7...v1.0.0) (2023-01-18) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-beta.7](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.6...v1.0.0-beta.7) (2023-01-11) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-beta.6](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.5...v1.0.0-beta.6) (2022-12-03) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-beta.5](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.3...v1.0.0-beta.5) (2022-11-25) ++ ++ ++### Bug Fixes ++ ++* Crash when websocket receives out of bound characters pre-auth ([#444](https://github.com/ueberdosis/hocuspocus/issues/444)) ([73d8a48](https://github.com/ueberdosis/hocuspocus/commit/73d8a4812a4d9a851c97a52b6d62180a1fa4b56b)) ++ ++ ++ ++ ++ ++# [1.0.0-beta.4](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.3...v1.0.0-beta.4) (2022-11-25) ++ ++ ++### Bug Fixes ++ ++* Crash when websocket receives out of bound characters pre-auth ([#444](https://github.com/ueberdosis/hocuspocus/issues/444)) ([73d8a48](https://github.com/ueberdosis/hocuspocus/commit/73d8a4812a4d9a851c97a52b6d62180a1fa4b56b)) ++ ++ ++ ++ ++ ++# [1.0.0-beta.3](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.2...v1.0.0-beta.3) (2022-11-03) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-beta.2](https://github.com/ueberdosis/hocuspocus/compare/v1.0.0-beta.1...v1.0.0-beta.2) (2022-09-28) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# 1.0.0-beta.111 (2022-09-28) ++ ++ ++### Bug Fixes ++ ++* Empty sync message causes error in client MessageReceiver ([#174](https://github.com/ueberdosis/hocuspocus/issues/174)) ([f9dca69](https://github.com/ueberdosis/hocuspocus/commit/f9dca69eb96d1ede37a0709bd3b7735bf1ff57ba)) ++* fix hook promise chaining ([ee5052d](https://github.com/ueberdosis/hocuspocus/commit/ee5052d236ba0b400880dc7ca1c90cefdd372003)) ++* Potential onCreateDocument race condition ([#167](https://github.com/ueberdosis/hocuspocus/issues/167)) ([b3e3e4d](https://github.com/ueberdosis/hocuspocus/commit/b3e3e4dea74f9b833ccb0c6a6521f55c001411c1)) ++* Remove event listener once unused ([#220](https://github.com/ueberdosis/hocuspocus/issues/220)) ([0422196](https://github.com/ueberdosis/hocuspocus/commit/0422196f8a4e09af530c51419742b137b9ebbc69)) ++* typescript strings ([0dd5f12](https://github.com/ueberdosis/hocuspocus/commit/0dd5f1292616e426cdb4cc79e83ab8ced0895bfa)) ++ ++ ++### Features ++ ++* Add connectionsCount and documentsCount methods to server ([8bdbcd8](https://github.com/ueberdosis/hocuspocus/commit/8bdbcd86b1f18462f6636b75a4cbd97ebefdb227)) ++* add read only mode ([7b59d52](https://github.com/ueberdosis/hocuspocus/commit/7b59d522b966b51347db35ac6a4524211e44ae9c)) ++* add request headers and parameters to onCreateDocument ([47a8b95](https://github.com/ueberdosis/hocuspocus/commit/47a8b95baf8dd22ebd71c56565420179402cdaa4)) ++* Message Authentication ([#163](https://github.com/ueberdosis/hocuspocus/issues/163)) ([a1e68d5](https://github.com/ueberdosis/hocuspocus/commit/a1e68d5a272742bd17dd92522dfc908277343849)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.107](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.106...@hocuspocus/server@1.0.0-alpha.107) (2022-09-20) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.106](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.105...@hocuspocus/server@1.0.0-alpha.106) (2022-09-02) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.105](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.104...@hocuspocus/server@1.0.0-alpha.105) (2022-08-28) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.104](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.103...@hocuspocus/server@1.0.0-alpha.104) (2022-07-13) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.103](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.102...@hocuspocus/server@1.0.0-alpha.103) (2022-06-08) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.102](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.101...@hocuspocus/server@1.0.0-alpha.102) (2022-04-05) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.101](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.100...@hocuspocus/server@1.0.0-alpha.101) (2022-04-05) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.100](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.99...@hocuspocus/server@1.0.0-alpha.100) (2022-03-30) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.99](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.98...@hocuspocus/server@1.0.0-alpha.99) (2022-03-21) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.98](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.97...@hocuspocus/server@1.0.0-alpha.98) (2022-03-21) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.97](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.96...@hocuspocus/server@1.0.0-alpha.97) (2022-03-11) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.96](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.95...@hocuspocus/server@1.0.0-alpha.96) (2022-03-02) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.95](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.94...@hocuspocus/server@1.0.0-alpha.95) (2022-02-24) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.94](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.93...@hocuspocus/server@1.0.0-alpha.94) (2022-02-24) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.93](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.92...@hocuspocus/server@1.0.0-alpha.93) (2022-02-22) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.92](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.91...@hocuspocus/server@1.0.0-alpha.92) (2022-02-18) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.91](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.90...@hocuspocus/server@1.0.0-alpha.91) (2022-01-12) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.90](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.89...@hocuspocus/server@1.0.0-alpha.90) (2021-12-13) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.89](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.88...@hocuspocus/server@1.0.0-alpha.89) (2021-12-09) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.88](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.87...@hocuspocus/server@1.0.0-alpha.88) (2021-12-08) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.87](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.86...@hocuspocus/server@1.0.0-alpha.87) (2021-12-07) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.86](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.85...@hocuspocus/server@1.0.0-alpha.86) (2021-12-03) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.85](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.84...@hocuspocus/server@1.0.0-alpha.85) (2021-12-01) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.84](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.83...@hocuspocus/server@1.0.0-alpha.84) (2021-12-01) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.83](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.82...@hocuspocus/server@1.0.0-alpha.83) (2021-11-30) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.82](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.81...@hocuspocus/server@1.0.0-alpha.82) (2021-11-30) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.81](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.80...@hocuspocus/server@1.0.0-alpha.81) (2021-11-26) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.80](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.79...@hocuspocus/server@1.0.0-alpha.80) (2021-11-24) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.79](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.78...@hocuspocus/server@1.0.0-alpha.79) (2021-11-22) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.78](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.77...@hocuspocus/server@1.0.0-alpha.78) (2021-11-10) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.77](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.76...@hocuspocus/server@1.0.0-alpha.77) (2021-11-05) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.76](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.75...@hocuspocus/server@1.0.0-alpha.76) (2021-10-31) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.75](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.74...@hocuspocus/server@1.0.0-alpha.75) (2021-10-15) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.74](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.73...@hocuspocus/server@1.0.0-alpha.74) (2021-10-08) ++ ++ ++### Bug Fixes ++ ++* Remove event listener once unused ([#220](https://github.com/ueberdosis/hocuspocus/issues/220)) ([0422196](https://github.com/ueberdosis/hocuspocus/commit/0422196f8a4e09af530c51419742b137b9ebbc69)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.73](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.71...@hocuspocus/server@1.0.0-alpha.73) (2021-09-23) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.71](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.70...@hocuspocus/server@1.0.0-alpha.71) (2021-09-23) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.70](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.69...@hocuspocus/server@1.0.0-alpha.70) (2021-09-17) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.69](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.68...@hocuspocus/server@1.0.0-alpha.69) (2021-09-14) ++ ++ ++### Features ++ ++* Add connectionsCount and documentsCount methods to server ([8bdbcd8](https://github.com/ueberdosis/hocuspocus/commit/8bdbcd86b1f18462f6636b75a4cbd97ebefdb227)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.68](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.67...@hocuspocus/server@1.0.0-alpha.68) (2021-09-01) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.67](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.66...@hocuspocus/server@1.0.0-alpha.67) (2021-09-01) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.66](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.65...@hocuspocus/server@1.0.0-alpha.66) (2021-08-31) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.65](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.64...@hocuspocus/server@1.0.0-alpha.65) (2021-08-29) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.64](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.63...@hocuspocus/server@1.0.0-alpha.64) (2021-08-27) ++ ++ ++### Bug Fixes ++ ++* Empty sync message causes error in client MessageReceiver ([#174](https://github.com/ueberdosis/hocuspocus/issues/174)) ([f9dca69](https://github.com/ueberdosis/hocuspocus/commit/f9dca69eb96d1ede37a0709bd3b7735bf1ff57ba)) ++* Potential onCreateDocument race condition ([#167](https://github.com/ueberdosis/hocuspocus/issues/167)) ([b3e3e4d](https://github.com/ueberdosis/hocuspocus/commit/b3e3e4dea74f9b833ccb0c6a6521f55c001411c1)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.63](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.62...@hocuspocus/server@1.0.0-alpha.63) (2021-08-19) ++ ++ ++### Features ++ ++* Message Authentication ([#163](https://github.com/ueberdosis/hocuspocus/issues/163)) ([a1e68d5](https://github.com/ueberdosis/hocuspocus/commit/a1e68d5a272742bd17dd92522dfc908277343849)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.62](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.61...@hocuspocus/server@1.0.0-alpha.62) (2021-08-19) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.61](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.60...@hocuspocus/server@1.0.0-alpha.61) (2021-08-13) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.60](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.59...@hocuspocus/server@1.0.0-alpha.60) (2021-07-13) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.59](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.58...@hocuspocus/server@1.0.0-alpha.59) (2021-06-22) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.58](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.57...@hocuspocus/server@1.0.0-alpha.58) (2021-06-11) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.57](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.56...@hocuspocus/server@1.0.0-alpha.57) (2021-06-09) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.56](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.55...@hocuspocus/server@1.0.0-alpha.56) (2021-06-09) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.55](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.54...@hocuspocus/server@1.0.0-alpha.55) (2021-06-08) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.54](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.53...@hocuspocus/server@1.0.0-alpha.54) (2021-06-08) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.53](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.52...@hocuspocus/server@1.0.0-alpha.53) (2021-05-15) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.52](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.51...@hocuspocus/server@1.0.0-alpha.52) (2021-04-20) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.51](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.50...@hocuspocus/server@1.0.0-alpha.51) (2021-04-20) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.50](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.49...@hocuspocus/server@1.0.0-alpha.50) (2021-04-20) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.49](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.48...@hocuspocus/server@1.0.0-alpha.49) (2021-04-20) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.48](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.47...@hocuspocus/server@1.0.0-alpha.48) (2021-04-20) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.47](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.46...@hocuspocus/server@1.0.0-alpha.47) (2021-04-15) ++ ++ ++### Features ++ ++* add request headers and parameters to onCreateDocument ([47a8b95](https://github.com/ueberdosis/hocuspocus/commit/47a8b95baf8dd22ebd71c56565420179402cdaa4)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.46](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.45...@hocuspocus/server@1.0.0-alpha.46) (2021-04-14) ++ ++ ++### Features ++ ++* add read only mode ([7b59d52](https://github.com/ueberdosis/hocuspocus/commit/7b59d522b966b51347db35ac6a4524211e44ae9c)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.45](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.44...@hocuspocus/server@1.0.0-alpha.45) (2021-04-12) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.44](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.43...@hocuspocus/server@1.0.0-alpha.44) (2021-04-08) ++ ++ ++### Bug Fixes ++ ++* typescript strings ([0dd5f12](https://github.com/ueberdosis/hocuspocus/commit/0dd5f1292616e426cdb4cc79e83ab8ced0895bfa)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.43](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.42...@hocuspocus/server@1.0.0-alpha.43) (2021-04-07) ++ ++ ++### Bug Fixes ++ ++* fix hook promise chaining ([ee5052d](https://github.com/ueberdosis/hocuspocus/commit/ee5052d236ba0b400880dc7ca1c90cefdd372003)) ++ ++ ++ ++ ++ ++# [1.0.0-alpha.42](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.41...@hocuspocus/server@1.0.0-alpha.42) (2021-04-06) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.41](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.40...@hocuspocus/server@1.0.0-alpha.41) (2021-04-06) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.40](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.39...@hocuspocus/server@1.0.0-alpha.40) (2021-03-29) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.39](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.38...@hocuspocus/server@1.0.0-alpha.39) (2021-03-29) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.38](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.37...@hocuspocus/server@1.0.0-alpha.38) (2021-03-25) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.37](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.36...@hocuspocus/server@1.0.0-alpha.37) (2021-03-18) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.36](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.35...@hocuspocus/server@1.0.0-alpha.36) (2021-03-15) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.35](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.34...@hocuspocus/server@1.0.0-alpha.35) (2021-03-10) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.34](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.33...@hocuspocus/server@1.0.0-alpha.34) (2021-03-10) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.33](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.32...@hocuspocus/server@1.0.0-alpha.33) (2021-03-10) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.32](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.31...@hocuspocus/server@1.0.0-alpha.32) (2021-03-10) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.31](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.30...@hocuspocus/server@1.0.0-alpha.31) (2021-03-10) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.30](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.29...@hocuspocus/server@1.0.0-alpha.30) (2021-03-10) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.29](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.28...@hocuspocus/server@1.0.0-alpha.29) (2021-03-10) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.28](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.27...@hocuspocus/server@1.0.0-alpha.28) (2021-03-10) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.27](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.26...@hocuspocus/server@1.0.0-alpha.27) (2021-03-10) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.26](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.25...@hocuspocus/server@1.0.0-alpha.26) (2021-03-04) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.25](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.24...@hocuspocus/server@1.0.0-alpha.25) (2021-03-04) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.24](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.23...@hocuspocus/server@1.0.0-alpha.24) (2021-03-04) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.23](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.22...@hocuspocus/server@1.0.0-alpha.23) (2021-03-04) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.22](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.21...@hocuspocus/server@1.0.0-alpha.22) (2021-03-04) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.21](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.20...@hocuspocus/server@1.0.0-alpha.21) (2021-03-04) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.20](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.19...@hocuspocus/server@1.0.0-alpha.20) (2021-03-02) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.19](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.18...@hocuspocus/server@1.0.0-alpha.19) (2021-03-02) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.18](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.17...@hocuspocus/server@1.0.0-alpha.18) (2021-03-02) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.17](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.16...@hocuspocus/server@1.0.0-alpha.17) (2021-03-02) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.16](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.15...@hocuspocus/server@1.0.0-alpha.16) (2021-03-02) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.15](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.14...@hocuspocus/server@1.0.0-alpha.15) (2021-02-22) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.14](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.13...@hocuspocus/server@1.0.0-alpha.14) (2021-02-18) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.13](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.12...@hocuspocus/server@1.0.0-alpha.13) (2021-02-15) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.12](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.11...@hocuspocus/server@1.0.0-alpha.12) (2021-02-15) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.11](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.10...@hocuspocus/server@1.0.0-alpha.11) (2021-02-01) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.10](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.9...@hocuspocus/server@1.0.0-alpha.10) (2021-01-26) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.9](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.8...@hocuspocus/server@1.0.0-alpha.9) (2021-01-21) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.8](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.7...@hocuspocus/server@1.0.0-alpha.8) (2021-01-11) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.7](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.6...@hocuspocus/server@1.0.0-alpha.7) (2021-01-11) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.6](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.5...@hocuspocus/server@1.0.0-alpha.6) (2020-12-10) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.5](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.3...@hocuspocus/server@1.0.0-alpha.5) (2020-12-09) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# [1.0.0-alpha.3](https://github.com/ueberdosis/hocuspocus/compare/@hocuspocus/server@1.0.0-alpha.1...@hocuspocus/server@1.0.0-alpha.3) (2020-12-09) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# 1.0.0-alpha.1 (2020-12-09) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# 1.0.0-alpha.1 (2020-12-09) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# 1.0.0-alpha.1 (2020-12-09) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# 1.0.0-alpha.1 (2020-12-02) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# 1.0.0-alpha.2 (2020-12-02) ++ ++**Note:** Version bump only for package @hocuspocus/server ++ ++ ++ ++ ++ ++# 1.0.0-alpha.1 (2020-12-02) ++ ++**Note:** Version bump only for package @hocuspocus/server +diff --git a/node_modules/@hocuspocus/server/dist/hocuspocus-server.cjs b/node_modules/@hocuspocus/server/dist/hocuspocus-server.cjs +index 2bb9c9f..29dd216 100644 +--- a/node_modules/@hocuspocus/server/dist/hocuspocus-server.cjs ++++ b/node_modules/@hocuspocus/server/dist/hocuspocus-server.cjs +@@ -6,10 +6,10 @@ var AsyncLock = require('async-lock'); + var common = require('@hocuspocus/common'); + var Y = require('yjs'); + var http = require('http'); +-var url = require('url'); +-var ws = require('ws'); +-var uuid = require('uuid'); + var kleur = require('kleur'); ++var uuid = require('uuid'); ++var ws = require('ws'); ++var url = require('url'); + + function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +@@ -36,10 +36,28 @@ var Y__namespace = /*#__PURE__*/_interopNamespace(Y); + var kleur__default = /*#__PURE__*/_interopDefaultLegacy(kleur); + + /** +- * Utility module to work with strings. ++ * Utility module to work with sets. ++ * ++ * @module set ++ */ ++ ++const create$2 = () => new Set(); ++ ++/** ++ * Utility module to work with Arrays. ++ * ++ * @module array ++ */ ++ ++/** ++ * Transforms something array-like to an actual Array. + * +- * @module string ++ * @function ++ * @template T ++ * @param {ArrayLike|Iterable} arraylike ++ * @return {T} + */ ++const from = Array.from; + + /** + * @param {string} s +@@ -122,7 +140,7 @@ if (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) { + * + * @function + */ +-const create$2 = () => new Map(); ++const create$1 = () => new Map(); + + /** + * Get map property. Create T if property is undefined and set T on map. +@@ -217,30 +235,6 @@ try { + /* c8 ignore next */ + const varStorage = _localStorage; + +-/** +- * Utility module to work with sets. +- * +- * @module set +- */ +- +-const create$1 = () => new Set(); +- +-/** +- * Utility module to work with Arrays. +- * +- * @module array +- */ +- +-/** +- * Transforms something array-like to an actual Array. +- * +- * @function +- * @template T +- * @param {ArrayLike|Iterable} arraylike +- * @return {T} +- */ +-const from = Array.from; +- + /** + * Utility functions for working with EcmaScript objects. + * +@@ -372,7 +366,6 @@ const equalityDeep = (a, b) => { + */ + // @ts-ignore + const isOneOf = (value, options) => options.includes(value); +-/* c8 ignore stop */ + + /** + * Isomorphic module to work access the environment (query params, env variables). +@@ -398,7 +391,7 @@ let params; + const computeParams = () => { + if (params === undefined) { + if (isNode) { +- params = create$2(); ++ params = create$1(); + const pargs = process.argv; + let currParamName = null; + for (let i = 0; i < pargs.length; i++) { +@@ -420,7 +413,7 @@ const computeParams = () => { + } + // in ReactNative for example this would not be true (unless connected to the Remote Debugger) + } else if (typeof location === 'object') { +- params = create$2(); // eslint-disable-next-line no-undef ++ params = create$1(); // eslint-disable-next-line no-undef + (location.search || '?').slice(1).split('&').forEach((kv) => { + if (kv.length !== 0) { + const [key, value] = kv.split('='); +@@ -429,7 +422,7 @@ const computeParams = () => { + } + }); + } else { +- params = create$2(); ++ params = create$1(); + } + } + return params +@@ -966,109 +959,6 @@ class IncomingMessage { + } + } + +-/** +- * @module sync-protocol +- */ +- +-/** +- * @typedef {Map} StateMap +- */ +- +-/** +- * Core Yjs defines two message types: +- * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2. +- * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it +- * received all information from the remote client. +- * +- * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection +- * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both +- * SyncStep2 and SyncDone, it is assured that it is synced to the remote client. +- * +- * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1. +- * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies +- * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the +- * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can +- * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them. +- * Therefore it is necesarry that the client initiates the sync. +- * +- * Construction of a message: +- * [messageType : varUint, message definition..] +- * +- * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol! +- * +- * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer) +- */ +- +-const messageYjsSyncStep1 = 0; +-const messageYjsSyncStep2 = 1; +-const messageYjsUpdate = 2; +- +-/** +- * Create a sync step 1 message based on the state of the current shared document. +- * +- * @param {encoding.Encoder} encoder +- * @param {Y.Doc} doc +- */ +-const writeSyncStep1 = (encoder, doc) => { +- writeVarUint(encoder, messageYjsSyncStep1); +- const sv = Y__namespace.encodeStateVector(doc); +- writeVarUint8Array(encoder, sv); +-}; +- +-/** +- * @param {encoding.Encoder} encoder +- * @param {Y.Doc} doc +- * @param {Uint8Array} [encodedStateVector] +- */ +-const writeSyncStep2 = (encoder, doc, encodedStateVector) => { +- writeVarUint(encoder, messageYjsSyncStep2); +- writeVarUint8Array(encoder, Y__namespace.encodeStateAsUpdate(doc, encodedStateVector)); +-}; +- +-/** +- * Read SyncStep1 message and reply with SyncStep2. +- * +- * @param {decoding.Decoder} decoder The reply to the received message +- * @param {encoding.Encoder} encoder The received message +- * @param {Y.Doc} doc +- */ +-const readSyncStep1 = (decoder, encoder, doc) => +- writeSyncStep2(encoder, doc, readVarUint8Array(decoder)); +- +-/** +- * Read and apply Structs and then DeleteStore to a y instance. +- * +- * @param {decoding.Decoder} decoder +- * @param {Y.Doc} doc +- * @param {any} transactionOrigin +- */ +-const readSyncStep2 = (decoder, doc, transactionOrigin) => { +- try { +- Y__namespace.applyUpdate(doc, readVarUint8Array(decoder), transactionOrigin); +- } catch (error) { +- // This catches errors that are thrown by event handlers +- console.error('Caught error while handling a Yjs update', error); +- } +-}; +- +-/** +- * @param {encoding.Encoder} encoder +- * @param {Uint8Array} update +- */ +-const writeUpdate = (encoder, update) => { +- writeVarUint(encoder, messageYjsUpdate); +- writeVarUint8Array(encoder, update); +-}; +- +-/** +- * Read and apply Structs and then DeleteStore to a y instance. +- * +- * @param {decoding.Decoder} decoder +- * @param {Y.Doc} doc +- * @param {any} transactionOrigin +- */ +-const readUpdate = readSyncStep2; +- + /** + * Utility module to work with time. + * +@@ -1099,7 +989,7 @@ class Observable { + * Some desc. + * @type {Map} + */ +- this._observers = create$2(); ++ this._observers = create$1(); + } + + /** +@@ -1107,7 +997,7 @@ class Observable { + * @param {function} f + */ + on (name, f) { +- setIfUndefined(this._observers, name, create$1).add(f); ++ setIfUndefined(this._observers, name, create$2).add(f); + } + + /** +@@ -1150,11 +1040,11 @@ class Observable { + */ + emit (name, args) { + // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called. +- return from((this._observers.get(name) || create$2()).values()).forEach(f => f(...args)) ++ return from((this._observers.get(name) || create$1()).values()).forEach(f => f(...args)) + } + + destroy () { +- this._observers = create$2(); ++ this._observers = create$1(); + } + } + +@@ -1419,6 +1309,109 @@ const applyAwarenessUpdate = (awareness, update, origin) => { + } + }; + ++/** ++ * @module sync-protocol ++ */ ++ ++/** ++ * @typedef {Map} StateMap ++ */ ++ ++/** ++ * Core Yjs defines two message types: ++ * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2. ++ * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it ++ * received all information from the remote client. ++ * ++ * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection ++ * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both ++ * SyncStep2 and SyncDone, it is assured that it is synced to the remote client. ++ * ++ * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1. ++ * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies ++ * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the ++ * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can ++ * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them. ++ * Therefore it is necesarry that the client initiates the sync. ++ * ++ * Construction of a message: ++ * [messageType : varUint, message definition..] ++ * ++ * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol! ++ * ++ * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer) ++ */ ++ ++const messageYjsSyncStep1 = 0; ++const messageYjsSyncStep2 = 1; ++const messageYjsUpdate = 2; ++ ++/** ++ * Create a sync step 1 message based on the state of the current shared document. ++ * ++ * @param {encoding.Encoder} encoder ++ * @param {Y.Doc} doc ++ */ ++const writeSyncStep1 = (encoder, doc) => { ++ writeVarUint(encoder, messageYjsSyncStep1); ++ const sv = Y__namespace.encodeStateVector(doc); ++ writeVarUint8Array(encoder, sv); ++}; ++ ++/** ++ * @param {encoding.Encoder} encoder ++ * @param {Y.Doc} doc ++ * @param {Uint8Array} [encodedStateVector] ++ */ ++const writeSyncStep2 = (encoder, doc, encodedStateVector) => { ++ writeVarUint(encoder, messageYjsSyncStep2); ++ writeVarUint8Array(encoder, Y__namespace.encodeStateAsUpdate(doc, encodedStateVector)); ++}; ++ ++/** ++ * Read SyncStep1 message and reply with SyncStep2. ++ * ++ * @param {decoding.Decoder} decoder The reply to the received message ++ * @param {encoding.Encoder} encoder The received message ++ * @param {Y.Doc} doc ++ */ ++const readSyncStep1 = (decoder, encoder, doc) => ++ writeSyncStep2(encoder, doc, readVarUint8Array(decoder)); ++ ++/** ++ * Read and apply Structs and then DeleteStore to a y instance. ++ * ++ * @param {decoding.Decoder} decoder ++ * @param {Y.Doc} doc ++ * @param {any} transactionOrigin ++ */ ++const readSyncStep2 = (decoder, doc, transactionOrigin) => { ++ try { ++ Y__namespace.applyUpdate(doc, readVarUint8Array(decoder), transactionOrigin); ++ } catch (error) { ++ // This catches errors that are thrown by event handlers ++ console.error('Caught error while handling a Yjs update', error); ++ } ++}; ++ ++/** ++ * @param {encoding.Encoder} encoder ++ * @param {Uint8Array} update ++ */ ++const writeUpdate = (encoder, update) => { ++ writeVarUint(encoder, messageYjsUpdate); ++ writeVarUint8Array(encoder, update); ++}; ++ ++/** ++ * Read and apply Structs and then DeleteStore to a y instance. ++ * ++ * @param {decoding.Decoder} decoder ++ * @param {Y.Doc} doc ++ * @param {any} transactionOrigin ++ */ ++const readUpdate = readSyncStep2; ++ + exports.MessageType = void 0; + (function (MessageType) { + MessageType[MessageType["Unknown"] = -1] = "Unknown"; +@@ -1430,6 +1423,7 @@ exports.MessageType = void 0; + MessageType[MessageType["Stateless"] = 5] = "Stateless"; + MessageType[MessageType["BroadcastStateless"] = 6] = "BroadcastStateless"; + MessageType[MessageType["CLOSE"] = 7] = "CLOSE"; ++ MessageType[MessageType["SyncStatus"] = 8] = "SyncStatus"; + })(exports.MessageType || (exports.MessageType = {})); + + class OutgoingMessage { +@@ -1497,7 +1491,14 @@ class OutgoingMessage { + writeVarString(this.encoder, payload); + return this; + } +- toUint8Array() { ++ // TODO: should this be write* or create* as method name? ++ writeSyncStatus(updateSaved) { ++ this.category = 'SyncStatus'; ++ writeVarUint(this.encoder, exports.MessageType.SyncStatus); ++ writeVarUint(this.encoder, updateSaved ? 1 : 0); ++ return this; ++ } ++ toUint8Array() { + return toUint8Array(this.encoder); + } + } +@@ -1620,9 +1621,32 @@ class MessageReceiver { + category: 'SyncStep2', + }); + if (connection === null || connection === void 0 ? void 0 : connection.readOnly) { ++ // We're in read-only mode, so we can't apply the update. ++ // Let's use snapshotContainsUpdate to see if the update actually contains changes. ++ // If not, we can still ack the update ++ const snapshot = Y__namespace.snapshot(document); ++ const update = readVarUint8Array(message.decoder); ++ if (Y__namespace.snapshotContainsUpdate(snapshot, update)) { ++ // no new changes in update ++ const ackMessage = new OutgoingMessage(document.name) ++ .writeSyncStatus(true); ++ connection.send(ackMessage.toUint8Array()); ++ } ++ else { ++ // new changes in update that we can't apply, because readOnly ++ const ackMessage = new OutgoingMessage(document.name) ++ .writeSyncStatus(false); ++ connection.send(ackMessage.toUint8Array()); ++ } + break; + } + readSyncStep2(message.decoder, document, connection); ++ if (connection) { ++ // TODO: how should this work if connection is not set? should we use reply? ++ // reply is used by redis, but I'm unsure how that code path works ++ connection.send(new OutgoingMessage(document.name) ++ .writeSyncStatus(true).toUint8Array()); ++ } + break; + case messageYjsUpdate: + this.logger.log({ +@@ -1631,9 +1655,17 @@ class MessageReceiver { + category: 'Update', + }); + if (connection === null || connection === void 0 ? void 0 : connection.readOnly) { ++ connection.send(new OutgoingMessage(document.name) ++ .writeSyncStatus(false).toUint8Array()); + break; + } + readUpdate(message.decoder, document, connection); ++ if (connection) { ++ // TODO: how should this work if connection is not set? should we use reply? ++ // reply is used by redis, but I'm unsure how that code path works ++ connection.send(new OutgoingMessage(document.name) ++ .writeSyncStatus(true).toUint8Array()); ++ } + break; + default: + throw new Error(`Received a message with an unknown type: ${type}`); +@@ -2128,7 +2160,7 @@ var devDependencies = { + }; + var peerDependencies = { + "y-protocols": "^1.0.5", +- yjs: "^13.5.29" ++ yjs: "^13.6.4" + }; + var gitHead = "b3454a4ca289a84ddfb7fa5607a2d4b8d5c37e9d"; + var meta = { +@@ -2150,6 +2182,297 @@ var meta = { + gitHead: gitHead + }; + ++/** ++ * Get parameters by the given request ++ */ ++function getParameters(request) { ++ var _a; ++ const query = ((_a = request === null || request === void 0 ? void 0 : request.url) === null || _a === void 0 ? void 0 : _a.split('?')) || []; ++ return new url.URLSearchParams(query[1] ? query[1] : ''); ++} ++ ++/** ++ * The `ClientConnection` class is responsible for handling an incoming WebSocket ++ * ++ * TODO-refactor: ++ * - use event handlers instead of calling hooks directly, hooks should probably be called from Hocuspocus.ts ++ */ ++class ClientConnection { ++ /** ++ * The `ClientConnection` class receives incoming WebSocket connections, ++ * runs all hooks: ++ * ++ * - onConnect for all connections ++ * - onAuthenticate only if required ++ * ++ * … and if nothings fails it’ll fully establish the connection and ++ * load the Document then. ++ */ ++ constructor(websocket, request, documentProvider, ++ // TODO: change to events ++ hooks, debuggerTool, opts) { ++ this.websocket = websocket; ++ this.request = request; ++ this.documentProvider = documentProvider; ++ this.hooks = hooks; ++ this.debuggerTool = debuggerTool; ++ this.opts = opts; ++ // this map indicates whether a `Connection` instance has already taken over for incoming message for the key (i.e. documentName) ++ this.documentConnections = {}; ++ // While the connection will be establishing messages will ++ // be queued and handled later. ++ this.incomingMessageQueue = {}; ++ // While the connection is establishing, kee ++ this.documentConnectionsEstablished = new Set(); ++ // hooks payload by Document ++ this.hookPayloads = {}; ++ this.callbacks = { ++ onClose: [(document, payload) => { }], ++ }; ++ // Every new connection gets a unique identifier. ++ this.socketId = uuid.v4(); ++ // Once all hooks are run, we’ll fully establish the connection: ++ this.setUpNewConnection = async (documentName) => { ++ // Not an idle connection anymore, no need to close it then. ++ clearTimeout(this.closeIdleConnectionTimeout); ++ const hookPayload = this.hookPayloads[documentName]; ++ // If no hook interrupts, create a document and connection ++ const document = await this.documentProvider.createDocument(documentName, hookPayload.request, hookPayload.socketId, hookPayload.connection, hookPayload.context); ++ const instance = this.createConnection(this.websocket, document); ++ instance.onClose((document, event) => { ++ delete this.hookPayloads[documentName]; ++ delete this.documentConnections[documentName]; ++ delete this.incomingMessageQueue[documentName]; ++ this.documentConnectionsEstablished.delete(documentName); ++ if (Object.keys(this.documentConnections).length === 0) { ++ instance.webSocket.close(event === null || event === void 0 ? void 0 : event.code, event === null || event === void 0 ? void 0 : event.reason); // TODO: Move this to Hocuspocus connection handler ++ } ++ }); ++ this.documentConnections[documentName] = true; ++ // There’s no need to queue messages anymore. ++ // Let’s work through queued messages. ++ this.incomingMessageQueue[documentName].forEach(input => { ++ this.websocket.emit('message', input); ++ }); ++ this.hooks('connected', { ++ ...hookPayload, ++ documentName, ++ context: hookPayload.context, ++ connectionInstance: instance, ++ }); ++ }; ++ // This listener handles authentication messages and queues everything else. ++ this.handleQueueingMessage = async (data) => { ++ var _a; ++ try { ++ const tmpMsg = new IncomingMessage(data); ++ const documentName = readVarString(tmpMsg.decoder); ++ const type = readVarUint(tmpMsg.decoder); ++ if (!(type === exports.MessageType.Auth && !this.documentConnectionsEstablished.has(documentName))) { ++ this.incomingMessageQueue[documentName].push(data); ++ return; ++ } ++ // Okay, we’ve got the authentication message we’re waiting for: ++ this.documentConnectionsEstablished.add(documentName); ++ // The 2nd integer contains the submessage type ++ // which will always be authentication when sent from client -> server ++ readVarUint(tmpMsg.decoder); ++ const token = readVarString(tmpMsg.decoder); ++ this.debuggerTool.log({ ++ direction: 'in', ++ type, ++ category: 'Token', ++ }); ++ try { ++ const hookPayload = this.hookPayloads[documentName]; ++ await this.hooks('onAuthenticate', { ++ token, ++ ...hookPayload, ++ documentName, ++ }, (contextAdditions) => { ++ // Hooks are allowed to give us even more context and we’ll merge everything together. ++ // We’ll pass the context to other hooks then. ++ hookPayload.context = { ...hookPayload.context, ...contextAdditions }; ++ }); ++ // All `onAuthenticate` hooks passed. ++ hookPayload.connection.isAuthenticated = true; ++ // Let the client know that authentication was successful. ++ const message = new OutgoingMessage(documentName).writeAuthenticated(hookPayload.connection.readOnly); ++ this.debuggerTool.log({ ++ direction: 'out', ++ type: message.type, ++ category: message.category, ++ }); ++ this.websocket.send(message.toUint8Array()); ++ // Time to actually establish the connection. ++ await this.setUpNewConnection(documentName); ++ } ++ catch (err) { ++ const error = err || common.Forbidden; ++ const message = new OutgoingMessage(documentName).writePermissionDenied((_a = error.reason) !== null && _a !== void 0 ? _a : 'permission-denied'); ++ this.debuggerTool.log({ ++ direction: 'out', ++ type: message.type, ++ category: message.category, ++ }); ++ // Ensure that the permission denied message is sent before the ++ // connection is closed ++ this.websocket.send(message.toUint8Array(), () => { ++ var _a, _b; ++ if (Object.keys(this.documentConnections).length === 0) { ++ try { ++ this.websocket.close((_a = error.code) !== null && _a !== void 0 ? _a : common.Forbidden.code, (_b = error.reason) !== null && _b !== void 0 ? _b : common.Forbidden.reason); ++ } ++ catch (closeError) { ++ // catch is needed in case invalid error code is returned by hook (that would fail sending the close message) ++ console.error(closeError); ++ this.websocket.close(common.Forbidden.code, common.Forbidden.reason); ++ } ++ } ++ }); ++ } ++ // Catch errors due to failed decoding of data ++ } ++ catch (error) { ++ console.error(error); ++ this.websocket.close(common.Unauthorized.code, common.Unauthorized.reason); ++ } ++ }; ++ this.messageHandler = async (data) => { ++ var _a, _b; ++ try { ++ const tmpMsg = new IncomingMessage(data); ++ const documentName = readVarString(tmpMsg.decoder); ++ if (this.documentConnections[documentName] === true) { ++ // we already have a `Connection` set up for this document ++ return; ++ } ++ const isFirst = this.incomingMessageQueue[documentName] === undefined; ++ if (isFirst) { ++ this.incomingMessageQueue[documentName] = []; ++ if (this.hookPayloads[documentName]) { ++ throw new Error('first message, but hookPayloads exists'); ++ } ++ const hookPayload = { ++ instance: this.documentProvider, ++ request: this.request, ++ connection: { ++ readOnly: false, ++ requiresAuthentication: this.opts.requiresAuthentication, ++ isAuthenticated: false, ++ }, ++ requestHeaders: this.request.headers, ++ requestParameters: getParameters(this.request), ++ socketId: this.socketId, ++ context: {}, ++ }; ++ this.hookPayloads[documentName] = hookPayload; ++ } ++ this.handleQueueingMessage(data); ++ if (isFirst) { ++ const hookPayload = this.hookPayloads[documentName]; ++ // if this is the first message, trigger onConnect & check if we can start the connection (only if no auth is required) ++ try { ++ await this.hooks('onConnect', { ...hookPayload, documentName }, (contextAdditions) => { ++ // merge context from all hooks ++ hookPayload.context = { ...hookPayload.context, ...contextAdditions }; ++ }); ++ if (hookPayload.connection.requiresAuthentication || this.documentConnectionsEstablished.has(documentName)) { ++ // Authentication is required, we’ll need to wait for the Authentication message. ++ return; ++ } ++ this.documentConnectionsEstablished.add(documentName); ++ await this.setUpNewConnection(documentName); ++ } ++ catch (err) { ++ // if a hook interrupts, close the websocket connection ++ const error = err || common.Forbidden; ++ try { ++ this.websocket.close((_a = error.code) !== null && _a !== void 0 ? _a : common.Forbidden.code, (_b = error.reason) !== null && _b !== void 0 ? _b : common.Forbidden.reason); ++ } ++ catch (closeError) { ++ // catch is needed in case invalid error code is returned by hook (that would fail sending the close message) ++ console.error(closeError); ++ this.websocket.close(common.Unauthorized.code, common.Unauthorized.reason); ++ } ++ } ++ } ++ } ++ catch (closeError) { ++ // catch is needed in case an invalid payload crashes the parsing of the Uint8Array ++ console.error(closeError); ++ this.websocket.close(common.Unauthorized.code, common.Unauthorized.reason); ++ } ++ }; ++ // Make sure to close an idle connection after a while. ++ this.closeIdleConnectionTimeout = setTimeout(() => { ++ websocket.close(common.Unauthorized.code, common.Unauthorized.reason); ++ }, opts.timeout); ++ websocket.on('message', this.messageHandler); ++ } ++ /** ++ * Set a callback that will be triggered when the connection is closed ++ */ ++ onClose(callback) { ++ this.callbacks.onClose.push(callback); ++ return this; ++ } ++ /** ++ * Create a new connection by the given request and document ++ */ ++ createConnection(connection, document) { ++ const hookPayload = this.hookPayloads[document.name]; ++ const instance = new Connection(connection, hookPayload.request, document, this.opts.timeout, hookPayload.socketId, hookPayload.context, hookPayload.connection.readOnly, this.debuggerTool); ++ instance.onClose(async (document, event) => { ++ const disconnectHookPayload = { ++ instance: this.documentProvider, ++ clientsCount: document.getConnectionsCount(), ++ context: hookPayload.context, ++ document, ++ socketId: hookPayload.socketId, ++ documentName: document.name, ++ requestHeaders: hookPayload.request.headers, ++ requestParameters: getParameters(hookPayload.request), ++ }; ++ await this.hooks('onDisconnect', hookPayload); ++ this.callbacks.onClose.forEach((callback => callback(document, disconnectHookPayload))); ++ }); ++ instance.onStatelessCallback(async (payload) => { ++ try { ++ return await this.hooks('onStateless', payload); ++ } ++ catch (error) { ++ // TODO: weird pattern, what's the use of this? ++ if (error === null || error === void 0 ? void 0 : error.message) { ++ throw error; ++ } ++ } ++ }); ++ instance.beforeHandleMessage((connection, update) => { ++ const beforeHandleMessagePayload = { ++ instance: this.documentProvider, ++ clientsCount: document.getConnectionsCount(), ++ context: hookPayload.context, ++ document, ++ socketId: hookPayload.socketId, ++ connection, ++ documentName: document.name, ++ requestHeaders: hookPayload.request.headers, ++ requestParameters: getParameters(hookPayload.request), ++ update, ++ }; ++ return this.hooks('beforeHandleMessage', beforeHandleMessagePayload); ++ }); ++ // If the WebSocket has already disconnected (wow, that was fast) – then ++ // immediately call close to cleanup the connection and document in memory. ++ if (connection.readyState === common.WsReadyStates.Closing ++ || connection.readyState === common.WsReadyStates.Closed) { ++ instance.close(); ++ } ++ return instance; ++ } ++} ++ + class DirectConnection { + /** + * Constructor. +@@ -2310,14 +2633,14 @@ class Hocuspocus { + }); + this.handleConnection(incoming, request); + }); +- const server = http.createServer((request, response) => { +- this.hooks('onRequest', { request, response, instance: this }) +- .then(() => { ++ const server = http.createServer(async (request, response) => { ++ try { ++ await this.hooks('onRequest', { request, response, instance: this }); + // default response if all prior hooks don't interfere + response.writeHead(200, { 'Content-Type': 'text/plain' }); + response.end('OK'); +- }) +- .catch(error => { ++ } ++ catch (error) { + // if a hook rejects and the error is empty, do nothing + // this is only meant to prevent later hooks and the + // default handler to do something. if a error is present +@@ -2325,31 +2648,32 @@ class Hocuspocus { + if (error) { + throw error; + } +- }); ++ } + }); +- server.on('upgrade', (request, socket, head) => { +- this.hooks('onUpgrade', { +- request, +- socket, +- head, +- instance: this, +- }) +- .then(() => { ++ server.on('upgrade', async (request, socket, head) => { ++ try { ++ await this.hooks('onUpgrade', { ++ request, ++ socket, ++ head, ++ instance: this, ++ }); + // let the default websocket server handle the connection if + // prior hooks don't interfere + webSocketServer.handleUpgrade(request, socket, head, ws => { + webSocketServer.emit('connection', ws, request); + }); +- }) +- .catch(error => { ++ } ++ catch (error) { + // if a hook rejects and the error is empty, do nothing + // this is only meant to prevent later hooks and the + // default handler to do something. if a error is present + // just rethrow it ++ // TODO: why? + if (error) { + throw error; + } +- }); ++ } + }); + this.httpServer = server; + this.webSocketServer = webSocketServer; +@@ -2357,7 +2681,7 @@ class Hocuspocus { + server.listen({ + port: this.configuration.port, + host: this.configuration.address, +- }, () => { ++ }, async () => { + if (!this.configuration.quiet && process.env.NODE_ENV !== 'testing') { + this.showStartScreen(); + } +@@ -2366,9 +2690,13 @@ class Hocuspocus { + configuration: this.configuration, + port: this.address.port, + }; +- this.hooks('onListen', onListenPayload) +- .then(() => resolve(this)) +- .catch(error => reject(error)); ++ try { ++ await this.hooks('onListen', onListenPayload); ++ resolve(this); ++ } ++ catch (e) { ++ reject(e); ++ } + }); + }); + } +@@ -2475,188 +2803,35 @@ class Hocuspocus { + * … and if nothings fails it’ll fully establish the connection and + * load the Document then. + */ +- handleConnection(incoming, request, context = null) { +- // Make sure to close an idle connection after a while. +- const closeIdleConnection = setTimeout(() => { +- incoming.close(common.Unauthorized.code, common.Unauthorized.reason); +- }, this.configuration.timeout); +- // Every new connection gets a unique identifier. +- const socketId = uuid.v4(); +- // To override settings for specific connections, we’ll +- // keep track of a few things in the `ConnectionConfiguration`. +- const connection = { +- readOnly: false, ++ handleConnection(incoming, request) { ++ const clientConnection = new ClientConnection(incoming, request, this, this.hooks.bind(this), this.debugger, { + requiresAuthentication: this.requiresAuthentication, +- isAuthenticated: false, +- }; +- // The `onConnect` and `onAuthenticate` hooks need some context +- // to decide who’s connecting, so let’s put it together: +- const hookPayload = { +- instance: this, +- request, +- requestHeaders: request.headers, +- requestParameters: Hocuspocus.getParameters(request), +- socketId, +- connection, +- }; +- // this map indicates whether a `Connection` instance has already taken over for incoming message for the key (i.e. documentName) +- const documentConnections = {}; +- // While the connection will be establishing messages will +- // be queued and handled later. +- const incomingMessageQueue = {}; +- // While the connection is establishing +- const connectionEstablishing = {}; +- // Once all hooks are run, we’ll fully establish the connection: +- const setUpNewConnection = async (documentName) => { +- // Not an idle connection anymore, no need to close it then. +- clearTimeout(closeIdleConnection); +- // If no hook interrupts, create a document and connection +- const document = await this.createDocument(documentName, request, socketId, connection, context); +- const instance = this.createConnection(incoming, request, document, socketId, connection.readOnly, context); +- instance.onClose((document, event) => { +- delete documentConnections[documentName]; +- delete incomingMessageQueue[documentName]; +- delete connectionEstablishing[documentName]; +- if (Object.keys(documentConnections).length === 0) { +- instance.webSocket.close(event === null || event === void 0 ? void 0 : event.code, event === null || event === void 0 ? void 0 : event.reason); // TODO: Move this to Hocuspocus connection handler +- } +- }); +- documentConnections[documentName] = true; +- // There’s no need to queue messages anymore. +- // Let’s work through queued messages. +- incomingMessageQueue[documentName].forEach(input => { +- incoming.emit('message', input); +- }); +- this.hooks('connected', { +- ...hookPayload, +- documentName, +- context, +- connectionInstance: instance, +- }); +- }; +- // This listener handles authentication messages and queues everything else. +- const handleQueueingMessage = (data) => { +- try { +- const tmpMsg = new IncomingMessage(data); +- const documentName = readVarString(tmpMsg.decoder); +- const type = readVarUint(tmpMsg.decoder); +- // Okay, we’ve got the authentication message we’re waiting for: +- if (type === exports.MessageType.Auth && !connectionEstablishing[documentName]) { +- connectionEstablishing[documentName] = true; +- // The 2nd integer contains the submessage type +- // which will always be authentication when sent from client -> server +- readVarUint(tmpMsg.decoder); +- const token = readVarString(tmpMsg.decoder); +- this.debugger.log({ +- direction: 'in', +- type, +- category: 'Token', +- }); +- this.hooks('onAuthenticate', { +- token, +- ...hookPayload, +- documentName, +- }, (contextAdditions) => { +- // Hooks are allowed to give us even more context and we’ll merge everything together. +- // We’ll pass the context to other hooks then. +- context = { ...context, ...contextAdditions }; +- }) +- .then(() => { +- // All `onAuthenticate` hooks passed. +- connection.isAuthenticated = true; +- // Let the client know that authentication was successful. +- const message = new OutgoingMessage(documentName).writeAuthenticated(connection.readOnly); +- this.debugger.log({ +- direction: 'out', +- type: message.type, +- category: message.category, +- }); +- incoming.send(message.toUint8Array()); +- }) +- .then(() => { +- // Time to actually establish the connection. +- return setUpNewConnection(documentName); +- }) +- .catch((error = common.Forbidden) => { +- var _a; +- const message = new OutgoingMessage(documentName).writePermissionDenied((_a = error.reason) !== null && _a !== void 0 ? _a : 'permission-denied'); +- this.debugger.log({ +- direction: 'out', +- type: message.type, +- category: message.category, +- }); +- // Ensure that the permission denied message is sent before the +- // connection is closed +- incoming.send(message.toUint8Array(), () => { +- var _a, _b; +- if (Object.keys(documentConnections).length === 0) { +- try { +- incoming.close((_a = error.code) !== null && _a !== void 0 ? _a : common.Forbidden.code, (_b = error.reason) !== null && _b !== void 0 ? _b : common.Forbidden.reason); +- } +- catch (closeError) { +- // catch is needed in case invalid error code is returned by hook (that would fail sending the close message) +- console.error(closeError); +- incoming.close(common.Forbidden.code, common.Forbidden.reason); +- } +- } +- }); +- }); +- } +- else { +- incomingMessageQueue[documentName].push(data); +- } +- // Catch errors due to failed decoding of data +- } +- catch (error) { +- console.error(error); +- incoming.close(common.Unauthorized.code, common.Unauthorized.reason); ++ timeout: this.configuration.timeout, ++ }); ++ clientConnection.onClose((document, hookPayload) => { ++ // Check if there are still no connections to the document, as these hooks ++ // may take some time to resolve (e.g. database queries). If a ++ // new connection were to come in during that time it would rely on the ++ // document in the map that we remove now. ++ if (document.getConnectionsCount() > 0) { ++ return; + } +- }; +- const messageHandler = (data) => { +- try { +- const tmpMsg = new IncomingMessage(data); +- const documentName = readVarString(tmpMsg.decoder); +- if (documentConnections[documentName] === true) { +- // we already have a `Connection` set up for this document +- return; +- } +- // if this is the first message, trigger onConnect & check if we can start the connection (only if no auth is required) +- if (incomingMessageQueue[documentName] === undefined) { +- incomingMessageQueue[documentName] = []; +- this.hooks('onConnect', { ...hookPayload, documentName }, (contextAdditions) => { +- // merge context from all hooks +- context = { ...context, ...contextAdditions }; +- }) +- .then(() => { +- // Authentication is required, we’ll need to wait for the Authentication message. +- if (connection.requiresAuthentication || connectionEstablishing[documentName]) { +- return; +- } +- connectionEstablishing[documentName] = true; +- return setUpNewConnection(documentName); +- }) +- .catch((error = common.Forbidden) => { +- var _a, _b; +- // if a hook interrupts, close the websocket connection +- try { +- incoming.close((_a = error.code) !== null && _a !== void 0 ? _a : common.Forbidden.code, (_b = error.reason) !== null && _b !== void 0 ? _b : common.Forbidden.reason); +- } +- catch (closeError) { +- // catch is needed in case invalid error code is returned by hook (that would fail sending the close message) +- console.error(closeError); +- incoming.close(common.Unauthorized.code, common.Unauthorized.reason); +- } +- }); +- } +- handleQueueingMessage(data); ++ // If it’s the last connection, we need to make sure to store the ++ // document. Use the debounce helper, to clear running timers, ++ // but make it run immediately (`true`). ++ // Only run this if the document has finished loading earlier (i.e. not to persist the empty ++ // ydoc if the onLoadDocument hook returned an error) ++ if (!document.isLoading) { ++ this.debounce(`onStoreDocument-${document.name}`, () => { ++ this.storeDocumentHooks(document, hookPayload); ++ }, true); + } +- catch (closeError) { +- // catch is needed in case an invalid payload crashes the parsing of the Uint8Array +- console.error(closeError); +- incoming.close(common.Unauthorized.code, common.Unauthorized.reason); ++ else { ++ // Remove document from memory immediately ++ this.documents.delete(document.name); ++ document.destroy(); + } +- }; +- incoming.on('message', messageHandler); ++ }); + } + /** + * Handle update of the given document +@@ -2670,11 +2845,12 @@ class Hocuspocus { + document, + documentName: document.name, + requestHeaders: (_a = request === null || request === void 0 ? void 0 : request.headers) !== null && _a !== void 0 ? _a : {}, +- requestParameters: Hocuspocus.getParameters(request), ++ requestParameters: getParameters(request), + socketId: (_b = connection === null || connection === void 0 ? void 0 : connection.socketId) !== null && _b !== void 0 ? _b : '', + update, + }; + this.hooks('onChange', hookPayload).catch(error => { ++ // TODO: what's the intention of this catch -> throw? + throw error; + }); + // If the update was received through other ways than the +@@ -2731,7 +2907,7 @@ class Hocuspocus { + documentName, + socketId, + requestHeaders: request.headers, +- requestParameters: Hocuspocus.getParameters(request), ++ requestParameters: getParameters(request), + }; + try { + await this.hooks('onLoadDocument', hookPayload, (loadedDocument) => { +@@ -2772,78 +2948,6 @@ class Hocuspocus { + }); + return document; + } +- /** +- * Create a new connection by the given request and document +- */ +- createConnection(connection, request, document, socketId, readOnly = false, context) { +- const instance = new Connection(connection, request, document, this.configuration.timeout, socketId, context, readOnly, this.debugger); +- instance.onClose(document => { +- const hookPayload = { +- instance: this, +- clientsCount: document.getConnectionsCount(), +- context, +- document, +- socketId, +- documentName: document.name, +- requestHeaders: request.headers, +- requestParameters: Hocuspocus.getParameters(request), +- }; +- this.hooks('onDisconnect', hookPayload).then(() => { +- // Check if there are still no connections to the document, as these hooks +- // may take some time to resolve (e.g. database queries). If a +- // new connection were to come in during that time it would rely on the +- // document in the map that we remove now. +- if (document.getConnectionsCount() > 0) { +- return; +- } +- // If it’s the last connection, we need to make sure to store the +- // document. Use the debounce helper, to clear running timers, +- // but make it run immediately (`true`). +- // Only run this if the document has finished loading earlier (i.e. not to persist the empty +- // ydoc if the onLoadDocument hook returned an error) +- if (!document.isLoading) { +- this.debounce(`onStoreDocument-${document.name}`, () => { +- this.storeDocumentHooks(document, hookPayload); +- }, true); +- } +- else { +- // Remove document from memory immediately +- this.documents.delete(document.name); +- document.destroy(); +- } +- }); +- }); +- instance.onStatelessCallback(payload => { +- return this.hooks('onStateless', payload) +- .catch(error => { +- if (error === null || error === void 0 ? void 0 : error.message) { +- throw error; +- } +- }); +- }); +- instance.beforeHandleMessage((connection, update) => { +- const hookPayload = { +- instance: this, +- clientsCount: document.getConnectionsCount(), +- context, +- document, +- socketId, +- connection, +- documentName: document.name, +- requestHeaders: request.headers, +- requestParameters: Hocuspocus.getParameters(request), +- update, +- }; +- return this.hooks('beforeHandleMessage', hookPayload); +- }); +- // If the WebSocket has already disconnected (wow, that was fast) – then +- // immediately call close to cleanup the connection and document in memory. +- if (connection.readyState === common.WsReadyStates.Closing +- || connection.readyState === common.WsReadyStates.Closed) { +- instance.close(); +- } +- return instance; +- } + storeDocumentHooks(document, hookPayload) { + this.hooks('onStoreDocument', hookPayload) + .catch(error => { +@@ -2891,14 +2995,6 @@ class Hocuspocus { + }); + return chain; + } +- /** +- * Get parameters by the given request +- */ +- static getParameters(request) { +- var _a; +- const query = ((_a = request === null || request === void 0 ? void 0 : request.url) === null || _a === void 0 ? void 0 : _a.split('?')) || []; +- return new url.URLSearchParams(query[1] ? query[1] : ''); +- } + enableDebugging() { + this.debugger.enable(); + } +diff --git a/node_modules/@hocuspocus/server/dist/hocuspocus-server.cjs.map b/node_modules/@hocuspocus/server/dist/hocuspocus-server.cjs.map +index 0cd8611..239cbc0 100644 +--- a/node_modules/@hocuspocus/server/dist/hocuspocus-server.cjs.map ++++ b/node_modules/@hocuspocus/server/dist/hocuspocus-server.cjs.map +@@ -1 +1 @@ +-{"version":3,"file":"hocuspocus-server.cjs","sources":["../../../node_modules/lib0/string.js","../../../node_modules/lib0/map.js","../../../node_modules/lib0/conditions.js","../../../node_modules/lib0/storage.js","../../../node_modules/lib0/set.js","../../../node_modules/lib0/array.js","../../../node_modules/lib0/object.js","../../../node_modules/lib0/function.js","../../../node_modules/lib0/environment.js","../../../node_modules/lib0/math.js","../../../node_modules/lib0/binary.js","../../../node_modules/lib0/number.js","../../../node_modules/lib0/encoding.js","../../../node_modules/lib0/buffer.js","../../../node_modules/lib0/error.js","../../../node_modules/lib0/decoding.js","../src/IncomingMessage.ts","../../../node_modules/y-protocols/sync.js","../../../node_modules/lib0/time.js","../../../node_modules/lib0/observable.js","../../../node_modules/y-protocols/awareness.js","../src/types.ts","../src/OutgoingMessage.ts","../src/MessageReceiver.ts","../src/Connection.ts","../src/Debugger.ts","../../../node_modules/lib0/mutex.js","../src/Document.ts","../src/DirectConnection.ts","../src/Hocuspocus.ts"],"sourcesContent":["/**\n * Utility module to work with strings.\n *\n * @module string\n */\n\nexport const fromCharCode = String.fromCharCode\nexport const fromCodePoint = String.fromCodePoint\n\n/**\n * @param {string} s\n * @return {string}\n */\nconst toLowerCase = s => s.toLowerCase()\n\nconst trimLeftRegex = /^\\s*/g\n\n/**\n * @param {string} s\n * @return {string}\n */\nexport const trimLeft = s => s.replace(trimLeftRegex, '')\n\nconst fromCamelCaseRegex = /([A-Z])/g\n\n/**\n * @param {string} s\n * @param {string} separator\n * @return {string}\n */\nexport const fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, match => `${separator}${toLowerCase(match)}`))\n\n/**\n * Compute the utf8ByteLength\n * @param {string} str\n * @return {number}\n */\nexport const utf8ByteLength = str => unescape(encodeURIComponent(str)).length\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Polyfill = str => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n const buf = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n buf[i] = /** @type {number} */ (encodedString.codePointAt(i))\n }\n return buf\n}\n\n/* c8 ignore next */\nexport const utf8TextEncoder = /** @type {TextEncoder} */ (typeof TextEncoder !== 'undefined' ? new TextEncoder() : null)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Native = str => utf8TextEncoder.encode(str)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nexport const encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Polyfill = buf => {\n let remainingLen = buf.length\n let encodedString = ''\n let bufPos = 0\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n const bytes = buf.subarray(bufPos, bufPos + nextLen)\n bufPos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n return decodeURIComponent(escape(encodedString))\n}\n\n/* c8 ignore next */\nexport let utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })\n\n/* c8 ignore start */\nif (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {\n // Safari doesn't handle BOM correctly.\n // This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call\n // Another issue is that from then on no BOM chars are recognized anymore\n /* c8 ignore next */\n utf8TextDecoder = null\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Native = buf => /** @type {TextDecoder} */ (utf8TextDecoder).decode(buf)\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\n/* c8 ignore next */\nexport const decodeUtf8 = utf8TextDecoder ? _decodeUtf8Native : _decodeUtf8Polyfill\n\n/**\n * @param {string} str The initial string\n * @param {number} index Starting position\n * @param {number} remove Number of characters to remove\n * @param {string} insert New content to insert\n */\nexport const splice = (str, index, remove, insert = '') => str.slice(0, index) + insert + str.slice(index + remove)\n","/**\n * Utility module to work with key-value stores.\n *\n * @module map\n */\n\n/**\n * Creates a new Map instance.\n *\n * @function\n * @return {Map}\n *\n * @function\n */\nexport const create = () => new Map()\n\n/**\n * Copy a Map object into a fresh Map object.\n *\n * @function\n * @template X,Y\n * @param {Map} m\n * @return {Map}\n */\nexport const copy = m => {\n const r = create()\n m.forEach((v, k) => { r.set(k, v) })\n return r\n}\n\n/**\n * Get map property. Create T if property is undefined and set T on map.\n *\n * ```js\n * const listeners = map.setIfUndefined(events, 'eventName', set.create)\n * listeners.add(listener)\n * ```\n *\n * @function\n * @template V,K\n * @template {Map} MAP\n * @param {MAP} map\n * @param {K} key\n * @param {function():V} createT\n * @return {V}\n */\nexport const setIfUndefined = (map, key, createT) => {\n let set = map.get(key)\n if (set === undefined) {\n map.set(key, set = createT())\n }\n return set\n}\n\n/**\n * Creates an Array and populates it with the content of all key-value pairs using the `f(value, key)` function.\n *\n * @function\n * @template K\n * @template V\n * @template R\n * @param {Map} m\n * @param {function(V,K):R} f\n * @return {Array}\n */\nexport const map = (m, f) => {\n const res = []\n for (const [key, value] of m) {\n res.push(f(value, key))\n }\n return res\n}\n\n/**\n * Tests whether any key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @todo should rename to some - similarly to Array.some\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const any = (m, f) => {\n for (const [key, value] of m) {\n if (f(value, key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * Tests whether all key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const all = (m, f) => {\n for (const [key, value] of m) {\n if (!f(value, key)) {\n return false\n }\n }\n return true\n}\n","/**\n * Often used conditions.\n *\n * @module conditions\n */\n\n/**\n * @template T\n * @param {T|null|undefined} v\n * @return {T|null}\n */\n/* c8 ignore next */\nexport const undefinedToNull = v => v === undefined ? null : v\n","/* eslint-env browser */\n\n/**\n * Isomorphic variable storage.\n *\n * Uses LocalStorage in the browser and falls back to in-memory storage.\n *\n * @module storage\n */\n\n/* c8 ignore start */\nclass VarStoragePolyfill {\n constructor () {\n this.map = new Map()\n }\n\n /**\n * @param {string} key\n * @param {any} newValue\n */\n setItem (key, newValue) {\n this.map.set(key, newValue)\n }\n\n /**\n * @param {string} key\n */\n getItem (key) {\n return this.map.get(key)\n }\n}\n/* c8 ignore stop */\n\n/**\n * @type {any}\n */\nlet _localStorage = new VarStoragePolyfill()\nlet usePolyfill = true\n\n/* c8 ignore start */\ntry {\n // if the same-origin rule is violated, accessing localStorage might thrown an error\n if (typeof localStorage !== 'undefined') {\n _localStorage = localStorage\n usePolyfill = false\n }\n} catch (e) { }\n/* c8 ignore stop */\n\n/**\n * This is basically localStorage in browser, or a polyfill in nodejs\n */\n/* c8 ignore next */\nexport const varStorage = _localStorage\n\n/**\n * A polyfill for `addEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const onChange = eventHandler => usePolyfill || addEventListener('storage', /** @type {any} */ (eventHandler))\n\n/**\n * A polyfill for `removeEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler))\n","/**\n * Utility module to work with sets.\n *\n * @module set\n */\n\nexport const create = () => new Set()\n\n/**\n * @template T\n * @param {Set} set\n * @return {Array}\n */\nexport const toArray = set => Array.from(set)\n\n/**\n * @template T\n * @param {Set} set\n * @return {T}\n */\nexport const first = set =>\n set.values().next().value || undefined\n\n/**\n * @template T\n * @param {Iterable} entries\n * @return {Set}\n */\nexport const from = entries => new Set(entries)\n","/**\n * Utility module to work with Arrays.\n *\n * @module array\n */\n\nimport * as set from './set.js'\n\n/**\n * Return the last element of an array. The element must exist\n *\n * @template L\n * @param {ArrayLike} arr\n * @return {L}\n */\nexport const last = arr => arr[arr.length - 1]\n\n/**\n * @template C\n * @return {Array}\n */\nexport const create = () => /** @type {Array} */ ([])\n\n/**\n * @template D\n * @param {Array} a\n * @return {Array}\n */\nexport const copy = a => /** @type {Array} */ (a.slice())\n\n/**\n * Append elements from src to dest\n *\n * @template M\n * @param {Array} dest\n * @param {Array} src\n */\nexport const appendTo = (dest, src) => {\n for (let i = 0; i < src.length; i++) {\n dest.push(src[i])\n }\n}\n\n/**\n * Transforms something array-like to an actual Array.\n *\n * @function\n * @template T\n * @param {ArrayLike|Iterable} arraylike\n * @return {T}\n */\nexport const from = Array.from\n\n/**\n * True iff condition holds on every element in the Array.\n *\n * @function\n * @template ITEM\n * @template {ArrayLike} ARR\n *\n * @param {ARR} arr\n * @param {function(ITEM, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const every = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (!f(arr[i], i, arr)) {\n return false\n }\n }\n return true\n}\n\n/**\n * True iff condition holds on some element in the Array.\n *\n * @function\n * @template S\n * @template {ArrayLike} ARR\n * @param {ARR} arr\n * @param {function(S, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const some = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (f(arr[i], i, arr)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @template ELEM\n *\n * @param {ArrayLike} a\n * @param {ArrayLike} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a.length === b.length && every(a, (item, index) => item === b[index])\n\n/**\n * @template ELEM\n * @param {Array>} arr\n * @return {Array}\n */\nexport const flatten = arr => arr.reduce((acc, val) => acc.concat(val), [])\n\nexport const isArray = Array.isArray\n\n/**\n * @template T\n * @param {Array} arr\n * @return {Array}\n */\nexport const unique = arr => from(set.from(arr))\n\n/**\n * @template T\n * @template M\n * @param {ArrayLike} arr\n * @param {function(T):M} mapper\n * @return {Array}\n */\nexport const uniqueBy = (arr, mapper) => {\n /**\n * @type {Set}\n */\n const happened = set.create()\n /**\n * @type {Array}\n */\n const result = []\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i]\n const mapped = mapper(el)\n if (!happened.has(mapped)) {\n happened.add(mapped)\n result.push(el)\n }\n }\n return result\n}\n","/**\n * Utility functions for working with EcmaScript objects.\n *\n * @module object\n */\n\n/**\n * @return {Object} obj\n */\nexport const create = () => Object.create(null)\n\n/**\n * Object.assign\n */\nexport const assign = Object.assign\n\n/**\n * @param {Object} obj\n */\nexport const keys = Object.keys\n\n/**\n * @template V\n * @param {{[k:string]:V}} obj\n * @param {function(V,string):any} f\n */\nexport const forEach = (obj, f) => {\n for (const key in obj) {\n f(obj[key], key)\n }\n}\n\n/**\n * @todo implement mapToArray & map\n *\n * @template R\n * @param {Object} obj\n * @param {function(any,string):R} f\n * @return {Array}\n */\nexport const map = (obj, f) => {\n const results = []\n for (const key in obj) {\n results.push(f(obj[key], key))\n }\n return results\n}\n\n/**\n * @param {Object} obj\n * @return {number}\n */\nexport const length = obj => keys(obj).length\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const some = (obj, f) => {\n for (const key in obj) {\n if (f(obj[key], key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @param {Object|undefined} obj\n */\nexport const isEmpty = obj => {\n for (const _k in obj) {\n return false\n }\n return true\n}\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const every = (obj, f) => {\n for (const key in obj) {\n if (!f(obj[key], key)) {\n return false\n }\n }\n return true\n}\n\n/**\n * Calls `Object.prototype.hasOwnProperty`.\n *\n * @param {any} obj\n * @param {string|symbol} key\n * @return {boolean}\n */\nexport const hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key)\n\n/**\n * @param {Object} a\n * @param {Object} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a === b || (length(a) === length(b) && every(a, (val, key) => (val !== undefined || hasProperty(b, key)) && b[key] === val))\n","/**\n * Common functions and function call helpers.\n *\n * @module function\n */\n\nimport * as array from './array.js'\nimport * as object from './object.js'\n\n/**\n * Calls all functions in `fs` with args. Only throws after all functions were called.\n *\n * @param {Array} fs\n * @param {Array} args\n */\nexport const callAll = (fs, args, i = 0) => {\n try {\n for (; i < fs.length; i++) {\n fs[i](...args)\n }\n } finally {\n if (i < fs.length) {\n callAll(fs, args, i + 1)\n }\n }\n}\n\nexport const nop = () => {}\n\n/**\n * @template T\n * @param {function():T} f\n * @return {T}\n */\nexport const apply = f => f()\n\n/**\n * @template A\n *\n * @param {A} a\n * @return {A}\n */\nexport const id = a => a\n\n/**\n * @template T\n *\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n */\nexport const equalityStrict = (a, b) => a === b\n\n/**\n * @template T\n *\n * @param {Array|object} a\n * @param {Array|object} b\n * @return {boolean}\n */\nexport const equalityFlat = (a, b) => a === b || (a != null && b != null && a.constructor === b.constructor && ((a instanceof Array && array.equalFlat(a, /** @type {Array} */ (b))) || (typeof a === 'object' && object.equalFlat(a, b))))\n\n/* c8 ignore start */\n\n/**\n * @param {any} a\n * @param {any} b\n * @return {boolean}\n */\nexport const equalityDeep = (a, b) => {\n if (a == null || b == null) {\n return equalityStrict(a, b)\n }\n if (a.constructor !== b.constructor) {\n return false\n }\n if (a === b) {\n return true\n }\n switch (a.constructor) {\n case ArrayBuffer:\n a = new Uint8Array(a)\n b = new Uint8Array(b)\n // eslint-disable-next-line no-fallthrough\n case Uint8Array: {\n if (a.byteLength !== b.byteLength) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n break\n }\n case Set: {\n if (a.size !== b.size) {\n return false\n }\n for (const value of a) {\n if (!b.has(value)) {\n return false\n }\n }\n break\n }\n case Map: {\n if (a.size !== b.size) {\n return false\n }\n for (const key of a.keys()) {\n if (!b.has(key) || !equalityDeep(a.get(key), b.get(key))) {\n return false\n }\n }\n break\n }\n case Object:\n if (object.length(a) !== object.length(b)) {\n return false\n }\n for (const key in a) {\n if (!object.hasProperty(a, key) || !equalityDeep(a[key], b[key])) {\n return false\n }\n }\n break\n case Array:\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!equalityDeep(a[i], b[i])) {\n return false\n }\n }\n break\n default:\n return false\n }\n return true\n}\n\n/**\n * @template V\n * @template {V} OPTS\n *\n * @param {V} value\n * @param {Array} options\n */\n// @ts-ignore\nexport const isOneOf = (value, options) => options.includes(value)\n/* c8 ignore stop */\n","/**\n * Isomorphic module to work access the environment (query params, env variables).\n *\n * @module map\n */\n\nimport * as map from './map.js'\nimport * as string from './string.js'\nimport * as conditions from './conditions.js'\nimport * as storage from './storage.js'\nimport * as f from './function.js'\n\n/* c8 ignore next */\n// @ts-ignore\nexport const isNode = typeof process !== 'undefined' && process.release &&\n /node|io\\.js/.test(process.release.name)\n/* c8 ignore next */\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && !isNode\n/* c8 ignore next 3 */\nexport const isMac = typeof navigator !== 'undefined'\n ? /Mac/.test(navigator.platform)\n : false\n\n/**\n * @type {Map}\n */\nlet params\nconst args = []\n\n/* c8 ignore start */\nconst computeParams = () => {\n if (params === undefined) {\n if (isNode) {\n params = map.create()\n const pargs = process.argv\n let currParamName = null\n for (let i = 0; i < pargs.length; i++) {\n const parg = pargs[i]\n if (parg[0] === '-') {\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n currParamName = parg\n } else {\n if (currParamName !== null) {\n params.set(currParamName, parg)\n currParamName = null\n } else {\n args.push(parg)\n }\n }\n }\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n // in ReactNative for example this would not be true (unless connected to the Remote Debugger)\n } else if (typeof location === 'object') {\n params = map.create(); // eslint-disable-next-line no-undef\n (location.search || '?').slice(1).split('&').forEach((kv) => {\n if (kv.length !== 0) {\n const [key, value] = kv.split('=')\n params.set(`--${string.fromCamelCase(key, '-')}`, value)\n params.set(`-${string.fromCamelCase(key, '-')}`, value)\n }\n })\n } else {\n params = map.create()\n }\n }\n return params\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next */\nexport const hasParam = (name) => computeParams().has(name)\n\n/**\n * @param {string} name\n * @param {string} defaultVal\n * @return {string}\n */\n/* c8 ignore next 2 */\nexport const getParam = (name, defaultVal) =>\n computeParams().get(name) || defaultVal\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 4 */\nexport const getVariable = (name) =>\n isNode\n ? conditions.undefinedToNull(process.env[name.toUpperCase()])\n : conditions.undefinedToNull(storage.varStorage.getItem(name))\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 2 */\nexport const getConf = (name) =>\n computeParams().get('--' + name) || getVariable(name)\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next 2 */\nexport const hasConf = (name) =>\n hasParam('--' + name) || getVariable(name) !== null\n\n/* c8 ignore next */\nexport const production = hasConf('production')\n\n/* c8 ignore next 2 */\nconst forceColor = isNode &&\n f.isOneOf(process.env.FORCE_COLOR, ['true', '1', '2'])\n\n/* c8 ignore start */\nexport const supportsColor = !hasParam('no-colors') &&\n (!isNode || process.stdout.isTTY || forceColor) && (\n !isNode || hasParam('color') || forceColor ||\n getVariable('COLORTERM') !== null ||\n (getVariable('TERM') || '').includes('color')\n)\n/* c8 ignore stop */\n","/**\n * Common Math expressions.\n *\n * @module math\n */\n\nexport const floor = Math.floor\nexport const ceil = Math.ceil\nexport const abs = Math.abs\nexport const imul = Math.imul\nexport const round = Math.round\nexport const log10 = Math.log10\nexport const log2 = Math.log2\nexport const log = Math.log\nexport const sqrt = Math.sqrt\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The sum of a and b\n */\nexport const add = (a, b) => a + b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The smaller element of a and b\n */\nexport const min = (a, b) => a < b ? a : b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The bigger element of a and b\n */\nexport const max = (a, b) => a > b ? a : b\n\nexport const isNaN = Number.isNaN\n\nexport const pow = Math.pow\n/**\n * Base 10 exponential function. Returns the value of 10 raised to the power of pow.\n *\n * @param {number} exp\n * @return {number}\n */\nexport const exp10 = exp => Math.pow(10, exp)\n\nexport const sign = Math.sign\n\n/**\n * @param {number} n\n * @return {boolean} Wether n is negative. This function also differentiates between -0 and +0\n */\nexport const isNegativeZero = n => n !== 0 ? n < 0 : 1 / n < 0\n","/* eslint-env browser */\n\n/**\n * Binary data constants.\n *\n * @module binary\n */\n\n/**\n * n-th bit activated.\n *\n * @type {number}\n */\nexport const BIT1 = 1\nexport const BIT2 = 2\nexport const BIT3 = 4\nexport const BIT4 = 8\nexport const BIT5 = 16\nexport const BIT6 = 32\nexport const BIT7 = 64\nexport const BIT8 = 128\nexport const BIT9 = 256\nexport const BIT10 = 512\nexport const BIT11 = 1024\nexport const BIT12 = 2048\nexport const BIT13 = 4096\nexport const BIT14 = 8192\nexport const BIT15 = 16384\nexport const BIT16 = 32768\nexport const BIT17 = 65536\nexport const BIT18 = 1 << 17\nexport const BIT19 = 1 << 18\nexport const BIT20 = 1 << 19\nexport const BIT21 = 1 << 20\nexport const BIT22 = 1 << 21\nexport const BIT23 = 1 << 22\nexport const BIT24 = 1 << 23\nexport const BIT25 = 1 << 24\nexport const BIT26 = 1 << 25\nexport const BIT27 = 1 << 26\nexport const BIT28 = 1 << 27\nexport const BIT29 = 1 << 28\nexport const BIT30 = 1 << 29\nexport const BIT31 = 1 << 30\nexport const BIT32 = 1 << 31\n\n/**\n * First n bits activated.\n *\n * @type {number}\n */\nexport const BITS0 = 0\nexport const BITS1 = 1\nexport const BITS2 = 3\nexport const BITS3 = 7\nexport const BITS4 = 15\nexport const BITS5 = 31\nexport const BITS6 = 63\nexport const BITS7 = 127\nexport const BITS8 = 255\nexport const BITS9 = 511\nexport const BITS10 = 1023\nexport const BITS11 = 2047\nexport const BITS12 = 4095\nexport const BITS13 = 8191\nexport const BITS14 = 16383\nexport const BITS15 = 32767\nexport const BITS16 = 65535\nexport const BITS17 = BIT18 - 1\nexport const BITS18 = BIT19 - 1\nexport const BITS19 = BIT20 - 1\nexport const BITS20 = BIT21 - 1\nexport const BITS21 = BIT22 - 1\nexport const BITS22 = BIT23 - 1\nexport const BITS23 = BIT24 - 1\nexport const BITS24 = BIT25 - 1\nexport const BITS25 = BIT26 - 1\nexport const BITS26 = BIT27 - 1\nexport const BITS27 = BIT28 - 1\nexport const BITS28 = BIT29 - 1\nexport const BITS29 = BIT30 - 1\nexport const BITS30 = BIT31 - 1\n/**\n * @type {number}\n */\nexport const BITS31 = 0x7FFFFFFF\n/**\n * @type {number}\n */\nexport const BITS32 = 0xFFFFFFFF\n","/**\n * Utility helpers for working with numbers.\n *\n * @module number\n */\n\nimport * as math from './math.js'\nimport * as binary from './binary.js'\n\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER\n\nexport const LOWEST_INT32 = 1 << 31\n/**\n * @type {number}\n */\nexport const HIGHEST_INT32 = binary.BITS31\n\n/**\n * @module number\n */\n\n/* c8 ignore next */\nexport const isInteger = Number.isInteger || (num => typeof num === 'number' && isFinite(num) && math.floor(num) === num)\nexport const isNaN = Number.isNaN\nexport const parseInt = Number.parseInt\n","/**\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module encoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as binary from './binary.js'\nimport * as string from './string.js'\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nexport class Encoder {\n constructor () {\n this.cpos = 0\n this.cbuf = new Uint8Array(100)\n /**\n * @type {Array}\n */\n this.bufs = []\n }\n}\n\n/**\n * @function\n * @return {Encoder}\n */\nexport const createEncoder = () => new Encoder()\n\n/**\n * The current length of the encoded data.\n *\n * @function\n * @param {Encoder} encoder\n * @return {number}\n */\nexport const length = encoder => {\n let len = encoder.cpos\n for (let i = 0; i < encoder.bufs.length; i++) {\n len += encoder.bufs[i].length\n }\n return len\n}\n\n/**\n * Transform to Uint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @return {Uint8Array} The created ArrayBuffer.\n */\nexport const toUint8Array = encoder => {\n const uint8arr = new Uint8Array(length(encoder))\n let curPos = 0\n for (let i = 0; i < encoder.bufs.length; i++) {\n const d = encoder.bufs[i]\n uint8arr.set(d, curPos)\n curPos += d.length\n }\n uint8arr.set(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos), curPos)\n return uint8arr\n}\n\n/**\n * Verify that it is possible to write `len` bytes wtihout checking. If\n * necessary, a new Buffer with the required length is attached.\n *\n * @param {Encoder} encoder\n * @param {number} len\n */\nexport const verifyLen = (encoder, len) => {\n const bufferLen = encoder.cbuf.length\n if (bufferLen - encoder.cpos < len) {\n encoder.bufs.push(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos))\n encoder.cbuf = new Uint8Array(math.max(bufferLen, len) * 2)\n encoder.cpos = 0\n }\n}\n\n/**\n * Write one byte to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The byte that is to be encoded.\n */\nexport const write = (encoder, num) => {\n const bufferLen = encoder.cbuf.length\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf)\n encoder.cbuf = new Uint8Array(bufferLen * 2)\n encoder.cpos = 0\n }\n encoder.cbuf[encoder.cpos++] = num\n}\n\n/**\n * Write one byte at a specific position.\n * Position must already be written (i.e. encoder.length > pos)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos Position to which to write data\n * @param {number} num Unsigned 8-bit integer\n */\nexport const set = (encoder, pos, num) => {\n let buffer = null\n // iterate all buffers and adjust position\n for (let i = 0; i < encoder.bufs.length && buffer === null; i++) {\n const b = encoder.bufs[i]\n if (pos < b.length) {\n buffer = b // found buffer\n } else {\n pos -= b.length\n }\n }\n if (buffer === null) {\n // use current buffer\n buffer = encoder.cbuf\n }\n buffer[pos] = num\n}\n\n/**\n * Write one byte as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint8 = write\n\n/**\n * Write one byte as an unsigned Integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint8 = set\n\n/**\n * Write two bytes as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint16 = (encoder, num) => {\n write(encoder, num & binary.BITS8)\n write(encoder, (num >>> 8) & binary.BITS8)\n}\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint16 = (encoder, pos, num) => {\n set(encoder, pos, num & binary.BITS8)\n set(encoder, pos + 1, (num >>> 8) & binary.BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32 = (encoder, num) => {\n for (let i = 0; i < 4; i++) {\n write(encoder, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write two bytes as an unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32BigEndian = (encoder, num) => {\n for (let i = 3; i >= 0; i--) {\n write(encoder, (num >>> (8 * i)) & binary.BITS8)\n }\n}\n\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint32 = (encoder, pos, num) => {\n for (let i = 0; i < 4; i++) {\n set(encoder, pos + i, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarUint = (encoder, num) => {\n while (num > binary.BITS7) {\n write(encoder, binary.BIT8 | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n write(encoder, binary.BITS7 & num)\n}\n\n/**\n * Write a variable length integer.\n *\n * We use the 7th bit instead for signaling that this is a negative number.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarInt = (encoder, num) => {\n const isNegative = math.isNegativeZero(num)\n if (isNegative) {\n num = -num\n }\n // |- whether to continue reading |- whether is negative |- number\n write(encoder, (num > binary.BITS6 ? binary.BIT8 : 0) | (isNegative ? binary.BIT7 : 0) | (binary.BITS6 & num))\n num = math.floor(num / 64) // shift >>> 6\n // We don't need to consider the case of num === 0 so we can use a different\n // pattern here than above.\n while (num > 0) {\n write(encoder, (num > binary.BITS7 ? binary.BIT8 : 0) | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n}\n\n/**\n * A cache to store strings temporarily\n */\nconst _strBuffer = new Uint8Array(30000)\nconst _maxStrBSize = _strBuffer.length / 3\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringNative = (encoder, str) => {\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n /* c8 ignore next */\n const written = string.utf8TextEncoder.encodeInto(str, _strBuffer).written || 0\n writeVarUint(encoder, written)\n for (let i = 0; i < written; i++) {\n write(encoder, _strBuffer[i])\n }\n } else {\n writeVarUint8Array(encoder, string.encodeUtf8(str))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringPolyfill = (encoder, str) => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n write(encoder, /** @type {number} */ (encodedString.codePointAt(i)))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\n/* c8 ignore next */\nexport const writeVarString = (string.utf8TextEncoder && /** @type {any} */ (string.utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill\n\n/**\n * Write the content of another Encoder.\n *\n * @TODO: can be improved!\n * - Note: Should consider that when appending a lot of small Encoders, we should rather clone than referencing the old structure.\n * Encoders start with a rather big initial buffer.\n *\n * @function\n * @param {Encoder} encoder The enUint8Arr\n * @param {Encoder} append The BinaryEncoder to be written.\n */\nexport const writeBinaryEncoder = (encoder, append) => writeUint8Array(encoder, toUint8Array(append))\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeUint8Array = (encoder, uint8Array) => {\n const bufferLen = encoder.cbuf.length\n const cpos = encoder.cpos\n const leftCopyLen = math.min(bufferLen - cpos, uint8Array.length)\n const rightCopyLen = uint8Array.length - leftCopyLen\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos)\n encoder.cpos += leftCopyLen\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf)\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(math.max(bufferLen * 2, rightCopyLen))\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen))\n encoder.cpos = rightCopyLen\n }\n}\n\n/**\n * Append an Uint8Array to Encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeVarUint8Array = (encoder, uint8Array) => {\n writeVarUint(encoder, uint8Array.byteLength)\n writeUint8Array(encoder, uint8Array)\n}\n\n/**\n * Create an DataView of the next `len` bytes. Use it to write data after\n * calling this function.\n *\n * ```js\n * // write float32 using DataView\n * const dv = writeOnDataView(encoder, 4)\n * dv.setFloat32(0, 1.1)\n * // read float32 using DataView\n * const dv = readFromDataView(encoder, 4)\n * dv.getFloat32(0) // => 1.100000023841858 (leaving it to the reader to find out why this is the correct result)\n * ```\n *\n * @param {Encoder} encoder\n * @param {number} len\n * @return {DataView}\n */\nexport const writeOnDataView = (encoder, len) => {\n verifyLen(encoder, len)\n const dview = new DataView(encoder.cbuf.buffer, encoder.cpos, len)\n encoder.cpos += len\n return dview\n}\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat32 = (encoder, num) => writeOnDataView(encoder, 4).setFloat32(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat64 = (encoder, num) => writeOnDataView(encoder, 8).setFloat64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigInt64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigInt64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigUint64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigUint64(0, num, false)\n\nconst floatTestBed = new DataView(new ArrayBuffer(4))\n/**\n * Check if a number can be encoded as a 32 bit float.\n *\n * @param {number} num\n * @return {boolean}\n */\nconst isFloat32 = num => {\n floatTestBed.setFloat32(0, num)\n return floatTestBed.getFloat32(0) === num\n}\n\n/**\n * Encode data with efficient binary format.\n *\n * Differences to JSON:\n * • Transforms data to a binary format (not to a string)\n * • Encodes undefined, NaN, and ArrayBuffer (these can't be represented in JSON)\n * • Numbers are efficiently encoded either as a variable length integer, as a\n * 32 bit float, as a 64 bit float, or as a 64 bit bigint.\n *\n * Encoding table:\n *\n * | Data Type | Prefix | Encoding Method | Comment |\n * | ------------------- | -------- | ------------------ | ------- |\n * | undefined | 127 | | Functions, symbol, and everything that cannot be identified is encoded as undefined |\n * | null | 126 | | |\n * | integer | 125 | writeVarInt | Only encodes 32 bit signed integers |\n * | float32 | 124 | writeFloat32 | |\n * | float64 | 123 | writeFloat64 | |\n * | bigint | 122 | writeBigInt64 | |\n * | boolean (false) | 121 | | True and false are different data types so we save the following byte |\n * | boolean (true) | 120 | | - 0b01111000 so the last bit determines whether true or false |\n * | string | 119 | writeVarString | |\n * | object | 118 | custom | Writes {length} then {length} key-value pairs |\n * | array | 117 | custom | Writes {length} then {length} json values |\n * | Uint8Array | 116 | writeVarUint8Array | We use Uint8Array for any kind of binary data |\n *\n * Reasons for the decreasing prefix:\n * We need the first bit for extendability (later we may want to encode the\n * prefix with writeVarUint). The remaining 7 bits are divided as follows:\n * [0-30] the beginning of the data range is used for custom purposes\n * (defined by the function that uses this library)\n * [31-127] the end of the data range is used for data encoding by\n * lib0/encoding.js\n *\n * @param {Encoder} encoder\n * @param {undefined|null|number|bigint|boolean|string|Object|Array|Uint8Array} data\n */\nexport const writeAny = (encoder, data) => {\n switch (typeof data) {\n case 'string':\n // TYPE 119: STRING\n write(encoder, 119)\n writeVarString(encoder, data)\n break\n case 'number':\n if (number.isInteger(data) && math.abs(data) <= binary.BITS31) {\n // TYPE 125: INTEGER\n write(encoder, 125)\n writeVarInt(encoder, data)\n } else if (isFloat32(data)) {\n // TYPE 124: FLOAT32\n write(encoder, 124)\n writeFloat32(encoder, data)\n } else {\n // TYPE 123: FLOAT64\n write(encoder, 123)\n writeFloat64(encoder, data)\n }\n break\n case 'bigint':\n // TYPE 122: BigInt\n write(encoder, 122)\n writeBigInt64(encoder, data)\n break\n case 'object':\n if (data === null) {\n // TYPE 126: null\n write(encoder, 126)\n } else if (data instanceof Array) {\n // TYPE 117: Array\n write(encoder, 117)\n writeVarUint(encoder, data.length)\n for (let i = 0; i < data.length; i++) {\n writeAny(encoder, data[i])\n }\n } else if (data instanceof Uint8Array) {\n // TYPE 116: ArrayBuffer\n write(encoder, 116)\n writeVarUint8Array(encoder, data)\n } else {\n // TYPE 118: Object\n write(encoder, 118)\n const keys = Object.keys(data)\n writeVarUint(encoder, keys.length)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n writeVarString(encoder, key)\n writeAny(encoder, data[key])\n }\n }\n break\n case 'boolean':\n // TYPE 120/121: boolean (true/false)\n write(encoder, data ? 120 : 121)\n break\n default:\n // TYPE 127: undefined\n write(encoder, 127)\n }\n}\n\n/**\n * Now come a few stateful encoder that have their own classes.\n */\n\n/**\n * Basic Run Length Encoder - a basic compression implementation.\n *\n * Encodes [1,1,1,7] to [1,3,7,1] (3 times 1, 1 time 7). This encoder might do more harm than good if there are a lot of values that are not repeated.\n *\n * It was originally used for image compression. Cool .. article http://csbruce.com/cbm/transactor/pdfs/trans_v7_i06.pdf\n *\n * @note T must not be null!\n *\n * @template T\n */\nexport class RleEncoder extends Encoder {\n /**\n * @param {function(Encoder, T):void} writer\n */\n constructor (writer) {\n super()\n /**\n * The writer\n */\n this.w = writer\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n /**\n * @param {T} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n this.w(this, v)\n this.s = v\n }\n }\n}\n\n/**\n * Basic diff decoder using variable length encoding.\n *\n * Encodes the values [3, 1100, 1101, 1050, 0] to [3, 1097, 1, -51, -1050] using writeVarInt.\n */\nexport class IntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n writeVarInt(this, v - this.s)\n this.s = v\n }\n}\n\n/**\n * A combination of IntDiffEncoder and RleEncoder.\n *\n * Basically first writes the IntDiffEncoder and then counts duplicate diffs using RleEncoding.\n *\n * Encodes the values [1,1,1,2,3,4,5,6] as [1,1,0,2,1,5] (RLE([1,0,0,1,1,1,1,1]) ⇒ RleIntDiff[1,1,0,2,1,5])\n */\nexport class RleIntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v && this.count > 0) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n writeVarInt(this, v - this.s)\n this.s = v\n }\n }\n}\n\n/**\n * @param {UintOptRleEncoder} encoder\n */\nconst flushUintOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set sign to positive\n // case 2: write several values. set sign to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encoder.count === 1 ? encoder.s : -encoder.s)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * Optimized Rle encoder that does not suffer from the mentioned problem of the basic Rle encoder.\n *\n * Internally uses VarInt encoder to write unsigned integers. If the input occurs multiple times, we write\n * write it as a negative number. The UintOptRleDecoder then understands that it needs to read a count.\n *\n * Encodes [1,2,3,3,3] as [1,2,-3,3] (once 1, once 2, three times 3)\n */\nexport class UintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Increasing Uint Optimized RLE Encoder\n *\n * The RLE encoder counts the number of same occurences of the same value.\n * The IncUintOptRle encoder counts if the value increases.\n * I.e. 7, 8, 9, 10 will be encoded as [-7, 4]. 1, 3, 5 will be encoded\n * as [1, 3, 5].\n */\nexport class IncUintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s + this.count === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * @param {IntDiffOptRleEncoder} encoder\n */\nconst flushIntDiffOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // 31 bit making up the diff | wether to write the counter\n // const encodedDiff = encoder.diff << 1 | (encoder.count === 1 ? 0 : 1)\n const encodedDiff = encoder.diff * 2 + (encoder.count === 1 ? 0 : 1)\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set first bit to positive\n // case 2: write several values. set first bit to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encodedDiff)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * A combination of the IntDiffEncoder and the UintOptRleEncoder.\n *\n * The count approach is similar to the UintDiffOptRleEncoder, but instead of using the negative bitflag, it encodes\n * in the LSB whether a count is to be read. Therefore this Encoder only supports 31 bit integers!\n *\n * Encodes [1, 2, 3, 2] as [3, 1, 6, -1] (more specifically [(1 << 1) | 1, (3 << 0) | 0, -1])\n *\n * Internally uses variable length encoding. Contrary to normal UintVar encoding, the first byte contains:\n * * 1 bit that denotes whether the next value is a count (LSB)\n * * 1 bit that denotes whether this value is negative (MSB - 1)\n * * 1 bit that denotes whether to continue reading the variable length integer (MSB)\n *\n * Therefore, only five bits remain to encode diff ranges.\n *\n * Use this Encoder only when appropriate. In most cases, this is probably a bad idea.\n */\nexport class IntDiffOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.diff === v - this.s) {\n this.s = v\n this.count++\n } else {\n flushIntDiffOptRleEncoder(this)\n this.count = 1\n this.diff = v - this.s\n this.s = v\n }\n }\n\n toUint8Array () {\n flushIntDiffOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Optimized String Encoder.\n *\n * Encoding many small strings in a simple Encoder is not very efficient. The function call to decode a string takes some time and creates references that must be eventually deleted.\n * In practice, when decoding several million small strings, the GC will kick in more and more often to collect orphaned string objects (or maybe there is another reason?).\n *\n * This string encoder solves the above problem. All strings are concatenated and written as a single string using a single encoding call.\n *\n * The lengths are encoded using a UintOptRleEncoder.\n */\nexport class StringEncoder {\n constructor () {\n /**\n * @type {Array}\n */\n this.sarr = []\n this.s = ''\n this.lensE = new UintOptRleEncoder()\n }\n\n /**\n * @param {string} string\n */\n write (string) {\n this.s += string\n if (this.s.length > 19) {\n this.sarr.push(this.s)\n this.s = ''\n }\n this.lensE.write(string.length)\n }\n\n toUint8Array () {\n const encoder = new Encoder()\n this.sarr.push(this.s)\n this.s = ''\n writeVarString(encoder, this.sarr.join(''))\n writeUint8Array(encoder, this.lensE.toUint8Array())\n return toUint8Array(encoder)\n }\n}\n","/**\n * Utility functions to work with buffers (Uint8Array).\n *\n * @module buffer\n */\n\nimport * as string from './string.js'\nimport * as env from './environment.js'\nimport * as encoding from './encoding.js'\nimport * as decoding from './decoding.js'\n\n/**\n * @param {number} len\n */\nexport const createUint8ArrayFromLen = len => new Uint8Array(len)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n * @param {number} byteOffset\n * @param {number} length\n */\nexport const createUint8ArrayViewFromArrayBuffer = (buffer, byteOffset, length) => new Uint8Array(buffer, byteOffset, length)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n */\nexport const createUint8ArrayFromArrayBuffer = buffer => new Uint8Array(buffer)\n\n/* c8 ignore start */\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Browser = bytes => {\n let s = ''\n for (let i = 0; i < bytes.byteLength; i++) {\n s += string.fromCharCode(bytes[i])\n }\n // eslint-disable-next-line no-undef\n return btoa(s)\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Node = bytes => Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64')\n\n/* c8 ignore start */\n/**\n * @param {string} s\n * @return {Uint8Array}\n */\nconst fromBase64Browser = s => {\n // eslint-disable-next-line no-undef\n const a = atob(s)\n const bytes = createUint8ArrayFromLen(a.length)\n for (let i = 0; i < a.length; i++) {\n bytes[i] = a.charCodeAt(i)\n }\n return bytes\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} s\n */\nconst fromBase64Node = s => {\n const buf = Buffer.from(s, 'base64')\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/* c8 ignore next */\nexport const toBase64 = env.isBrowser ? toBase64Browser : toBase64Node\n\n/* c8 ignore next */\nexport const fromBase64 = env.isBrowser ? fromBase64Browser : fromBase64Node\n\n/**\n * Copy the content of an Uint8Array view to a new ArrayBuffer.\n *\n * @param {Uint8Array} uint8Array\n * @return {Uint8Array}\n */\nexport const copyUint8Array = uint8Array => {\n const newBuf = createUint8ArrayFromLen(uint8Array.byteLength)\n newBuf.set(uint8Array)\n return newBuf\n}\n\n/**\n * Encode anything as a UInt8Array. It's a pun on typescripts's `any` type.\n * See encoding.writeAny for more information.\n *\n * @param {any} data\n * @return {Uint8Array}\n */\nexport const encodeAny = data => {\n const encoder = encoding.createEncoder()\n encoding.writeAny(encoder, data)\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Decode an any-encoded value.\n *\n * @param {Uint8Array} buf\n * @return {any}\n */\nexport const decodeAny = buf => decoding.readAny(decoding.createDecoder(buf))\n","/**\n * Error helpers.\n *\n * @module error\n */\n\n/**\n * @param {string} s\n * @return {Error}\n */\n/* c8 ignore next */\nexport const create = s => new Error(s)\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const methodUnimplemented = () => {\n throw create('Method unimplemented')\n}\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const unexpectedCase = () => {\n throw create('Unexpected case')\n}\n","/**\n * Efficient schema-less binary decoding with support for variable length encoding.\n *\n * Use [lib0/decoding] with [lib0/encoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module decoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as binary from './binary.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as string from './string.js'\nimport * as error from './error.js'\n\nconst errorUnexpectedEndOfArray = error.create('Unexpected end of array')\nconst errorIntegerOutOfRange = error.create('Integer out of Range')\n\n/**\n * A Decoder handles the decoding of an Uint8Array.\n */\nexport class Decoder {\n /**\n * @param {Uint8Array} uint8Array Binary data to decode\n */\n constructor (uint8Array) {\n /**\n * Decoding target.\n *\n * @type {Uint8Array}\n */\n this.arr = uint8Array\n /**\n * Current decoding position.\n *\n * @type {number}\n */\n this.pos = 0\n }\n}\n\n/**\n * @function\n * @param {Uint8Array} uint8Array\n * @return {Decoder}\n */\nexport const createDecoder = uint8Array => new Decoder(uint8Array)\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {boolean}\n */\nexport const hasContent = decoder => decoder.pos !== decoder.arr.length\n\n/**\n * Clone a decoder instance.\n * Optionally set a new position parameter.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} [newPos] Defaults to current position\n * @return {Decoder} A clone of `decoder`\n */\nexport const clone = (decoder, newPos = decoder.pos) => {\n const _decoder = createDecoder(decoder.arr)\n _decoder.pos = newPos\n return _decoder\n}\n\n/**\n * Create an Uint8Array view of the next `len` bytes and advance the position by `len`.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} len The length of bytes to read\n * @return {Uint8Array}\n */\nexport const readUint8Array = (decoder, len) => {\n const view = buffer.createUint8ArrayViewFromArrayBuffer(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len)\n decoder.pos += len\n return view\n}\n\n/**\n * Read variable length Uint8Array.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readVarUint8Array = decoder => readUint8Array(decoder, readVarUint(decoder))\n\n/**\n * Read the rest of the content as an ArrayBuffer\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTailAsUint8Array = decoder => readUint8Array(decoder, decoder.arr.length - decoder.pos)\n\n/**\n * Skip one byte, jump to the next position.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} The next position\n */\nexport const skip8 = decoder => decoder.pos++\n\n/**\n * Read one byte as unsigned integer.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} Unsigned 8-bit integer\n */\nexport const readUint8 = decoder => decoder.arr[decoder.pos++]\n\n/**\n * Read 2 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint16 = decoder => {\n const uint =\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n decoder.pos += 2\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32 = decoder => {\n const uint =\n (decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32BigEndian = decoder => {\n const uint =\n (decoder.arr[decoder.pos + 3] +\n (decoder.arr[decoder.pos + 2] << 8) +\n (decoder.arr[decoder.pos + 1] << 16) +\n (decoder.arr[decoder.pos] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint8 = decoder => decoder.arr[decoder.pos]\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint16 = decoder =>\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint32 = decoder => (\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)\n) >>> 0\n\n/**\n * Read unsigned integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarUint = decoder => {\n let num = 0\n let mult = 1\n const len = decoder.arr.length\n while (decoder.pos < len) {\n const r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult // shift $r << (7*#iterations) and add it to num\n mult *= 128 // next iteration, shift 7 \"more\" to the left\n if (r < binary.BIT8) {\n return num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Read signed integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n * @todo This should probably create the inverse ~num if number is negative - but this would be a breaking change.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarInt = decoder => {\n let r = decoder.arr[decoder.pos++]\n let num = r & binary.BITS6\n let mult = 64\n const sign = (r & binary.BIT7) > 0 ? -1 : 1\n if ((r & binary.BIT8) === 0) {\n // don't continue reading\n return sign * num\n }\n const len = decoder.arr.length\n while (decoder.pos < len) {\n r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult\n mult *= 128\n if (r < binary.BIT8) {\n return sign * num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarUint = decoder => {\n const pos = decoder.pos\n const s = readVarUint(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarInt = decoder => {\n const pos = decoder.pos\n const s = readVarInt(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * We don't test this function anymore as we use native decoding/encoding by default now.\n * Better not modify this anymore..\n *\n * Transforming utf8 to a string is pretty expensive. The code performs 10x better\n * when String.fromCodePoint is fed with all characters as arguments.\n * But most environments have a maximum number of arguments per functions.\n * For effiency reasons we apply a maximum of 10000 characters at once.\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String.\n */\n/* c8 ignore start */\nexport const _readVarStringPolyfill = decoder => {\n let remainingLen = readVarUint(decoder)\n if (remainingLen === 0) {\n return ''\n } else {\n let encodedString = String.fromCodePoint(readUint8(decoder)) // remember to decrease remainingLen\n if (--remainingLen < 100) { // do not create a Uint8Array for small strings\n while (remainingLen--) {\n encodedString += String.fromCodePoint(readUint8(decoder))\n }\n } else {\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n // this is dangerous, we create a fresh array view from the existing buffer\n const bytes = decoder.arr.subarray(decoder.pos, decoder.pos + nextLen)\n decoder.pos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n }\n return decodeURIComponent(escape(encodedString))\n }\n}\n/* c8 ignore stop */\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n */\nexport const _readVarStringNative = decoder =>\n /** @type any */ (string.utf8TextDecoder).decode(readVarUint8Array(decoder))\n\n/**\n * Read string of variable length\n * * varUint is used to store the length of the string\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n *\n */\n/* c8 ignore next */\nexport const readVarString = string.utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill\n\n/**\n * Look ahead and read varString without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const peekVarString = decoder => {\n const pos = decoder.pos\n const s = readVarString(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * @param {Decoder} decoder\n * @param {number} len\n * @return {DataView}\n */\nexport const readFromDataView = (decoder, len) => {\n const dv = new DataView(decoder.arr.buffer, decoder.arr.byteOffset + decoder.pos, len)\n decoder.pos += len\n return dv\n}\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat32 = decoder => readFromDataView(decoder, 4).getFloat32(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat64 = decoder => readFromDataView(decoder, 8).getFloat64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigInt64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigInt64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigUint64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigUint64(0, false)\n\n/**\n * @type {Array}\n */\nconst readAnyLookupTable = [\n decoder => undefined, // CASE 127: undefined\n decoder => null, // CASE 126: null\n readVarInt, // CASE 125: integer\n readFloat32, // CASE 124: float32\n readFloat64, // CASE 123: float64\n readBigInt64, // CASE 122: bigint\n decoder => false, // CASE 121: boolean (false)\n decoder => true, // CASE 120: boolean (true)\n readVarString, // CASE 119: string\n decoder => { // CASE 118: object\n const len = readVarUint(decoder)\n /**\n * @type {Object}\n */\n const obj = {}\n for (let i = 0; i < len; i++) {\n const key = readVarString(decoder)\n obj[key] = readAny(decoder)\n }\n return obj\n },\n decoder => { // CASE 117: array\n const len = readVarUint(decoder)\n const arr = []\n for (let i = 0; i < len; i++) {\n arr.push(readAny(decoder))\n }\n return arr\n },\n readVarUint8Array // CASE 116: Uint8Array\n]\n\n/**\n * @param {Decoder} decoder\n */\nexport const readAny = decoder => readAnyLookupTable[127 - readUint8(decoder)](decoder)\n\n/**\n * T must not be null.\n *\n * @template T\n */\nexport class RleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {function(Decoder):T} reader\n */\n constructor (uint8Array, reader) {\n super(uint8Array)\n /**\n * The reader\n */\n this.reader = reader\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = this.reader(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {T} */ (this.s)\n }\n}\n\nexport class IntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @return {number}\n */\n read () {\n this.s += readVarInt(this)\n return this.s\n }\n}\n\nexport class RleIntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n this.s += readVarInt(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class UintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class IncUintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s++)\n }\n}\n\nexport class IntDiffOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n const diff = readVarInt(this)\n // if the first bit is set, we read more data\n const hasCount = diff & 1\n this.diff = math.floor(diff / 2) // shift >> 1\n this.count = 1\n if (hasCount) {\n this.count = readVarUint(this) + 2\n }\n }\n this.s += this.diff\n this.count--\n return this.s\n }\n}\n\nexport class StringDecoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n this.decoder = new UintOptRleDecoder(uint8Array)\n this.str = readVarString(this.decoder)\n /**\n * @type {number}\n */\n this.spos = 0\n }\n\n /**\n * @return {string}\n */\n read () {\n const end = this.spos + this.decoder.read()\n const res = this.str.slice(this.spos, end)\n this.spos = end\n return res\n }\n}\n","import {\n createDecoder,\n Decoder,\n readVarUint,\n readVarUint8Array,\n readVarString,\n} from 'lib0/decoding'\nimport {\n createEncoder,\n Encoder,\n toUint8Array,\n writeVarUint,\n writeVarString,\n length,\n} from 'lib0/encoding'\nimport { MessageType } from './types.js'\n\nexport class IncomingMessage {\n /**\n * Access to the received message.\n */\n decoder: Decoder\n\n /**\n * Access to the reply.\n */\n encoder: Encoder\n\n constructor(input: any) {\n if (!(input instanceof Uint8Array)) {\n input = new Uint8Array(input)\n }\n\n this.encoder = createEncoder()\n this.decoder = createDecoder(input)\n }\n\n readVarUint8Array() {\n return readVarUint8Array(this.decoder)\n }\n\n readVarUint() {\n return readVarUint(this.decoder)\n }\n\n readVarString() {\n return readVarString(this.decoder)\n }\n\n toUint8Array() {\n return toUint8Array(this.encoder)\n }\n\n writeVarUint(type: MessageType) {\n writeVarUint(this.encoder, type)\n }\n\n writeVarString(string: string) {\n writeVarString(this.encoder, string)\n }\n\n get length(): number {\n return length(this.encoder)\n }\n}\n","/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them.\n * Therefore it is necesarry that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Will not be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n","/**\n * Utility module to work with time.\n *\n * @module time\n */\n\nimport * as metric from './metric.js'\nimport * as math from './math.js'\n\n/**\n * Return current time.\n *\n * @return {Date}\n */\nexport const getDate = () => new Date()\n\n/**\n * Return current unix time.\n *\n * @return {number}\n */\nexport const getUnixTime = Date.now\n\n/**\n * Transform time (in ms) to a human readable format. E.g. 1100 => 1.1s. 60s => 1min. .001 => 10μs.\n *\n * @param {number} d duration in milliseconds\n * @return {string} humanized approximation of time\n */\nexport const humanizeDuration = d => {\n if (d < 60000) {\n const p = metric.prefix(d, -1)\n return math.round(p.n * 100) / 100 + p.prefix + 's'\n }\n d = math.floor(d / 1000)\n const seconds = d % 60\n const minutes = math.floor(d / 60) % 60\n const hours = math.floor(d / 3600) % 24\n const days = math.floor(d / 86400)\n if (days > 0) {\n return days + 'd' + ((hours > 0 || minutes > 30) ? ' ' + (minutes > 30 ? hours + 1 : hours) + 'h' : '')\n }\n if (hours > 0) {\n /* c8 ignore next */\n return hours + 'h' + ((minutes > 0 || seconds > 30) ? ' ' + (seconds > 30 ? minutes + 1 : minutes) + 'min' : '')\n }\n return minutes + 'min' + (seconds > 0 ? ' ' + seconds + 's' : '')\n}\n","/**\n * Observable class prototype.\n *\n * @module observable\n */\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as array from './array.js'\n\n/**\n * Handles named events.\n *\n * @template N\n */\nexport class Observable {\n constructor () {\n /**\n * Some desc.\n * @type {Map}\n */\n this._observers = map.create()\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, name, set.create).add(f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, _f)\n f(...args)\n }\n this.on(name, _f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @param {N} name The event name.\n * @param {Array} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n","/**\n * @module awareness-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as time from 'lib0/time'\nimport * as math from 'lib0/math'\nimport { Observable } from 'lib0/observable'\nimport * as f from 'lib0/function'\nimport * as Y from 'yjs' // eslint-disable-line\n\nexport const outdatedTimeout = 30000\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable}\n */\nexport class Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super()\n this.doc = doc\n /**\n * @type {number}\n */\n this.clientID = doc.clientID\n /**\n * Maps from client id to client state\n * @type {Map>}\n */\n this.states = new Map()\n /**\n * @type {Map}\n */\n this.meta = new Map()\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = time.getUnixTime()\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState())\n }\n /**\n * @type {Array}\n */\n const remove = []\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid)\n }\n })\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout')\n }\n }, math.floor(outdatedTimeout / 10)))\n doc.on('destroy', () => {\n this.destroy()\n })\n this.setLocalState({})\n }\n\n destroy () {\n this.emit('destroy', [this])\n this.setLocalState(null)\n super.destroy()\n clearInterval(this._checkInterval)\n }\n\n /**\n * @return {Object|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID\n const currLocalMeta = this.meta.get(clientID)\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1\n const prevState = this.states.get(clientID)\n if (state === null) {\n this.states.delete(clientID)\n } else {\n this.states.set(clientID, state)\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: time.getUnixTime()\n })\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n if (state === null) {\n removed.push(clientID)\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID)\n }\n } else {\n updated.push(clientID)\n if (!f.equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID)\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local'])\n }\n this.emit('update', [{ added, updated, removed }, 'local'])\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState()\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n })\n }\n }\n\n /**\n * @return {Map>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array} clients\n * @param {any} origin\n */\nexport const removeAwarenessStates = (awareness, clients, origin) => {\n const removed = []\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i]\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID)\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID))\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: time.getUnixTime()\n })\n }\n removed.push(clientID)\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin])\n awareness.emit('update', [{ added: [], updated: [], removed }, origin])\n }\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Array} clients\n * @return {Uint8Array}\n */\nexport const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = clients[i]\n const state = states.get(clientID) || null\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(state))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Modify the content of an awareness update before re-encoding it to an awareness update.\n *\n * This might be useful when you have a central server that wants to ensure that clients\n * cant hijack somebody elses identity.\n *\n * @param {Uint8Array} update\n * @param {function(any):any} modify\n * @return {Uint8Array}\n */\nexport const modifyAwarenessUpdate = (update, modify) => {\n const decoder = decoding.createDecoder(update)\n const encoder = encoding.createEncoder()\n const len = decoding.readVarUint(decoder)\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n const clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const modifiedState = modify(state)\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(modifiedState))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nexport const applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = decoding.createDecoder(update)\n const timestamp = time.getUnixTime()\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n const len = decoding.readVarUint(decoder)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n let clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const clientMeta = awareness.meta.get(clientID)\n const prevState = awareness.states.get(clientID)\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++\n } else {\n awareness.states.delete(clientID)\n }\n } else {\n awareness.states.set(clientID, state)\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n })\n if (clientMeta === undefined && state !== null) {\n added.push(clientID)\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID)\n } else if (state !== null) {\n if (!f.equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID)\n }\n updated.push(clientID)\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin])\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin])\n }\n}\n","import {\n IncomingHttpHeaders, IncomingMessage, ServerResponse,\n} from 'http'\nimport { URLSearchParams } from 'url'\nimport { Awareness } from 'y-protocols/awareness'\nimport Document from './Document.js'\nimport { Hocuspocus } from './Hocuspocus.js'\nimport Connection from './Connection.js'\n\nexport enum MessageType {\n Unknown = -1,\n Sync = 0,\n Awareness = 1,\n Auth = 2,\n QueryAwareness = 3,\n SyncReply = 4, // same as Sync, but won't trigger another 'SyncStep1'\n Stateless = 5,\n BroadcastStateless = 6,\n\n CLOSE = 7,\n}\n\nexport interface AwarenessUpdate {\n added: Array,\n updated: Array,\n removed: Array,\n}\n\nexport interface ConnectionConfiguration {\n readOnly: boolean\n requiresAuthentication: boolean\n isAuthenticated: boolean\n}\n\nexport interface Extension {\n priority?: number,\n onConfigure?(data: onConfigurePayload): Promise,\n onListen?(data: onListenPayload): Promise,\n onUpgrade?(data: onUpgradePayload): Promise,\n onConnect?(data: onConnectPayload): Promise,\n connected?(data: connectedPayload): Promise,\n onAuthenticate?(data: onAuthenticatePayload): Promise,\n onLoadDocument?(data: onLoadDocumentPayload): Promise,\n afterLoadDocument?(data: onLoadDocumentPayload): Promise,\n beforeHandleMessage?(data: beforeHandleMessagePayload): Promise,\n beforeBroadcastStateless?(data: beforeBroadcastStatelessPayload): Promise,\n onStateless?(payload: onStatelessPayload): Promise;\n onChange?(data: onChangePayload): Promise,\n onStoreDocument?(data: onStoreDocumentPayload): Promise,\n afterStoreDocument?(data: afterStoreDocumentPayload): Promise,\n onAwarenessUpdate?(data: onAwarenessUpdatePayload): Promise,\n onRequest?(data: onRequestPayload): Promise,\n onDisconnect?(data: onDisconnectPayload): Promise\n onDestroy?(data: onDestroyPayload): Promise,\n}\n\nexport type HookName =\n 'onConfigure' |\n 'onListen' |\n 'onUpgrade' |\n 'onConnect' |\n 'connected' |\n 'onAuthenticate' |\n 'onLoadDocument' |\n 'afterLoadDocument' |\n 'beforeHandleMessage' |\n 'beforeBroadcastStateless' |\n 'onStateless' |\n 'onChange' |\n 'onStoreDocument' |\n 'afterStoreDocument' |\n 'onAwarenessUpdate' |\n 'onRequest' |\n 'onDisconnect' |\n 'onDestroy'\n\nexport type HookPayload =\n onConfigurePayload |\n onListenPayload |\n onUpgradePayload |\n onConnectPayload |\n connectedPayload |\n onAuthenticatePayload |\n onLoadDocumentPayload |\n onStatelessPayload |\n beforeHandleMessagePayload |\n beforeBroadcastStatelessPayload |\n onChangePayload |\n onStoreDocumentPayload |\n afterStoreDocumentPayload |\n onAwarenessUpdatePayload |\n onRequestPayload |\n onDisconnectPayload |\n onDestroyPayload\n\nexport interface Configuration extends Extension {\n /**\n * A name for the instance, used for logging.\n */\n name: string | null,\n /**\n * A list of hocuspocus extenions.\n */\n extensions: Array,\n /**\n * The port which the server listens on.\n */\n port?: number,\n /**\n * The address which the server listens on.\n */\n address?: string,\n /**\n * Defines in which interval the server sends a ping, and closes the connection when no pong is sent back.\n */\n timeout: number,\n /**\n * Debounces the call of the `onStoreDocument` hook for the given amount of time in ms.\n * Otherwise every single update would be persisted.\n */\n debounce: number,\n /**\n * Makes sure to call `onStoreDocument` at least in the given amount of time (ms).\n */\n maxDebounce: number\n /**\n * By default, the servers show a start screen. If passed false, the server will start quietly.\n */\n quiet: boolean,\n\n /**\n * options to pass to the ydoc document\n */\n yDocOptions: {\n gc: boolean, // enable or disable garbage collection (see https://github.com/yjs/yjs/blob/main/INTERNALS.md#deletions)\n gcFilter: () => boolean, // will be called before garbage collecting ; return false to keep it\n },\n /**\n * Function which returns the (customized) document name based on the request\n */\n getDocumentName?(data: getDocumentNamePayload): string | Promise,\n}\n\nexport interface getDocumentNamePayload {\n documentName: string,\n request: IncomingMessage,\n requestParameters: URLSearchParams,\n}\n\nexport interface onStatelessPayload {\n connection: Connection,\n documentName: string,\n document: Document,\n payload: string,\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface onAuthenticatePayload {\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n token: string,\n connection: ConnectionConfiguration\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface onConnectPayload {\n documentName: string,\n instance: Hocuspocus,\n request: IncomingMessage,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\n// @todo Change 'connection' to 'connectionConfig', and 'connectionInstance' to 'connection' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface connectedPayload {\n context: any,\n documentName: string,\n instance: Hocuspocus,\n request: IncomingMessage,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration,\n connectionInstance: Connection\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface onLoadDocumentPayload {\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface afterLoadDocumentPayload {\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\nexport interface onChangePayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n update: Uint8Array,\n socketId: string,\n}\n\nexport interface beforeHandleMessagePayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n update: Uint8Array,\n socketId: string,\n connection: Connection\n}\n\nexport interface beforeBroadcastStatelessPayload {\n document: Document,\n documentName: string,\n payload: string,\n}\n\nexport interface onStoreDocumentPayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n}\n\nexport interface afterStoreDocumentPayload extends onStoreDocumentPayload {}\n\nexport interface onAwarenessUpdatePayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n update: Uint8Array,\n socketId: string,\n added: number[],\n updated: number[],\n removed: number[],\n awareness: Awareness,\n states: StatesArray,\n}\n\nexport type StatesArray = { clientId: number, [key: string | number]: any }[]\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface fetchPayload {\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\nexport interface storePayload extends onStoreDocumentPayload {\n state: Buffer,\n}\n\nexport interface onDisconnectPayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n}\n\nexport interface onRequestPayload {\n request: IncomingMessage,\n response: ServerResponse,\n instance: Hocuspocus,\n}\n\nexport interface onUpgradePayload {\n request: IncomingMessage,\n socket: any,\n head: any,\n instance: Hocuspocus,\n}\n\nexport interface onListenPayload {\n instance: Hocuspocus,\n configuration: Configuration,\n port: number,\n}\n\nexport interface onDestroyPayload {\n instance: Hocuspocus,\n}\n\nexport interface onConfigurePayload {\n instance: Hocuspocus,\n configuration: Configuration,\n version: string,\n}\n","import {\n createEncoder,\n Encoder,\n toUint8Array,\n writeVarString,\n writeVarUint,\n writeVarUint8Array,\n} from 'lib0/encoding'\nimport { writeSyncStep1, writeUpdate } from 'y-protocols/sync'\nimport { Awareness, encodeAwarenessUpdate } from 'y-protocols/awareness'\n\nimport { writeAuthenticated, writePermissionDenied } from '@hocuspocus/common'\nimport { MessageType } from './types.js'\nimport Document from './Document.js'\n\nexport class OutgoingMessage {\n\n encoder: Encoder\n\n type?: number\n\n category?: string\n\n constructor(documentName: string) {\n this.encoder = createEncoder()\n\n writeVarString(this.encoder, documentName)\n }\n\n createSyncMessage(): OutgoingMessage {\n this.type = MessageType.Sync\n\n writeVarUint(this.encoder, MessageType.Sync)\n\n return this\n }\n\n createSyncReplyMessage(): OutgoingMessage {\n this.type = MessageType.SyncReply\n\n writeVarUint(this.encoder, MessageType.SyncReply)\n\n return this\n }\n\n createAwarenessUpdateMessage(awareness: Awareness, changedClients?: Array): OutgoingMessage {\n this.type = MessageType.Awareness\n this.category = 'Update'\n\n const message = encodeAwarenessUpdate(\n awareness,\n changedClients || Array.from(awareness.getStates().keys()),\n )\n\n writeVarUint(this.encoder, MessageType.Awareness)\n writeVarUint8Array(this.encoder, message)\n\n return this\n }\n\n writeQueryAwareness(): OutgoingMessage {\n this.type = MessageType.QueryAwareness\n this.category = 'Update'\n\n writeVarUint(this.encoder, MessageType.QueryAwareness)\n\n return this\n }\n\n writeAuthenticated(readonly: boolean): OutgoingMessage {\n this.type = MessageType.Auth\n this.category = 'Authenticated'\n\n writeVarUint(this.encoder, MessageType.Auth)\n writeAuthenticated(this.encoder, readonly ? 'readonly' : 'read-write')\n\n return this\n }\n\n writePermissionDenied(reason: string): OutgoingMessage {\n this.type = MessageType.Auth\n this.category = 'PermissionDenied'\n\n writeVarUint(this.encoder, MessageType.Auth)\n writePermissionDenied(this.encoder, reason)\n\n return this\n }\n\n writeFirstSyncStepFor(document: Document): OutgoingMessage {\n this.category = 'SyncStep1'\n\n writeSyncStep1(this.encoder, document)\n\n return this\n }\n\n writeUpdate(update: Uint8Array): OutgoingMessage {\n this.category = 'Update'\n\n writeUpdate(this.encoder, update)\n\n return this\n }\n\n writeStateless(payload: string): OutgoingMessage {\n this.category = 'Stateless'\n\n writeVarUint(this.encoder, MessageType.Stateless)\n writeVarString(this.encoder, payload)\n\n return this\n }\n\n writeBroadcastStateless(payload: string): OutgoingMessage {\n this.category = 'Stateless'\n\n writeVarUint(this.encoder, MessageType.BroadcastStateless)\n writeVarString(this.encoder, payload)\n\n return this\n }\n\n toUint8Array(): Uint8Array {\n return toUint8Array(this.encoder)\n }\n\n}\n","import {\n messageYjsSyncStep1,\n messageYjsSyncStep2,\n messageYjsUpdate,\n readSyncStep1,\n readSyncStep2,\n readUpdate,\n} from 'y-protocols/sync'\nimport { applyAwarenessUpdate } from 'y-protocols/awareness'\nimport { readVarString } from 'lib0/decoding'\nimport { MessageType } from './types.js'\nimport Connection from './Connection.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { Debugger } from './Debugger.js'\nimport Document from './Document.js'\n\nexport class MessageReceiver {\n\n message: IncomingMessage\n\n logger: Debugger\n\n constructor(message: IncomingMessage, logger: Debugger) {\n this.message = message\n this.logger = logger\n }\n\n public apply(document: Document, connection?: Connection, reply?: (message: Uint8Array) => void) {\n const { message } = this\n const type = message.readVarUint()\n const emptyMessageLength = message.length\n\n switch (type) {\n case MessageType.Sync:\n case MessageType.SyncReply: {\n message.writeVarUint(MessageType.Sync)\n this.readSyncMessage(message, document, connection, reply, type !== MessageType.SyncReply)\n\n if (message.length > emptyMessageLength + 1) {\n if (reply) {\n reply(message.toUint8Array())\n } else if (connection) {\n // TODO: We should log this, shouldn’t we?\n // this.logger.log({\n // direction: 'out',\n // type: MessageType.Awareness,\n // category: 'Update',\n // })\n connection.send(message.toUint8Array())\n }\n }\n\n break\n }\n case MessageType.Awareness: {\n this.logger.log({\n direction: 'in',\n type: MessageType.Awareness,\n category: 'Update',\n })\n\n applyAwarenessUpdate(document.awareness, message.readVarUint8Array(), connection)\n\n break\n }\n case MessageType.QueryAwareness: {\n\n this.applyQueryAwarenessMessage(document, reply)\n\n break\n }\n case MessageType.Stateless: {\n connection?.callbacks.statelessCallback({\n connection,\n documentName: document.name,\n document,\n payload: readVarString(message.decoder),\n })\n\n break\n }\n case MessageType.BroadcastStateless: {\n const msg = message.readVarString()\n document.getConnections().forEach(connection => {\n connection.sendStateless(msg)\n })\n break\n }\n\n case MessageType.CLOSE: {\n connection?.close({\n code: 1000,\n reason: 'provider_initiated',\n })\n break\n }\n default:\n console.error(`Unable to handle message of type ${type}: no handler defined!`)\n // Do nothing\n }\n }\n\n readSyncMessage(message: IncomingMessage, document: Document, connection?: Connection, reply?: (message: Uint8Array) => void, requestFirstSync = true) {\n const type = message.readVarUint()\n\n switch (type) {\n case messageYjsSyncStep1: {\n this.logger.log({\n direction: 'in',\n type: MessageType.Sync,\n category: 'SyncStep1',\n })\n\n readSyncStep1(message.decoder, message.encoder, document)\n\n // When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1.\n this.logger.log({\n direction: 'out',\n type: MessageType.Sync,\n category: 'SyncStep2',\n })\n\n if (reply && requestFirstSync) {\n const syncMessage = (new OutgoingMessage(document.name)\n .createSyncReplyMessage()\n .writeFirstSyncStepFor(document))\n\n this.logger.log({\n direction: 'out',\n type: MessageType.Sync,\n category: 'SyncStep1',\n })\n\n reply(syncMessage.toUint8Array())\n } else if (connection) {\n const syncMessage = (new OutgoingMessage(document.name)\n .createSyncMessage()\n .writeFirstSyncStepFor(document))\n\n this.logger.log({\n direction: 'out',\n type: MessageType.Sync,\n category: 'SyncStep1',\n })\n\n connection.send(syncMessage.toUint8Array())\n }\n break\n }\n case messageYjsSyncStep2:\n this.logger.log({\n direction: 'in',\n type: MessageType.Sync,\n category: 'SyncStep2',\n })\n\n if (connection?.readOnly) {\n break\n }\n\n readSyncStep2(message.decoder, document, connection)\n break\n case messageYjsUpdate:\n this.logger.log({\n direction: 'in',\n type: MessageType.Sync,\n category: 'Update',\n })\n\n if (connection?.readOnly) {\n break\n }\n\n readUpdate(message.decoder, document, connection)\n break\n default:\n throw new Error(`Received a message with an unknown type: ${type}`)\n }\n\n return type\n }\n\n applyQueryAwarenessMessage(document: Document, reply?: (message: Uint8Array) => void) {\n const message = new OutgoingMessage(document.name)\n .createAwarenessUpdateMessage(document.awareness)\n\n if (reply) {\n reply(message.toUint8Array())\n }\n\n // TODO: We should add support for WebSocket connections, too, right?\n // this.logger.log({\n // direction: 'out',\n // type: MessageType.Sync,\n // category: 'SyncStep1',\n // })\n\n // connection.send(syncMessage.toUint8Array())\n }\n}\n","import { IncomingMessage as HTTPIncomingMessage } from 'http'\nimport AsyncLock from 'async-lock'\nimport WebSocket from 'ws'\nimport {\n CloseEvent, ConnectionTimeout, Forbidden, WsReadyStates,\n} from '@hocuspocus/common'\nimport Document from './Document.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { MessageReceiver } from './MessageReceiver.js'\nimport { Debugger } from './Debugger.js'\nimport { onStatelessPayload } from './types.js'\n\nexport class Connection {\n\n webSocket: WebSocket\n\n context: any\n\n document: Document\n\n pingInterval: NodeJS.Timeout\n\n pongReceived = true\n\n request: HTTPIncomingMessage\n\n timeout: number\n\n callbacks: any = {\n onClose: [(document: Document, event?: CloseEvent) => null],\n beforeHandleMessage: (connection: Connection, update: Uint8Array) => Promise,\n statelessCallback: () => Promise,\n }\n\n socketId: string\n\n lock: AsyncLock\n\n readOnly: Boolean\n\n logger: Debugger\n\n /**\n * Constructor.\n */\n constructor(\n connection: WebSocket,\n request: HTTPIncomingMessage,\n document: Document,\n timeout: number,\n socketId: string,\n context: any,\n readOnly = false,\n logger: Debugger,\n ) {\n this.webSocket = connection\n this.context = context\n this.document = document\n this.request = request\n this.timeout = timeout\n this.socketId = socketId\n this.readOnly = readOnly\n this.logger = logger\n\n this.lock = new AsyncLock()\n\n this.webSocket.binaryType = 'arraybuffer'\n this.document.addConnection(this)\n\n this.pingInterval = setInterval(this.check.bind(this), this.timeout)\n\n this.webSocket.on('close', this.boundClose)\n this.webSocket.on('message', this.boundHandleMessage)\n this.webSocket.on('pong', this.boundHandlePong)\n\n this.sendCurrentAwareness()\n }\n\n boundClose = this.close.bind(this)\n\n boundHandleMessage = this.handleMessage.bind(this)\n\n boundHandlePong = this.handlePong.bind(this)\n\n handlePong() {\n this.pongReceived = true\n }\n\n /**\n * Set a callback that will be triggered when the connection is closed\n */\n onClose(callback: (document: Document, event?: CloseEvent) => void): Connection {\n this.callbacks.onClose.push(callback)\n\n return this\n }\n\n /**\n * Set a callback that will be triggered when an stateless message is received\n */\n onStatelessCallback(callback: (payload: onStatelessPayload) => Promise): Connection {\n this.callbacks.statelessCallback = callback\n\n return this\n }\n\n /**\n * Set a callback that will be triggered before an message is handled\n */\n beforeHandleMessage(callback: (connection: Connection, update: Uint8Array) => Promise): Connection {\n this.callbacks.beforeHandleMessage = callback\n\n return this\n }\n\n /**\n * Send the given message\n */\n send(message: any): void {\n if (\n this.webSocket.readyState === WsReadyStates.Closing\n || this.webSocket.readyState === WsReadyStates.Closed\n ) {\n this.close()\n }\n\n try {\n this.webSocket.send(message, (error: any) => {\n if (error != null) this.close()\n })\n } catch (exception) {\n this.close()\n }\n }\n\n /**\n * Send a stateless message with payload\n */\n public sendStateless(payload: string): void {\n const message = new OutgoingMessage(this.document.name)\n .writeStateless(payload)\n\n this.logger.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n this.send(\n message.toUint8Array(),\n )\n }\n\n /**\n * Graceful wrapper around the WebSocket close method.\n */\n close(event?: CloseEvent): void {\n this.lock.acquire('close', (done: Function) => {\n if (this.pingInterval) {\n clearInterval(this.pingInterval)\n }\n\n if (this.document.hasConnection(this)) {\n this.document.removeConnection(this)\n clearInterval(this.pingInterval)\n\n this.webSocket.removeListener('close', this.boundClose)\n this.webSocket.removeListener('message', this.boundHandleMessage)\n this.webSocket.removeListener('pong', this.boundHandlePong)\n\n this.callbacks.onClose.forEach((callback: (arg0: Document, arg1?: CloseEvent) => any) => callback(this.document, event))\n }\n\n done()\n })\n }\n\n /**\n * Check if pong was received and close the connection otherwise\n * @private\n */\n private check(): void {\n if (!this.pongReceived) {\n return this.close(ConnectionTimeout)\n }\n\n if (this.document.hasConnection(this)) {\n this.pongReceived = false\n\n try {\n this.webSocket.ping()\n } catch (error) {\n this.close(ConnectionTimeout)\n }\n }\n }\n\n /**\n * Send the current document awareness to the client, if any\n * @private\n */\n private sendCurrentAwareness(): void {\n if (!this.document.hasAwarenessStates()) {\n return\n }\n\n const awarenessMessage = new OutgoingMessage(this.document.name)\n .createAwarenessUpdateMessage(this.document.awareness)\n\n this.logger.log({\n direction: 'out',\n type: awarenessMessage.type,\n category: awarenessMessage.category,\n })\n\n this.send(awarenessMessage.toUint8Array())\n }\n\n /**\n * Handle an incoming message\n * @private\n */\n private handleMessage(data: Uint8Array): void {\n const message = new IncomingMessage(data)\n const documentName = message.readVarString()\n\n if (documentName !== this.document.name) return\n\n message.writeVarString(documentName)\n\n this.callbacks.beforeHandleMessage(this, data)\n .then(() => {\n new MessageReceiver(\n message,\n this.logger,\n ).apply(this.document, this)\n })\n .catch((e: any) => {\n console.log('closing connection because of exception', e)\n this.close({\n code: 'code' in e ? e.code : Forbidden.code,\n reason: 'reason' in e ? e.reason : Forbidden.reason,\n })\n })\n }\n\n}\n\nexport default Connection\n","// import * as time from 'lib0/time'\nimport { MessageType } from './types.js'\n\nexport class Debugger {\n logs: any[] = []\n\n listen = false\n\n output = false\n\n enable() {\n this.flush()\n\n this.listen = true\n }\n\n disable() {\n this.listen = false\n }\n\n verbose() {\n this.output = true\n }\n\n quiet() {\n this.output = false\n }\n\n log(message: any) {\n if (!this.listen) {\n return this\n }\n\n const item = {\n ...message,\n type: MessageType[message.type],\n // time: time.getUnixTime(),\n }\n\n this.logs.push(item)\n\n if (this.output) {\n console.log('[DEBUGGER]', item.direction === 'in' ? 'IN –>' : 'OUT <–', `${item.type}/${item.category}`)\n }\n\n return this\n }\n\n flush() {\n this.logs = []\n\n return this\n }\n\n get() {\n return {\n logs: this.logs,\n }\n }\n}\n","/**\n * Mutual exclude for JavaScript.\n *\n * @module mutex\n */\n\n/**\n * @callback mutex\n * @param {function():void} cb Only executed when this mutex is not in the current stack\n * @param {function():void} [elseCb] Executed when this mutex is in the current stack\n */\n\n/**\n * Creates a mutual exclude function with the following property:\n *\n * ```js\n * const mutex = createMutex()\n * mutex(() => {\n * // This function is immediately executed\n * mutex(() => {\n * // This function is not executed, as the mutex is already active.\n * })\n * })\n * ```\n *\n * @return {mutex} A mutual exclude function\n * @public\n */\nexport const createMutex = () => {\n let token = true\n return (f, g) => {\n if (token) {\n token = false\n try {\n f()\n } finally {\n token = true\n }\n } else if (g !== undefined) {\n g()\n }\n }\n}\n","import WebSocket from 'ws'\nimport { Awareness, removeAwarenessStates, applyAwarenessUpdate } from 'y-protocols/awareness'\nimport { applyUpdate, Doc, encodeStateAsUpdate } from 'yjs'\nimport { mutex, createMutex } from 'lib0/mutex.js'\nimport { AwarenessUpdate } from './types.js'\nimport Connection from './Connection.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { Debugger } from './Debugger.js'\n\nexport class Document extends Doc {\n\n awareness: Awareness\n\n callbacks = {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onUpdate: (document: Document, connection: Connection, update: Uint8Array) => {},\n beforeBroadcastStateless: (document: Document, stateless: string) => {},\n }\n\n connections: Map,\n connection: Connection\n }> = new Map()\n\n // The number of direct (non-websocket) connections to this document\n directConnectionsCount = 0\n\n name: string\n\n mux: mutex\n\n logger: Debugger\n\n isLoading: boolean\n\n /**\n * Constructor.\n */\n constructor(name: string, logger: Debugger, yDocOptions: {}) {\n super(yDocOptions)\n\n this.name = name\n this.mux = createMutex()\n\n this.awareness = new Awareness(this)\n this.awareness.setLocalState(null)\n\n this.awareness.on('update', this.handleAwarenessUpdate.bind(this))\n this.on('update', this.handleUpdate.bind(this))\n\n this.logger = logger\n this.isLoading = true\n }\n\n /**\n * Check if the Document is empty\n */\n isEmpty(fieldName: string): boolean {\n // eslint-disable-next-line no-underscore-dangle\n return !this.get(fieldName)._start\n }\n\n /**\n * Merge the given document(s) into this one\n */\n merge(documents: Doc|Array): Document {\n (Array.isArray(documents) ? documents : [documents]).forEach(document => {\n applyUpdate(this, encodeStateAsUpdate(document))\n })\n\n return this\n }\n\n /**\n * Set a callback that will be triggered when the document is updated\n */\n onUpdate(callback: (document: Document, connection: Connection, update: Uint8Array) => void): Document {\n this.callbacks.onUpdate = callback\n\n return this\n }\n\n /**\n * Set a callback that will be triggered before a stateless message is broadcasted\n */\n beforeBroadcastStateless(callback: (document: Document, stateless: string) => void): Document {\n this.callbacks.beforeBroadcastStateless = callback\n\n return this\n }\n\n /**\n * Register a connection and a set of clients on this document keyed by the\n * underlying websocket connection\n */\n addConnection(connection: Connection): Document {\n this.connections.set(connection.webSocket, {\n clients: new Set(),\n connection,\n })\n\n return this\n }\n\n /**\n * Is the given connection registered on this document\n */\n hasConnection(connection: Connection): boolean {\n return this.connections.has(connection.webSocket)\n }\n\n /**\n * Remove the given connection from this document\n */\n removeConnection(connection: Connection): Document {\n removeAwarenessStates(\n this.awareness,\n Array.from(this.getClients(connection.webSocket)),\n null,\n )\n\n this.connections.delete(connection.webSocket)\n\n return this\n }\n\n addDirectConnection(): Document {\n this.directConnectionsCount += 1\n\n return this\n }\n\n removeDirectConnection(): Document {\n if (this.directConnectionsCount > 0) {\n this.directConnectionsCount -= 1\n }\n\n return this\n }\n\n /**\n * Get the number of active connections for this document\n */\n getConnectionsCount(): number {\n return this.connections.size + this.directConnectionsCount\n }\n\n /**\n * Get an array of registered connections\n */\n getConnections(): Array {\n return Array.from(this.connections.values()).map(data => data.connection)\n }\n\n /**\n * Get the client ids for the given connection instance\n */\n getClients(connectionInstance: WebSocket): Set {\n const connection = this.connections.get(connectionInstance)\n\n return connection?.clients === undefined ? new Set() : connection.clients\n }\n\n /**\n * Has the document awareness states\n */\n hasAwarenessStates(): boolean {\n return this.awareness.getStates().size > 0\n }\n\n /**\n * Apply the given awareness update\n */\n applyAwarenessUpdate(connection: Connection, update: Uint8Array): Document {\n applyAwarenessUpdate(\n this.awareness,\n update,\n connection.webSocket,\n )\n\n return this\n }\n\n /**\n * Handle an awareness update and sync changes to clients\n * @private\n */\n private handleAwarenessUpdate(\n { added, updated, removed }: AwarenessUpdate,\n connectionInstance: WebSocket,\n ): Document {\n const changedClients = added.concat(updated, removed)\n\n if (connectionInstance !== null) {\n const connection = this.connections.get(connectionInstance)\n\n if (connection) {\n added.forEach((clientId: any) => connection.clients.add(clientId))\n removed.forEach((clientId: any) => connection.clients.delete(clientId))\n }\n }\n\n this.getConnections().forEach(connection => {\n const awarenessMessage = new OutgoingMessage(this.name)\n .createAwarenessUpdateMessage(this.awareness, changedClients)\n\n this.logger.log({\n direction: 'out',\n type: awarenessMessage.type,\n category: awarenessMessage.category,\n })\n\n connection.send(\n awarenessMessage.toUint8Array(),\n )\n })\n\n return this\n }\n\n /**\n * Handle an updated document and sync changes to clients\n */\n private handleUpdate(update: Uint8Array, connection: Connection): Document {\n this.callbacks.onUpdate(this, connection, update)\n\n const message = new OutgoingMessage(this.name)\n .createSyncMessage()\n .writeUpdate(update)\n\n this.getConnections().forEach(connection => {\n this.logger.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n connection.send(\n message.toUint8Array(),\n )\n })\n\n return this\n }\n\n /**\n * Broadcast stateless message to all connections\n */\n public broadcastStateless(payload: string): void {\n this.callbacks.beforeBroadcastStateless(this, payload)\n\n this.getConnections().forEach(connection => {\n connection.sendStateless(payload)\n })\n }\n}\n\nexport default Document\n","import { URLSearchParams } from 'url'\nimport Document from './Document.js'\nimport type { Hocuspocus } from './Hocuspocus.js'\n\nexport class DirectConnection {\n document: Document | null = null\n\n instance!: Hocuspocus\n\n context: any\n\n /**\n * Constructor.\n */\n constructor(\n document: Document,\n instance: Hocuspocus,\n context?: any,\n ) {\n this.document = document\n this.instance = instance\n this.context = context\n\n this.document.addDirectConnection()\n }\n\n async transact(transaction: (document: Document) => void) {\n if (!this.document) {\n throw new Error('direct connection closed')\n }\n\n transaction(this.document)\n\n this.instance.storeDocumentHooks(this.document, {\n clientsCount: this.document.getConnectionsCount(),\n context: this.context,\n document: this.document,\n documentName: this.document.name,\n instance: this.instance,\n requestHeaders: {},\n requestParameters: new URLSearchParams(),\n socketId: 'server',\n })\n }\n\n disconnect() {\n this.document?.removeDirectConnection()\n this.document = null\n }\n}\n","import { createServer, IncomingMessage, Server as HTTPServer } from 'http'\nimport { URLSearchParams } from 'url'\nimport { ListenOptions } from 'net'\nimport * as decoding from 'lib0/decoding'\nimport WebSocket, { AddressInfo, WebSocketServer } from 'ws'\nimport { Doc, encodeStateAsUpdate, applyUpdate } from 'yjs'\nimport { v4 as uuid } from 'uuid'\nimport kleur from 'kleur'\nimport {\n ResetConnection,\n Unauthorized,\n Forbidden,\n awarenessStatesToArray,\n WsReadyStates,\n} from '@hocuspocus/common'\nimport meta from '../package.json' assert {type: 'json'}\nimport { IncomingMessage as SocketIncomingMessage } from './IncomingMessage.js'\nimport {\n MessageType,\n Configuration,\n ConnectionConfiguration,\n HookName,\n AwarenessUpdate,\n HookPayload,\n beforeHandleMessagePayload,\n beforeBroadcastStatelessPayload,\n onListenPayload,\n onStoreDocumentPayload,\n} from './types.js'\nimport Document from './Document.js'\nimport Connection from './Connection.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { Debugger } from './Debugger.js'\nimport { DirectConnection } from './DirectConnection.js'\n\nexport const defaultConfiguration = {\n name: null,\n port: 80,\n address: '0.0.0.0',\n timeout: 30000,\n debounce: 2000,\n maxDebounce: 10000,\n quiet: false,\n yDocOptions: {\n gc: true,\n gcFilter: () => true,\n },\n}\n\n/**\n * Hocuspocus Server\n */\nexport class Hocuspocus {\n configuration: Configuration = {\n ...defaultConfiguration,\n extensions: [],\n onConfigure: () => new Promise(r => r(null)),\n onListen: () => new Promise(r => r(null)),\n onUpgrade: () => new Promise(r => r(null)),\n onConnect: () => new Promise(r => r(null)),\n connected: () => new Promise(r => r(null)),\n beforeHandleMessage: () => new Promise(r => r(null)),\n beforeBroadcastStateless: () => new Promise(r => r(null)),\n onStateless: () => new Promise(r => r(null)),\n onChange: () => new Promise(r => r(null)),\n onLoadDocument: () => new Promise(r => r(null)),\n onStoreDocument: () => new Promise(r => r(null)),\n afterStoreDocument: () => new Promise(r => r(null)),\n onAwarenessUpdate: () => new Promise(r => r(null)),\n onRequest: () => new Promise(r => r(null)),\n onDisconnect: () => new Promise(r => r(null)),\n onDestroy: () => new Promise(r => r(null)),\n }\n\n documents: Map = new Map()\n\n httpServer?: HTTPServer\n\n webSocketServer?: WebSocketServer\n\n debugger = new Debugger()\n\n constructor(configuration?: Partial) {\n if (configuration) {\n this.configure(configuration)\n }\n }\n\n /**\n * Configure the server\n */\n configure(configuration: Partial): Hocuspocus {\n this.configuration = {\n ...this.configuration,\n ...configuration,\n }\n\n this.configuration.extensions.sort((a, b) => {\n const one = typeof a.priority === 'undefined' ? 100 : a.priority\n const two = typeof b.priority === 'undefined' ? 100 : b.priority\n\n if (one > two) {\n return -1\n }\n\n if (one < two) {\n return 1\n }\n\n return 0\n })\n\n this.configuration.extensions.push({\n onConfigure: this.configuration.onConfigure,\n onListen: this.configuration.onListen,\n onUpgrade: this.configuration.onUpgrade,\n onConnect: this.configuration.onConnect,\n connected: this.configuration.connected,\n onAuthenticate: this.configuration.onAuthenticate,\n onLoadDocument: this.configuration.onLoadDocument,\n beforeHandleMessage: this.configuration.beforeHandleMessage,\n beforeBroadcastStateless: this.configuration.beforeBroadcastStateless,\n onStateless: this.configuration.onStateless,\n onChange: this.configuration.onChange,\n onStoreDocument: this.configuration.onStoreDocument,\n afterStoreDocument: this.configuration.afterStoreDocument,\n onAwarenessUpdate: this.configuration.onAwarenessUpdate,\n onRequest: this.configuration.onRequest,\n onDisconnect: this.configuration.onDisconnect,\n onDestroy: this.configuration.onDestroy,\n })\n\n this.hooks('onConfigure', {\n configuration: this.configuration,\n version: meta.version,\n instance: this,\n })\n\n return this\n }\n\n get requiresAuthentication(): boolean {\n return !!this.configuration.extensions.find(extension => {\n return extension.onAuthenticate !== undefined\n })\n }\n\n /**\n * Start the server\n */\n async listen(\n portOrCallback: number | ((data: onListenPayload) => Promise) | null = null,\n callback: any = null,\n ): Promise {\n if (typeof portOrCallback === 'number') {\n this.configuration.port = portOrCallback\n }\n\n if (typeof portOrCallback === 'function') {\n this.configuration.extensions.push({\n onListen: portOrCallback,\n })\n }\n\n if (typeof callback === 'function') {\n this.configuration.extensions.push({\n onListen: callback,\n })\n }\n\n const webSocketServer = new WebSocketServer({ noServer: true })\n\n webSocketServer.on('connection', async (incoming: WebSocket, request: IncomingMessage) => {\n\n incoming.on('error', error => {\n /**\n * Handle a ws instance error, which is required to prevent\n * the server from crashing when one happens\n * See https://github.com/websockets/ws/issues/1777#issuecomment-660803472\n * @private\n */\n this.debugger.log('Error emitted from webSocket instance:')\n this.debugger.log(error)\n })\n\n this.handleConnection(incoming, request)\n })\n\n const server = createServer((request, response) => {\n this.hooks('onRequest', { request, response, instance: this })\n .then(() => {\n // default response if all prior hooks don't interfere\n response.writeHead(200, { 'Content-Type': 'text/plain' })\n response.end('OK')\n })\n .catch(error => {\n // if a hook rejects and the error is empty, do nothing\n // this is only meant to prevent later hooks and the\n // default handler to do something. if a error is present\n // just rethrow it\n if (error) {\n throw error\n }\n })\n })\n\n server.on('upgrade', (request, socket, head) => {\n this.hooks('onUpgrade', {\n request,\n socket,\n head,\n instance: this,\n })\n .then(() => {\n // let the default websocket server handle the connection if\n // prior hooks don't interfere\n webSocketServer.handleUpgrade(request, socket, head, ws => {\n webSocketServer.emit('connection', ws, request)\n })\n })\n .catch(error => {\n // if a hook rejects and the error is empty, do nothing\n // this is only meant to prevent later hooks and the\n // default handler to do something. if a error is present\n // just rethrow it\n if (error) {\n throw error\n }\n })\n })\n\n this.httpServer = server\n this.webSocketServer = webSocketServer\n\n return new Promise((resolve: Function, reject: Function) => {\n server.listen({\n port: this.configuration.port,\n host: this.configuration.address,\n } as ListenOptions, () => {\n if (!this.configuration.quiet && process.env.NODE_ENV !== 'testing') {\n this.showStartScreen()\n }\n\n const onListenPayload = {\n instance: this,\n configuration: this.configuration,\n port: this.address.port,\n }\n\n this.hooks('onListen', onListenPayload)\n .then(() => resolve(this))\n .catch(error => reject(error))\n })\n })\n }\n\n get address(): AddressInfo {\n return (this.httpServer?.address() || {\n port: this.configuration.port,\n address: this.configuration.address,\n family: 'IPv4',\n }) as AddressInfo\n }\n\n get URL(): string {\n return `${this.configuration.address}:${this.address.port}`\n }\n\n get webSocketURL(): string {\n return `ws://${this.URL}`\n }\n\n get httpURL(): string {\n return `http://${this.URL}`\n }\n\n private showStartScreen() {\n const name = this.configuration.name ? ` (${this.configuration.name})` : ''\n\n console.log()\n console.log(` ${kleur.cyan(`Hocuspocus v${meta.version}${name}`)}${kleur.green(' running at:')}`)\n console.log()\n console.log(` > HTTP: ${kleur.cyan(`${this.httpURL}`)}`)\n console.log(` > WebSocket: ${this.webSocketURL}`)\n\n const extensions = this.configuration?.extensions.map(extension => {\n return extension.constructor?.name\n })\n .filter(name => name)\n .filter(name => name !== 'Object')\n\n if (!extensions.length) {\n return\n }\n\n console.log()\n console.log(' Extensions:')\n\n extensions\n .forEach(name => {\n console.log(` - ${name}`)\n })\n\n console.log()\n console.log(` ${kleur.green('Ready.')}`)\n console.log()\n }\n\n /**\n * Get the total number of active documents\n */\n getDocumentsCount(): number {\n return this.documents.size\n }\n\n /**\n * Get the total number of active connections\n */\n getConnectionsCount(): number {\n return Array.from(this.documents.values()).reduce((acc, document) => {\n acc += document.getConnectionsCount()\n return acc\n }, 0)\n }\n\n /**\n * Force close one or more connections\n */\n closeConnections(documentName?: string) {\n // Iterate through all connections for all documents\n // and invoke their close method, which is a graceful\n // disconnect wrapper around the underlying websocket.close\n this.documents.forEach((document: Document) => {\n // If a documentName was specified, bail if it doesnt match\n if (documentName && document.name !== documentName) {\n return\n }\n\n document.connections.forEach(({ connection }) => {\n connection.close(ResetConnection)\n })\n })\n }\n\n /**\n * Destroy the server\n */\n async destroy(): Promise {\n this.httpServer?.close()\n\n try {\n this.webSocketServer?.close()\n this.webSocketServer?.clients.forEach(client => {\n client.terminate()\n })\n } catch (error) {\n console.error(error)\n //\n }\n\n this.debugger.flush()\n\n await this.hooks('onDestroy', { instance: this })\n }\n\n /**\n * The `handleConnection` method receives incoming WebSocket connections,\n * runs all hooks:\n *\n * - onConnect for all connections\n * - onAuthenticate only if required\n *\n * … and if nothings fails it’ll fully establish the connection and\n * load the Document then.\n */\n handleConnection(incoming: WebSocket, request: IncomingMessage, context: any = null): void {\n // Make sure to close an idle connection after a while.\n const closeIdleConnection = setTimeout(() => {\n incoming.close(Unauthorized.code, Unauthorized.reason)\n }, this.configuration.timeout)\n\n // Every new connection gets a unique identifier.\n const socketId = uuid()\n\n // To override settings for specific connections, we’ll\n // keep track of a few things in the `ConnectionConfiguration`.\n const connection: ConnectionConfiguration = {\n readOnly: false,\n requiresAuthentication: this.requiresAuthentication,\n isAuthenticated: false,\n }\n\n // The `onConnect` and `onAuthenticate` hooks need some context\n // to decide who’s connecting, so let’s put it together:\n const hookPayload = {\n instance: this,\n request,\n requestHeaders: request.headers,\n requestParameters: Hocuspocus.getParameters(request),\n socketId,\n connection,\n }\n\n // this map indicates whether a `Connection` instance has already taken over for incoming message for the key (i.e. documentName)\n const documentConnections: Record = {}\n\n // While the connection will be establishing messages will\n // be queued and handled later.\n const incomingMessageQueue: Record = {}\n\n // While the connection is establishing\n const connectionEstablishing: Record = {}\n\n // Once all hooks are run, we’ll fully establish the connection:\n const setUpNewConnection = async (documentName: string) => {\n // Not an idle connection anymore, no need to close it then.\n clearTimeout(closeIdleConnection)\n\n // If no hook interrupts, create a document and connection\n const document = await this.createDocument(documentName, request, socketId, connection, context)\n const instance = this.createConnection(incoming, request, document, socketId, connection.readOnly, context)\n\n instance.onClose((document, event) => {\n delete documentConnections[documentName]\n delete incomingMessageQueue[documentName]\n delete connectionEstablishing[documentName]\n\n if (Object.keys(documentConnections).length === 0) {\n instance.webSocket.close(event?.code, event?.reason) // TODO: Move this to Hocuspocus connection handler\n }\n })\n\n documentConnections[documentName] = true\n\n // There’s no need to queue messages anymore.\n // Let’s work through queued messages.\n incomingMessageQueue[documentName].forEach(input => {\n incoming.emit('message', input)\n })\n\n this.hooks('connected', {\n ...hookPayload,\n documentName,\n context,\n connectionInstance: instance,\n })\n }\n\n // This listener handles authentication messages and queues everything else.\n const handleQueueingMessage = (data: Uint8Array) => {\n try {\n const tmpMsg = new SocketIncomingMessage(data)\n\n const documentName = decoding.readVarString(tmpMsg.decoder)\n const type = decoding.readVarUint(tmpMsg.decoder)\n\n // Okay, we’ve got the authentication message we’re waiting for:\n if (type === MessageType.Auth && !connectionEstablishing[documentName]) {\n connectionEstablishing[documentName] = true\n\n // The 2nd integer contains the submessage type\n // which will always be authentication when sent from client -> server\n decoding.readVarUint(tmpMsg.decoder)\n const token = decoding.readVarString(tmpMsg.decoder)\n\n this.debugger.log({\n direction: 'in',\n type,\n category: 'Token',\n })\n\n this.hooks('onAuthenticate', {\n token,\n ...hookPayload,\n documentName,\n }, (contextAdditions: any) => {\n // Hooks are allowed to give us even more context and we’ll merge everything together.\n // We’ll pass the context to other hooks then.\n context = { ...context, ...contextAdditions }\n })\n .then(() => {\n // All `onAuthenticate` hooks passed.\n connection.isAuthenticated = true\n\n // Let the client know that authentication was successful.\n const message = new OutgoingMessage(documentName).writeAuthenticated(connection.readOnly)\n\n this.debugger.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n incoming.send(message.toUint8Array())\n })\n .then(() => {\n // Time to actually establish the connection.\n return setUpNewConnection(documentName)\n })\n .catch((error = Forbidden) => {\n const message = new OutgoingMessage(documentName).writePermissionDenied(error.reason ?? 'permission-denied')\n\n this.debugger.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n // Ensure that the permission denied message is sent before the\n // connection is closed\n incoming.send(message.toUint8Array(), () => {\n if (Object.keys(documentConnections).length === 0) {\n try {\n incoming.close(error.code ?? Forbidden.code, error.reason ?? Forbidden.reason)\n } catch (closeError) {\n // catch is needed in case invalid error code is returned by hook (that would fail sending the close message)\n console.error(closeError)\n incoming.close(Forbidden.code, Forbidden.reason)\n }\n }\n })\n })\n } else {\n incomingMessageQueue[documentName].push(data)\n }\n\n // Catch errors due to failed decoding of data\n } catch (error) {\n console.error(error)\n incoming.close(Unauthorized.code, Unauthorized.reason)\n }\n }\n\n const messageHandler = (data: Uint8Array) => {\n try {\n const tmpMsg = new SocketIncomingMessage(data)\n\n const documentName = decoding.readVarString(tmpMsg.decoder)\n\n if (documentConnections[documentName] === true) {\n // we already have a `Connection` set up for this document\n return\n }\n\n // if this is the first message, trigger onConnect & check if we can start the connection (only if no auth is required)\n if (incomingMessageQueue[documentName] === undefined) {\n incomingMessageQueue[documentName] = []\n\n this.hooks('onConnect', { ...hookPayload, documentName }, (contextAdditions: any) => {\n // merge context from all hooks\n context = { ...context, ...contextAdditions }\n })\n .then(() => {\n // Authentication is required, we’ll need to wait for the Authentication message.\n if (connection.requiresAuthentication || connectionEstablishing[documentName]) {\n return\n }\n connectionEstablishing[documentName] = true\n\n return setUpNewConnection(documentName)\n })\n .catch((error = Forbidden) => {\n // if a hook interrupts, close the websocket connection\n try {\n incoming.close(error.code ?? Forbidden.code, error.reason ?? Forbidden.reason)\n } catch (closeError) {\n // catch is needed in case invalid error code is returned by hook (that would fail sending the close message)\n console.error(closeError)\n incoming.close(Unauthorized.code, Unauthorized.reason)\n }\n })\n }\n\n handleQueueingMessage(data)\n } catch (closeError) {\n // catch is needed in case an invalid payload crashes the parsing of the Uint8Array\n console.error(closeError)\n incoming.close(Unauthorized.code, Unauthorized.reason)\n }\n\n }\n\n incoming.on('message', messageHandler)\n }\n\n /**\n * Handle update of the given document\n */\n private handleDocumentUpdate(document: Document, connection: Connection | undefined, update: Uint8Array, request?: IncomingMessage): void {\n const hookPayload = {\n instance: this,\n clientsCount: document.getConnectionsCount(),\n context: connection?.context || {},\n document,\n documentName: document.name,\n requestHeaders: request?.headers ?? {},\n requestParameters: Hocuspocus.getParameters(request),\n socketId: connection?.socketId ?? '',\n update,\n }\n\n this.hooks('onChange', hookPayload).catch(error => {\n throw error\n })\n\n // If the update was received through other ways than the\n // WebSocket connection, we don’t need to feel responsible for\n // storing the content.\n if (!connection) {\n return\n }\n\n this.debounce(`onStoreDocument-${document.name}`, () => {\n this.storeDocumentHooks(document, hookPayload)\n })\n }\n\n timers: Map = new Map()\n\n /**\n * debounce the given function, using the given identifier\n */\n debounce(id: string, func: Function, immediately = false) {\n const old = this.timers.get(id)\n const start = old?.start || Date.now()\n\n const run = () => {\n this.timers.delete(id)\n func()\n }\n\n if (old?.timeout) {\n clearTimeout(old.timeout)\n }\n\n if (immediately) {\n return run()\n }\n\n if (Date.now() - start >= this.configuration.maxDebounce) {\n return run()\n }\n\n this.timers.set(id, {\n start,\n timeout: setTimeout(run, this.configuration.debounce),\n })\n }\n\n /**\n * Create a new document by the given request\n */\n private async createDocument(documentName: string, request: Partial>, socketId: string, connection: ConnectionConfiguration, context?: any): Promise {\n if (this.documents.has(documentName)) {\n const document = this.documents.get(documentName)\n\n if (document) {\n return document\n }\n }\n\n const document = new Document(documentName, this.debugger, this.configuration.yDocOptions)\n this.documents.set(documentName, document)\n\n const hookPayload = {\n instance: this,\n context,\n connection,\n document,\n documentName,\n socketId,\n requestHeaders: request.headers,\n requestParameters: Hocuspocus.getParameters(request),\n }\n\n try {\n await this.hooks('onLoadDocument', hookPayload, (loadedDocument: Doc | undefined) => {\n // if a hook returns a Y-Doc, encode the document state as update\n // and apply it to the newly created document\n // Note: instanceof doesn't work, because Doc !== Doc for some reason I don't understand\n if (\n loadedDocument?.constructor.name === 'Document'\n || loadedDocument?.constructor.name === 'Doc'\n ) {\n applyUpdate(document, encodeStateAsUpdate(loadedDocument))\n }\n })\n } catch (e) {\n this.closeConnections(documentName)\n this.documents.delete(documentName)\n throw e\n }\n\n document.isLoading = false\n await this.hooks('afterLoadDocument', hookPayload)\n\n document.onUpdate((document: Document, connection: Connection, update: Uint8Array) => {\n this.handleDocumentUpdate(document, connection, update, connection?.request)\n })\n\n document.beforeBroadcastStateless((document: Document, stateless: string) => {\n const hookPayload: beforeBroadcastStatelessPayload = {\n document,\n documentName: document.name,\n payload: stateless,\n }\n\n this.hooks('beforeBroadcastStateless', hookPayload)\n })\n\n document.awareness.on('update', (update: AwarenessUpdate) => {\n this.hooks('onAwarenessUpdate', {\n ...hookPayload,\n ...update,\n awareness: document.awareness,\n states: awarenessStatesToArray(document.awareness.getStates()),\n })\n })\n\n return document\n }\n\n /**\n * Create a new connection by the given request and document\n */\n private createConnection(connection: WebSocket, request: IncomingMessage, document: Document, socketId: string, readOnly = false, context?: any): Connection {\n const instance = new Connection(\n connection,\n request,\n document,\n this.configuration.timeout,\n socketId,\n context,\n readOnly,\n this.debugger,\n )\n\n instance.onClose(document => {\n const hookPayload = {\n instance: this,\n clientsCount: document.getConnectionsCount(),\n context,\n document,\n socketId,\n documentName: document.name,\n requestHeaders: request.headers,\n requestParameters: Hocuspocus.getParameters(request),\n }\n\n this.hooks('onDisconnect', hookPayload).then(() => {\n // Check if there are still no connections to the document, as these hooks\n // may take some time to resolve (e.g. database queries). If a\n // new connection were to come in during that time it would rely on the\n // document in the map that we remove now.\n if (document.getConnectionsCount() > 0) {\n return\n }\n\n // If it’s the last connection, we need to make sure to store the\n // document. Use the debounce helper, to clear running timers,\n // but make it run immediately (`true`).\n // Only run this if the document has finished loading earlier (i.e. not to persist the empty\n // ydoc if the onLoadDocument hook returned an error)\n if (!document.isLoading) {\n this.debounce(`onStoreDocument-${document.name}`, () => {\n this.storeDocumentHooks(document, hookPayload)\n }, true)\n\n } else {\n // Remove document from memory immediately\n this.documents.delete(document.name)\n document.destroy()\n }\n })\n\n })\n\n instance.onStatelessCallback(payload => {\n return this.hooks('onStateless', payload)\n .catch(error => {\n if (error?.message) {\n throw error\n }\n })\n })\n\n instance.beforeHandleMessage((connection, update) => {\n const hookPayload: beforeHandleMessagePayload = {\n instance: this,\n clientsCount: document.getConnectionsCount(),\n context,\n document,\n socketId,\n connection,\n documentName: document.name,\n requestHeaders: request.headers,\n requestParameters: Hocuspocus.getParameters(request),\n update,\n }\n\n return this.hooks('beforeHandleMessage', hookPayload)\n })\n\n // If the WebSocket has already disconnected (wow, that was fast) – then\n // immediately call close to cleanup the connection and document in memory.\n if (\n connection.readyState === WsReadyStates.Closing\n || connection.readyState === WsReadyStates.Closed\n ) {\n instance.close()\n }\n\n return instance\n }\n\n storeDocumentHooks(document: Document, hookPayload: onStoreDocumentPayload) {\n this.hooks('onStoreDocument', hookPayload)\n .catch(error => {\n if (error?.message) {\n throw error\n }\n })\n .then(() => {\n this.hooks('afterStoreDocument', hookPayload).then(() => {\n // Remove document from memory.\n\n if (document.getConnectionsCount() > 0) {\n return\n }\n\n this.documents.delete(document.name)\n document.destroy()\n })\n })\n }\n\n /**\n * Run the given hook on all configured extensions.\n * Runs the given callback after each hook.\n */\n hooks(name: HookName, payload: HookPayload, callback: Function | null = null): Promise {\n const { extensions } = this.configuration\n\n // create a new `thenable` chain\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve\n let chain = Promise.resolve()\n\n extensions\n // get me all extensions which have the given hook\n .filter(extension => typeof extension[name] === 'function')\n // run through all the configured hooks\n .forEach(extension => {\n chain = chain\n .then(() => (extension[name] as any)?.(payload))\n .catch(error => {\n // make sure to log error messages\n if (error?.message) {\n console.error(`[${name}]`, error.message)\n }\n\n throw error\n })\n\n if (callback) {\n chain = chain.then((...args: any[]) => callback(...args))\n }\n })\n\n return chain\n }\n\n /**\n * Get parameters by the given request\n */\n private static getParameters(request?: Pick): URLSearchParams {\n const query = request?.url?.split('?') || []\n return new URLSearchParams(query[1] ? query[1] : '')\n }\n\n enableDebugging() {\n this.debugger.enable()\n }\n\n enableMessageLogging() {\n this.debugger.enable()\n this.debugger.verbose()\n }\n\n disableLogging() {\n this.debugger.quiet()\n }\n\n disableDebugging() {\n this.debugger.disable()\n }\n\n flushMessageLogs() {\n this.debugger.flush()\n\n return this\n }\n\n getMessageLogs() {\n return this.debugger.get()?.logs\n }\n\n async openDirectConnection(documentName: string, context?: any): Promise {\n const connectionConfig: ConnectionConfiguration = {\n isAuthenticated: true,\n readOnly: false,\n requiresAuthentication: true,\n }\n\n const document: Document = await this.createDocument(\n documentName,\n {}, // direct connection has no request params\n uuid(),\n connectionConfig,\n context,\n )\n\n return new DirectConnection(document, this, context)\n }\n}\n\nexport const Server = new Hocuspocus()\n"],"names":["create","length","object.length","object.hasProperty","map.create","string.fromCamelCase","conditions.undefinedToNull","storage.varStorage","f.isOneOf","buffer.createUint8ArrayViewFromArrayBuffer","binary.BITS7","binary.BIT8","math.floor","string.utf8TextEncoder","string.encodeUtf8","math.min","math.max","error.create","number.MAX_SAFE_INTEGER","string.utf8TextDecoder","encoding.writeVarUint","Y","encoding.writeVarUint8Array","decoding.readVarUint8Array","map.setIfUndefined","set.create","array.from","time.getUnixTime","f.equalityDeep","encoding.createEncoder","encoding.writeVarString","encoding.toUint8Array","decoding.createDecoder","decoding.readVarUint","decoding.readVarString","MessageType","writeAuthenticated","writePermissionDenied","AsyncLock","WsReadyStates","ConnectionTimeout","Forbidden","Doc","applyUpdate","encodeStateAsUpdate","URLSearchParams","WebSocketServer","createServer","kleur","ResetConnection","Unauthorized","uuid","SocketIncomingMessage","awarenessStatesToArray"],"mappings":"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"} +\ No newline at end of file ++{"version":3,"file":"hocuspocus-server.cjs","sources":["../../../node_modules/lib0/set.js","../../../node_modules/lib0/array.js","../../../node_modules/lib0/string.js","../../../node_modules/lib0/map.js","../../../node_modules/lib0/conditions.js","../../../node_modules/lib0/storage.js","../../../node_modules/lib0/object.js","../../../node_modules/lib0/function.js","../../../node_modules/lib0/environment.js","../../../node_modules/lib0/math.js","../../../node_modules/lib0/binary.js","../../../node_modules/lib0/number.js","../../../node_modules/lib0/encoding.js","../../../node_modules/lib0/buffer.js","../../../node_modules/lib0/error.js","../../../node_modules/lib0/decoding.js","../src/IncomingMessage.ts","../../../node_modules/lib0/time.js","../../../node_modules/lib0/observable.js","../../../node_modules/y-protocols/awareness.js","../../../node_modules/y-protocols/sync.js","../src/types.ts","../src/OutgoingMessage.ts","../src/MessageReceiver.ts","../src/Connection.ts","../src/Debugger.ts","../../../node_modules/lib0/mutex.js","../src/Document.ts","../src/util/getParameters.ts","../src/ClientConnection.ts","../src/DirectConnection.ts","../src/Hocuspocus.ts"],"sourcesContent":["/**\n * Utility module to work with sets.\n *\n * @module set\n */\n\nexport const create = () => new Set()\n\n/**\n * @template T\n * @param {Set} set\n * @return {Array}\n */\nexport const toArray = set => Array.from(set)\n\n/**\n * @template T\n * @param {Set} set\n * @return {T}\n */\nexport const first = set =>\n set.values().next().value || undefined\n\n/**\n * @template T\n * @param {Iterable} entries\n * @return {Set}\n */\nexport const from = entries => new Set(entries)\n","/**\n * Utility module to work with Arrays.\n *\n * @module array\n */\n\nimport * as set from './set.js'\n\n/**\n * Return the last element of an array. The element must exist\n *\n * @template L\n * @param {ArrayLike} arr\n * @return {L}\n */\nexport const last = arr => arr[arr.length - 1]\n\n/**\n * @template C\n * @return {Array}\n */\nexport const create = () => /** @type {Array} */ ([])\n\n/**\n * @template D\n * @param {Array} a\n * @return {Array}\n */\nexport const copy = a => /** @type {Array} */ (a.slice())\n\n/**\n * Append elements from src to dest\n *\n * @template M\n * @param {Array} dest\n * @param {Array} src\n */\nexport const appendTo = (dest, src) => {\n for (let i = 0; i < src.length; i++) {\n dest.push(src[i])\n }\n}\n\n/**\n * Transforms something array-like to an actual Array.\n *\n * @function\n * @template T\n * @param {ArrayLike|Iterable} arraylike\n * @return {T}\n */\nexport const from = Array.from\n\n/**\n * True iff condition holds on every element in the Array.\n *\n * @function\n * @template ITEM\n * @template {ArrayLike} ARR\n *\n * @param {ARR} arr\n * @param {function(ITEM, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const every = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (!f(arr[i], i, arr)) {\n return false\n }\n }\n return true\n}\n\n/**\n * True iff condition holds on some element in the Array.\n *\n * @function\n * @template S\n * @template {ArrayLike} ARR\n * @param {ARR} arr\n * @param {function(S, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const some = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (f(arr[i], i, arr)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @template ELEM\n *\n * @param {ArrayLike} a\n * @param {ArrayLike} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a.length === b.length && every(a, (item, index) => item === b[index])\n\n/**\n * @template ELEM\n * @param {Array>} arr\n * @return {Array}\n */\nexport const flatten = arr => fold(arr, /** @type {Array} */ ([]), (acc, val) => acc.concat(val))\n\n/**\n * @template T\n * @param {number} len\n * @param {function(number, Array):T} f\n * @return {Array}\n */\nexport const unfold = (len, f) => {\n const array = new Array(len)\n for (let i = 0; i < len; i++) {\n array[i] = f(i, array)\n }\n return array\n}\n\n/**\n * @template T\n * @template RESULT\n * @param {Array} arr\n * @param {RESULT} seed\n * @param {function(RESULT, T, number):RESULT} folder\n */\nexport const fold = (arr, seed, folder) => arr.reduce(folder, seed)\n\nexport const isArray = Array.isArray\n\n/**\n * @template T\n * @param {Array} arr\n * @return {Array}\n */\nexport const unique = arr => from(set.from(arr))\n\n/**\n * @template T\n * @template M\n * @param {ArrayLike} arr\n * @param {function(T):M} mapper\n * @return {Array}\n */\nexport const uniqueBy = (arr, mapper) => {\n /**\n * @type {Set}\n */\n const happened = set.create()\n /**\n * @type {Array}\n */\n const result = []\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i]\n const mapped = mapper(el)\n if (!happened.has(mapped)) {\n happened.add(mapped)\n result.push(el)\n }\n }\n return result\n}\n","import * as array from './array.js'\n\n/**\n * Utility module to work with strings.\n *\n * @module string\n */\n\nexport const fromCharCode = String.fromCharCode\nexport const fromCodePoint = String.fromCodePoint\n\n/**\n * The largest utf16 character.\n * Corresponds to Uint8Array([255, 255]) or charcodeof(2x2^8)\n */\nexport const MAX_UTF16_CHARACTER = fromCharCode(65535)\n\n/**\n * @param {string} s\n * @return {string}\n */\nconst toLowerCase = s => s.toLowerCase()\n\nconst trimLeftRegex = /^\\s*/g\n\n/**\n * @param {string} s\n * @return {string}\n */\nexport const trimLeft = s => s.replace(trimLeftRegex, '')\n\nconst fromCamelCaseRegex = /([A-Z])/g\n\n/**\n * @param {string} s\n * @param {string} separator\n * @return {string}\n */\nexport const fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, match => `${separator}${toLowerCase(match)}`))\n\n/**\n * Compute the utf8ByteLength\n * @param {string} str\n * @return {number}\n */\nexport const utf8ByteLength = str => unescape(encodeURIComponent(str)).length\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Polyfill = str => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n const buf = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n buf[i] = /** @type {number} */ (encodedString.codePointAt(i))\n }\n return buf\n}\n\n/* c8 ignore next */\nexport const utf8TextEncoder = /** @type {TextEncoder} */ (typeof TextEncoder !== 'undefined' ? new TextEncoder() : null)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Native = str => utf8TextEncoder.encode(str)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nexport const encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Polyfill = buf => {\n let remainingLen = buf.length\n let encodedString = ''\n let bufPos = 0\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n const bytes = buf.subarray(bufPos, bufPos + nextLen)\n bufPos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n return decodeURIComponent(escape(encodedString))\n}\n\n/* c8 ignore next */\nexport let utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })\n\n/* c8 ignore start */\nif (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {\n // Safari doesn't handle BOM correctly.\n // This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call\n // Another issue is that from then on no BOM chars are recognized anymore\n /* c8 ignore next */\n utf8TextDecoder = null\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Native = buf => /** @type {TextDecoder} */ (utf8TextDecoder).decode(buf)\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\n/* c8 ignore next */\nexport const decodeUtf8 = utf8TextDecoder ? _decodeUtf8Native : _decodeUtf8Polyfill\n\n/**\n * @param {string} str The initial string\n * @param {number} index Starting position\n * @param {number} remove Number of characters to remove\n * @param {string} insert New content to insert\n */\nexport const splice = (str, index, remove, insert = '') => str.slice(0, index) + insert + str.slice(index + remove)\n\n/**\n * @param {string} source\n * @param {number} n\n */\nexport const repeat = (source, n) => array.unfold(n, () => source).join('')\n","/**\n * Utility module to work with key-value stores.\n *\n * @module map\n */\n\n/**\n * Creates a new Map instance.\n *\n * @function\n * @return {Map}\n *\n * @function\n */\nexport const create = () => new Map()\n\n/**\n * Copy a Map object into a fresh Map object.\n *\n * @function\n * @template X,Y\n * @param {Map} m\n * @return {Map}\n */\nexport const copy = m => {\n const r = create()\n m.forEach((v, k) => { r.set(k, v) })\n return r\n}\n\n/**\n * Get map property. Create T if property is undefined and set T on map.\n *\n * ```js\n * const listeners = map.setIfUndefined(events, 'eventName', set.create)\n * listeners.add(listener)\n * ```\n *\n * @function\n * @template V,K\n * @template {Map} MAP\n * @param {MAP} map\n * @param {K} key\n * @param {function():V} createT\n * @return {V}\n */\nexport const setIfUndefined = (map, key, createT) => {\n let set = map.get(key)\n if (set === undefined) {\n map.set(key, set = createT())\n }\n return set\n}\n\n/**\n * Creates an Array and populates it with the content of all key-value pairs using the `f(value, key)` function.\n *\n * @function\n * @template K\n * @template V\n * @template R\n * @param {Map} m\n * @param {function(V,K):R} f\n * @return {Array}\n */\nexport const map = (m, f) => {\n const res = []\n for (const [key, value] of m) {\n res.push(f(value, key))\n }\n return res\n}\n\n/**\n * Tests whether any key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @todo should rename to some - similarly to Array.some\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const any = (m, f) => {\n for (const [key, value] of m) {\n if (f(value, key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * Tests whether all key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const all = (m, f) => {\n for (const [key, value] of m) {\n if (!f(value, key)) {\n return false\n }\n }\n return true\n}\n","/**\n * Often used conditions.\n *\n * @module conditions\n */\n\n/**\n * @template T\n * @param {T|null|undefined} v\n * @return {T|null}\n */\n/* c8 ignore next */\nexport const undefinedToNull = v => v === undefined ? null : v\n","/* eslint-env browser */\n\n/**\n * Isomorphic variable storage.\n *\n * Uses LocalStorage in the browser and falls back to in-memory storage.\n *\n * @module storage\n */\n\n/* c8 ignore start */\nclass VarStoragePolyfill {\n constructor () {\n this.map = new Map()\n }\n\n /**\n * @param {string} key\n * @param {any} newValue\n */\n setItem (key, newValue) {\n this.map.set(key, newValue)\n }\n\n /**\n * @param {string} key\n */\n getItem (key) {\n return this.map.get(key)\n }\n}\n/* c8 ignore stop */\n\n/**\n * @type {any}\n */\nlet _localStorage = new VarStoragePolyfill()\nlet usePolyfill = true\n\n/* c8 ignore start */\ntry {\n // if the same-origin rule is violated, accessing localStorage might thrown an error\n if (typeof localStorage !== 'undefined') {\n _localStorage = localStorage\n usePolyfill = false\n }\n} catch (e) { }\n/* c8 ignore stop */\n\n/**\n * This is basically localStorage in browser, or a polyfill in nodejs\n */\n/* c8 ignore next */\nexport const varStorage = _localStorage\n\n/**\n * A polyfill for `addEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const onChange = eventHandler => usePolyfill || addEventListener('storage', /** @type {any} */ (eventHandler))\n\n/**\n * A polyfill for `removeEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler))\n","/**\n * Utility functions for working with EcmaScript objects.\n *\n * @module object\n */\n\n/**\n * @return {Object} obj\n */\nexport const create = () => Object.create(null)\n\n/**\n * Object.assign\n */\nexport const assign = Object.assign\n\n/**\n * @param {Object} obj\n */\nexport const keys = Object.keys\n\n/**\n * @template V\n * @param {{[k:string]:V}} obj\n * @param {function(V,string):any} f\n */\nexport const forEach = (obj, f) => {\n for (const key in obj) {\n f(obj[key], key)\n }\n}\n\n/**\n * @todo implement mapToArray & map\n *\n * @template R\n * @param {Object} obj\n * @param {function(any,string):R} f\n * @return {Array}\n */\nexport const map = (obj, f) => {\n const results = []\n for (const key in obj) {\n results.push(f(obj[key], key))\n }\n return results\n}\n\n/**\n * @param {Object} obj\n * @return {number}\n */\nexport const length = obj => keys(obj).length\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const some = (obj, f) => {\n for (const key in obj) {\n if (f(obj[key], key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @param {Object|undefined} obj\n */\nexport const isEmpty = obj => {\n for (const _k in obj) {\n return false\n }\n return true\n}\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const every = (obj, f) => {\n for (const key in obj) {\n if (!f(obj[key], key)) {\n return false\n }\n }\n return true\n}\n\n/**\n * Calls `Object.prototype.hasOwnProperty`.\n *\n * @param {any} obj\n * @param {string|symbol} key\n * @return {boolean}\n */\nexport const hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key)\n\n/**\n * @param {Object} a\n * @param {Object} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a === b || (length(a) === length(b) && every(a, (val, key) => (val !== undefined || hasProperty(b, key)) && b[key] === val))\n","/**\n * Common functions and function call helpers.\n *\n * @module function\n */\n\nimport * as array from './array.js'\nimport * as object from './object.js'\n\n/**\n * Calls all functions in `fs` with args. Only throws after all functions were called.\n *\n * @param {Array} fs\n * @param {Array} args\n */\nexport const callAll = (fs, args, i = 0) => {\n try {\n for (; i < fs.length; i++) {\n fs[i](...args)\n }\n } finally {\n if (i < fs.length) {\n callAll(fs, args, i + 1)\n }\n }\n}\n\nexport const nop = () => {}\n\n/**\n * @template T\n * @param {function():T} f\n * @return {T}\n */\nexport const apply = f => f()\n\n/**\n * @template A\n *\n * @param {A} a\n * @return {A}\n */\nexport const id = a => a\n\n/**\n * @template T\n *\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n */\nexport const equalityStrict = (a, b) => a === b\n\n/**\n * @template T\n *\n * @param {Array|object} a\n * @param {Array|object} b\n * @return {boolean}\n */\nexport const equalityFlat = (a, b) => a === b || (a != null && b != null && a.constructor === b.constructor && ((array.isArray(a) && array.equalFlat(a, /** @type {Array} */ (b))) || (typeof a === 'object' && object.equalFlat(a, b))))\n\n/* c8 ignore start */\n\n/**\n * @param {any} a\n * @param {any} b\n * @return {boolean}\n */\nexport const equalityDeep = (a, b) => {\n if (a == null || b == null) {\n return equalityStrict(a, b)\n }\n if (a.constructor !== b.constructor) {\n return false\n }\n if (a === b) {\n return true\n }\n switch (a.constructor) {\n case ArrayBuffer:\n a = new Uint8Array(a)\n b = new Uint8Array(b)\n // eslint-disable-next-line no-fallthrough\n case Uint8Array: {\n if (a.byteLength !== b.byteLength) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n break\n }\n case Set: {\n if (a.size !== b.size) {\n return false\n }\n for (const value of a) {\n if (!b.has(value)) {\n return false\n }\n }\n break\n }\n case Map: {\n if (a.size !== b.size) {\n return false\n }\n for (const key of a.keys()) {\n if (!b.has(key) || !equalityDeep(a.get(key), b.get(key))) {\n return false\n }\n }\n break\n }\n case Object:\n if (object.length(a) !== object.length(b)) {\n return false\n }\n for (const key in a) {\n if (!object.hasProperty(a, key) || !equalityDeep(a[key], b[key])) {\n return false\n }\n }\n break\n case Array:\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!equalityDeep(a[i], b[i])) {\n return false\n }\n }\n break\n default:\n return false\n }\n return true\n}\n\n/**\n * @template V\n * @template {V} OPTS\n *\n * @param {V} value\n * @param {Array} options\n */\n// @ts-ignore\nexport const isOneOf = (value, options) => options.includes(value)\n/* c8 ignore stop */\n\nexport const isArray = array.isArray\n\n/**\n * @param {any} s\n * @return {s is String}\n */\nexport const isString = (s) => s && s.constructor === String\n\n/**\n * @param {any} n\n * @return {n is Number}\n */\nexport const isNumber = n => n != null && n.constructor === Number\n\n/**\n * @template {abstract new (...args: any) => any} TYPE\n * @param {any} n\n * @param {TYPE} T\n * @return {n is InstanceType}\n */\nexport const is = (n, T) => n && n.constructor === T\n\n/**\n * @template {abstract new (...args: any) => any} TYPE\n * @param {TYPE} T\n */\nexport const isTemplate = (T) =>\n /**\n * @param {any} n\n * @return {n is InstanceType}\n **/\n n => n && n.constructor === T\n","/**\n * Isomorphic module to work access the environment (query params, env variables).\n *\n * @module map\n */\n\nimport * as map from './map.js'\nimport * as string from './string.js'\nimport * as conditions from './conditions.js'\nimport * as storage from './storage.js'\nimport * as f from './function.js'\n\n/* c8 ignore next */\n// @ts-ignore\nexport const isNode = typeof process !== 'undefined' && process.release &&\n /node|io\\.js/.test(process.release.name)\n/* c8 ignore next */\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && !isNode\n/* c8 ignore next 3 */\nexport const isMac = typeof navigator !== 'undefined'\n ? /Mac/.test(navigator.platform)\n : false\n\n/**\n * @type {Map}\n */\nlet params\nconst args = []\n\n/* c8 ignore start */\nconst computeParams = () => {\n if (params === undefined) {\n if (isNode) {\n params = map.create()\n const pargs = process.argv\n let currParamName = null\n for (let i = 0; i < pargs.length; i++) {\n const parg = pargs[i]\n if (parg[0] === '-') {\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n currParamName = parg\n } else {\n if (currParamName !== null) {\n params.set(currParamName, parg)\n currParamName = null\n } else {\n args.push(parg)\n }\n }\n }\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n // in ReactNative for example this would not be true (unless connected to the Remote Debugger)\n } else if (typeof location === 'object') {\n params = map.create(); // eslint-disable-next-line no-undef\n (location.search || '?').slice(1).split('&').forEach((kv) => {\n if (kv.length !== 0) {\n const [key, value] = kv.split('=')\n params.set(`--${string.fromCamelCase(key, '-')}`, value)\n params.set(`-${string.fromCamelCase(key, '-')}`, value)\n }\n })\n } else {\n params = map.create()\n }\n }\n return params\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next */\nexport const hasParam = (name) => computeParams().has(name)\n\n/**\n * @param {string} name\n * @param {string} defaultVal\n * @return {string}\n */\n/* c8 ignore next 2 */\nexport const getParam = (name, defaultVal) =>\n computeParams().get(name) || defaultVal\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 4 */\nexport const getVariable = (name) =>\n isNode\n ? conditions.undefinedToNull(process.env[name.toUpperCase()])\n : conditions.undefinedToNull(storage.varStorage.getItem(name))\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 2 */\nexport const getConf = (name) =>\n computeParams().get('--' + name) || getVariable(name)\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next 2 */\nexport const hasConf = (name) =>\n hasParam('--' + name) || getVariable(name) !== null\n\n/* c8 ignore next */\nexport const production = hasConf('production')\n\n/* c8 ignore next 2 */\nconst forceColor = isNode &&\n f.isOneOf(process.env.FORCE_COLOR, ['true', '1', '2'])\n\n/* c8 ignore start */\nexport const supportsColor = !hasParam('no-colors') &&\n (!isNode || process.stdout.isTTY || forceColor) && (\n !isNode || hasParam('color') || forceColor ||\n getVariable('COLORTERM') !== null ||\n (getVariable('TERM') || '').includes('color')\n)\n/* c8 ignore stop */\n","/**\n * Common Math expressions.\n *\n * @module math\n */\n\nexport const floor = Math.floor\nexport const ceil = Math.ceil\nexport const abs = Math.abs\nexport const imul = Math.imul\nexport const round = Math.round\nexport const log10 = Math.log10\nexport const log2 = Math.log2\nexport const log = Math.log\nexport const sqrt = Math.sqrt\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The sum of a and b\n */\nexport const add = (a, b) => a + b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The smaller element of a and b\n */\nexport const min = (a, b) => a < b ? a : b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The bigger element of a and b\n */\nexport const max = (a, b) => a > b ? a : b\n\nexport const isNaN = Number.isNaN\n\nexport const pow = Math.pow\n/**\n * Base 10 exponential function. Returns the value of 10 raised to the power of pow.\n *\n * @param {number} exp\n * @return {number}\n */\nexport const exp10 = exp => Math.pow(10, exp)\n\nexport const sign = Math.sign\n\n/**\n * @param {number} n\n * @return {boolean} Wether n is negative. This function also differentiates between -0 and +0\n */\nexport const isNegativeZero = n => n !== 0 ? n < 0 : 1 / n < 0\n","/* eslint-env browser */\n\n/**\n * Binary data constants.\n *\n * @module binary\n */\n\n/**\n * n-th bit activated.\n *\n * @type {number}\n */\nexport const BIT1 = 1\nexport const BIT2 = 2\nexport const BIT3 = 4\nexport const BIT4 = 8\nexport const BIT5 = 16\nexport const BIT6 = 32\nexport const BIT7 = 64\nexport const BIT8 = 128\nexport const BIT9 = 256\nexport const BIT10 = 512\nexport const BIT11 = 1024\nexport const BIT12 = 2048\nexport const BIT13 = 4096\nexport const BIT14 = 8192\nexport const BIT15 = 16384\nexport const BIT16 = 32768\nexport const BIT17 = 65536\nexport const BIT18 = 1 << 17\nexport const BIT19 = 1 << 18\nexport const BIT20 = 1 << 19\nexport const BIT21 = 1 << 20\nexport const BIT22 = 1 << 21\nexport const BIT23 = 1 << 22\nexport const BIT24 = 1 << 23\nexport const BIT25 = 1 << 24\nexport const BIT26 = 1 << 25\nexport const BIT27 = 1 << 26\nexport const BIT28 = 1 << 27\nexport const BIT29 = 1 << 28\nexport const BIT30 = 1 << 29\nexport const BIT31 = 1 << 30\nexport const BIT32 = 1 << 31\n\n/**\n * First n bits activated.\n *\n * @type {number}\n */\nexport const BITS0 = 0\nexport const BITS1 = 1\nexport const BITS2 = 3\nexport const BITS3 = 7\nexport const BITS4 = 15\nexport const BITS5 = 31\nexport const BITS6 = 63\nexport const BITS7 = 127\nexport const BITS8 = 255\nexport const BITS9 = 511\nexport const BITS10 = 1023\nexport const BITS11 = 2047\nexport const BITS12 = 4095\nexport const BITS13 = 8191\nexport const BITS14 = 16383\nexport const BITS15 = 32767\nexport const BITS16 = 65535\nexport const BITS17 = BIT18 - 1\nexport const BITS18 = BIT19 - 1\nexport const BITS19 = BIT20 - 1\nexport const BITS20 = BIT21 - 1\nexport const BITS21 = BIT22 - 1\nexport const BITS22 = BIT23 - 1\nexport const BITS23 = BIT24 - 1\nexport const BITS24 = BIT25 - 1\nexport const BITS25 = BIT26 - 1\nexport const BITS26 = BIT27 - 1\nexport const BITS27 = BIT28 - 1\nexport const BITS28 = BIT29 - 1\nexport const BITS29 = BIT30 - 1\nexport const BITS30 = BIT31 - 1\n/**\n * @type {number}\n */\nexport const BITS31 = 0x7FFFFFFF\n/**\n * @type {number}\n */\nexport const BITS32 = 0xFFFFFFFF\n","/**\n * Utility helpers for working with numbers.\n *\n * @module number\n */\n\nimport * as math from './math.js'\nimport * as binary from './binary.js'\n\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER\n\nexport const LOWEST_INT32 = 1 << 31\nexport const HIGHEST_INT32 = binary.BITS31\nexport const HIGHEST_UINT32 = binary.BITS32\n\n/* c8 ignore next */\nexport const isInteger = Number.isInteger || (num => typeof num === 'number' && isFinite(num) && math.floor(num) === num)\nexport const isNaN = Number.isNaN\nexport const parseInt = Number.parseInt\n","/**\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module encoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as binary from './binary.js'\nimport * as string from './string.js'\nimport * as array from './array.js'\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nexport class Encoder {\n constructor () {\n this.cpos = 0\n this.cbuf = new Uint8Array(100)\n /**\n * @type {Array}\n */\n this.bufs = []\n }\n}\n\n/**\n * @function\n * @return {Encoder}\n */\nexport const createEncoder = () => new Encoder()\n\n/**\n * @param {function(Encoder):void} f\n */\nexport const encode = (f) => {\n const encoder = createEncoder()\n f(encoder)\n return toUint8Array(encoder)\n}\n\n/**\n * The current length of the encoded data.\n *\n * @function\n * @param {Encoder} encoder\n * @return {number}\n */\nexport const length = encoder => {\n let len = encoder.cpos\n for (let i = 0; i < encoder.bufs.length; i++) {\n len += encoder.bufs[i].length\n }\n return len\n}\n\n/**\n * Check whether encoder is empty.\n *\n * @function\n * @param {Encoder} encoder\n * @return {boolean}\n */\nexport const hasContent = encoder => encoder.cpos > 0 || encoder.bufs.length > 0\n\n/**\n * Transform to Uint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @return {Uint8Array} The created ArrayBuffer.\n */\nexport const toUint8Array = encoder => {\n const uint8arr = new Uint8Array(length(encoder))\n let curPos = 0\n for (let i = 0; i < encoder.bufs.length; i++) {\n const d = encoder.bufs[i]\n uint8arr.set(d, curPos)\n curPos += d.length\n }\n uint8arr.set(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos), curPos)\n return uint8arr\n}\n\n/**\n * Verify that it is possible to write `len` bytes wtihout checking. If\n * necessary, a new Buffer with the required length is attached.\n *\n * @param {Encoder} encoder\n * @param {number} len\n */\nexport const verifyLen = (encoder, len) => {\n const bufferLen = encoder.cbuf.length\n if (bufferLen - encoder.cpos < len) {\n encoder.bufs.push(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos))\n encoder.cbuf = new Uint8Array(math.max(bufferLen, len) * 2)\n encoder.cpos = 0\n }\n}\n\n/**\n * Write one byte to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The byte that is to be encoded.\n */\nexport const write = (encoder, num) => {\n const bufferLen = encoder.cbuf.length\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf)\n encoder.cbuf = new Uint8Array(bufferLen * 2)\n encoder.cpos = 0\n }\n encoder.cbuf[encoder.cpos++] = num\n}\n\n/**\n * Write one byte at a specific position.\n * Position must already be written (i.e. encoder.length > pos)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos Position to which to write data\n * @param {number} num Unsigned 8-bit integer\n */\nexport const set = (encoder, pos, num) => {\n let buffer = null\n // iterate all buffers and adjust position\n for (let i = 0; i < encoder.bufs.length && buffer === null; i++) {\n const b = encoder.bufs[i]\n if (pos < b.length) {\n buffer = b // found buffer\n } else {\n pos -= b.length\n }\n }\n if (buffer === null) {\n // use current buffer\n buffer = encoder.cbuf\n }\n buffer[pos] = num\n}\n\n/**\n * Write one byte as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint8 = write\n\n/**\n * Write one byte as an unsigned Integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint8 = set\n\n/**\n * Write two bytes as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint16 = (encoder, num) => {\n write(encoder, num & binary.BITS8)\n write(encoder, (num >>> 8) & binary.BITS8)\n}\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint16 = (encoder, pos, num) => {\n set(encoder, pos, num & binary.BITS8)\n set(encoder, pos + 1, (num >>> 8) & binary.BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32 = (encoder, num) => {\n for (let i = 0; i < 4; i++) {\n write(encoder, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write two bytes as an unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32BigEndian = (encoder, num) => {\n for (let i = 3; i >= 0; i--) {\n write(encoder, (num >>> (8 * i)) & binary.BITS8)\n }\n}\n\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint32 = (encoder, pos, num) => {\n for (let i = 0; i < 4; i++) {\n set(encoder, pos + i, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarUint = (encoder, num) => {\n while (num > binary.BITS7) {\n write(encoder, binary.BIT8 | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n write(encoder, binary.BITS7 & num)\n}\n\n/**\n * Write a variable length integer.\n *\n * We use the 7th bit instead for signaling that this is a negative number.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarInt = (encoder, num) => {\n const isNegative = math.isNegativeZero(num)\n if (isNegative) {\n num = -num\n }\n // |- whether to continue reading |- whether is negative |- number\n write(encoder, (num > binary.BITS6 ? binary.BIT8 : 0) | (isNegative ? binary.BIT7 : 0) | (binary.BITS6 & num))\n num = math.floor(num / 64) // shift >>> 6\n // We don't need to consider the case of num === 0 so we can use a different\n // pattern here than above.\n while (num > 0) {\n write(encoder, (num > binary.BITS7 ? binary.BIT8 : 0) | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n}\n\n/**\n * A cache to store strings temporarily\n */\nconst _strBuffer = new Uint8Array(30000)\nconst _maxStrBSize = _strBuffer.length / 3\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringNative = (encoder, str) => {\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n /* c8 ignore next */\n const written = string.utf8TextEncoder.encodeInto(str, _strBuffer).written || 0\n writeVarUint(encoder, written)\n for (let i = 0; i < written; i++) {\n write(encoder, _strBuffer[i])\n }\n } else {\n writeVarUint8Array(encoder, string.encodeUtf8(str))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringPolyfill = (encoder, str) => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n write(encoder, /** @type {number} */ (encodedString.codePointAt(i)))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\n/* c8 ignore next */\nexport const writeVarString = (string.utf8TextEncoder && /** @type {any} */ (string.utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill\n\n/**\n * Write a string terminated by a special byte sequence. This is not very performant and is\n * generally discouraged. However, the resulting byte arrays are lexiographically ordered which\n * makes this a nice feature for databases.\n *\n * The string will be encoded using utf8 and then terminated and escaped using writeTerminatingUint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const writeTerminatedString = (encoder, str) =>\n writeTerminatedUint8Array(encoder, string.encodeUtf8(str))\n\n/**\n * Write a terminating Uint8Array. Note that this is not performant and is generally\n * discouraged. There are few situations when this is needed.\n *\n * We use 0x0 as a terminating character. 0x1 serves as an escape character for 0x0 and 0x1.\n *\n * Example: [0,1,2] is encoded to [1,0,1,1,2,0]. 0x0, and 0x1 needed to be escaped using 0x1. Then\n * the result is terminated using the 0x0 character.\n *\n * This is basically how many systems implement null terminated strings. However, we use an escape\n * character 0x1 to avoid issues and potenial attacks on our database (if this is used as a key\n * encoder for NoSql databases).\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} buf The string that is to be encoded.\n */\nexport const writeTerminatedUint8Array = (encoder, buf) => {\n for (let i = 0; i < buf.length; i++) {\n const b = buf[i]\n if (b === 0 || b === 1) {\n write(encoder, 1)\n }\n write(encoder, buf[i])\n }\n write(encoder, 0)\n}\n\n/**\n * Write the content of another Encoder.\n *\n * @TODO: can be improved!\n * - Note: Should consider that when appending a lot of small Encoders, we should rather clone than referencing the old structure.\n * Encoders start with a rather big initial buffer.\n *\n * @function\n * @param {Encoder} encoder The enUint8Arr\n * @param {Encoder} append The BinaryEncoder to be written.\n */\nexport const writeBinaryEncoder = (encoder, append) => writeUint8Array(encoder, toUint8Array(append))\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeUint8Array = (encoder, uint8Array) => {\n const bufferLen = encoder.cbuf.length\n const cpos = encoder.cpos\n const leftCopyLen = math.min(bufferLen - cpos, uint8Array.length)\n const rightCopyLen = uint8Array.length - leftCopyLen\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos)\n encoder.cpos += leftCopyLen\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf)\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(math.max(bufferLen * 2, rightCopyLen))\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen))\n encoder.cpos = rightCopyLen\n }\n}\n\n/**\n * Append an Uint8Array to Encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeVarUint8Array = (encoder, uint8Array) => {\n writeVarUint(encoder, uint8Array.byteLength)\n writeUint8Array(encoder, uint8Array)\n}\n\n/**\n * Create an DataView of the next `len` bytes. Use it to write data after\n * calling this function.\n *\n * ```js\n * // write float32 using DataView\n * const dv = writeOnDataView(encoder, 4)\n * dv.setFloat32(0, 1.1)\n * // read float32 using DataView\n * const dv = readFromDataView(encoder, 4)\n * dv.getFloat32(0) // => 1.100000023841858 (leaving it to the reader to find out why this is the correct result)\n * ```\n *\n * @param {Encoder} encoder\n * @param {number} len\n * @return {DataView}\n */\nexport const writeOnDataView = (encoder, len) => {\n verifyLen(encoder, len)\n const dview = new DataView(encoder.cbuf.buffer, encoder.cpos, len)\n encoder.cpos += len\n return dview\n}\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat32 = (encoder, num) => writeOnDataView(encoder, 4).setFloat32(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat64 = (encoder, num) => writeOnDataView(encoder, 8).setFloat64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigInt64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigInt64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigUint64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigUint64(0, num, false)\n\nconst floatTestBed = new DataView(new ArrayBuffer(4))\n/**\n * Check if a number can be encoded as a 32 bit float.\n *\n * @param {number} num\n * @return {boolean}\n */\nconst isFloat32 = num => {\n floatTestBed.setFloat32(0, num)\n return floatTestBed.getFloat32(0) === num\n}\n\n/**\n * Encode data with efficient binary format.\n *\n * Differences to JSON:\n * • Transforms data to a binary format (not to a string)\n * • Encodes undefined, NaN, and ArrayBuffer (these can't be represented in JSON)\n * • Numbers are efficiently encoded either as a variable length integer, as a\n * 32 bit float, as a 64 bit float, or as a 64 bit bigint.\n *\n * Encoding table:\n *\n * | Data Type | Prefix | Encoding Method | Comment |\n * | ------------------- | -------- | ------------------ | ------- |\n * | undefined | 127 | | Functions, symbol, and everything that cannot be identified is encoded as undefined |\n * | null | 126 | | |\n * | integer | 125 | writeVarInt | Only encodes 32 bit signed integers |\n * | float32 | 124 | writeFloat32 | |\n * | float64 | 123 | writeFloat64 | |\n * | bigint | 122 | writeBigInt64 | |\n * | boolean (false) | 121 | | True and false are different data types so we save the following byte |\n * | boolean (true) | 120 | | - 0b01111000 so the last bit determines whether true or false |\n * | string | 119 | writeVarString | |\n * | object | 118 | custom | Writes {length} then {length} key-value pairs |\n * | array | 117 | custom | Writes {length} then {length} json values |\n * | Uint8Array | 116 | writeVarUint8Array | We use Uint8Array for any kind of binary data |\n *\n * Reasons for the decreasing prefix:\n * We need the first bit for extendability (later we may want to encode the\n * prefix with writeVarUint). The remaining 7 bits are divided as follows:\n * [0-30] the beginning of the data range is used for custom purposes\n * (defined by the function that uses this library)\n * [31-127] the end of the data range is used for data encoding by\n * lib0/encoding.js\n *\n * @param {Encoder} encoder\n * @param {undefined|null|number|bigint|boolean|string|Object|Array|Uint8Array} data\n */\nexport const writeAny = (encoder, data) => {\n switch (typeof data) {\n case 'string':\n // TYPE 119: STRING\n write(encoder, 119)\n writeVarString(encoder, data)\n break\n case 'number':\n if (number.isInteger(data) && math.abs(data) <= binary.BITS31) {\n // TYPE 125: INTEGER\n write(encoder, 125)\n writeVarInt(encoder, data)\n } else if (isFloat32(data)) {\n // TYPE 124: FLOAT32\n write(encoder, 124)\n writeFloat32(encoder, data)\n } else {\n // TYPE 123: FLOAT64\n write(encoder, 123)\n writeFloat64(encoder, data)\n }\n break\n case 'bigint':\n // TYPE 122: BigInt\n write(encoder, 122)\n writeBigInt64(encoder, data)\n break\n case 'object':\n if (data === null) {\n // TYPE 126: null\n write(encoder, 126)\n } else if (array.isArray(data)) {\n // TYPE 117: Array\n write(encoder, 117)\n writeVarUint(encoder, data.length)\n for (let i = 0; i < data.length; i++) {\n writeAny(encoder, data[i])\n }\n } else if (data instanceof Uint8Array) {\n // TYPE 116: ArrayBuffer\n write(encoder, 116)\n writeVarUint8Array(encoder, data)\n } else {\n // TYPE 118: Object\n write(encoder, 118)\n const keys = Object.keys(data)\n writeVarUint(encoder, keys.length)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n writeVarString(encoder, key)\n writeAny(encoder, data[key])\n }\n }\n break\n case 'boolean':\n // TYPE 120/121: boolean (true/false)\n write(encoder, data ? 120 : 121)\n break\n default:\n // TYPE 127: undefined\n write(encoder, 127)\n }\n}\n\n/**\n * Now come a few stateful encoder that have their own classes.\n */\n\n/**\n * Basic Run Length Encoder - a basic compression implementation.\n *\n * Encodes [1,1,1,7] to [1,3,7,1] (3 times 1, 1 time 7). This encoder might do more harm than good if there are a lot of values that are not repeated.\n *\n * It was originally used for image compression. Cool .. article http://csbruce.com/cbm/transactor/pdfs/trans_v7_i06.pdf\n *\n * @note T must not be null!\n *\n * @template T\n */\nexport class RleEncoder extends Encoder {\n /**\n * @param {function(Encoder, T):void} writer\n */\n constructor (writer) {\n super()\n /**\n * The writer\n */\n this.w = writer\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n /**\n * @param {T} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n this.w(this, v)\n this.s = v\n }\n }\n}\n\n/**\n * Basic diff decoder using variable length encoding.\n *\n * Encodes the values [3, 1100, 1101, 1050, 0] to [3, 1097, 1, -51, -1050] using writeVarInt.\n */\nexport class IntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n writeVarInt(this, v - this.s)\n this.s = v\n }\n}\n\n/**\n * A combination of IntDiffEncoder and RleEncoder.\n *\n * Basically first writes the IntDiffEncoder and then counts duplicate diffs using RleEncoding.\n *\n * Encodes the values [1,1,1,2,3,4,5,6] as [1,1,0,2,1,5] (RLE([1,0,0,1,1,1,1,1]) ⇒ RleIntDiff[1,1,0,2,1,5])\n */\nexport class RleIntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v && this.count > 0) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n writeVarInt(this, v - this.s)\n this.s = v\n }\n }\n}\n\n/**\n * @param {UintOptRleEncoder} encoder\n */\nconst flushUintOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set sign to positive\n // case 2: write several values. set sign to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encoder.count === 1 ? encoder.s : -encoder.s)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * Optimized Rle encoder that does not suffer from the mentioned problem of the basic Rle encoder.\n *\n * Internally uses VarInt encoder to write unsigned integers. If the input occurs multiple times, we write\n * write it as a negative number. The UintOptRleDecoder then understands that it needs to read a count.\n *\n * Encodes [1,2,3,3,3] as [1,2,-3,3] (once 1, once 2, three times 3)\n */\nexport class UintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Increasing Uint Optimized RLE Encoder\n *\n * The RLE encoder counts the number of same occurences of the same value.\n * The IncUintOptRle encoder counts if the value increases.\n * I.e. 7, 8, 9, 10 will be encoded as [-7, 4]. 1, 3, 5 will be encoded\n * as [1, 3, 5].\n */\nexport class IncUintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s + this.count === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * @param {IntDiffOptRleEncoder} encoder\n */\nconst flushIntDiffOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // 31 bit making up the diff | wether to write the counter\n // const encodedDiff = encoder.diff << 1 | (encoder.count === 1 ? 0 : 1)\n const encodedDiff = encoder.diff * 2 + (encoder.count === 1 ? 0 : 1)\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set first bit to positive\n // case 2: write several values. set first bit to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encodedDiff)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * A combination of the IntDiffEncoder and the UintOptRleEncoder.\n *\n * The count approach is similar to the UintDiffOptRleEncoder, but instead of using the negative bitflag, it encodes\n * in the LSB whether a count is to be read. Therefore this Encoder only supports 31 bit integers!\n *\n * Encodes [1, 2, 3, 2] as [3, 1, 6, -1] (more specifically [(1 << 1) | 1, (3 << 0) | 0, -1])\n *\n * Internally uses variable length encoding. Contrary to normal UintVar encoding, the first byte contains:\n * * 1 bit that denotes whether the next value is a count (LSB)\n * * 1 bit that denotes whether this value is negative (MSB - 1)\n * * 1 bit that denotes whether to continue reading the variable length integer (MSB)\n *\n * Therefore, only five bits remain to encode diff ranges.\n *\n * Use this Encoder only when appropriate. In most cases, this is probably a bad idea.\n */\nexport class IntDiffOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.diff === v - this.s) {\n this.s = v\n this.count++\n } else {\n flushIntDiffOptRleEncoder(this)\n this.count = 1\n this.diff = v - this.s\n this.s = v\n }\n }\n\n toUint8Array () {\n flushIntDiffOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Optimized String Encoder.\n *\n * Encoding many small strings in a simple Encoder is not very efficient. The function call to decode a string takes some time and creates references that must be eventually deleted.\n * In practice, when decoding several million small strings, the GC will kick in more and more often to collect orphaned string objects (or maybe there is another reason?).\n *\n * This string encoder solves the above problem. All strings are concatenated and written as a single string using a single encoding call.\n *\n * The lengths are encoded using a UintOptRleEncoder.\n */\nexport class StringEncoder {\n constructor () {\n /**\n * @type {Array}\n */\n this.sarr = []\n this.s = ''\n this.lensE = new UintOptRleEncoder()\n }\n\n /**\n * @param {string} string\n */\n write (string) {\n this.s += string\n if (this.s.length > 19) {\n this.sarr.push(this.s)\n this.s = ''\n }\n this.lensE.write(string.length)\n }\n\n toUint8Array () {\n const encoder = new Encoder()\n this.sarr.push(this.s)\n this.s = ''\n writeVarString(encoder, this.sarr.join(''))\n writeUint8Array(encoder, this.lensE.toUint8Array())\n return toUint8Array(encoder)\n }\n}\n","/**\n * Utility functions to work with buffers (Uint8Array).\n *\n * @module buffer\n */\n\nimport * as string from './string.js'\nimport * as env from './environment.js'\nimport * as encoding from './encoding.js'\nimport * as decoding from './decoding.js'\n\n/**\n * @param {number} len\n */\nexport const createUint8ArrayFromLen = len => new Uint8Array(len)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n * @param {number} byteOffset\n * @param {number} length\n */\nexport const createUint8ArrayViewFromArrayBuffer = (buffer, byteOffset, length) => new Uint8Array(buffer, byteOffset, length)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n */\nexport const createUint8ArrayFromArrayBuffer = buffer => new Uint8Array(buffer)\n\n/* c8 ignore start */\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Browser = bytes => {\n let s = ''\n for (let i = 0; i < bytes.byteLength; i++) {\n s += string.fromCharCode(bytes[i])\n }\n // eslint-disable-next-line no-undef\n return btoa(s)\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Node = bytes => Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64')\n\n/* c8 ignore start */\n/**\n * @param {string} s\n * @return {Uint8Array}\n */\nconst fromBase64Browser = s => {\n // eslint-disable-next-line no-undef\n const a = atob(s)\n const bytes = createUint8ArrayFromLen(a.length)\n for (let i = 0; i < a.length; i++) {\n bytes[i] = a.charCodeAt(i)\n }\n return bytes\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} s\n */\nconst fromBase64Node = s => {\n const buf = Buffer.from(s, 'base64')\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/* c8 ignore next */\nexport const toBase64 = env.isBrowser ? toBase64Browser : toBase64Node\n\n/* c8 ignore next */\nexport const fromBase64 = env.isBrowser ? fromBase64Browser : fromBase64Node\n\n/**\n * Copy the content of an Uint8Array view to a new ArrayBuffer.\n *\n * @param {Uint8Array} uint8Array\n * @return {Uint8Array}\n */\nexport const copyUint8Array = uint8Array => {\n const newBuf = createUint8ArrayFromLen(uint8Array.byteLength)\n newBuf.set(uint8Array)\n return newBuf\n}\n\n/**\n * Encode anything as a UInt8Array. It's a pun on typescripts's `any` type.\n * See encoding.writeAny for more information.\n *\n * @param {any} data\n * @return {Uint8Array}\n */\nexport const encodeAny = data => {\n const encoder = encoding.createEncoder()\n encoding.writeAny(encoder, data)\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Decode an any-encoded value.\n *\n * @param {Uint8Array} buf\n * @return {any}\n */\nexport const decodeAny = buf => decoding.readAny(decoding.createDecoder(buf))\n","/**\n * Error helpers.\n *\n * @module error\n */\n\n/**\n * @param {string} s\n * @return {Error}\n */\n/* c8 ignore next */\nexport const create = s => new Error(s)\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const methodUnimplemented = () => {\n throw create('Method unimplemented')\n}\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const unexpectedCase = () => {\n throw create('Unexpected case')\n}\n","/**\n * Efficient schema-less binary decoding with support for variable length encoding.\n *\n * Use [lib0/decoding] with [lib0/encoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module decoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as binary from './binary.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as string from './string.js'\nimport * as error from './error.js'\nimport * as encoding from './encoding.js'\n\nconst errorUnexpectedEndOfArray = error.create('Unexpected end of array')\nconst errorIntegerOutOfRange = error.create('Integer out of Range')\n\n/**\n * A Decoder handles the decoding of an Uint8Array.\n */\nexport class Decoder {\n /**\n * @param {Uint8Array} uint8Array Binary data to decode\n */\n constructor (uint8Array) {\n /**\n * Decoding target.\n *\n * @type {Uint8Array}\n */\n this.arr = uint8Array\n /**\n * Current decoding position.\n *\n * @type {number}\n */\n this.pos = 0\n }\n}\n\n/**\n * @function\n * @param {Uint8Array} uint8Array\n * @return {Decoder}\n */\nexport const createDecoder = uint8Array => new Decoder(uint8Array)\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {boolean}\n */\nexport const hasContent = decoder => decoder.pos !== decoder.arr.length\n\n/**\n * Clone a decoder instance.\n * Optionally set a new position parameter.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} [newPos] Defaults to current position\n * @return {Decoder} A clone of `decoder`\n */\nexport const clone = (decoder, newPos = decoder.pos) => {\n const _decoder = createDecoder(decoder.arr)\n _decoder.pos = newPos\n return _decoder\n}\n\n/**\n * Create an Uint8Array view of the next `len` bytes and advance the position by `len`.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} len The length of bytes to read\n * @return {Uint8Array}\n */\nexport const readUint8Array = (decoder, len) => {\n const view = buffer.createUint8ArrayViewFromArrayBuffer(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len)\n decoder.pos += len\n return view\n}\n\n/**\n * Read variable length Uint8Array.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readVarUint8Array = decoder => readUint8Array(decoder, readVarUint(decoder))\n\n/**\n * Read the rest of the content as an ArrayBuffer\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTailAsUint8Array = decoder => readUint8Array(decoder, decoder.arr.length - decoder.pos)\n\n/**\n * Skip one byte, jump to the next position.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} The next position\n */\nexport const skip8 = decoder => decoder.pos++\n\n/**\n * Read one byte as unsigned integer.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} Unsigned 8-bit integer\n */\nexport const readUint8 = decoder => decoder.arr[decoder.pos++]\n\n/**\n * Read 2 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint16 = decoder => {\n const uint =\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n decoder.pos += 2\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32 = decoder => {\n const uint =\n (decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32BigEndian = decoder => {\n const uint =\n (decoder.arr[decoder.pos + 3] +\n (decoder.arr[decoder.pos + 2] << 8) +\n (decoder.arr[decoder.pos + 1] << 16) +\n (decoder.arr[decoder.pos] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint8 = decoder => decoder.arr[decoder.pos]\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint16 = decoder =>\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint32 = decoder => (\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)\n) >>> 0\n\n/**\n * Read unsigned integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarUint = decoder => {\n let num = 0\n let mult = 1\n const len = decoder.arr.length\n while (decoder.pos < len) {\n const r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult // shift $r << (7*#iterations) and add it to num\n mult *= 128 // next iteration, shift 7 \"more\" to the left\n if (r < binary.BIT8) {\n return num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Read signed integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n * @todo This should probably create the inverse ~num if number is negative - but this would be a breaking change.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarInt = decoder => {\n let r = decoder.arr[decoder.pos++]\n let num = r & binary.BITS6\n let mult = 64\n const sign = (r & binary.BIT7) > 0 ? -1 : 1\n if ((r & binary.BIT8) === 0) {\n // don't continue reading\n return sign * num\n }\n const len = decoder.arr.length\n while (decoder.pos < len) {\n r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult\n mult *= 128\n if (r < binary.BIT8) {\n return sign * num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarUint = decoder => {\n const pos = decoder.pos\n const s = readVarUint(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarInt = decoder => {\n const pos = decoder.pos\n const s = readVarInt(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * We don't test this function anymore as we use native decoding/encoding by default now.\n * Better not modify this anymore..\n *\n * Transforming utf8 to a string is pretty expensive. The code performs 10x better\n * when String.fromCodePoint is fed with all characters as arguments.\n * But most environments have a maximum number of arguments per functions.\n * For effiency reasons we apply a maximum of 10000 characters at once.\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String.\n */\n/* c8 ignore start */\nexport const _readVarStringPolyfill = decoder => {\n let remainingLen = readVarUint(decoder)\n if (remainingLen === 0) {\n return ''\n } else {\n let encodedString = String.fromCodePoint(readUint8(decoder)) // remember to decrease remainingLen\n if (--remainingLen < 100) { // do not create a Uint8Array for small strings\n while (remainingLen--) {\n encodedString += String.fromCodePoint(readUint8(decoder))\n }\n } else {\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n // this is dangerous, we create a fresh array view from the existing buffer\n const bytes = decoder.arr.subarray(decoder.pos, decoder.pos + nextLen)\n decoder.pos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n }\n return decodeURIComponent(escape(encodedString))\n }\n}\n/* c8 ignore stop */\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n */\nexport const _readVarStringNative = decoder =>\n /** @type any */ (string.utf8TextDecoder).decode(readVarUint8Array(decoder))\n\n/**\n * Read string of variable length\n * * varUint is used to store the length of the string\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n *\n */\n/* c8 ignore next */\nexport const readVarString = string.utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill\n\n/**\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTerminatedUint8Array = decoder => {\n const encoder = encoding.createEncoder()\n let b\n while (true) {\n b = readUint8(decoder)\n if (b === 0) {\n return encoding.toUint8Array(encoder)\n }\n if (b === 1) {\n b = readUint8(decoder)\n }\n encoding.write(encoder, b)\n }\n}\n\n/**\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const readTerminatedString = decoder => string.decodeUtf8(readTerminatedUint8Array(decoder))\n\n/**\n * Look ahead and read varString without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const peekVarString = decoder => {\n const pos = decoder.pos\n const s = readVarString(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * @param {Decoder} decoder\n * @param {number} len\n * @return {DataView}\n */\nexport const readFromDataView = (decoder, len) => {\n const dv = new DataView(decoder.arr.buffer, decoder.arr.byteOffset + decoder.pos, len)\n decoder.pos += len\n return dv\n}\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat32 = decoder => readFromDataView(decoder, 4).getFloat32(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat64 = decoder => readFromDataView(decoder, 8).getFloat64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigInt64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigInt64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigUint64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigUint64(0, false)\n\n/**\n * @type {Array}\n */\nconst readAnyLookupTable = [\n decoder => undefined, // CASE 127: undefined\n decoder => null, // CASE 126: null\n readVarInt, // CASE 125: integer\n readFloat32, // CASE 124: float32\n readFloat64, // CASE 123: float64\n readBigInt64, // CASE 122: bigint\n decoder => false, // CASE 121: boolean (false)\n decoder => true, // CASE 120: boolean (true)\n readVarString, // CASE 119: string\n decoder => { // CASE 118: object\n const len = readVarUint(decoder)\n /**\n * @type {Object}\n */\n const obj = {}\n for (let i = 0; i < len; i++) {\n const key = readVarString(decoder)\n obj[key] = readAny(decoder)\n }\n return obj\n },\n decoder => { // CASE 117: array\n const len = readVarUint(decoder)\n const arr = []\n for (let i = 0; i < len; i++) {\n arr.push(readAny(decoder))\n }\n return arr\n },\n readVarUint8Array // CASE 116: Uint8Array\n]\n\n/**\n * @param {Decoder} decoder\n */\nexport const readAny = decoder => readAnyLookupTable[127 - readUint8(decoder)](decoder)\n\n/**\n * T must not be null.\n *\n * @template T\n */\nexport class RleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {function(Decoder):T} reader\n */\n constructor (uint8Array, reader) {\n super(uint8Array)\n /**\n * The reader\n */\n this.reader = reader\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = this.reader(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {T} */ (this.s)\n }\n}\n\nexport class IntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @return {number}\n */\n read () {\n this.s += readVarInt(this)\n return this.s\n }\n}\n\nexport class RleIntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n this.s += readVarInt(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class UintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class IncUintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s++)\n }\n}\n\nexport class IntDiffOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n const diff = readVarInt(this)\n // if the first bit is set, we read more data\n const hasCount = diff & 1\n this.diff = math.floor(diff / 2) // shift >> 1\n this.count = 1\n if (hasCount) {\n this.count = readVarUint(this) + 2\n }\n }\n this.s += this.diff\n this.count--\n return this.s\n }\n}\n\nexport class StringDecoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n this.decoder = new UintOptRleDecoder(uint8Array)\n this.str = readVarString(this.decoder)\n /**\n * @type {number}\n */\n this.spos = 0\n }\n\n /**\n * @return {string}\n */\n read () {\n const end = this.spos + this.decoder.read()\n const res = this.str.slice(this.spos, end)\n this.spos = end\n return res\n }\n}\n","import {\n createDecoder,\n Decoder,\n readVarUint,\n readVarUint8Array,\n readVarString,\n} from 'lib0/decoding'\nimport {\n createEncoder,\n Encoder,\n toUint8Array,\n writeVarUint,\n writeVarString,\n length,\n} from 'lib0/encoding'\nimport { MessageType } from './types.js'\n\nexport class IncomingMessage {\n /**\n * Access to the received message.\n */\n decoder: Decoder\n\n /**\n * Access to the reply.\n */\n encoder: Encoder\n\n constructor(input: any) {\n if (!(input instanceof Uint8Array)) {\n input = new Uint8Array(input)\n }\n\n this.encoder = createEncoder()\n this.decoder = createDecoder(input)\n }\n\n readVarUint8Array() {\n return readVarUint8Array(this.decoder)\n }\n\n readVarUint() {\n return readVarUint(this.decoder)\n }\n\n readVarString() {\n return readVarString(this.decoder)\n }\n\n toUint8Array() {\n return toUint8Array(this.encoder)\n }\n\n writeVarUint(type: MessageType) {\n writeVarUint(this.encoder, type)\n }\n\n writeVarString(string: string) {\n writeVarString(this.encoder, string)\n }\n\n get length(): number {\n return length(this.encoder)\n }\n}\n","/**\n * Utility module to work with time.\n *\n * @module time\n */\n\nimport * as metric from './metric.js'\nimport * as math from './math.js'\n\n/**\n * Return current time.\n *\n * @return {Date}\n */\nexport const getDate = () => new Date()\n\n/**\n * Return current unix time.\n *\n * @return {number}\n */\nexport const getUnixTime = Date.now\n\n/**\n * Transform time (in ms) to a human readable format. E.g. 1100 => 1.1s. 60s => 1min. .001 => 10μs.\n *\n * @param {number} d duration in milliseconds\n * @return {string} humanized approximation of time\n */\nexport const humanizeDuration = d => {\n if (d < 60000) {\n const p = metric.prefix(d, -1)\n return math.round(p.n * 100) / 100 + p.prefix + 's'\n }\n d = math.floor(d / 1000)\n const seconds = d % 60\n const minutes = math.floor(d / 60) % 60\n const hours = math.floor(d / 3600) % 24\n const days = math.floor(d / 86400)\n if (days > 0) {\n return days + 'd' + ((hours > 0 || minutes > 30) ? ' ' + (minutes > 30 ? hours + 1 : hours) + 'h' : '')\n }\n if (hours > 0) {\n /* c8 ignore next */\n return hours + 'h' + ((minutes > 0 || seconds > 30) ? ' ' + (seconds > 30 ? minutes + 1 : minutes) + 'min' : '')\n }\n return minutes + 'min' + (seconds > 0 ? ' ' + seconds + 's' : '')\n}\n","/**\n * Observable class prototype.\n *\n * @module observable\n */\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as array from './array.js'\n\n/**\n * Handles named events.\n *\n * @template N\n */\nexport class Observable {\n constructor () {\n /**\n * Some desc.\n * @type {Map}\n */\n this._observers = map.create()\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, name, set.create).add(f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, _f)\n f(...args)\n }\n this.on(name, _f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @param {N} name The event name.\n * @param {Array} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n","/**\n * @module awareness-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as time from 'lib0/time'\nimport * as math from 'lib0/math'\nimport { Observable } from 'lib0/observable'\nimport * as f from 'lib0/function'\nimport * as Y from 'yjs' // eslint-disable-line\n\nexport const outdatedTimeout = 30000\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable}\n */\nexport class Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super()\n this.doc = doc\n /**\n * @type {number}\n */\n this.clientID = doc.clientID\n /**\n * Maps from client id to client state\n * @type {Map>}\n */\n this.states = new Map()\n /**\n * @type {Map}\n */\n this.meta = new Map()\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = time.getUnixTime()\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState())\n }\n /**\n * @type {Array}\n */\n const remove = []\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid)\n }\n })\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout')\n }\n }, math.floor(outdatedTimeout / 10)))\n doc.on('destroy', () => {\n this.destroy()\n })\n this.setLocalState({})\n }\n\n destroy () {\n this.emit('destroy', [this])\n this.setLocalState(null)\n super.destroy()\n clearInterval(this._checkInterval)\n }\n\n /**\n * @return {Object|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID\n const currLocalMeta = this.meta.get(clientID)\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1\n const prevState = this.states.get(clientID)\n if (state === null) {\n this.states.delete(clientID)\n } else {\n this.states.set(clientID, state)\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: time.getUnixTime()\n })\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n if (state === null) {\n removed.push(clientID)\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID)\n }\n } else {\n updated.push(clientID)\n if (!f.equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID)\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local'])\n }\n this.emit('update', [{ added, updated, removed }, 'local'])\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState()\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n })\n }\n }\n\n /**\n * @return {Map>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array} clients\n * @param {any} origin\n */\nexport const removeAwarenessStates = (awareness, clients, origin) => {\n const removed = []\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i]\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID)\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID))\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: time.getUnixTime()\n })\n }\n removed.push(clientID)\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin])\n awareness.emit('update', [{ added: [], updated: [], removed }, origin])\n }\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Array} clients\n * @return {Uint8Array}\n */\nexport const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = clients[i]\n const state = states.get(clientID) || null\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(state))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Modify the content of an awareness update before re-encoding it to an awareness update.\n *\n * This might be useful when you have a central server that wants to ensure that clients\n * cant hijack somebody elses identity.\n *\n * @param {Uint8Array} update\n * @param {function(any):any} modify\n * @return {Uint8Array}\n */\nexport const modifyAwarenessUpdate = (update, modify) => {\n const decoder = decoding.createDecoder(update)\n const encoder = encoding.createEncoder()\n const len = decoding.readVarUint(decoder)\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n const clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const modifiedState = modify(state)\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(modifiedState))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nexport const applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = decoding.createDecoder(update)\n const timestamp = time.getUnixTime()\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n const len = decoding.readVarUint(decoder)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n let clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const clientMeta = awareness.meta.get(clientID)\n const prevState = awareness.states.get(clientID)\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++\n } else {\n awareness.states.delete(clientID)\n }\n } else {\n awareness.states.set(clientID, state)\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n })\n if (clientMeta === undefined && state !== null) {\n added.push(clientID)\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID)\n } else if (state !== null) {\n if (!f.equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID)\n }\n updated.push(clientID)\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin])\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin])\n }\n}\n","/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them.\n * Therefore it is necesarry that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Will not be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n","import {\n IncomingHttpHeaders, IncomingMessage, ServerResponse,\n} from 'http'\nimport { URLSearchParams } from 'url'\nimport { Awareness } from 'y-protocols/awareness'\nimport Connection from './Connection.js'\nimport Document from './Document.js'\nimport { Hocuspocus } from './Hocuspocus.js'\n\nexport enum MessageType {\n Unknown = -1,\n Sync = 0,\n Awareness = 1,\n Auth = 2,\n QueryAwareness = 3,\n SyncReply = 4, // same as Sync, but won't trigger another 'SyncStep1'\n Stateless = 5,\n BroadcastStateless = 6,\n CLOSE = 7,\n SyncStatus = 8, // TODO: should this be 8?\n}\n\nexport interface AwarenessUpdate {\n added: Array,\n updated: Array,\n removed: Array,\n}\n\nexport interface ConnectionConfiguration {\n readOnly: boolean\n requiresAuthentication: boolean\n isAuthenticated: boolean\n}\n\nexport interface Extension {\n priority?: number,\n onConfigure?(data: onConfigurePayload): Promise,\n onListen?(data: onListenPayload): Promise,\n onUpgrade?(data: onUpgradePayload): Promise,\n onConnect?(data: onConnectPayload): Promise,\n connected?(data: connectedPayload): Promise,\n onAuthenticate?(data: onAuthenticatePayload): Promise,\n onLoadDocument?(data: onLoadDocumentPayload): Promise,\n afterLoadDocument?(data: onLoadDocumentPayload): Promise,\n beforeHandleMessage?(data: beforeHandleMessagePayload): Promise,\n beforeBroadcastStateless?(data: beforeBroadcastStatelessPayload): Promise,\n onStateless?(payload: onStatelessPayload): Promise;\n onChange?(data: onChangePayload): Promise,\n onStoreDocument?(data: onStoreDocumentPayload): Promise,\n afterStoreDocument?(data: afterStoreDocumentPayload): Promise,\n onAwarenessUpdate?(data: onAwarenessUpdatePayload): Promise,\n onRequest?(data: onRequestPayload): Promise,\n onDisconnect?(data: onDisconnectPayload): Promise\n onDestroy?(data: onDestroyPayload): Promise,\n}\n\nexport type HookName =\n 'onConfigure' |\n 'onListen' |\n 'onUpgrade' |\n 'onConnect' |\n 'connected' |\n 'onAuthenticate' |\n 'onLoadDocument' |\n 'afterLoadDocument' |\n 'beforeHandleMessage' |\n 'beforeBroadcastStateless' |\n 'onStateless' |\n 'onChange' |\n 'onStoreDocument' |\n 'afterStoreDocument' |\n 'onAwarenessUpdate' |\n 'onRequest' |\n 'onDisconnect' |\n 'onDestroy'\n\nexport type HookPayload =\n onConfigurePayload |\n onListenPayload |\n onUpgradePayload |\n onConnectPayload |\n connectedPayload |\n onAuthenticatePayload |\n onLoadDocumentPayload |\n onStatelessPayload |\n beforeHandleMessagePayload |\n beforeBroadcastStatelessPayload |\n onChangePayload |\n onStoreDocumentPayload |\n afterStoreDocumentPayload |\n onAwarenessUpdatePayload |\n onRequestPayload |\n onDisconnectPayload |\n onDestroyPayload\n\nexport interface Configuration extends Extension {\n /**\n * A name for the instance, used for logging.\n */\n name: string | null,\n /**\n * A list of hocuspocus extenions.\n */\n extensions: Array,\n /**\n * The port which the server listens on.\n */\n port?: number,\n /**\n * The address which the server listens on.\n */\n address?: string,\n /**\n * Defines in which interval the server sends a ping, and closes the connection when no pong is sent back.\n */\n timeout: number,\n /**\n * Debounces the call of the `onStoreDocument` hook for the given amount of time in ms.\n * Otherwise every single update would be persisted.\n */\n debounce: number,\n /**\n * Makes sure to call `onStoreDocument` at least in the given amount of time (ms).\n */\n maxDebounce: number\n /**\n * By default, the servers show a start screen. If passed false, the server will start quietly.\n */\n quiet: boolean,\n\n /**\n * options to pass to the ydoc document\n */\n yDocOptions: {\n gc: boolean, // enable or disable garbage collection (see https://github.com/yjs/yjs/blob/main/INTERNALS.md#deletions)\n gcFilter: () => boolean, // will be called before garbage collecting ; return false to keep it\n },\n /**\n * Function which returns the (customized) document name based on the request\n */\n getDocumentName?(data: getDocumentNamePayload): string | Promise,\n}\n\nexport interface getDocumentNamePayload {\n documentName: string,\n request: IncomingMessage,\n requestParameters: URLSearchParams,\n}\n\nexport interface onStatelessPayload {\n connection: Connection,\n documentName: string,\n document: Document,\n payload: string,\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface onAuthenticatePayload {\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n token: string,\n connection: ConnectionConfiguration\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface onConnectPayload {\n documentName: string,\n instance: Hocuspocus,\n request: IncomingMessage,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\n// @todo Change 'connection' to 'connectionConfig', and 'connectionInstance' to 'connection' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface connectedPayload {\n context: any,\n documentName: string,\n instance: Hocuspocus,\n request: IncomingMessage,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration,\n connectionInstance: Connection\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface onLoadDocumentPayload {\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface afterLoadDocumentPayload {\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\nexport interface onChangePayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n update: Uint8Array,\n socketId: string,\n}\n\nexport interface beforeHandleMessagePayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n update: Uint8Array,\n socketId: string,\n connection: Connection\n}\n\nexport interface beforeBroadcastStatelessPayload {\n document: Document,\n documentName: string,\n payload: string,\n}\n\nexport interface onStoreDocumentPayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n}\n\nexport interface afterStoreDocumentPayload extends onStoreDocumentPayload {}\n\nexport interface onAwarenessUpdatePayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n update: Uint8Array,\n socketId: string,\n added: number[],\n updated: number[],\n removed: number[],\n awareness: Awareness,\n states: StatesArray,\n}\n\nexport type StatesArray = { clientId: number, [key: string | number]: any }[]\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface fetchPayload {\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\nexport interface storePayload extends onStoreDocumentPayload {\n state: Buffer,\n}\n\nexport interface onDisconnectPayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n}\n\nexport interface onRequestPayload {\n request: IncomingMessage,\n response: ServerResponse,\n instance: Hocuspocus,\n}\n\nexport interface onUpgradePayload {\n request: IncomingMessage,\n socket: any,\n head: any,\n instance: Hocuspocus,\n}\n\nexport interface onListenPayload {\n instance: Hocuspocus,\n configuration: Configuration,\n port: number,\n}\n\nexport interface onDestroyPayload {\n instance: Hocuspocus,\n}\n\nexport interface onConfigurePayload {\n instance: Hocuspocus,\n configuration: Configuration,\n version: string,\n}\n","import {\n createEncoder,\n Encoder,\n toUint8Array,\n writeVarString,\n writeVarUint,\n writeVarUint8Array,\n} from 'lib0/encoding'\nimport { Awareness, encodeAwarenessUpdate } from 'y-protocols/awareness'\nimport { writeSyncStep1, writeUpdate } from 'y-protocols/sync'\n\nimport { writeAuthenticated, writePermissionDenied } from '@hocuspocus/common'\nimport Document from './Document.js'\nimport { MessageType } from './types.js'\n\nexport class OutgoingMessage {\n\n encoder: Encoder\n\n type?: number\n\n category?: string\n\n constructor(documentName: string) {\n this.encoder = createEncoder()\n\n writeVarString(this.encoder, documentName)\n }\n\n createSyncMessage(): OutgoingMessage {\n this.type = MessageType.Sync\n\n writeVarUint(this.encoder, MessageType.Sync)\n\n return this\n }\n\n createSyncReplyMessage(): OutgoingMessage {\n this.type = MessageType.SyncReply\n\n writeVarUint(this.encoder, MessageType.SyncReply)\n\n return this\n }\n\n createAwarenessUpdateMessage(awareness: Awareness, changedClients?: Array): OutgoingMessage {\n this.type = MessageType.Awareness\n this.category = 'Update'\n\n const message = encodeAwarenessUpdate(\n awareness,\n changedClients || Array.from(awareness.getStates().keys()),\n )\n\n writeVarUint(this.encoder, MessageType.Awareness)\n writeVarUint8Array(this.encoder, message)\n\n return this\n }\n\n writeQueryAwareness(): OutgoingMessage {\n this.type = MessageType.QueryAwareness\n this.category = 'Update'\n\n writeVarUint(this.encoder, MessageType.QueryAwareness)\n\n return this\n }\n\n writeAuthenticated(readonly: boolean): OutgoingMessage {\n this.type = MessageType.Auth\n this.category = 'Authenticated'\n\n writeVarUint(this.encoder, MessageType.Auth)\n writeAuthenticated(this.encoder, readonly ? 'readonly' : 'read-write')\n\n return this\n }\n\n writePermissionDenied(reason: string): OutgoingMessage {\n this.type = MessageType.Auth\n this.category = 'PermissionDenied'\n\n writeVarUint(this.encoder, MessageType.Auth)\n writePermissionDenied(this.encoder, reason)\n\n return this\n }\n\n writeFirstSyncStepFor(document: Document): OutgoingMessage {\n this.category = 'SyncStep1'\n\n writeSyncStep1(this.encoder, document)\n\n return this\n }\n\n writeUpdate(update: Uint8Array): OutgoingMessage {\n this.category = 'Update'\n\n writeUpdate(this.encoder, update)\n\n return this\n }\n\n writeStateless(payload: string): OutgoingMessage {\n this.category = 'Stateless'\n\n writeVarUint(this.encoder, MessageType.Stateless)\n writeVarString(this.encoder, payload)\n\n return this\n }\n\n writeBroadcastStateless(payload: string): OutgoingMessage {\n this.category = 'Stateless'\n\n writeVarUint(this.encoder, MessageType.BroadcastStateless)\n writeVarString(this.encoder, payload)\n\n return this\n }\n\n // TODO: should this be write* or create* as method name?\n writeSyncStatus(updateSaved: boolean): OutgoingMessage {\n this.category = 'SyncStatus'\n\n writeVarUint(this.encoder, MessageType.SyncStatus)\n writeVarUint(this.encoder, updateSaved ? 1 : 0)\n\n return this\n }\n\n toUint8Array(): Uint8Array {\n return toUint8Array(this.encoder)\n }\n\n}\n","import * as decoding from 'lib0/decoding'\nimport { readVarString } from 'lib0/decoding'\nimport { applyAwarenessUpdate } from 'y-protocols/awareness'\nimport {\n messageYjsSyncStep1,\n messageYjsSyncStep2,\n messageYjsUpdate,\n readSyncStep1,\n readSyncStep2,\n readUpdate,\n} from 'y-protocols/sync'\nimport * as Y from 'yjs'\nimport Connection from './Connection.js'\nimport { Debugger } from './Debugger.js'\nimport Document from './Document.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { MessageType } from './types.js'\n\nexport class MessageReceiver {\n\n message: IncomingMessage\n\n logger: Debugger\n\n constructor(message: IncomingMessage, logger: Debugger) {\n this.message = message\n this.logger = logger\n }\n\n public apply(document: Document, connection?: Connection, reply?: (message: Uint8Array) => void) {\n const { message } = this\n const type = message.readVarUint()\n const emptyMessageLength = message.length\n\n switch (type) {\n case MessageType.Sync:\n case MessageType.SyncReply: {\n message.writeVarUint(MessageType.Sync)\n this.readSyncMessage(message, document, connection, reply, type !== MessageType.SyncReply)\n\n if (message.length > emptyMessageLength + 1) {\n if (reply) {\n reply(message.toUint8Array())\n } else if (connection) {\n // TODO: We should log this, shouldn’t we?\n // this.logger.log({\n // direction: 'out',\n // type: MessageType.Awareness,\n // category: 'Update',\n // })\n connection.send(message.toUint8Array())\n }\n }\n\n break\n }\n case MessageType.Awareness: {\n this.logger.log({\n direction: 'in',\n type: MessageType.Awareness,\n category: 'Update',\n })\n\n applyAwarenessUpdate(document.awareness, message.readVarUint8Array(), connection)\n\n break\n }\n case MessageType.QueryAwareness: {\n\n this.applyQueryAwarenessMessage(document, reply)\n\n break\n }\n case MessageType.Stateless: {\n connection?.callbacks.statelessCallback({\n connection,\n documentName: document.name,\n document,\n payload: readVarString(message.decoder),\n })\n\n break\n }\n case MessageType.BroadcastStateless: {\n const msg = message.readVarString()\n document.getConnections().forEach(connection => {\n connection.sendStateless(msg)\n })\n break\n }\n\n case MessageType.CLOSE: {\n connection?.close({\n code: 1000,\n reason: 'provider_initiated',\n })\n break\n }\n default:\n console.error(`Unable to handle message of type ${type}: no handler defined!`)\n // Do nothing\n }\n }\n\n readSyncMessage(message: IncomingMessage, document: Document, connection?: Connection, reply?: (message: Uint8Array) => void, requestFirstSync = true) {\n const type = message.readVarUint()\n\n switch (type) {\n case messageYjsSyncStep1: {\n this.logger.log({\n direction: 'in',\n type: MessageType.Sync,\n category: 'SyncStep1',\n })\n\n readSyncStep1(message.decoder, message.encoder, document)\n\n // When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1.\n this.logger.log({\n direction: 'out',\n type: MessageType.Sync,\n category: 'SyncStep2',\n })\n\n if (reply && requestFirstSync) {\n const syncMessage = (new OutgoingMessage(document.name)\n .createSyncReplyMessage()\n .writeFirstSyncStepFor(document))\n\n this.logger.log({\n direction: 'out',\n type: MessageType.Sync,\n category: 'SyncStep1',\n })\n\n reply(syncMessage.toUint8Array())\n } else if (connection) {\n const syncMessage = (new OutgoingMessage(document.name)\n .createSyncMessage()\n .writeFirstSyncStepFor(document))\n\n this.logger.log({\n direction: 'out',\n type: MessageType.Sync,\n category: 'SyncStep1',\n })\n\n connection.send(syncMessage.toUint8Array())\n }\n break\n }\n case messageYjsSyncStep2:\n this.logger.log({\n direction: 'in',\n type: MessageType.Sync,\n category: 'SyncStep2',\n })\n\n if (connection?.readOnly) {\n // We're in read-only mode, so we can't apply the update.\n // Let's use snapshotContainsUpdate to see if the update actually contains changes.\n // If not, we can still ack the update\n const snapshot = Y.snapshot(document)\n const update = decoding.readVarUint8Array(message.decoder)\n if (Y.snapshotContainsUpdate(snapshot, update)) {\n // no new changes in update\n const ackMessage = new OutgoingMessage(document.name)\n .writeSyncStatus(true)\n\n connection.send(ackMessage.toUint8Array())\n } else {\n // new changes in update that we can't apply, because readOnly\n const ackMessage = new OutgoingMessage(document.name)\n .writeSyncStatus(false)\n\n connection.send(ackMessage.toUint8Array())\n }\n break\n }\n\n readSyncStep2(message.decoder, document, connection)\n\n if (connection) {\n // TODO: how should this work if connection is not set? should we use reply?\n // reply is used by redis, but I'm unsure how that code path works\n connection.send(new OutgoingMessage(document.name)\n .writeSyncStatus(true).toUint8Array())\n }\n break\n case messageYjsUpdate:\n this.logger.log({\n direction: 'in',\n type: MessageType.Sync,\n category: 'Update',\n })\n\n if (connection?.readOnly) {\n connection.send(new OutgoingMessage(document.name)\n .writeSyncStatus(false).toUint8Array())\n break\n }\n\n readUpdate(message.decoder, document, connection)\n if (connection) {\n // TODO: how should this work if connection is not set? should we use reply?\n // reply is used by redis, but I'm unsure how that code path works\n connection.send(new OutgoingMessage(document.name)\n .writeSyncStatus(true).toUint8Array())\n }\n break\n default:\n throw new Error(`Received a message with an unknown type: ${type}`)\n }\n\n return type\n }\n\n applyQueryAwarenessMessage(document: Document, reply?: (message: Uint8Array) => void) {\n const message = new OutgoingMessage(document.name)\n .createAwarenessUpdateMessage(document.awareness)\n\n if (reply) {\n reply(message.toUint8Array())\n }\n\n // TODO: We should add support for WebSocket connections, too, right?\n // this.logger.log({\n // direction: 'out',\n // type: MessageType.Sync,\n // category: 'SyncStep1',\n // })\n\n // connection.send(syncMessage.toUint8Array())\n }\n}\n","import { IncomingMessage as HTTPIncomingMessage } from 'http'\nimport AsyncLock from 'async-lock'\nimport WebSocket from 'ws'\nimport {\n CloseEvent, ConnectionTimeout, Forbidden, WsReadyStates,\n} from '@hocuspocus/common'\nimport Document from './Document.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { MessageReceiver } from './MessageReceiver.js'\nimport { Debugger } from './Debugger.js'\nimport { onStatelessPayload } from './types.js'\n\nexport class Connection {\n\n webSocket: WebSocket\n\n context: any\n\n document: Document\n\n pingInterval: NodeJS.Timeout\n\n pongReceived = true\n\n request: HTTPIncomingMessage\n\n timeout: number\n\n callbacks: any = {\n onClose: [(document: Document, event?: CloseEvent) => null],\n beforeHandleMessage: (connection: Connection, update: Uint8Array) => Promise,\n statelessCallback: () => Promise,\n }\n\n socketId: string\n\n lock: AsyncLock\n\n readOnly: Boolean\n\n logger: Debugger\n\n /**\n * Constructor.\n */\n constructor(\n connection: WebSocket,\n request: HTTPIncomingMessage,\n document: Document,\n timeout: number,\n socketId: string,\n context: any,\n readOnly = false,\n logger: Debugger,\n ) {\n this.webSocket = connection\n this.context = context\n this.document = document\n this.request = request\n this.timeout = timeout\n this.socketId = socketId\n this.readOnly = readOnly\n this.logger = logger\n\n this.lock = new AsyncLock()\n\n this.webSocket.binaryType = 'arraybuffer'\n this.document.addConnection(this)\n\n this.pingInterval = setInterval(this.check.bind(this), this.timeout)\n\n this.webSocket.on('close', this.boundClose)\n this.webSocket.on('message', this.boundHandleMessage)\n this.webSocket.on('pong', this.boundHandlePong)\n\n this.sendCurrentAwareness()\n }\n\n boundClose = this.close.bind(this)\n\n boundHandleMessage = this.handleMessage.bind(this)\n\n boundHandlePong = this.handlePong.bind(this)\n\n handlePong() {\n this.pongReceived = true\n }\n\n /**\n * Set a callback that will be triggered when the connection is closed\n */\n onClose(callback: (document: Document, event?: CloseEvent) => void): Connection {\n this.callbacks.onClose.push(callback)\n\n return this\n }\n\n /**\n * Set a callback that will be triggered when an stateless message is received\n */\n onStatelessCallback(callback: (payload: onStatelessPayload) => Promise): Connection {\n this.callbacks.statelessCallback = callback\n\n return this\n }\n\n /**\n * Set a callback that will be triggered before an message is handled\n */\n beforeHandleMessage(callback: (connection: Connection, update: Uint8Array) => Promise): Connection {\n this.callbacks.beforeHandleMessage = callback\n\n return this\n }\n\n /**\n * Send the given message\n */\n send(message: any): void {\n if (\n this.webSocket.readyState === WsReadyStates.Closing\n || this.webSocket.readyState === WsReadyStates.Closed\n ) {\n this.close()\n }\n\n try {\n this.webSocket.send(message, (error: any) => {\n if (error != null) this.close()\n })\n } catch (exception) {\n this.close()\n }\n }\n\n /**\n * Send a stateless message with payload\n */\n public sendStateless(payload: string): void {\n const message = new OutgoingMessage(this.document.name)\n .writeStateless(payload)\n\n this.logger.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n this.send(\n message.toUint8Array(),\n )\n }\n\n /**\n * Graceful wrapper around the WebSocket close method.\n */\n close(event?: CloseEvent): void {\n this.lock.acquire('close', (done: Function) => {\n if (this.pingInterval) {\n clearInterval(this.pingInterval)\n }\n\n if (this.document.hasConnection(this)) {\n this.document.removeConnection(this)\n clearInterval(this.pingInterval)\n\n this.webSocket.removeListener('close', this.boundClose)\n this.webSocket.removeListener('message', this.boundHandleMessage)\n this.webSocket.removeListener('pong', this.boundHandlePong)\n\n this.callbacks.onClose.forEach((callback: (arg0: Document, arg1?: CloseEvent) => any) => callback(this.document, event))\n }\n\n done()\n })\n }\n\n /**\n * Check if pong was received and close the connection otherwise\n * @private\n */\n private check(): void {\n if (!this.pongReceived) {\n return this.close(ConnectionTimeout)\n }\n\n if (this.document.hasConnection(this)) {\n this.pongReceived = false\n\n try {\n this.webSocket.ping()\n } catch (error) {\n this.close(ConnectionTimeout)\n }\n }\n }\n\n /**\n * Send the current document awareness to the client, if any\n * @private\n */\n private sendCurrentAwareness(): void {\n if (!this.document.hasAwarenessStates()) {\n return\n }\n\n const awarenessMessage = new OutgoingMessage(this.document.name)\n .createAwarenessUpdateMessage(this.document.awareness)\n\n this.logger.log({\n direction: 'out',\n type: awarenessMessage.type,\n category: awarenessMessage.category,\n })\n\n this.send(awarenessMessage.toUint8Array())\n }\n\n /**\n * Handle an incoming message\n * @private\n */\n private handleMessage(data: Uint8Array): void {\n const message = new IncomingMessage(data)\n const documentName = message.readVarString()\n\n if (documentName !== this.document.name) return\n\n message.writeVarString(documentName)\n\n this.callbacks.beforeHandleMessage(this, data)\n .then(() => {\n new MessageReceiver(\n message,\n this.logger,\n ).apply(this.document, this)\n })\n .catch((e: any) => {\n console.log('closing connection because of exception', e)\n this.close({\n code: 'code' in e ? e.code : Forbidden.code,\n reason: 'reason' in e ? e.reason : Forbidden.reason,\n })\n })\n }\n\n}\n\nexport default Connection\n","// import * as time from 'lib0/time'\nimport { MessageType } from './types.js'\n\nexport class Debugger {\n logs: any[] = []\n\n listen = false\n\n output = false\n\n enable() {\n this.flush()\n\n this.listen = true\n }\n\n disable() {\n this.listen = false\n }\n\n verbose() {\n this.output = true\n }\n\n quiet() {\n this.output = false\n }\n\n log(message: any) {\n if (!this.listen) {\n return this\n }\n\n const item = {\n ...message,\n type: MessageType[message.type],\n // time: time.getUnixTime(),\n }\n\n this.logs.push(item)\n\n if (this.output) {\n console.log('[DEBUGGER]', item.direction === 'in' ? 'IN –>' : 'OUT <–', `${item.type}/${item.category}`)\n }\n\n return this\n }\n\n flush() {\n this.logs = []\n\n return this\n }\n\n get() {\n return {\n logs: this.logs,\n }\n }\n}\n","/**\n * Mutual exclude for JavaScript.\n *\n * @module mutex\n */\n\n/**\n * @callback mutex\n * @param {function():void} cb Only executed when this mutex is not in the current stack\n * @param {function():void} [elseCb] Executed when this mutex is in the current stack\n */\n\n/**\n * Creates a mutual exclude function with the following property:\n *\n * ```js\n * const mutex = createMutex()\n * mutex(() => {\n * // This function is immediately executed\n * mutex(() => {\n * // This function is not executed, as the mutex is already active.\n * })\n * })\n * ```\n *\n * @return {mutex} A mutual exclude function\n * @public\n */\nexport const createMutex = () => {\n let token = true\n return (f, g) => {\n if (token) {\n token = false\n try {\n f()\n } finally {\n token = true\n }\n } else if (g !== undefined) {\n g()\n }\n }\n}\n","import WebSocket from 'ws'\nimport { Awareness, removeAwarenessStates, applyAwarenessUpdate } from 'y-protocols/awareness'\nimport { applyUpdate, Doc, encodeStateAsUpdate } from 'yjs'\nimport { mutex, createMutex } from 'lib0/mutex.js'\nimport { AwarenessUpdate } from './types.js'\nimport Connection from './Connection.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { Debugger } from './Debugger.js'\n\nexport class Document extends Doc {\n\n awareness: Awareness\n\n callbacks = {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onUpdate: (document: Document, connection: Connection, update: Uint8Array) => {},\n beforeBroadcastStateless: (document: Document, stateless: string) => {},\n }\n\n connections: Map,\n connection: Connection\n }> = new Map()\n\n // The number of direct (non-websocket) connections to this document\n directConnectionsCount = 0\n\n name: string\n\n mux: mutex\n\n logger: Debugger\n\n isLoading: boolean\n\n /**\n * Constructor.\n */\n constructor(name: string, logger: Debugger, yDocOptions: {}) {\n super(yDocOptions)\n\n this.name = name\n this.mux = createMutex()\n\n this.awareness = new Awareness(this)\n this.awareness.setLocalState(null)\n\n this.awareness.on('update', this.handleAwarenessUpdate.bind(this))\n this.on('update', this.handleUpdate.bind(this))\n\n this.logger = logger\n this.isLoading = true\n }\n\n /**\n * Check if the Document is empty\n */\n isEmpty(fieldName: string): boolean {\n // eslint-disable-next-line no-underscore-dangle\n return !this.get(fieldName)._start\n }\n\n /**\n * Merge the given document(s) into this one\n */\n merge(documents: Doc|Array): Document {\n (Array.isArray(documents) ? documents : [documents]).forEach(document => {\n applyUpdate(this, encodeStateAsUpdate(document))\n })\n\n return this\n }\n\n /**\n * Set a callback that will be triggered when the document is updated\n */\n onUpdate(callback: (document: Document, connection: Connection, update: Uint8Array) => void): Document {\n this.callbacks.onUpdate = callback\n\n return this\n }\n\n /**\n * Set a callback that will be triggered before a stateless message is broadcasted\n */\n beforeBroadcastStateless(callback: (document: Document, stateless: string) => void): Document {\n this.callbacks.beforeBroadcastStateless = callback\n\n return this\n }\n\n /**\n * Register a connection and a set of clients on this document keyed by the\n * underlying websocket connection\n */\n addConnection(connection: Connection): Document {\n this.connections.set(connection.webSocket, {\n clients: new Set(),\n connection,\n })\n\n return this\n }\n\n /**\n * Is the given connection registered on this document\n */\n hasConnection(connection: Connection): boolean {\n return this.connections.has(connection.webSocket)\n }\n\n /**\n * Remove the given connection from this document\n */\n removeConnection(connection: Connection): Document {\n removeAwarenessStates(\n this.awareness,\n Array.from(this.getClients(connection.webSocket)),\n null,\n )\n\n this.connections.delete(connection.webSocket)\n\n return this\n }\n\n addDirectConnection(): Document {\n this.directConnectionsCount += 1\n\n return this\n }\n\n removeDirectConnection(): Document {\n if (this.directConnectionsCount > 0) {\n this.directConnectionsCount -= 1\n }\n\n return this\n }\n\n /**\n * Get the number of active connections for this document\n */\n getConnectionsCount(): number {\n return this.connections.size + this.directConnectionsCount\n }\n\n /**\n * Get an array of registered connections\n */\n getConnections(): Array {\n return Array.from(this.connections.values()).map(data => data.connection)\n }\n\n /**\n * Get the client ids for the given connection instance\n */\n getClients(connectionInstance: WebSocket): Set {\n const connection = this.connections.get(connectionInstance)\n\n return connection?.clients === undefined ? new Set() : connection.clients\n }\n\n /**\n * Has the document awareness states\n */\n hasAwarenessStates(): boolean {\n return this.awareness.getStates().size > 0\n }\n\n /**\n * Apply the given awareness update\n */\n applyAwarenessUpdate(connection: Connection, update: Uint8Array): Document {\n applyAwarenessUpdate(\n this.awareness,\n update,\n connection.webSocket,\n )\n\n return this\n }\n\n /**\n * Handle an awareness update and sync changes to clients\n * @private\n */\n private handleAwarenessUpdate(\n { added, updated, removed }: AwarenessUpdate,\n connectionInstance: WebSocket,\n ): Document {\n const changedClients = added.concat(updated, removed)\n\n if (connectionInstance !== null) {\n const connection = this.connections.get(connectionInstance)\n\n if (connection) {\n added.forEach((clientId: any) => connection.clients.add(clientId))\n removed.forEach((clientId: any) => connection.clients.delete(clientId))\n }\n }\n\n this.getConnections().forEach(connection => {\n const awarenessMessage = new OutgoingMessage(this.name)\n .createAwarenessUpdateMessage(this.awareness, changedClients)\n\n this.logger.log({\n direction: 'out',\n type: awarenessMessage.type,\n category: awarenessMessage.category,\n })\n\n connection.send(\n awarenessMessage.toUint8Array(),\n )\n })\n\n return this\n }\n\n /**\n * Handle an updated document and sync changes to clients\n */\n private handleUpdate(update: Uint8Array, connection: Connection): Document {\n this.callbacks.onUpdate(this, connection, update)\n\n const message = new OutgoingMessage(this.name)\n .createSyncMessage()\n .writeUpdate(update)\n\n this.getConnections().forEach(connection => {\n this.logger.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n connection.send(\n message.toUint8Array(),\n )\n })\n\n return this\n }\n\n /**\n * Broadcast stateless message to all connections\n */\n public broadcastStateless(payload: string): void {\n this.callbacks.beforeBroadcastStateless(this, payload)\n\n this.getConnections().forEach(connection => {\n connection.sendStateless(payload)\n })\n }\n}\n\nexport default Document\n","import { IncomingMessage } from 'http'\nimport { URLSearchParams } from 'url'\n\n/**\n * Get parameters by the given request\n */\nexport function getParameters(request?: Pick): URLSearchParams {\n const query = request?.url?.split('?') || []\n return new URLSearchParams(query[1] ? query[1] : '')\n}\n","import { IncomingHttpHeaders, IncomingMessage } from 'http'\nimport {\n Forbidden, Unauthorized, WsReadyStates,\n} from '@hocuspocus/common'\nimport * as decoding from 'lib0/decoding'\nimport { v4 as uuid } from 'uuid'\nimport WebSocket from 'ws'\n\nimport Connection from './Connection.js'\nimport { Debugger } from './Debugger.js'\nimport Document from './Document.js'\nimport { Hocuspocus } from './Hocuspocus.js'\nimport { IncomingMessage as SocketIncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport {\n ConnectionConfiguration,\n MessageType,\n beforeHandleMessagePayload,\n onDisconnectPayload,\n} from './types.js'\nimport { getParameters } from './util/getParameters.js'\n\n/**\n * The `ClientConnection` class is responsible for handling an incoming WebSocket\n *\n * TODO-refactor:\n * - use event handlers instead of calling hooks directly, hooks should probably be called from Hocuspocus.ts\n */\nexport class ClientConnection {\n // this map indicates whether a `Connection` instance has already taken over for incoming message for the key (i.e. documentName)\n private readonly documentConnections: Record = {}\n\n // While the connection will be establishing messages will\n // be queued and handled later.\n private readonly incomingMessageQueue: Record = {}\n\n // While the connection is establishing, kee\n private readonly documentConnectionsEstablished = new Set()\n\n // hooks payload by Document\n private readonly hookPayloads: Record = {}\n\n private readonly callbacks = {\n onClose: [(document: Document, payload: onDisconnectPayload) => {}],\n }\n\n private readonly closeIdleConnectionTimeout: NodeJS.Timeout\n\n // Every new connection gets a unique identifier.\n private readonly socketId = uuid()\n\n /**\n * The `ClientConnection` class receives incoming WebSocket connections,\n * runs all hooks:\n *\n * - onConnect for all connections\n * - onAuthenticate only if required\n *\n * … and if nothings fails it’ll fully establish the connection and\n * load the Document then.\n */\n constructor(\n private readonly websocket: WebSocket,\n private readonly request: IncomingMessage,\n private readonly documentProvider: {\n createDocument: Hocuspocus['createDocument'],\n },\n // TODO: change to events\n private readonly hooks: Hocuspocus['hooks'],\n private readonly debuggerTool: Debugger,\n private readonly opts: {\n requiresAuthentication: boolean,\n timeout: number,\n },\n ) {\n // Make sure to close an idle connection after a while.\n this.closeIdleConnectionTimeout = setTimeout(() => {\n websocket.close(Unauthorized.code, Unauthorized.reason)\n }, opts.timeout)\n\n websocket.on('message', this.messageHandler)\n }\n\n /**\n * Set a callback that will be triggered when the connection is closed\n */\n public onClose(callback: (document: Document, payload: onDisconnectPayload) => void): ClientConnection {\n this.callbacks.onClose.push(callback)\n\n return this\n }\n\n /**\n * Create a new connection by the given request and document\n */\n private createConnection(connection: WebSocket, document: Document): Connection {\n const hookPayload = this.hookPayloads[document.name]\n const instance = new Connection(\n connection,\n hookPayload.request,\n document,\n this.opts.timeout,\n hookPayload.socketId,\n hookPayload.context,\n hookPayload.connection.readOnly,\n this.debuggerTool,\n )\n\n instance.onClose(async (document, event) => {\n const disconnectHookPayload: onDisconnectPayload = {\n instance: this.documentProvider as Hocuspocus, // TODO, this will be removed when we use events instead of hooks for this class\n clientsCount: document.getConnectionsCount(),\n context: hookPayload.context,\n document,\n socketId: hookPayload.socketId,\n documentName: document.name,\n requestHeaders: hookPayload.request.headers,\n requestParameters: getParameters(hookPayload.request),\n }\n\n await this.hooks('onDisconnect', hookPayload)\n this.callbacks.onClose.forEach((callback => callback(document, disconnectHookPayload)))\n })\n\n instance.onStatelessCallback(async payload => {\n try {\n return await this.hooks('onStateless', payload)\n } catch (error: any) {\n // TODO: weird pattern, what's the use of this?\n if (error?.message) {\n throw error\n }\n }\n })\n\n instance.beforeHandleMessage((connection, update) => {\n const beforeHandleMessagePayload: beforeHandleMessagePayload = {\n instance: this.documentProvider as Hocuspocus, // TODO, this will be removed when we use events instead of hooks for this class\n clientsCount: document.getConnectionsCount(),\n context: hookPayload.context,\n document,\n socketId: hookPayload.socketId,\n connection,\n documentName: document.name,\n requestHeaders: hookPayload.request.headers,\n requestParameters: getParameters(hookPayload.request),\n update,\n }\n\n return this.hooks('beforeHandleMessage', beforeHandleMessagePayload)\n })\n\n // If the WebSocket has already disconnected (wow, that was fast) – then\n // immediately call close to cleanup the connection and document in memory.\n if (\n connection.readyState === WsReadyStates.Closing\n || connection.readyState === WsReadyStates.Closed\n ) {\n instance.close()\n }\n\n return instance\n }\n\n // Once all hooks are run, we’ll fully establish the connection:\n private setUpNewConnection = async (documentName: string) => {\n // Not an idle connection anymore, no need to close it then.\n clearTimeout(this.closeIdleConnectionTimeout)\n\n const hookPayload = this.hookPayloads[documentName]\n // If no hook interrupts, create a document and connection\n const document = await this.documentProvider.createDocument(documentName, hookPayload.request, hookPayload.socketId, hookPayload.connection, hookPayload.context)\n const instance = this.createConnection(this.websocket, document)\n\n instance.onClose((document, event) => {\n delete this.hookPayloads[documentName]\n delete this.documentConnections[documentName]\n delete this.incomingMessageQueue[documentName]\n this.documentConnectionsEstablished.delete(documentName)\n\n if (Object.keys(this.documentConnections).length === 0) {\n instance.webSocket.close(event?.code, event?.reason) // TODO: Move this to Hocuspocus connection handler\n }\n })\n\n this.documentConnections[documentName] = true\n\n // There’s no need to queue messages anymore.\n // Let’s work through queued messages.\n this.incomingMessageQueue[documentName].forEach(input => {\n this.websocket.emit('message', input)\n })\n\n this.hooks('connected', {\n ...hookPayload,\n documentName,\n context: hookPayload.context,\n connectionInstance: instance,\n })\n }\n\n // This listener handles authentication messages and queues everything else.\n private handleQueueingMessage = async (data: Uint8Array) => {\n try {\n const tmpMsg = new SocketIncomingMessage(data)\n\n const documentName = decoding.readVarString(tmpMsg.decoder)\n const type = decoding.readVarUint(tmpMsg.decoder)\n\n if (!(type === MessageType.Auth && !this.documentConnectionsEstablished.has(documentName))) {\n this.incomingMessageQueue[documentName].push(data)\n return\n }\n\n // Okay, we’ve got the authentication message we’re waiting for:\n this.documentConnectionsEstablished.add(documentName)\n\n // The 2nd integer contains the submessage type\n // which will always be authentication when sent from client -> server\n decoding.readVarUint(tmpMsg.decoder)\n const token = decoding.readVarString(tmpMsg.decoder)\n\n this.debuggerTool.log({\n direction: 'in',\n type,\n category: 'Token',\n })\n\n try {\n const hookPayload = this.hookPayloads[documentName]\n await this.hooks('onAuthenticate', {\n token,\n ...hookPayload,\n documentName,\n }, (contextAdditions: any) => {\n // Hooks are allowed to give us even more context and we’ll merge everything together.\n // We’ll pass the context to other hooks then.\n hookPayload.context = { ...hookPayload.context, ...contextAdditions }\n })\n // All `onAuthenticate` hooks passed.\n hookPayload.connection.isAuthenticated = true\n\n // Let the client know that authentication was successful.\n const message = new OutgoingMessage(documentName).writeAuthenticated(hookPayload.connection.readOnly)\n\n this.debuggerTool.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n this.websocket.send(message.toUint8Array())\n\n // Time to actually establish the connection.\n await this.setUpNewConnection(documentName)\n } catch (err: any) {\n const error = err || Forbidden\n const message = new OutgoingMessage(documentName).writePermissionDenied(error.reason ?? 'permission-denied')\n\n this.debuggerTool.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n // Ensure that the permission denied message is sent before the\n // connection is closed\n this.websocket.send(message.toUint8Array(), () => {\n if (Object.keys(this.documentConnections).length === 0) {\n try {\n this.websocket.close(error.code ?? Forbidden.code, error.reason ?? Forbidden.reason)\n } catch (closeError) {\n // catch is needed in case invalid error code is returned by hook (that would fail sending the close message)\n console.error(closeError)\n this.websocket.close(Forbidden.code, Forbidden.reason)\n }\n }\n })\n }\n\n // Catch errors due to failed decoding of data\n } catch (error) {\n console.error(error)\n this.websocket.close(Unauthorized.code, Unauthorized.reason)\n }\n }\n\n private messageHandler = async (data: Uint8Array) => {\n try {\n const tmpMsg = new SocketIncomingMessage(data)\n\n const documentName = decoding.readVarString(tmpMsg.decoder)\n\n if (this.documentConnections[documentName] === true) {\n // we already have a `Connection` set up for this document\n return\n }\n\n const isFirst = this.incomingMessageQueue[documentName] === undefined\n if (isFirst) {\n this.incomingMessageQueue[documentName] = []\n if (this.hookPayloads[documentName]) {\n throw new Error('first message, but hookPayloads exists')\n }\n\n const hookPayload = {\n instance: this.documentProvider as Hocuspocus,\n request: this.request,\n connection: {\n readOnly: false,\n requiresAuthentication: this.opts.requiresAuthentication,\n isAuthenticated: false,\n },\n requestHeaders: this.request.headers,\n requestParameters: getParameters(this.request),\n socketId: this.socketId,\n context: {},\n }\n\n this.hookPayloads[documentName] = hookPayload\n }\n this.handleQueueingMessage(data)\n\n if (isFirst) {\n const hookPayload = this.hookPayloads[documentName]\n // if this is the first message, trigger onConnect & check if we can start the connection (only if no auth is required)\n try {\n await this.hooks('onConnect', { ...hookPayload, documentName }, (contextAdditions: any) => {\n // merge context from all hooks\n hookPayload.context = { ...hookPayload.context, ...contextAdditions }\n })\n\n if (hookPayload.connection.requiresAuthentication || this.documentConnectionsEstablished.has(documentName)) {\n // Authentication is required, we’ll need to wait for the Authentication message.\n return\n }\n this.documentConnectionsEstablished.add(documentName)\n\n await this.setUpNewConnection(documentName)\n } catch (err: any) {\n // if a hook interrupts, close the websocket connection\n const error = err || Forbidden\n try {\n this.websocket.close(error.code ?? Forbidden.code, error.reason ?? Forbidden.reason)\n } catch (closeError) {\n // catch is needed in case invalid error code is returned by hook (that would fail sending the close message)\n console.error(closeError)\n this.websocket.close(Unauthorized.code, Unauthorized.reason)\n }\n }\n }\n } catch (closeError) {\n // catch is needed in case an invalid payload crashes the parsing of the Uint8Array\n console.error(closeError)\n this.websocket.close(Unauthorized.code, Unauthorized.reason)\n }\n }\n}\n","import { URLSearchParams } from 'url'\nimport Document from './Document.js'\nimport type { Hocuspocus } from './Hocuspocus.js'\n\nexport class DirectConnection {\n document: Document | null = null\n\n instance!: Hocuspocus\n\n context: any\n\n /**\n * Constructor.\n */\n constructor(\n document: Document,\n instance: Hocuspocus,\n context?: any,\n ) {\n this.document = document\n this.instance = instance\n this.context = context\n\n this.document.addDirectConnection()\n }\n\n async transact(transaction: (document: Document) => void) {\n if (!this.document) {\n throw new Error('direct connection closed')\n }\n\n transaction(this.document)\n\n this.instance.storeDocumentHooks(this.document, {\n clientsCount: this.document.getConnectionsCount(),\n context: this.context,\n document: this.document,\n documentName: this.document.name,\n instance: this.instance,\n requestHeaders: {},\n requestParameters: new URLSearchParams(),\n socketId: 'server',\n })\n }\n\n disconnect() {\n this.document?.removeDirectConnection()\n this.document = null\n }\n}\n","import { Server as HTTPServer, IncomingMessage, createServer } from 'http'\nimport { ListenOptions } from 'net'\nimport {\n ResetConnection, awarenessStatesToArray,\n} from '@hocuspocus/common'\nimport kleur from 'kleur'\nimport { v4 as uuid } from 'uuid'\nimport WebSocket, { AddressInfo, WebSocketServer } from 'ws'\nimport { Doc, applyUpdate, encodeStateAsUpdate } from 'yjs'\nimport meta from '../package.json' assert { type: 'json' }\nimport { ClientConnection } from './ClientConnection'\n// TODO: would be nice to only have a dependency on ClientConnection, and not on Connection\nimport Connection from './Connection.js'\nimport { Debugger } from './Debugger.js'\nimport { DirectConnection } from './DirectConnection.js'\nimport Document from './Document.js'\nimport {\n AwarenessUpdate,\n Configuration,\n ConnectionConfiguration,\n HookName,\n HookPayload,\n beforeBroadcastStatelessPayload,\n onChangePayload,\n onDisconnectPayload,\n onListenPayload,\n onStoreDocumentPayload,\n} from './types.js'\nimport { getParameters } from './util/getParameters'\n\nexport const defaultConfiguration = {\n name: null,\n port: 80,\n address: '0.0.0.0',\n timeout: 30000,\n debounce: 2000,\n maxDebounce: 10000,\n quiet: false,\n yDocOptions: {\n gc: true,\n gcFilter: () => true,\n },\n}\n\n/**\n * Hocuspocus Server\n */\nexport class Hocuspocus {\n configuration: Configuration = {\n ...defaultConfiguration,\n extensions: [],\n onConfigure: () => new Promise(r => r(null)),\n onListen: () => new Promise(r => r(null)),\n onUpgrade: () => new Promise(r => r(null)),\n onConnect: () => new Promise(r => r(null)),\n connected: () => new Promise(r => r(null)),\n beforeHandleMessage: () => new Promise(r => r(null)),\n beforeBroadcastStateless: () => new Promise(r => r(null)),\n onStateless: () => new Promise(r => r(null)),\n onChange: () => new Promise(r => r(null)),\n onLoadDocument: () => new Promise(r => r(null)),\n onStoreDocument: () => new Promise(r => r(null)),\n afterStoreDocument: () => new Promise(r => r(null)),\n onAwarenessUpdate: () => new Promise(r => r(null)),\n onRequest: () => new Promise(r => r(null)),\n onDisconnect: () => new Promise(r => r(null)),\n onDestroy: () => new Promise(r => r(null)),\n }\n\n documents: Map = new Map()\n\n httpServer?: HTTPServer\n\n webSocketServer?: WebSocketServer\n\n debugger = new Debugger()\n\n constructor(configuration?: Partial) {\n if (configuration) {\n this.configure(configuration)\n }\n }\n\n /**\n * Configure the server\n */\n configure(configuration: Partial): Hocuspocus {\n this.configuration = {\n ...this.configuration,\n ...configuration,\n }\n\n this.configuration.extensions.sort((a, b) => {\n const one = typeof a.priority === 'undefined' ? 100 : a.priority\n const two = typeof b.priority === 'undefined' ? 100 : b.priority\n\n if (one > two) {\n return -1\n }\n\n if (one < two) {\n return 1\n }\n\n return 0\n })\n\n this.configuration.extensions.push({\n onConfigure: this.configuration.onConfigure,\n onListen: this.configuration.onListen,\n onUpgrade: this.configuration.onUpgrade,\n onConnect: this.configuration.onConnect,\n connected: this.configuration.connected,\n onAuthenticate: this.configuration.onAuthenticate,\n onLoadDocument: this.configuration.onLoadDocument,\n beforeHandleMessage: this.configuration.beforeHandleMessage,\n beforeBroadcastStateless: this.configuration.beforeBroadcastStateless,\n onStateless: this.configuration.onStateless,\n onChange: this.configuration.onChange,\n onStoreDocument: this.configuration.onStoreDocument,\n afterStoreDocument: this.configuration.afterStoreDocument,\n onAwarenessUpdate: this.configuration.onAwarenessUpdate,\n onRequest: this.configuration.onRequest,\n onDisconnect: this.configuration.onDisconnect,\n onDestroy: this.configuration.onDestroy,\n })\n\n this.hooks('onConfigure', {\n configuration: this.configuration,\n version: meta.version,\n instance: this,\n })\n\n return this\n }\n\n get requiresAuthentication(): boolean {\n return !!this.configuration.extensions.find(extension => {\n return extension.onAuthenticate !== undefined\n })\n }\n\n /**\n * Start the server\n */\n async listen(\n portOrCallback: number | ((data: onListenPayload) => Promise) | null = null,\n callback: any = null,\n ): Promise {\n if (typeof portOrCallback === 'number') {\n this.configuration.port = portOrCallback\n }\n\n if (typeof portOrCallback === 'function') {\n this.configuration.extensions.push({\n onListen: portOrCallback,\n })\n }\n\n if (typeof callback === 'function') {\n this.configuration.extensions.push({\n onListen: callback,\n })\n }\n\n const webSocketServer = new WebSocketServer({ noServer: true })\n\n webSocketServer.on('connection', async (incoming: WebSocket, request: IncomingMessage) => {\n\n incoming.on('error', error => {\n /**\n * Handle a ws instance error, which is required to prevent\n * the server from crashing when one happens\n * See https://github.com/websockets/ws/issues/1777#issuecomment-660803472\n * @private\n */\n this.debugger.log('Error emitted from webSocket instance:')\n this.debugger.log(error)\n })\n\n this.handleConnection(incoming, request)\n })\n\n const server = createServer(async (request, response) => {\n try {\n await this.hooks('onRequest', { request, response, instance: this })\n\n // default response if all prior hooks don't interfere\n response.writeHead(200, { 'Content-Type': 'text/plain' })\n response.end('OK')\n } catch (error) {\n // if a hook rejects and the error is empty, do nothing\n // this is only meant to prevent later hooks and the\n // default handler to do something. if a error is present\n // just rethrow it\n if (error) {\n throw error\n }\n }\n })\n\n server.on('upgrade', async (request, socket, head) => {\n try {\n await this.hooks('onUpgrade', {\n request,\n socket,\n head,\n instance: this,\n })\n\n // let the default websocket server handle the connection if\n // prior hooks don't interfere\n webSocketServer.handleUpgrade(request, socket, head, ws => {\n webSocketServer.emit('connection', ws, request)\n })\n } catch (error) {\n // if a hook rejects and the error is empty, do nothing\n // this is only meant to prevent later hooks and the\n // default handler to do something. if a error is present\n // just rethrow it\n\n // TODO: why?\n if (error) {\n throw error\n }\n }\n })\n\n this.httpServer = server\n this.webSocketServer = webSocketServer\n\n return new Promise((resolve: Function, reject: Function) => {\n server.listen({\n port: this.configuration.port,\n host: this.configuration.address,\n } as ListenOptions, async () => {\n if (!this.configuration.quiet && process.env.NODE_ENV !== 'testing') {\n this.showStartScreen()\n }\n\n const onListenPayload = {\n instance: this,\n configuration: this.configuration,\n port: this.address.port,\n }\n\n try {\n await this.hooks('onListen', onListenPayload)\n resolve(this)\n } catch (e) {\n reject(e)\n }\n })\n })\n }\n\n get address(): AddressInfo {\n return (this.httpServer?.address() || {\n port: this.configuration.port,\n address: this.configuration.address,\n family: 'IPv4',\n }) as AddressInfo\n }\n\n get URL(): string {\n return `${this.configuration.address}:${this.address.port}`\n }\n\n get webSocketURL(): string {\n return `ws://${this.URL}`\n }\n\n get httpURL(): string {\n return `http://${this.URL}`\n }\n\n private showStartScreen() {\n const name = this.configuration.name ? ` (${this.configuration.name})` : ''\n\n console.log()\n console.log(` ${kleur.cyan(`Hocuspocus v${meta.version}${name}`)}${kleur.green(' running at:')}`)\n console.log()\n console.log(` > HTTP: ${kleur.cyan(`${this.httpURL}`)}`)\n console.log(` > WebSocket: ${this.webSocketURL}`)\n\n const extensions = this.configuration?.extensions.map(extension => {\n return extension.constructor?.name\n })\n .filter(name => name)\n .filter(name => name !== 'Object')\n\n if (!extensions.length) {\n return\n }\n\n console.log()\n console.log(' Extensions:')\n\n extensions\n .forEach(name => {\n console.log(` - ${name}`)\n })\n\n console.log()\n console.log(` ${kleur.green('Ready.')}`)\n console.log()\n }\n\n /**\n * Get the total number of active documents\n */\n getDocumentsCount(): number {\n return this.documents.size\n }\n\n /**\n * Get the total number of active connections\n */\n getConnectionsCount(): number {\n return Array.from(this.documents.values()).reduce((acc, document) => {\n acc += document.getConnectionsCount()\n return acc\n }, 0)\n }\n\n /**\n * Force close one or more connections\n */\n closeConnections(documentName?: string) {\n // Iterate through all connections for all documents\n // and invoke their close method, which is a graceful\n // disconnect wrapper around the underlying websocket.close\n this.documents.forEach((document: Document) => {\n // If a documentName was specified, bail if it doesnt match\n if (documentName && document.name !== documentName) {\n return\n }\n\n document.connections.forEach(({ connection }) => {\n connection.close(ResetConnection)\n })\n })\n }\n\n /**\n * Destroy the server\n */\n async destroy(): Promise {\n this.httpServer?.close()\n\n try {\n this.webSocketServer?.close()\n this.webSocketServer?.clients.forEach(client => {\n client.terminate()\n })\n } catch (error) {\n console.error(error)\n //\n }\n\n this.debugger.flush()\n\n await this.hooks('onDestroy', { instance: this })\n }\n\n /**\n * The `handleConnection` method receives incoming WebSocket connections,\n * runs all hooks:\n *\n * - onConnect for all connections\n * - onAuthenticate only if required\n *\n * … and if nothings fails it’ll fully establish the connection and\n * load the Document then.\n */\n handleConnection(incoming: WebSocket, request: IncomingMessage): void {\n const clientConnection = new ClientConnection(incoming, request, this, this.hooks.bind(this), this.debugger, {\n requiresAuthentication: this.requiresAuthentication,\n timeout: this.configuration.timeout,\n })\n clientConnection.onClose((document: Document, hookPayload: onDisconnectPayload) => {\n // Check if there are still no connections to the document, as these hooks\n // may take some time to resolve (e.g. database queries). If a\n // new connection were to come in during that time it would rely on the\n // document in the map that we remove now.\n if (document.getConnectionsCount() > 0) {\n return\n }\n\n // If it’s the last connection, we need to make sure to store the\n // document. Use the debounce helper, to clear running timers,\n // but make it run immediately (`true`).\n // Only run this if the document has finished loading earlier (i.e. not to persist the empty\n // ydoc if the onLoadDocument hook returned an error)\n if (!document.isLoading) {\n this.debounce(`onStoreDocument-${document.name}`, () => {\n this.storeDocumentHooks(document, hookPayload)\n }, true)\n } else {\n // Remove document from memory immediately\n this.documents.delete(document.name)\n document.destroy()\n }\n })\n }\n\n /**\n * Handle update of the given document\n */\n private handleDocumentUpdate(document: Document, connection: Connection | undefined, update: Uint8Array, request?: IncomingMessage): void {\n const hookPayload: onChangePayload | onStoreDocumentPayload = {\n instance: this,\n clientsCount: document.getConnectionsCount(),\n context: connection?.context || {},\n document,\n documentName: document.name,\n requestHeaders: request?.headers ?? {},\n requestParameters: getParameters(request),\n socketId: connection?.socketId ?? '',\n update,\n }\n\n this.hooks('onChange', hookPayload).catch(error => {\n // TODO: what's the intention of this catch -> throw?\n throw error\n })\n\n // If the update was received through other ways than the\n // WebSocket connection, we don’t need to feel responsible for\n // storing the content.\n if (!connection) {\n return\n }\n\n this.debounce(`onStoreDocument-${document.name}`, () => {\n this.storeDocumentHooks(document, hookPayload)\n })\n }\n\n timers: Map = new Map()\n\n /**\n * debounce the given function, using the given identifier\n */\n debounce(id: string, func: Function, immediately = false) {\n const old = this.timers.get(id)\n const start = old?.start || Date.now()\n\n const run = () => {\n this.timers.delete(id)\n func()\n }\n\n if (old?.timeout) {\n clearTimeout(old.timeout)\n }\n\n if (immediately) {\n return run()\n }\n\n if (Date.now() - start >= this.configuration.maxDebounce) {\n return run()\n }\n\n this.timers.set(id, {\n start,\n timeout: setTimeout(run, this.configuration.debounce),\n })\n }\n\n /**\n * Create a new document by the given request\n */\n public async createDocument(documentName: string, request: Partial>, socketId: string, connection: ConnectionConfiguration, context?: any): Promise {\n if (this.documents.has(documentName)) {\n const document = this.documents.get(documentName)\n\n if (document) {\n return document\n }\n }\n\n const document = new Document(documentName, this.debugger, this.configuration.yDocOptions)\n this.documents.set(documentName, document)\n\n const hookPayload = {\n instance: this,\n context,\n connection,\n document,\n documentName,\n socketId,\n requestHeaders: request.headers,\n requestParameters: getParameters(request),\n }\n\n try {\n await this.hooks('onLoadDocument', hookPayload, (loadedDocument: Doc | undefined) => {\n // if a hook returns a Y-Doc, encode the document state as update\n // and apply it to the newly created document\n // Note: instanceof doesn't work, because Doc !== Doc for some reason I don't understand\n if (\n loadedDocument?.constructor.name === 'Document'\n || loadedDocument?.constructor.name === 'Doc'\n ) {\n applyUpdate(document, encodeStateAsUpdate(loadedDocument))\n }\n })\n } catch (e) {\n this.closeConnections(documentName)\n this.documents.delete(documentName)\n throw e\n }\n\n document.isLoading = false\n await this.hooks('afterLoadDocument', hookPayload)\n\n document.onUpdate((document: Document, connection: Connection, update: Uint8Array) => {\n this.handleDocumentUpdate(document, connection, update, connection?.request)\n })\n\n document.beforeBroadcastStateless((document: Document, stateless: string) => {\n const hookPayload: beforeBroadcastStatelessPayload = {\n document,\n documentName: document.name,\n payload: stateless,\n }\n\n this.hooks('beforeBroadcastStateless', hookPayload)\n })\n\n document.awareness.on('update', (update: AwarenessUpdate) => {\n this.hooks('onAwarenessUpdate', {\n ...hookPayload,\n ...update,\n awareness: document.awareness,\n states: awarenessStatesToArray(document.awareness.getStates()),\n })\n })\n\n return document\n }\n\n storeDocumentHooks(document: Document, hookPayload: onStoreDocumentPayload) {\n this.hooks('onStoreDocument', hookPayload)\n .catch(error => {\n if (error?.message) {\n throw error\n }\n })\n .then(() => {\n this.hooks('afterStoreDocument', hookPayload).then(() => {\n // Remove document from memory.\n\n if (document.getConnectionsCount() > 0) {\n return\n }\n\n this.documents.delete(document.name)\n document.destroy()\n })\n })\n }\n\n /**\n * Run the given hook on all configured extensions.\n * Runs the given callback after each hook.\n */\n hooks(name: HookName, payload: HookPayload, callback: Function | null = null): Promise {\n const { extensions } = this.configuration\n\n // create a new `thenable` chain\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve\n let chain = Promise.resolve()\n\n extensions\n // get me all extensions which have the given hook\n .filter(extension => typeof extension[name] === 'function')\n // run through all the configured hooks\n .forEach(extension => {\n chain = chain\n .then(() => (extension[name] as any)?.(payload))\n .catch(error => {\n // make sure to log error messages\n if (error?.message) {\n console.error(`[${name}]`, error.message)\n }\n\n throw error\n })\n\n if (callback) {\n chain = chain.then((...args: any[]) => callback(...args))\n }\n })\n\n return chain\n }\n\n enableDebugging() {\n this.debugger.enable()\n }\n\n enableMessageLogging() {\n this.debugger.enable()\n this.debugger.verbose()\n }\n\n disableLogging() {\n this.debugger.quiet()\n }\n\n disableDebugging() {\n this.debugger.disable()\n }\n\n flushMessageLogs() {\n this.debugger.flush()\n\n return this\n }\n\n getMessageLogs() {\n return this.debugger.get()?.logs\n }\n\n async openDirectConnection(documentName: string, context?: any): Promise {\n const connectionConfig: ConnectionConfiguration = {\n isAuthenticated: true,\n readOnly: false,\n requiresAuthentication: true,\n }\n\n const document: Document = await this.createDocument(\n documentName,\n {}, // direct connection has no request params\n uuid(),\n connectionConfig,\n context,\n )\n\n return new DirectConnection(document, this, context)\n }\n}\n\nexport const Server = new Hocuspocus()\n"],"names":["create","length","object.length","object.hasProperty","map.create","string.fromCamelCase","conditions.undefinedToNull","storage.varStorage","f.isOneOf","buffer.createUint8ArrayViewFromArrayBuffer","binary.BITS7","binary.BIT8","math.floor","string.utf8TextEncoder","string.encodeUtf8","math.min","math.max","error.create","number.MAX_SAFE_INTEGER","string.utf8TextDecoder","map.setIfUndefined","set.create","array.from","time.getUnixTime","f.equalityDeep","encoding.createEncoder","encoding.writeVarUint","encoding.writeVarString","encoding.toUint8Array","decoding.createDecoder","decoding.readVarUint","decoding.readVarString","Y","encoding.writeVarUint8Array","decoding.readVarUint8Array","MessageType","writeAuthenticated","writePermissionDenied","AsyncLock","WsReadyStates","ConnectionTimeout","Forbidden","Doc","applyUpdate","encodeStateAsUpdate","URLSearchParams","uuid","SocketIncomingMessage","Unauthorized","WebSocketServer","createServer","kleur","ResetConnection","awarenessStatesToArray"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@hocuspocus/server/dist/hocuspocus-server.esm.js b/node_modules/@hocuspocus/server/dist/hocuspocus-server.esm.js +index e48693b..544ad88 100644 +--- a/node_modules/@hocuspocus/server/dist/hocuspocus-server.esm.js ++++ b/node_modules/@hocuspocus/server/dist/hocuspocus-server.esm.js +@@ -1,18 +1,36 @@ + import AsyncLock from 'async-lock'; +-import { writeAuthenticated, writePermissionDenied, WsReadyStates, ConnectionTimeout, Forbidden, ResetConnection, Unauthorized, awarenessStatesToArray } from '@hocuspocus/common'; ++import { writeAuthenticated, writePermissionDenied, WsReadyStates, ConnectionTimeout, Forbidden, Unauthorized, ResetConnection, awarenessStatesToArray } from '@hocuspocus/common'; + import * as Y from 'yjs'; + import { Doc, applyUpdate, encodeStateAsUpdate } from 'yjs'; + import { createServer } from 'http'; +-import { URLSearchParams } from 'url'; +-import { WebSocketServer } from 'ws'; +-import { v4 } from 'uuid'; + import kleur from 'kleur'; ++import { v4 } from 'uuid'; ++import { WebSocketServer } from 'ws'; ++import { URLSearchParams } from 'url'; ++ ++/** ++ * Utility module to work with sets. ++ * ++ * @module set ++ */ ++ ++const create$2 = () => new Set(); ++ ++/** ++ * Utility module to work with Arrays. ++ * ++ * @module array ++ */ + + /** +- * Utility module to work with strings. ++ * Transforms something array-like to an actual Array. + * +- * @module string ++ * @function ++ * @template T ++ * @param {ArrayLike|Iterable} arraylike ++ * @return {T} + */ ++const from = Array.from; + + /** + * @param {string} s +@@ -95,7 +113,7 @@ if (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) { + * + * @function + */ +-const create$2 = () => new Map(); ++const create$1 = () => new Map(); + + /** + * Get map property. Create T if property is undefined and set T on map. +@@ -190,30 +208,6 @@ try { + /* c8 ignore next */ + const varStorage = _localStorage; + +-/** +- * Utility module to work with sets. +- * +- * @module set +- */ +- +-const create$1 = () => new Set(); +- +-/** +- * Utility module to work with Arrays. +- * +- * @module array +- */ +- +-/** +- * Transforms something array-like to an actual Array. +- * +- * @function +- * @template T +- * @param {ArrayLike|Iterable} arraylike +- * @return {T} +- */ +-const from = Array.from; +- + /** + * Utility functions for working with EcmaScript objects. + * +@@ -345,7 +339,6 @@ const equalityDeep = (a, b) => { + */ + // @ts-ignore + const isOneOf = (value, options) => options.includes(value); +-/* c8 ignore stop */ + + /** + * Isomorphic module to work access the environment (query params, env variables). +@@ -371,7 +364,7 @@ let params; + const computeParams = () => { + if (params === undefined) { + if (isNode) { +- params = create$2(); ++ params = create$1(); + const pargs = process.argv; + let currParamName = null; + for (let i = 0; i < pargs.length; i++) { +@@ -393,7 +386,7 @@ const computeParams = () => { + } + // in ReactNative for example this would not be true (unless connected to the Remote Debugger) + } else if (typeof location === 'object') { +- params = create$2(); // eslint-disable-next-line no-undef ++ params = create$1(); // eslint-disable-next-line no-undef + (location.search || '?').slice(1).split('&').forEach((kv) => { + if (kv.length !== 0) { + const [key, value] = kv.split('='); +@@ -402,7 +395,7 @@ const computeParams = () => { + } + }); + } else { +- params = create$2(); ++ params = create$1(); + } + } + return params +@@ -939,109 +932,6 @@ class IncomingMessage { + } + } + +-/** +- * @module sync-protocol +- */ +- +-/** +- * @typedef {Map} StateMap +- */ +- +-/** +- * Core Yjs defines two message types: +- * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2. +- * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it +- * received all information from the remote client. +- * +- * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection +- * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both +- * SyncStep2 and SyncDone, it is assured that it is synced to the remote client. +- * +- * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1. +- * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies +- * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the +- * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can +- * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them. +- * Therefore it is necesarry that the client initiates the sync. +- * +- * Construction of a message: +- * [messageType : varUint, message definition..] +- * +- * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol! +- * +- * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer) +- */ +- +-const messageYjsSyncStep1 = 0; +-const messageYjsSyncStep2 = 1; +-const messageYjsUpdate = 2; +- +-/** +- * Create a sync step 1 message based on the state of the current shared document. +- * +- * @param {encoding.Encoder} encoder +- * @param {Y.Doc} doc +- */ +-const writeSyncStep1 = (encoder, doc) => { +- writeVarUint(encoder, messageYjsSyncStep1); +- const sv = Y.encodeStateVector(doc); +- writeVarUint8Array(encoder, sv); +-}; +- +-/** +- * @param {encoding.Encoder} encoder +- * @param {Y.Doc} doc +- * @param {Uint8Array} [encodedStateVector] +- */ +-const writeSyncStep2 = (encoder, doc, encodedStateVector) => { +- writeVarUint(encoder, messageYjsSyncStep2); +- writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector)); +-}; +- +-/** +- * Read SyncStep1 message and reply with SyncStep2. +- * +- * @param {decoding.Decoder} decoder The reply to the received message +- * @param {encoding.Encoder} encoder The received message +- * @param {Y.Doc} doc +- */ +-const readSyncStep1 = (decoder, encoder, doc) => +- writeSyncStep2(encoder, doc, readVarUint8Array(decoder)); +- +-/** +- * Read and apply Structs and then DeleteStore to a y instance. +- * +- * @param {decoding.Decoder} decoder +- * @param {Y.Doc} doc +- * @param {any} transactionOrigin +- */ +-const readSyncStep2 = (decoder, doc, transactionOrigin) => { +- try { +- Y.applyUpdate(doc, readVarUint8Array(decoder), transactionOrigin); +- } catch (error) { +- // This catches errors that are thrown by event handlers +- console.error('Caught error while handling a Yjs update', error); +- } +-}; +- +-/** +- * @param {encoding.Encoder} encoder +- * @param {Uint8Array} update +- */ +-const writeUpdate = (encoder, update) => { +- writeVarUint(encoder, messageYjsUpdate); +- writeVarUint8Array(encoder, update); +-}; +- +-/** +- * Read and apply Structs and then DeleteStore to a y instance. +- * +- * @param {decoding.Decoder} decoder +- * @param {Y.Doc} doc +- * @param {any} transactionOrigin +- */ +-const readUpdate = readSyncStep2; +- + /** + * Utility module to work with time. + * +@@ -1072,7 +962,7 @@ class Observable { + * Some desc. + * @type {Map} + */ +- this._observers = create$2(); ++ this._observers = create$1(); + } + + /** +@@ -1080,7 +970,7 @@ class Observable { + * @param {function} f + */ + on (name, f) { +- setIfUndefined(this._observers, name, create$1).add(f); ++ setIfUndefined(this._observers, name, create$2).add(f); + } + + /** +@@ -1123,11 +1013,11 @@ class Observable { + */ + emit (name, args) { + // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called. +- return from((this._observers.get(name) || create$2()).values()).forEach(f => f(...args)) ++ return from((this._observers.get(name) || create$1()).values()).forEach(f => f(...args)) + } + + destroy () { +- this._observers = create$2(); ++ this._observers = create$1(); + } + } + +@@ -1392,6 +1282,109 @@ const applyAwarenessUpdate = (awareness, update, origin) => { + } + }; + ++/** ++ * @module sync-protocol ++ */ ++ ++/** ++ * @typedef {Map} StateMap ++ */ ++ ++/** ++ * Core Yjs defines two message types: ++ * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2. ++ * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it ++ * received all information from the remote client. ++ * ++ * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection ++ * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both ++ * SyncStep2 and SyncDone, it is assured that it is synced to the remote client. ++ * ++ * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1. ++ * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies ++ * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the ++ * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can ++ * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them. ++ * Therefore it is necesarry that the client initiates the sync. ++ * ++ * Construction of a message: ++ * [messageType : varUint, message definition..] ++ * ++ * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol! ++ * ++ * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer) ++ */ ++ ++const messageYjsSyncStep1 = 0; ++const messageYjsSyncStep2 = 1; ++const messageYjsUpdate = 2; ++ ++/** ++ * Create a sync step 1 message based on the state of the current shared document. ++ * ++ * @param {encoding.Encoder} encoder ++ * @param {Y.Doc} doc ++ */ ++const writeSyncStep1 = (encoder, doc) => { ++ writeVarUint(encoder, messageYjsSyncStep1); ++ const sv = Y.encodeStateVector(doc); ++ writeVarUint8Array(encoder, sv); ++}; ++ ++/** ++ * @param {encoding.Encoder} encoder ++ * @param {Y.Doc} doc ++ * @param {Uint8Array} [encodedStateVector] ++ */ ++const writeSyncStep2 = (encoder, doc, encodedStateVector) => { ++ writeVarUint(encoder, messageYjsSyncStep2); ++ writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector)); ++}; ++ ++/** ++ * Read SyncStep1 message and reply with SyncStep2. ++ * ++ * @param {decoding.Decoder} decoder The reply to the received message ++ * @param {encoding.Encoder} encoder The received message ++ * @param {Y.Doc} doc ++ */ ++const readSyncStep1 = (decoder, encoder, doc) => ++ writeSyncStep2(encoder, doc, readVarUint8Array(decoder)); ++ ++/** ++ * Read and apply Structs and then DeleteStore to a y instance. ++ * ++ * @param {decoding.Decoder} decoder ++ * @param {Y.Doc} doc ++ * @param {any} transactionOrigin ++ */ ++const readSyncStep2 = (decoder, doc, transactionOrigin) => { ++ try { ++ Y.applyUpdate(doc, readVarUint8Array(decoder), transactionOrigin); ++ } catch (error) { ++ // This catches errors that are thrown by event handlers ++ console.error('Caught error while handling a Yjs update', error); ++ } ++}; ++ ++/** ++ * @param {encoding.Encoder} encoder ++ * @param {Uint8Array} update ++ */ ++const writeUpdate = (encoder, update) => { ++ writeVarUint(encoder, messageYjsUpdate); ++ writeVarUint8Array(encoder, update); ++}; ++ ++/** ++ * Read and apply Structs and then DeleteStore to a y instance. ++ * ++ * @param {decoding.Decoder} decoder ++ * @param {Y.Doc} doc ++ * @param {any} transactionOrigin ++ */ ++const readUpdate = readSyncStep2; ++ + var MessageType; + (function (MessageType) { + MessageType[MessageType["Unknown"] = -1] = "Unknown"; +@@ -1403,6 +1396,7 @@ var MessageType; + MessageType[MessageType["Stateless"] = 5] = "Stateless"; + MessageType[MessageType["BroadcastStateless"] = 6] = "BroadcastStateless"; + MessageType[MessageType["CLOSE"] = 7] = "CLOSE"; ++ MessageType[MessageType["SyncStatus"] = 8] = "SyncStatus"; + })(MessageType || (MessageType = {})); + + class OutgoingMessage { +@@ -1470,7 +1464,14 @@ class OutgoingMessage { + writeVarString(this.encoder, payload); + return this; + } +- toUint8Array() { ++ // TODO: should this be write* or create* as method name? ++ writeSyncStatus(updateSaved) { ++ this.category = 'SyncStatus'; ++ writeVarUint(this.encoder, MessageType.SyncStatus); ++ writeVarUint(this.encoder, updateSaved ? 1 : 0); ++ return this; ++ } ++ toUint8Array() { + return toUint8Array(this.encoder); + } + } +@@ -1593,9 +1594,32 @@ class MessageReceiver { + category: 'SyncStep2', + }); + if (connection === null || connection === void 0 ? void 0 : connection.readOnly) { ++ // We're in read-only mode, so we can't apply the update. ++ // Let's use snapshotContainsUpdate to see if the update actually contains changes. ++ // If not, we can still ack the update ++ const snapshot = Y.snapshot(document); ++ const update = readVarUint8Array(message.decoder); ++ if (Y.snapshotContainsUpdate(snapshot, update)) { ++ // no new changes in update ++ const ackMessage = new OutgoingMessage(document.name) ++ .writeSyncStatus(true); ++ connection.send(ackMessage.toUint8Array()); ++ } ++ else { ++ // new changes in update that we can't apply, because readOnly ++ const ackMessage = new OutgoingMessage(document.name) ++ .writeSyncStatus(false); ++ connection.send(ackMessage.toUint8Array()); ++ } + break; + } + readSyncStep2(message.decoder, document, connection); ++ if (connection) { ++ // TODO: how should this work if connection is not set? should we use reply? ++ // reply is used by redis, but I'm unsure how that code path works ++ connection.send(new OutgoingMessage(document.name) ++ .writeSyncStatus(true).toUint8Array()); ++ } + break; + case messageYjsUpdate: + this.logger.log({ +@@ -1604,9 +1628,17 @@ class MessageReceiver { + category: 'Update', + }); + if (connection === null || connection === void 0 ? void 0 : connection.readOnly) { ++ connection.send(new OutgoingMessage(document.name) ++ .writeSyncStatus(false).toUint8Array()); + break; + } + readUpdate(message.decoder, document, connection); ++ if (connection) { ++ // TODO: how should this work if connection is not set? should we use reply? ++ // reply is used by redis, but I'm unsure how that code path works ++ connection.send(new OutgoingMessage(document.name) ++ .writeSyncStatus(true).toUint8Array()); ++ } + break; + default: + throw new Error(`Received a message with an unknown type: ${type}`); +@@ -2101,7 +2133,7 @@ var devDependencies = { + }; + var peerDependencies = { + "y-protocols": "^1.0.5", +- yjs: "^13.5.29" ++ yjs: "^13.6.4" + }; + var gitHead = "b3454a4ca289a84ddfb7fa5607a2d4b8d5c37e9d"; + var meta = { +@@ -2123,6 +2155,297 @@ var meta = { + gitHead: gitHead + }; + ++/** ++ * Get parameters by the given request ++ */ ++function getParameters(request) { ++ var _a; ++ const query = ((_a = request === null || request === void 0 ? void 0 : request.url) === null || _a === void 0 ? void 0 : _a.split('?')) || []; ++ return new URLSearchParams(query[1] ? query[1] : ''); ++} ++ ++/** ++ * The `ClientConnection` class is responsible for handling an incoming WebSocket ++ * ++ * TODO-refactor: ++ * - use event handlers instead of calling hooks directly, hooks should probably be called from Hocuspocus.ts ++ */ ++class ClientConnection { ++ /** ++ * The `ClientConnection` class receives incoming WebSocket connections, ++ * runs all hooks: ++ * ++ * - onConnect for all connections ++ * - onAuthenticate only if required ++ * ++ * … and if nothings fails it’ll fully establish the connection and ++ * load the Document then. ++ */ ++ constructor(websocket, request, documentProvider, ++ // TODO: change to events ++ hooks, debuggerTool, opts) { ++ this.websocket = websocket; ++ this.request = request; ++ this.documentProvider = documentProvider; ++ this.hooks = hooks; ++ this.debuggerTool = debuggerTool; ++ this.opts = opts; ++ // this map indicates whether a `Connection` instance has already taken over for incoming message for the key (i.e. documentName) ++ this.documentConnections = {}; ++ // While the connection will be establishing messages will ++ // be queued and handled later. ++ this.incomingMessageQueue = {}; ++ // While the connection is establishing, kee ++ this.documentConnectionsEstablished = new Set(); ++ // hooks payload by Document ++ this.hookPayloads = {}; ++ this.callbacks = { ++ onClose: [(document, payload) => { }], ++ }; ++ // Every new connection gets a unique identifier. ++ this.socketId = v4(); ++ // Once all hooks are run, we’ll fully establish the connection: ++ this.setUpNewConnection = async (documentName) => { ++ // Not an idle connection anymore, no need to close it then. ++ clearTimeout(this.closeIdleConnectionTimeout); ++ const hookPayload = this.hookPayloads[documentName]; ++ // If no hook interrupts, create a document and connection ++ const document = await this.documentProvider.createDocument(documentName, hookPayload.request, hookPayload.socketId, hookPayload.connection, hookPayload.context); ++ const instance = this.createConnection(this.websocket, document); ++ instance.onClose((document, event) => { ++ delete this.hookPayloads[documentName]; ++ delete this.documentConnections[documentName]; ++ delete this.incomingMessageQueue[documentName]; ++ this.documentConnectionsEstablished.delete(documentName); ++ if (Object.keys(this.documentConnections).length === 0) { ++ instance.webSocket.close(event === null || event === void 0 ? void 0 : event.code, event === null || event === void 0 ? void 0 : event.reason); // TODO: Move this to Hocuspocus connection handler ++ } ++ }); ++ this.documentConnections[documentName] = true; ++ // There’s no need to queue messages anymore. ++ // Let’s work through queued messages. ++ this.incomingMessageQueue[documentName].forEach(input => { ++ this.websocket.emit('message', input); ++ }); ++ this.hooks('connected', { ++ ...hookPayload, ++ documentName, ++ context: hookPayload.context, ++ connectionInstance: instance, ++ }); ++ }; ++ // This listener handles authentication messages and queues everything else. ++ this.handleQueueingMessage = async (data) => { ++ var _a; ++ try { ++ const tmpMsg = new IncomingMessage(data); ++ const documentName = readVarString(tmpMsg.decoder); ++ const type = readVarUint(tmpMsg.decoder); ++ if (!(type === MessageType.Auth && !this.documentConnectionsEstablished.has(documentName))) { ++ this.incomingMessageQueue[documentName].push(data); ++ return; ++ } ++ // Okay, we’ve got the authentication message we’re waiting for: ++ this.documentConnectionsEstablished.add(documentName); ++ // The 2nd integer contains the submessage type ++ // which will always be authentication when sent from client -> server ++ readVarUint(tmpMsg.decoder); ++ const token = readVarString(tmpMsg.decoder); ++ this.debuggerTool.log({ ++ direction: 'in', ++ type, ++ category: 'Token', ++ }); ++ try { ++ const hookPayload = this.hookPayloads[documentName]; ++ await this.hooks('onAuthenticate', { ++ token, ++ ...hookPayload, ++ documentName, ++ }, (contextAdditions) => { ++ // Hooks are allowed to give us even more context and we’ll merge everything together. ++ // We’ll pass the context to other hooks then. ++ hookPayload.context = { ...hookPayload.context, ...contextAdditions }; ++ }); ++ // All `onAuthenticate` hooks passed. ++ hookPayload.connection.isAuthenticated = true; ++ // Let the client know that authentication was successful. ++ const message = new OutgoingMessage(documentName).writeAuthenticated(hookPayload.connection.readOnly); ++ this.debuggerTool.log({ ++ direction: 'out', ++ type: message.type, ++ category: message.category, ++ }); ++ this.websocket.send(message.toUint8Array()); ++ // Time to actually establish the connection. ++ await this.setUpNewConnection(documentName); ++ } ++ catch (err) { ++ const error = err || Forbidden; ++ const message = new OutgoingMessage(documentName).writePermissionDenied((_a = error.reason) !== null && _a !== void 0 ? _a : 'permission-denied'); ++ this.debuggerTool.log({ ++ direction: 'out', ++ type: message.type, ++ category: message.category, ++ }); ++ // Ensure that the permission denied message is sent before the ++ // connection is closed ++ this.websocket.send(message.toUint8Array(), () => { ++ var _a, _b; ++ if (Object.keys(this.documentConnections).length === 0) { ++ try { ++ this.websocket.close((_a = error.code) !== null && _a !== void 0 ? _a : Forbidden.code, (_b = error.reason) !== null && _b !== void 0 ? _b : Forbidden.reason); ++ } ++ catch (closeError) { ++ // catch is needed in case invalid error code is returned by hook (that would fail sending the close message) ++ console.error(closeError); ++ this.websocket.close(Forbidden.code, Forbidden.reason); ++ } ++ } ++ }); ++ } ++ // Catch errors due to failed decoding of data ++ } ++ catch (error) { ++ console.error(error); ++ this.websocket.close(Unauthorized.code, Unauthorized.reason); ++ } ++ }; ++ this.messageHandler = async (data) => { ++ var _a, _b; ++ try { ++ const tmpMsg = new IncomingMessage(data); ++ const documentName = readVarString(tmpMsg.decoder); ++ if (this.documentConnections[documentName] === true) { ++ // we already have a `Connection` set up for this document ++ return; ++ } ++ const isFirst = this.incomingMessageQueue[documentName] === undefined; ++ if (isFirst) { ++ this.incomingMessageQueue[documentName] = []; ++ if (this.hookPayloads[documentName]) { ++ throw new Error('first message, but hookPayloads exists'); ++ } ++ const hookPayload = { ++ instance: this.documentProvider, ++ request: this.request, ++ connection: { ++ readOnly: false, ++ requiresAuthentication: this.opts.requiresAuthentication, ++ isAuthenticated: false, ++ }, ++ requestHeaders: this.request.headers, ++ requestParameters: getParameters(this.request), ++ socketId: this.socketId, ++ context: {}, ++ }; ++ this.hookPayloads[documentName] = hookPayload; ++ } ++ this.handleQueueingMessage(data); ++ if (isFirst) { ++ const hookPayload = this.hookPayloads[documentName]; ++ // if this is the first message, trigger onConnect & check if we can start the connection (only if no auth is required) ++ try { ++ await this.hooks('onConnect', { ...hookPayload, documentName }, (contextAdditions) => { ++ // merge context from all hooks ++ hookPayload.context = { ...hookPayload.context, ...contextAdditions }; ++ }); ++ if (hookPayload.connection.requiresAuthentication || this.documentConnectionsEstablished.has(documentName)) { ++ // Authentication is required, we’ll need to wait for the Authentication message. ++ return; ++ } ++ this.documentConnectionsEstablished.add(documentName); ++ await this.setUpNewConnection(documentName); ++ } ++ catch (err) { ++ // if a hook interrupts, close the websocket connection ++ const error = err || Forbidden; ++ try { ++ this.websocket.close((_a = error.code) !== null && _a !== void 0 ? _a : Forbidden.code, (_b = error.reason) !== null && _b !== void 0 ? _b : Forbidden.reason); ++ } ++ catch (closeError) { ++ // catch is needed in case invalid error code is returned by hook (that would fail sending the close message) ++ console.error(closeError); ++ this.websocket.close(Unauthorized.code, Unauthorized.reason); ++ } ++ } ++ } ++ } ++ catch (closeError) { ++ // catch is needed in case an invalid payload crashes the parsing of the Uint8Array ++ console.error(closeError); ++ this.websocket.close(Unauthorized.code, Unauthorized.reason); ++ } ++ }; ++ // Make sure to close an idle connection after a while. ++ this.closeIdleConnectionTimeout = setTimeout(() => { ++ websocket.close(Unauthorized.code, Unauthorized.reason); ++ }, opts.timeout); ++ websocket.on('message', this.messageHandler); ++ } ++ /** ++ * Set a callback that will be triggered when the connection is closed ++ */ ++ onClose(callback) { ++ this.callbacks.onClose.push(callback); ++ return this; ++ } ++ /** ++ * Create a new connection by the given request and document ++ */ ++ createConnection(connection, document) { ++ const hookPayload = this.hookPayloads[document.name]; ++ const instance = new Connection(connection, hookPayload.request, document, this.opts.timeout, hookPayload.socketId, hookPayload.context, hookPayload.connection.readOnly, this.debuggerTool); ++ instance.onClose(async (document, event) => { ++ const disconnectHookPayload = { ++ instance: this.documentProvider, ++ clientsCount: document.getConnectionsCount(), ++ context: hookPayload.context, ++ document, ++ socketId: hookPayload.socketId, ++ documentName: document.name, ++ requestHeaders: hookPayload.request.headers, ++ requestParameters: getParameters(hookPayload.request), ++ }; ++ await this.hooks('onDisconnect', hookPayload); ++ this.callbacks.onClose.forEach((callback => callback(document, disconnectHookPayload))); ++ }); ++ instance.onStatelessCallback(async (payload) => { ++ try { ++ return await this.hooks('onStateless', payload); ++ } ++ catch (error) { ++ // TODO: weird pattern, what's the use of this? ++ if (error === null || error === void 0 ? void 0 : error.message) { ++ throw error; ++ } ++ } ++ }); ++ instance.beforeHandleMessage((connection, update) => { ++ const beforeHandleMessagePayload = { ++ instance: this.documentProvider, ++ clientsCount: document.getConnectionsCount(), ++ context: hookPayload.context, ++ document, ++ socketId: hookPayload.socketId, ++ connection, ++ documentName: document.name, ++ requestHeaders: hookPayload.request.headers, ++ requestParameters: getParameters(hookPayload.request), ++ update, ++ }; ++ return this.hooks('beforeHandleMessage', beforeHandleMessagePayload); ++ }); ++ // If the WebSocket has already disconnected (wow, that was fast) – then ++ // immediately call close to cleanup the connection and document in memory. ++ if (connection.readyState === WsReadyStates.Closing ++ || connection.readyState === WsReadyStates.Closed) { ++ instance.close(); ++ } ++ return instance; ++ } ++} ++ + class DirectConnection { + /** + * Constructor. +@@ -2283,14 +2606,14 @@ class Hocuspocus { + }); + this.handleConnection(incoming, request); + }); +- const server = createServer((request, response) => { +- this.hooks('onRequest', { request, response, instance: this }) +- .then(() => { ++ const server = createServer(async (request, response) => { ++ try { ++ await this.hooks('onRequest', { request, response, instance: this }); + // default response if all prior hooks don't interfere + response.writeHead(200, { 'Content-Type': 'text/plain' }); + response.end('OK'); +- }) +- .catch(error => { ++ } ++ catch (error) { + // if a hook rejects and the error is empty, do nothing + // this is only meant to prevent later hooks and the + // default handler to do something. if a error is present +@@ -2298,31 +2621,32 @@ class Hocuspocus { + if (error) { + throw error; + } +- }); ++ } + }); +- server.on('upgrade', (request, socket, head) => { +- this.hooks('onUpgrade', { +- request, +- socket, +- head, +- instance: this, +- }) +- .then(() => { ++ server.on('upgrade', async (request, socket, head) => { ++ try { ++ await this.hooks('onUpgrade', { ++ request, ++ socket, ++ head, ++ instance: this, ++ }); + // let the default websocket server handle the connection if + // prior hooks don't interfere + webSocketServer.handleUpgrade(request, socket, head, ws => { + webSocketServer.emit('connection', ws, request); + }); +- }) +- .catch(error => { ++ } ++ catch (error) { + // if a hook rejects and the error is empty, do nothing + // this is only meant to prevent later hooks and the + // default handler to do something. if a error is present + // just rethrow it ++ // TODO: why? + if (error) { + throw error; + } +- }); ++ } + }); + this.httpServer = server; + this.webSocketServer = webSocketServer; +@@ -2330,7 +2654,7 @@ class Hocuspocus { + server.listen({ + port: this.configuration.port, + host: this.configuration.address, +- }, () => { ++ }, async () => { + if (!this.configuration.quiet && process.env.NODE_ENV !== 'testing') { + this.showStartScreen(); + } +@@ -2339,9 +2663,13 @@ class Hocuspocus { + configuration: this.configuration, + port: this.address.port, + }; +- this.hooks('onListen', onListenPayload) +- .then(() => resolve(this)) +- .catch(error => reject(error)); ++ try { ++ await this.hooks('onListen', onListenPayload); ++ resolve(this); ++ } ++ catch (e) { ++ reject(e); ++ } + }); + }); + } +@@ -2448,188 +2776,35 @@ class Hocuspocus { + * … and if nothings fails it’ll fully establish the connection and + * load the Document then. + */ +- handleConnection(incoming, request, context = null) { +- // Make sure to close an idle connection after a while. +- const closeIdleConnection = setTimeout(() => { +- incoming.close(Unauthorized.code, Unauthorized.reason); +- }, this.configuration.timeout); +- // Every new connection gets a unique identifier. +- const socketId = v4(); +- // To override settings for specific connections, we’ll +- // keep track of a few things in the `ConnectionConfiguration`. +- const connection = { +- readOnly: false, ++ handleConnection(incoming, request) { ++ const clientConnection = new ClientConnection(incoming, request, this, this.hooks.bind(this), this.debugger, { + requiresAuthentication: this.requiresAuthentication, +- isAuthenticated: false, +- }; +- // The `onConnect` and `onAuthenticate` hooks need some context +- // to decide who’s connecting, so let’s put it together: +- const hookPayload = { +- instance: this, +- request, +- requestHeaders: request.headers, +- requestParameters: Hocuspocus.getParameters(request), +- socketId, +- connection, +- }; +- // this map indicates whether a `Connection` instance has already taken over for incoming message for the key (i.e. documentName) +- const documentConnections = {}; +- // While the connection will be establishing messages will +- // be queued and handled later. +- const incomingMessageQueue = {}; +- // While the connection is establishing +- const connectionEstablishing = {}; +- // Once all hooks are run, we’ll fully establish the connection: +- const setUpNewConnection = async (documentName) => { +- // Not an idle connection anymore, no need to close it then. +- clearTimeout(closeIdleConnection); +- // If no hook interrupts, create a document and connection +- const document = await this.createDocument(documentName, request, socketId, connection, context); +- const instance = this.createConnection(incoming, request, document, socketId, connection.readOnly, context); +- instance.onClose((document, event) => { +- delete documentConnections[documentName]; +- delete incomingMessageQueue[documentName]; +- delete connectionEstablishing[documentName]; +- if (Object.keys(documentConnections).length === 0) { +- instance.webSocket.close(event === null || event === void 0 ? void 0 : event.code, event === null || event === void 0 ? void 0 : event.reason); // TODO: Move this to Hocuspocus connection handler +- } +- }); +- documentConnections[documentName] = true; +- // There’s no need to queue messages anymore. +- // Let’s work through queued messages. +- incomingMessageQueue[documentName].forEach(input => { +- incoming.emit('message', input); +- }); +- this.hooks('connected', { +- ...hookPayload, +- documentName, +- context, +- connectionInstance: instance, +- }); +- }; +- // This listener handles authentication messages and queues everything else. +- const handleQueueingMessage = (data) => { +- try { +- const tmpMsg = new IncomingMessage(data); +- const documentName = readVarString(tmpMsg.decoder); +- const type = readVarUint(tmpMsg.decoder); +- // Okay, we’ve got the authentication message we’re waiting for: +- if (type === MessageType.Auth && !connectionEstablishing[documentName]) { +- connectionEstablishing[documentName] = true; +- // The 2nd integer contains the submessage type +- // which will always be authentication when sent from client -> server +- readVarUint(tmpMsg.decoder); +- const token = readVarString(tmpMsg.decoder); +- this.debugger.log({ +- direction: 'in', +- type, +- category: 'Token', +- }); +- this.hooks('onAuthenticate', { +- token, +- ...hookPayload, +- documentName, +- }, (contextAdditions) => { +- // Hooks are allowed to give us even more context and we’ll merge everything together. +- // We’ll pass the context to other hooks then. +- context = { ...context, ...contextAdditions }; +- }) +- .then(() => { +- // All `onAuthenticate` hooks passed. +- connection.isAuthenticated = true; +- // Let the client know that authentication was successful. +- const message = new OutgoingMessage(documentName).writeAuthenticated(connection.readOnly); +- this.debugger.log({ +- direction: 'out', +- type: message.type, +- category: message.category, +- }); +- incoming.send(message.toUint8Array()); +- }) +- .then(() => { +- // Time to actually establish the connection. +- return setUpNewConnection(documentName); +- }) +- .catch((error = Forbidden) => { +- var _a; +- const message = new OutgoingMessage(documentName).writePermissionDenied((_a = error.reason) !== null && _a !== void 0 ? _a : 'permission-denied'); +- this.debugger.log({ +- direction: 'out', +- type: message.type, +- category: message.category, +- }); +- // Ensure that the permission denied message is sent before the +- // connection is closed +- incoming.send(message.toUint8Array(), () => { +- var _a, _b; +- if (Object.keys(documentConnections).length === 0) { +- try { +- incoming.close((_a = error.code) !== null && _a !== void 0 ? _a : Forbidden.code, (_b = error.reason) !== null && _b !== void 0 ? _b : Forbidden.reason); +- } +- catch (closeError) { +- // catch is needed in case invalid error code is returned by hook (that would fail sending the close message) +- console.error(closeError); +- incoming.close(Forbidden.code, Forbidden.reason); +- } +- } +- }); +- }); +- } +- else { +- incomingMessageQueue[documentName].push(data); +- } +- // Catch errors due to failed decoding of data +- } +- catch (error) { +- console.error(error); +- incoming.close(Unauthorized.code, Unauthorized.reason); ++ timeout: this.configuration.timeout, ++ }); ++ clientConnection.onClose((document, hookPayload) => { ++ // Check if there are still no connections to the document, as these hooks ++ // may take some time to resolve (e.g. database queries). If a ++ // new connection were to come in during that time it would rely on the ++ // document in the map that we remove now. ++ if (document.getConnectionsCount() > 0) { ++ return; + } +- }; +- const messageHandler = (data) => { +- try { +- const tmpMsg = new IncomingMessage(data); +- const documentName = readVarString(tmpMsg.decoder); +- if (documentConnections[documentName] === true) { +- // we already have a `Connection` set up for this document +- return; +- } +- // if this is the first message, trigger onConnect & check if we can start the connection (only if no auth is required) +- if (incomingMessageQueue[documentName] === undefined) { +- incomingMessageQueue[documentName] = []; +- this.hooks('onConnect', { ...hookPayload, documentName }, (contextAdditions) => { +- // merge context from all hooks +- context = { ...context, ...contextAdditions }; +- }) +- .then(() => { +- // Authentication is required, we’ll need to wait for the Authentication message. +- if (connection.requiresAuthentication || connectionEstablishing[documentName]) { +- return; +- } +- connectionEstablishing[documentName] = true; +- return setUpNewConnection(documentName); +- }) +- .catch((error = Forbidden) => { +- var _a, _b; +- // if a hook interrupts, close the websocket connection +- try { +- incoming.close((_a = error.code) !== null && _a !== void 0 ? _a : Forbidden.code, (_b = error.reason) !== null && _b !== void 0 ? _b : Forbidden.reason); +- } +- catch (closeError) { +- // catch is needed in case invalid error code is returned by hook (that would fail sending the close message) +- console.error(closeError); +- incoming.close(Unauthorized.code, Unauthorized.reason); +- } +- }); +- } +- handleQueueingMessage(data); ++ // If it’s the last connection, we need to make sure to store the ++ // document. Use the debounce helper, to clear running timers, ++ // but make it run immediately (`true`). ++ // Only run this if the document has finished loading earlier (i.e. not to persist the empty ++ // ydoc if the onLoadDocument hook returned an error) ++ if (!document.isLoading) { ++ this.debounce(`onStoreDocument-${document.name}`, () => { ++ this.storeDocumentHooks(document, hookPayload); ++ }, true); + } +- catch (closeError) { +- // catch is needed in case an invalid payload crashes the parsing of the Uint8Array +- console.error(closeError); +- incoming.close(Unauthorized.code, Unauthorized.reason); ++ else { ++ // Remove document from memory immediately ++ this.documents.delete(document.name); ++ document.destroy(); + } +- }; +- incoming.on('message', messageHandler); ++ }); + } + /** + * Handle update of the given document +@@ -2643,11 +2818,12 @@ class Hocuspocus { + document, + documentName: document.name, + requestHeaders: (_a = request === null || request === void 0 ? void 0 : request.headers) !== null && _a !== void 0 ? _a : {}, +- requestParameters: Hocuspocus.getParameters(request), ++ requestParameters: getParameters(request), + socketId: (_b = connection === null || connection === void 0 ? void 0 : connection.socketId) !== null && _b !== void 0 ? _b : '', + update, + }; + this.hooks('onChange', hookPayload).catch(error => { ++ // TODO: what's the intention of this catch -> throw? + throw error; + }); + // If the update was received through other ways than the +@@ -2704,7 +2880,7 @@ class Hocuspocus { + documentName, + socketId, + requestHeaders: request.headers, +- requestParameters: Hocuspocus.getParameters(request), ++ requestParameters: getParameters(request), + }; + try { + await this.hooks('onLoadDocument', hookPayload, (loadedDocument) => { +@@ -2745,78 +2921,6 @@ class Hocuspocus { + }); + return document; + } +- /** +- * Create a new connection by the given request and document +- */ +- createConnection(connection, request, document, socketId, readOnly = false, context) { +- const instance = new Connection(connection, request, document, this.configuration.timeout, socketId, context, readOnly, this.debugger); +- instance.onClose(document => { +- const hookPayload = { +- instance: this, +- clientsCount: document.getConnectionsCount(), +- context, +- document, +- socketId, +- documentName: document.name, +- requestHeaders: request.headers, +- requestParameters: Hocuspocus.getParameters(request), +- }; +- this.hooks('onDisconnect', hookPayload).then(() => { +- // Check if there are still no connections to the document, as these hooks +- // may take some time to resolve (e.g. database queries). If a +- // new connection were to come in during that time it would rely on the +- // document in the map that we remove now. +- if (document.getConnectionsCount() > 0) { +- return; +- } +- // If it’s the last connection, we need to make sure to store the +- // document. Use the debounce helper, to clear running timers, +- // but make it run immediately (`true`). +- // Only run this if the document has finished loading earlier (i.e. not to persist the empty +- // ydoc if the onLoadDocument hook returned an error) +- if (!document.isLoading) { +- this.debounce(`onStoreDocument-${document.name}`, () => { +- this.storeDocumentHooks(document, hookPayload); +- }, true); +- } +- else { +- // Remove document from memory immediately +- this.documents.delete(document.name); +- document.destroy(); +- } +- }); +- }); +- instance.onStatelessCallback(payload => { +- return this.hooks('onStateless', payload) +- .catch(error => { +- if (error === null || error === void 0 ? void 0 : error.message) { +- throw error; +- } +- }); +- }); +- instance.beforeHandleMessage((connection, update) => { +- const hookPayload = { +- instance: this, +- clientsCount: document.getConnectionsCount(), +- context, +- document, +- socketId, +- connection, +- documentName: document.name, +- requestHeaders: request.headers, +- requestParameters: Hocuspocus.getParameters(request), +- update, +- }; +- return this.hooks('beforeHandleMessage', hookPayload); +- }); +- // If the WebSocket has already disconnected (wow, that was fast) – then +- // immediately call close to cleanup the connection and document in memory. +- if (connection.readyState === WsReadyStates.Closing +- || connection.readyState === WsReadyStates.Closed) { +- instance.close(); +- } +- return instance; +- } + storeDocumentHooks(document, hookPayload) { + this.hooks('onStoreDocument', hookPayload) + .catch(error => { +@@ -2864,14 +2968,6 @@ class Hocuspocus { + }); + return chain; + } +- /** +- * Get parameters by the given request +- */ +- static getParameters(request) { +- var _a; +- const query = ((_a = request === null || request === void 0 ? void 0 : request.url) === null || _a === void 0 ? void 0 : _a.split('?')) || []; +- return new URLSearchParams(query[1] ? query[1] : ''); +- } + enableDebugging() { + this.debugger.enable(); + } +diff --git a/node_modules/@hocuspocus/server/dist/hocuspocus-server.esm.js.map b/node_modules/@hocuspocus/server/dist/hocuspocus-server.esm.js.map +index 3ca6b7b..4c54e24 100644 +--- a/node_modules/@hocuspocus/server/dist/hocuspocus-server.esm.js.map ++++ b/node_modules/@hocuspocus/server/dist/hocuspocus-server.esm.js.map +@@ -1 +1 @@ +-{"version":3,"file":"hocuspocus-server.esm.js","sources":["../../../node_modules/lib0/string.js","../../../node_modules/lib0/map.js","../../../node_modules/lib0/conditions.js","../../../node_modules/lib0/storage.js","../../../node_modules/lib0/set.js","../../../node_modules/lib0/array.js","../../../node_modules/lib0/object.js","../../../node_modules/lib0/function.js","../../../node_modules/lib0/environment.js","../../../node_modules/lib0/math.js","../../../node_modules/lib0/binary.js","../../../node_modules/lib0/number.js","../../../node_modules/lib0/encoding.js","../../../node_modules/lib0/buffer.js","../../../node_modules/lib0/error.js","../../../node_modules/lib0/decoding.js","../src/IncomingMessage.ts","../../../node_modules/y-protocols/sync.js","../../../node_modules/lib0/time.js","../../../node_modules/lib0/observable.js","../../../node_modules/y-protocols/awareness.js","../src/types.ts","../src/OutgoingMessage.ts","../src/MessageReceiver.ts","../src/Connection.ts","../src/Debugger.ts","../../../node_modules/lib0/mutex.js","../src/Document.ts","../src/DirectConnection.ts","../src/Hocuspocus.ts"],"sourcesContent":["/**\n * Utility module to work with strings.\n *\n * @module string\n */\n\nexport const fromCharCode = String.fromCharCode\nexport const fromCodePoint = String.fromCodePoint\n\n/**\n * @param {string} s\n * @return {string}\n */\nconst toLowerCase = s => s.toLowerCase()\n\nconst trimLeftRegex = /^\\s*/g\n\n/**\n * @param {string} s\n * @return {string}\n */\nexport const trimLeft = s => s.replace(trimLeftRegex, '')\n\nconst fromCamelCaseRegex = /([A-Z])/g\n\n/**\n * @param {string} s\n * @param {string} separator\n * @return {string}\n */\nexport const fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, match => `${separator}${toLowerCase(match)}`))\n\n/**\n * Compute the utf8ByteLength\n * @param {string} str\n * @return {number}\n */\nexport const utf8ByteLength = str => unescape(encodeURIComponent(str)).length\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Polyfill = str => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n const buf = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n buf[i] = /** @type {number} */ (encodedString.codePointAt(i))\n }\n return buf\n}\n\n/* c8 ignore next */\nexport const utf8TextEncoder = /** @type {TextEncoder} */ (typeof TextEncoder !== 'undefined' ? new TextEncoder() : null)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Native = str => utf8TextEncoder.encode(str)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nexport const encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Polyfill = buf => {\n let remainingLen = buf.length\n let encodedString = ''\n let bufPos = 0\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n const bytes = buf.subarray(bufPos, bufPos + nextLen)\n bufPos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n return decodeURIComponent(escape(encodedString))\n}\n\n/* c8 ignore next */\nexport let utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })\n\n/* c8 ignore start */\nif (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {\n // Safari doesn't handle BOM correctly.\n // This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call\n // Another issue is that from then on no BOM chars are recognized anymore\n /* c8 ignore next */\n utf8TextDecoder = null\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Native = buf => /** @type {TextDecoder} */ (utf8TextDecoder).decode(buf)\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\n/* c8 ignore next */\nexport const decodeUtf8 = utf8TextDecoder ? _decodeUtf8Native : _decodeUtf8Polyfill\n\n/**\n * @param {string} str The initial string\n * @param {number} index Starting position\n * @param {number} remove Number of characters to remove\n * @param {string} insert New content to insert\n */\nexport const splice = (str, index, remove, insert = '') => str.slice(0, index) + insert + str.slice(index + remove)\n","/**\n * Utility module to work with key-value stores.\n *\n * @module map\n */\n\n/**\n * Creates a new Map instance.\n *\n * @function\n * @return {Map}\n *\n * @function\n */\nexport const create = () => new Map()\n\n/**\n * Copy a Map object into a fresh Map object.\n *\n * @function\n * @template X,Y\n * @param {Map} m\n * @return {Map}\n */\nexport const copy = m => {\n const r = create()\n m.forEach((v, k) => { r.set(k, v) })\n return r\n}\n\n/**\n * Get map property. Create T if property is undefined and set T on map.\n *\n * ```js\n * const listeners = map.setIfUndefined(events, 'eventName', set.create)\n * listeners.add(listener)\n * ```\n *\n * @function\n * @template V,K\n * @template {Map} MAP\n * @param {MAP} map\n * @param {K} key\n * @param {function():V} createT\n * @return {V}\n */\nexport const setIfUndefined = (map, key, createT) => {\n let set = map.get(key)\n if (set === undefined) {\n map.set(key, set = createT())\n }\n return set\n}\n\n/**\n * Creates an Array and populates it with the content of all key-value pairs using the `f(value, key)` function.\n *\n * @function\n * @template K\n * @template V\n * @template R\n * @param {Map} m\n * @param {function(V,K):R} f\n * @return {Array}\n */\nexport const map = (m, f) => {\n const res = []\n for (const [key, value] of m) {\n res.push(f(value, key))\n }\n return res\n}\n\n/**\n * Tests whether any key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @todo should rename to some - similarly to Array.some\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const any = (m, f) => {\n for (const [key, value] of m) {\n if (f(value, key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * Tests whether all key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const all = (m, f) => {\n for (const [key, value] of m) {\n if (!f(value, key)) {\n return false\n }\n }\n return true\n}\n","/**\n * Often used conditions.\n *\n * @module conditions\n */\n\n/**\n * @template T\n * @param {T|null|undefined} v\n * @return {T|null}\n */\n/* c8 ignore next */\nexport const undefinedToNull = v => v === undefined ? null : v\n","/* eslint-env browser */\n\n/**\n * Isomorphic variable storage.\n *\n * Uses LocalStorage in the browser and falls back to in-memory storage.\n *\n * @module storage\n */\n\n/* c8 ignore start */\nclass VarStoragePolyfill {\n constructor () {\n this.map = new Map()\n }\n\n /**\n * @param {string} key\n * @param {any} newValue\n */\n setItem (key, newValue) {\n this.map.set(key, newValue)\n }\n\n /**\n * @param {string} key\n */\n getItem (key) {\n return this.map.get(key)\n }\n}\n/* c8 ignore stop */\n\n/**\n * @type {any}\n */\nlet _localStorage = new VarStoragePolyfill()\nlet usePolyfill = true\n\n/* c8 ignore start */\ntry {\n // if the same-origin rule is violated, accessing localStorage might thrown an error\n if (typeof localStorage !== 'undefined') {\n _localStorage = localStorage\n usePolyfill = false\n }\n} catch (e) { }\n/* c8 ignore stop */\n\n/**\n * This is basically localStorage in browser, or a polyfill in nodejs\n */\n/* c8 ignore next */\nexport const varStorage = _localStorage\n\n/**\n * A polyfill for `addEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const onChange = eventHandler => usePolyfill || addEventListener('storage', /** @type {any} */ (eventHandler))\n\n/**\n * A polyfill for `removeEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler))\n","/**\n * Utility module to work with sets.\n *\n * @module set\n */\n\nexport const create = () => new Set()\n\n/**\n * @template T\n * @param {Set} set\n * @return {Array}\n */\nexport const toArray = set => Array.from(set)\n\n/**\n * @template T\n * @param {Set} set\n * @return {T}\n */\nexport const first = set =>\n set.values().next().value || undefined\n\n/**\n * @template T\n * @param {Iterable} entries\n * @return {Set}\n */\nexport const from = entries => new Set(entries)\n","/**\n * Utility module to work with Arrays.\n *\n * @module array\n */\n\nimport * as set from './set.js'\n\n/**\n * Return the last element of an array. The element must exist\n *\n * @template L\n * @param {ArrayLike} arr\n * @return {L}\n */\nexport const last = arr => arr[arr.length - 1]\n\n/**\n * @template C\n * @return {Array}\n */\nexport const create = () => /** @type {Array} */ ([])\n\n/**\n * @template D\n * @param {Array} a\n * @return {Array}\n */\nexport const copy = a => /** @type {Array} */ (a.slice())\n\n/**\n * Append elements from src to dest\n *\n * @template M\n * @param {Array} dest\n * @param {Array} src\n */\nexport const appendTo = (dest, src) => {\n for (let i = 0; i < src.length; i++) {\n dest.push(src[i])\n }\n}\n\n/**\n * Transforms something array-like to an actual Array.\n *\n * @function\n * @template T\n * @param {ArrayLike|Iterable} arraylike\n * @return {T}\n */\nexport const from = Array.from\n\n/**\n * True iff condition holds on every element in the Array.\n *\n * @function\n * @template ITEM\n * @template {ArrayLike} ARR\n *\n * @param {ARR} arr\n * @param {function(ITEM, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const every = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (!f(arr[i], i, arr)) {\n return false\n }\n }\n return true\n}\n\n/**\n * True iff condition holds on some element in the Array.\n *\n * @function\n * @template S\n * @template {ArrayLike} ARR\n * @param {ARR} arr\n * @param {function(S, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const some = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (f(arr[i], i, arr)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @template ELEM\n *\n * @param {ArrayLike} a\n * @param {ArrayLike} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a.length === b.length && every(a, (item, index) => item === b[index])\n\n/**\n * @template ELEM\n * @param {Array>} arr\n * @return {Array}\n */\nexport const flatten = arr => arr.reduce((acc, val) => acc.concat(val), [])\n\nexport const isArray = Array.isArray\n\n/**\n * @template T\n * @param {Array} arr\n * @return {Array}\n */\nexport const unique = arr => from(set.from(arr))\n\n/**\n * @template T\n * @template M\n * @param {ArrayLike} arr\n * @param {function(T):M} mapper\n * @return {Array}\n */\nexport const uniqueBy = (arr, mapper) => {\n /**\n * @type {Set}\n */\n const happened = set.create()\n /**\n * @type {Array}\n */\n const result = []\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i]\n const mapped = mapper(el)\n if (!happened.has(mapped)) {\n happened.add(mapped)\n result.push(el)\n }\n }\n return result\n}\n","/**\n * Utility functions for working with EcmaScript objects.\n *\n * @module object\n */\n\n/**\n * @return {Object} obj\n */\nexport const create = () => Object.create(null)\n\n/**\n * Object.assign\n */\nexport const assign = Object.assign\n\n/**\n * @param {Object} obj\n */\nexport const keys = Object.keys\n\n/**\n * @template V\n * @param {{[k:string]:V}} obj\n * @param {function(V,string):any} f\n */\nexport const forEach = (obj, f) => {\n for (const key in obj) {\n f(obj[key], key)\n }\n}\n\n/**\n * @todo implement mapToArray & map\n *\n * @template R\n * @param {Object} obj\n * @param {function(any,string):R} f\n * @return {Array}\n */\nexport const map = (obj, f) => {\n const results = []\n for (const key in obj) {\n results.push(f(obj[key], key))\n }\n return results\n}\n\n/**\n * @param {Object} obj\n * @return {number}\n */\nexport const length = obj => keys(obj).length\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const some = (obj, f) => {\n for (const key in obj) {\n if (f(obj[key], key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @param {Object|undefined} obj\n */\nexport const isEmpty = obj => {\n for (const _k in obj) {\n return false\n }\n return true\n}\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const every = (obj, f) => {\n for (const key in obj) {\n if (!f(obj[key], key)) {\n return false\n }\n }\n return true\n}\n\n/**\n * Calls `Object.prototype.hasOwnProperty`.\n *\n * @param {any} obj\n * @param {string|symbol} key\n * @return {boolean}\n */\nexport const hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key)\n\n/**\n * @param {Object} a\n * @param {Object} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a === b || (length(a) === length(b) && every(a, (val, key) => (val !== undefined || hasProperty(b, key)) && b[key] === val))\n","/**\n * Common functions and function call helpers.\n *\n * @module function\n */\n\nimport * as array from './array.js'\nimport * as object from './object.js'\n\n/**\n * Calls all functions in `fs` with args. Only throws after all functions were called.\n *\n * @param {Array} fs\n * @param {Array} args\n */\nexport const callAll = (fs, args, i = 0) => {\n try {\n for (; i < fs.length; i++) {\n fs[i](...args)\n }\n } finally {\n if (i < fs.length) {\n callAll(fs, args, i + 1)\n }\n }\n}\n\nexport const nop = () => {}\n\n/**\n * @template T\n * @param {function():T} f\n * @return {T}\n */\nexport const apply = f => f()\n\n/**\n * @template A\n *\n * @param {A} a\n * @return {A}\n */\nexport const id = a => a\n\n/**\n * @template T\n *\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n */\nexport const equalityStrict = (a, b) => a === b\n\n/**\n * @template T\n *\n * @param {Array|object} a\n * @param {Array|object} b\n * @return {boolean}\n */\nexport const equalityFlat = (a, b) => a === b || (a != null && b != null && a.constructor === b.constructor && ((a instanceof Array && array.equalFlat(a, /** @type {Array} */ (b))) || (typeof a === 'object' && object.equalFlat(a, b))))\n\n/* c8 ignore start */\n\n/**\n * @param {any} a\n * @param {any} b\n * @return {boolean}\n */\nexport const equalityDeep = (a, b) => {\n if (a == null || b == null) {\n return equalityStrict(a, b)\n }\n if (a.constructor !== b.constructor) {\n return false\n }\n if (a === b) {\n return true\n }\n switch (a.constructor) {\n case ArrayBuffer:\n a = new Uint8Array(a)\n b = new Uint8Array(b)\n // eslint-disable-next-line no-fallthrough\n case Uint8Array: {\n if (a.byteLength !== b.byteLength) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n break\n }\n case Set: {\n if (a.size !== b.size) {\n return false\n }\n for (const value of a) {\n if (!b.has(value)) {\n return false\n }\n }\n break\n }\n case Map: {\n if (a.size !== b.size) {\n return false\n }\n for (const key of a.keys()) {\n if (!b.has(key) || !equalityDeep(a.get(key), b.get(key))) {\n return false\n }\n }\n break\n }\n case Object:\n if (object.length(a) !== object.length(b)) {\n return false\n }\n for (const key in a) {\n if (!object.hasProperty(a, key) || !equalityDeep(a[key], b[key])) {\n return false\n }\n }\n break\n case Array:\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!equalityDeep(a[i], b[i])) {\n return false\n }\n }\n break\n default:\n return false\n }\n return true\n}\n\n/**\n * @template V\n * @template {V} OPTS\n *\n * @param {V} value\n * @param {Array} options\n */\n// @ts-ignore\nexport const isOneOf = (value, options) => options.includes(value)\n/* c8 ignore stop */\n","/**\n * Isomorphic module to work access the environment (query params, env variables).\n *\n * @module map\n */\n\nimport * as map from './map.js'\nimport * as string from './string.js'\nimport * as conditions from './conditions.js'\nimport * as storage from './storage.js'\nimport * as f from './function.js'\n\n/* c8 ignore next */\n// @ts-ignore\nexport const isNode = typeof process !== 'undefined' && process.release &&\n /node|io\\.js/.test(process.release.name)\n/* c8 ignore next */\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && !isNode\n/* c8 ignore next 3 */\nexport const isMac = typeof navigator !== 'undefined'\n ? /Mac/.test(navigator.platform)\n : false\n\n/**\n * @type {Map}\n */\nlet params\nconst args = []\n\n/* c8 ignore start */\nconst computeParams = () => {\n if (params === undefined) {\n if (isNode) {\n params = map.create()\n const pargs = process.argv\n let currParamName = null\n for (let i = 0; i < pargs.length; i++) {\n const parg = pargs[i]\n if (parg[0] === '-') {\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n currParamName = parg\n } else {\n if (currParamName !== null) {\n params.set(currParamName, parg)\n currParamName = null\n } else {\n args.push(parg)\n }\n }\n }\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n // in ReactNative for example this would not be true (unless connected to the Remote Debugger)\n } else if (typeof location === 'object') {\n params = map.create(); // eslint-disable-next-line no-undef\n (location.search || '?').slice(1).split('&').forEach((kv) => {\n if (kv.length !== 0) {\n const [key, value] = kv.split('=')\n params.set(`--${string.fromCamelCase(key, '-')}`, value)\n params.set(`-${string.fromCamelCase(key, '-')}`, value)\n }\n })\n } else {\n params = map.create()\n }\n }\n return params\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next */\nexport const hasParam = (name) => computeParams().has(name)\n\n/**\n * @param {string} name\n * @param {string} defaultVal\n * @return {string}\n */\n/* c8 ignore next 2 */\nexport const getParam = (name, defaultVal) =>\n computeParams().get(name) || defaultVal\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 4 */\nexport const getVariable = (name) =>\n isNode\n ? conditions.undefinedToNull(process.env[name.toUpperCase()])\n : conditions.undefinedToNull(storage.varStorage.getItem(name))\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 2 */\nexport const getConf = (name) =>\n computeParams().get('--' + name) || getVariable(name)\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next 2 */\nexport const hasConf = (name) =>\n hasParam('--' + name) || getVariable(name) !== null\n\n/* c8 ignore next */\nexport const production = hasConf('production')\n\n/* c8 ignore next 2 */\nconst forceColor = isNode &&\n f.isOneOf(process.env.FORCE_COLOR, ['true', '1', '2'])\n\n/* c8 ignore start */\nexport const supportsColor = !hasParam('no-colors') &&\n (!isNode || process.stdout.isTTY || forceColor) && (\n !isNode || hasParam('color') || forceColor ||\n getVariable('COLORTERM') !== null ||\n (getVariable('TERM') || '').includes('color')\n)\n/* c8 ignore stop */\n","/**\n * Common Math expressions.\n *\n * @module math\n */\n\nexport const floor = Math.floor\nexport const ceil = Math.ceil\nexport const abs = Math.abs\nexport const imul = Math.imul\nexport const round = Math.round\nexport const log10 = Math.log10\nexport const log2 = Math.log2\nexport const log = Math.log\nexport const sqrt = Math.sqrt\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The sum of a and b\n */\nexport const add = (a, b) => a + b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The smaller element of a and b\n */\nexport const min = (a, b) => a < b ? a : b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The bigger element of a and b\n */\nexport const max = (a, b) => a > b ? a : b\n\nexport const isNaN = Number.isNaN\n\nexport const pow = Math.pow\n/**\n * Base 10 exponential function. Returns the value of 10 raised to the power of pow.\n *\n * @param {number} exp\n * @return {number}\n */\nexport const exp10 = exp => Math.pow(10, exp)\n\nexport const sign = Math.sign\n\n/**\n * @param {number} n\n * @return {boolean} Wether n is negative. This function also differentiates between -0 and +0\n */\nexport const isNegativeZero = n => n !== 0 ? n < 0 : 1 / n < 0\n","/* eslint-env browser */\n\n/**\n * Binary data constants.\n *\n * @module binary\n */\n\n/**\n * n-th bit activated.\n *\n * @type {number}\n */\nexport const BIT1 = 1\nexport const BIT2 = 2\nexport const BIT3 = 4\nexport const BIT4 = 8\nexport const BIT5 = 16\nexport const BIT6 = 32\nexport const BIT7 = 64\nexport const BIT8 = 128\nexport const BIT9 = 256\nexport const BIT10 = 512\nexport const BIT11 = 1024\nexport const BIT12 = 2048\nexport const BIT13 = 4096\nexport const BIT14 = 8192\nexport const BIT15 = 16384\nexport const BIT16 = 32768\nexport const BIT17 = 65536\nexport const BIT18 = 1 << 17\nexport const BIT19 = 1 << 18\nexport const BIT20 = 1 << 19\nexport const BIT21 = 1 << 20\nexport const BIT22 = 1 << 21\nexport const BIT23 = 1 << 22\nexport const BIT24 = 1 << 23\nexport const BIT25 = 1 << 24\nexport const BIT26 = 1 << 25\nexport const BIT27 = 1 << 26\nexport const BIT28 = 1 << 27\nexport const BIT29 = 1 << 28\nexport const BIT30 = 1 << 29\nexport const BIT31 = 1 << 30\nexport const BIT32 = 1 << 31\n\n/**\n * First n bits activated.\n *\n * @type {number}\n */\nexport const BITS0 = 0\nexport const BITS1 = 1\nexport const BITS2 = 3\nexport const BITS3 = 7\nexport const BITS4 = 15\nexport const BITS5 = 31\nexport const BITS6 = 63\nexport const BITS7 = 127\nexport const BITS8 = 255\nexport const BITS9 = 511\nexport const BITS10 = 1023\nexport const BITS11 = 2047\nexport const BITS12 = 4095\nexport const BITS13 = 8191\nexport const BITS14 = 16383\nexport const BITS15 = 32767\nexport const BITS16 = 65535\nexport const BITS17 = BIT18 - 1\nexport const BITS18 = BIT19 - 1\nexport const BITS19 = BIT20 - 1\nexport const BITS20 = BIT21 - 1\nexport const BITS21 = BIT22 - 1\nexport const BITS22 = BIT23 - 1\nexport const BITS23 = BIT24 - 1\nexport const BITS24 = BIT25 - 1\nexport const BITS25 = BIT26 - 1\nexport const BITS26 = BIT27 - 1\nexport const BITS27 = BIT28 - 1\nexport const BITS28 = BIT29 - 1\nexport const BITS29 = BIT30 - 1\nexport const BITS30 = BIT31 - 1\n/**\n * @type {number}\n */\nexport const BITS31 = 0x7FFFFFFF\n/**\n * @type {number}\n */\nexport const BITS32 = 0xFFFFFFFF\n","/**\n * Utility helpers for working with numbers.\n *\n * @module number\n */\n\nimport * as math from './math.js'\nimport * as binary from './binary.js'\n\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER\n\nexport const LOWEST_INT32 = 1 << 31\n/**\n * @type {number}\n */\nexport const HIGHEST_INT32 = binary.BITS31\n\n/**\n * @module number\n */\n\n/* c8 ignore next */\nexport const isInteger = Number.isInteger || (num => typeof num === 'number' && isFinite(num) && math.floor(num) === num)\nexport const isNaN = Number.isNaN\nexport const parseInt = Number.parseInt\n","/**\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module encoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as binary from './binary.js'\nimport * as string from './string.js'\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nexport class Encoder {\n constructor () {\n this.cpos = 0\n this.cbuf = new Uint8Array(100)\n /**\n * @type {Array}\n */\n this.bufs = []\n }\n}\n\n/**\n * @function\n * @return {Encoder}\n */\nexport const createEncoder = () => new Encoder()\n\n/**\n * The current length of the encoded data.\n *\n * @function\n * @param {Encoder} encoder\n * @return {number}\n */\nexport const length = encoder => {\n let len = encoder.cpos\n for (let i = 0; i < encoder.bufs.length; i++) {\n len += encoder.bufs[i].length\n }\n return len\n}\n\n/**\n * Transform to Uint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @return {Uint8Array} The created ArrayBuffer.\n */\nexport const toUint8Array = encoder => {\n const uint8arr = new Uint8Array(length(encoder))\n let curPos = 0\n for (let i = 0; i < encoder.bufs.length; i++) {\n const d = encoder.bufs[i]\n uint8arr.set(d, curPos)\n curPos += d.length\n }\n uint8arr.set(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos), curPos)\n return uint8arr\n}\n\n/**\n * Verify that it is possible to write `len` bytes wtihout checking. If\n * necessary, a new Buffer with the required length is attached.\n *\n * @param {Encoder} encoder\n * @param {number} len\n */\nexport const verifyLen = (encoder, len) => {\n const bufferLen = encoder.cbuf.length\n if (bufferLen - encoder.cpos < len) {\n encoder.bufs.push(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos))\n encoder.cbuf = new Uint8Array(math.max(bufferLen, len) * 2)\n encoder.cpos = 0\n }\n}\n\n/**\n * Write one byte to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The byte that is to be encoded.\n */\nexport const write = (encoder, num) => {\n const bufferLen = encoder.cbuf.length\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf)\n encoder.cbuf = new Uint8Array(bufferLen * 2)\n encoder.cpos = 0\n }\n encoder.cbuf[encoder.cpos++] = num\n}\n\n/**\n * Write one byte at a specific position.\n * Position must already be written (i.e. encoder.length > pos)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos Position to which to write data\n * @param {number} num Unsigned 8-bit integer\n */\nexport const set = (encoder, pos, num) => {\n let buffer = null\n // iterate all buffers and adjust position\n for (let i = 0; i < encoder.bufs.length && buffer === null; i++) {\n const b = encoder.bufs[i]\n if (pos < b.length) {\n buffer = b // found buffer\n } else {\n pos -= b.length\n }\n }\n if (buffer === null) {\n // use current buffer\n buffer = encoder.cbuf\n }\n buffer[pos] = num\n}\n\n/**\n * Write one byte as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint8 = write\n\n/**\n * Write one byte as an unsigned Integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint8 = set\n\n/**\n * Write two bytes as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint16 = (encoder, num) => {\n write(encoder, num & binary.BITS8)\n write(encoder, (num >>> 8) & binary.BITS8)\n}\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint16 = (encoder, pos, num) => {\n set(encoder, pos, num & binary.BITS8)\n set(encoder, pos + 1, (num >>> 8) & binary.BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32 = (encoder, num) => {\n for (let i = 0; i < 4; i++) {\n write(encoder, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write two bytes as an unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32BigEndian = (encoder, num) => {\n for (let i = 3; i >= 0; i--) {\n write(encoder, (num >>> (8 * i)) & binary.BITS8)\n }\n}\n\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint32 = (encoder, pos, num) => {\n for (let i = 0; i < 4; i++) {\n set(encoder, pos + i, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarUint = (encoder, num) => {\n while (num > binary.BITS7) {\n write(encoder, binary.BIT8 | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n write(encoder, binary.BITS7 & num)\n}\n\n/**\n * Write a variable length integer.\n *\n * We use the 7th bit instead for signaling that this is a negative number.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarInt = (encoder, num) => {\n const isNegative = math.isNegativeZero(num)\n if (isNegative) {\n num = -num\n }\n // |- whether to continue reading |- whether is negative |- number\n write(encoder, (num > binary.BITS6 ? binary.BIT8 : 0) | (isNegative ? binary.BIT7 : 0) | (binary.BITS6 & num))\n num = math.floor(num / 64) // shift >>> 6\n // We don't need to consider the case of num === 0 so we can use a different\n // pattern here than above.\n while (num > 0) {\n write(encoder, (num > binary.BITS7 ? binary.BIT8 : 0) | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n}\n\n/**\n * A cache to store strings temporarily\n */\nconst _strBuffer = new Uint8Array(30000)\nconst _maxStrBSize = _strBuffer.length / 3\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringNative = (encoder, str) => {\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n /* c8 ignore next */\n const written = string.utf8TextEncoder.encodeInto(str, _strBuffer).written || 0\n writeVarUint(encoder, written)\n for (let i = 0; i < written; i++) {\n write(encoder, _strBuffer[i])\n }\n } else {\n writeVarUint8Array(encoder, string.encodeUtf8(str))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringPolyfill = (encoder, str) => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n write(encoder, /** @type {number} */ (encodedString.codePointAt(i)))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\n/* c8 ignore next */\nexport const writeVarString = (string.utf8TextEncoder && /** @type {any} */ (string.utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill\n\n/**\n * Write the content of another Encoder.\n *\n * @TODO: can be improved!\n * - Note: Should consider that when appending a lot of small Encoders, we should rather clone than referencing the old structure.\n * Encoders start with a rather big initial buffer.\n *\n * @function\n * @param {Encoder} encoder The enUint8Arr\n * @param {Encoder} append The BinaryEncoder to be written.\n */\nexport const writeBinaryEncoder = (encoder, append) => writeUint8Array(encoder, toUint8Array(append))\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeUint8Array = (encoder, uint8Array) => {\n const bufferLen = encoder.cbuf.length\n const cpos = encoder.cpos\n const leftCopyLen = math.min(bufferLen - cpos, uint8Array.length)\n const rightCopyLen = uint8Array.length - leftCopyLen\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos)\n encoder.cpos += leftCopyLen\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf)\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(math.max(bufferLen * 2, rightCopyLen))\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen))\n encoder.cpos = rightCopyLen\n }\n}\n\n/**\n * Append an Uint8Array to Encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeVarUint8Array = (encoder, uint8Array) => {\n writeVarUint(encoder, uint8Array.byteLength)\n writeUint8Array(encoder, uint8Array)\n}\n\n/**\n * Create an DataView of the next `len` bytes. Use it to write data after\n * calling this function.\n *\n * ```js\n * // write float32 using DataView\n * const dv = writeOnDataView(encoder, 4)\n * dv.setFloat32(0, 1.1)\n * // read float32 using DataView\n * const dv = readFromDataView(encoder, 4)\n * dv.getFloat32(0) // => 1.100000023841858 (leaving it to the reader to find out why this is the correct result)\n * ```\n *\n * @param {Encoder} encoder\n * @param {number} len\n * @return {DataView}\n */\nexport const writeOnDataView = (encoder, len) => {\n verifyLen(encoder, len)\n const dview = new DataView(encoder.cbuf.buffer, encoder.cpos, len)\n encoder.cpos += len\n return dview\n}\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat32 = (encoder, num) => writeOnDataView(encoder, 4).setFloat32(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat64 = (encoder, num) => writeOnDataView(encoder, 8).setFloat64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigInt64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigInt64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigUint64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigUint64(0, num, false)\n\nconst floatTestBed = new DataView(new ArrayBuffer(4))\n/**\n * Check if a number can be encoded as a 32 bit float.\n *\n * @param {number} num\n * @return {boolean}\n */\nconst isFloat32 = num => {\n floatTestBed.setFloat32(0, num)\n return floatTestBed.getFloat32(0) === num\n}\n\n/**\n * Encode data with efficient binary format.\n *\n * Differences to JSON:\n * • Transforms data to a binary format (not to a string)\n * • Encodes undefined, NaN, and ArrayBuffer (these can't be represented in JSON)\n * • Numbers are efficiently encoded either as a variable length integer, as a\n * 32 bit float, as a 64 bit float, or as a 64 bit bigint.\n *\n * Encoding table:\n *\n * | Data Type | Prefix | Encoding Method | Comment |\n * | ------------------- | -------- | ------------------ | ------- |\n * | undefined | 127 | | Functions, symbol, and everything that cannot be identified is encoded as undefined |\n * | null | 126 | | |\n * | integer | 125 | writeVarInt | Only encodes 32 bit signed integers |\n * | float32 | 124 | writeFloat32 | |\n * | float64 | 123 | writeFloat64 | |\n * | bigint | 122 | writeBigInt64 | |\n * | boolean (false) | 121 | | True and false are different data types so we save the following byte |\n * | boolean (true) | 120 | | - 0b01111000 so the last bit determines whether true or false |\n * | string | 119 | writeVarString | |\n * | object | 118 | custom | Writes {length} then {length} key-value pairs |\n * | array | 117 | custom | Writes {length} then {length} json values |\n * | Uint8Array | 116 | writeVarUint8Array | We use Uint8Array for any kind of binary data |\n *\n * Reasons for the decreasing prefix:\n * We need the first bit for extendability (later we may want to encode the\n * prefix with writeVarUint). The remaining 7 bits are divided as follows:\n * [0-30] the beginning of the data range is used for custom purposes\n * (defined by the function that uses this library)\n * [31-127] the end of the data range is used for data encoding by\n * lib0/encoding.js\n *\n * @param {Encoder} encoder\n * @param {undefined|null|number|bigint|boolean|string|Object|Array|Uint8Array} data\n */\nexport const writeAny = (encoder, data) => {\n switch (typeof data) {\n case 'string':\n // TYPE 119: STRING\n write(encoder, 119)\n writeVarString(encoder, data)\n break\n case 'number':\n if (number.isInteger(data) && math.abs(data) <= binary.BITS31) {\n // TYPE 125: INTEGER\n write(encoder, 125)\n writeVarInt(encoder, data)\n } else if (isFloat32(data)) {\n // TYPE 124: FLOAT32\n write(encoder, 124)\n writeFloat32(encoder, data)\n } else {\n // TYPE 123: FLOAT64\n write(encoder, 123)\n writeFloat64(encoder, data)\n }\n break\n case 'bigint':\n // TYPE 122: BigInt\n write(encoder, 122)\n writeBigInt64(encoder, data)\n break\n case 'object':\n if (data === null) {\n // TYPE 126: null\n write(encoder, 126)\n } else if (data instanceof Array) {\n // TYPE 117: Array\n write(encoder, 117)\n writeVarUint(encoder, data.length)\n for (let i = 0; i < data.length; i++) {\n writeAny(encoder, data[i])\n }\n } else if (data instanceof Uint8Array) {\n // TYPE 116: ArrayBuffer\n write(encoder, 116)\n writeVarUint8Array(encoder, data)\n } else {\n // TYPE 118: Object\n write(encoder, 118)\n const keys = Object.keys(data)\n writeVarUint(encoder, keys.length)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n writeVarString(encoder, key)\n writeAny(encoder, data[key])\n }\n }\n break\n case 'boolean':\n // TYPE 120/121: boolean (true/false)\n write(encoder, data ? 120 : 121)\n break\n default:\n // TYPE 127: undefined\n write(encoder, 127)\n }\n}\n\n/**\n * Now come a few stateful encoder that have their own classes.\n */\n\n/**\n * Basic Run Length Encoder - a basic compression implementation.\n *\n * Encodes [1,1,1,7] to [1,3,7,1] (3 times 1, 1 time 7). This encoder might do more harm than good if there are a lot of values that are not repeated.\n *\n * It was originally used for image compression. Cool .. article http://csbruce.com/cbm/transactor/pdfs/trans_v7_i06.pdf\n *\n * @note T must not be null!\n *\n * @template T\n */\nexport class RleEncoder extends Encoder {\n /**\n * @param {function(Encoder, T):void} writer\n */\n constructor (writer) {\n super()\n /**\n * The writer\n */\n this.w = writer\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n /**\n * @param {T} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n this.w(this, v)\n this.s = v\n }\n }\n}\n\n/**\n * Basic diff decoder using variable length encoding.\n *\n * Encodes the values [3, 1100, 1101, 1050, 0] to [3, 1097, 1, -51, -1050] using writeVarInt.\n */\nexport class IntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n writeVarInt(this, v - this.s)\n this.s = v\n }\n}\n\n/**\n * A combination of IntDiffEncoder and RleEncoder.\n *\n * Basically first writes the IntDiffEncoder and then counts duplicate diffs using RleEncoding.\n *\n * Encodes the values [1,1,1,2,3,4,5,6] as [1,1,0,2,1,5] (RLE([1,0,0,1,1,1,1,1]) ⇒ RleIntDiff[1,1,0,2,1,5])\n */\nexport class RleIntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v && this.count > 0) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n writeVarInt(this, v - this.s)\n this.s = v\n }\n }\n}\n\n/**\n * @param {UintOptRleEncoder} encoder\n */\nconst flushUintOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set sign to positive\n // case 2: write several values. set sign to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encoder.count === 1 ? encoder.s : -encoder.s)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * Optimized Rle encoder that does not suffer from the mentioned problem of the basic Rle encoder.\n *\n * Internally uses VarInt encoder to write unsigned integers. If the input occurs multiple times, we write\n * write it as a negative number. The UintOptRleDecoder then understands that it needs to read a count.\n *\n * Encodes [1,2,3,3,3] as [1,2,-3,3] (once 1, once 2, three times 3)\n */\nexport class UintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Increasing Uint Optimized RLE Encoder\n *\n * The RLE encoder counts the number of same occurences of the same value.\n * The IncUintOptRle encoder counts if the value increases.\n * I.e. 7, 8, 9, 10 will be encoded as [-7, 4]. 1, 3, 5 will be encoded\n * as [1, 3, 5].\n */\nexport class IncUintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s + this.count === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * @param {IntDiffOptRleEncoder} encoder\n */\nconst flushIntDiffOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // 31 bit making up the diff | wether to write the counter\n // const encodedDiff = encoder.diff << 1 | (encoder.count === 1 ? 0 : 1)\n const encodedDiff = encoder.diff * 2 + (encoder.count === 1 ? 0 : 1)\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set first bit to positive\n // case 2: write several values. set first bit to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encodedDiff)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * A combination of the IntDiffEncoder and the UintOptRleEncoder.\n *\n * The count approach is similar to the UintDiffOptRleEncoder, but instead of using the negative bitflag, it encodes\n * in the LSB whether a count is to be read. Therefore this Encoder only supports 31 bit integers!\n *\n * Encodes [1, 2, 3, 2] as [3, 1, 6, -1] (more specifically [(1 << 1) | 1, (3 << 0) | 0, -1])\n *\n * Internally uses variable length encoding. Contrary to normal UintVar encoding, the first byte contains:\n * * 1 bit that denotes whether the next value is a count (LSB)\n * * 1 bit that denotes whether this value is negative (MSB - 1)\n * * 1 bit that denotes whether to continue reading the variable length integer (MSB)\n *\n * Therefore, only five bits remain to encode diff ranges.\n *\n * Use this Encoder only when appropriate. In most cases, this is probably a bad idea.\n */\nexport class IntDiffOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.diff === v - this.s) {\n this.s = v\n this.count++\n } else {\n flushIntDiffOptRleEncoder(this)\n this.count = 1\n this.diff = v - this.s\n this.s = v\n }\n }\n\n toUint8Array () {\n flushIntDiffOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Optimized String Encoder.\n *\n * Encoding many small strings in a simple Encoder is not very efficient. The function call to decode a string takes some time and creates references that must be eventually deleted.\n * In practice, when decoding several million small strings, the GC will kick in more and more often to collect orphaned string objects (or maybe there is another reason?).\n *\n * This string encoder solves the above problem. All strings are concatenated and written as a single string using a single encoding call.\n *\n * The lengths are encoded using a UintOptRleEncoder.\n */\nexport class StringEncoder {\n constructor () {\n /**\n * @type {Array}\n */\n this.sarr = []\n this.s = ''\n this.lensE = new UintOptRleEncoder()\n }\n\n /**\n * @param {string} string\n */\n write (string) {\n this.s += string\n if (this.s.length > 19) {\n this.sarr.push(this.s)\n this.s = ''\n }\n this.lensE.write(string.length)\n }\n\n toUint8Array () {\n const encoder = new Encoder()\n this.sarr.push(this.s)\n this.s = ''\n writeVarString(encoder, this.sarr.join(''))\n writeUint8Array(encoder, this.lensE.toUint8Array())\n return toUint8Array(encoder)\n }\n}\n","/**\n * Utility functions to work with buffers (Uint8Array).\n *\n * @module buffer\n */\n\nimport * as string from './string.js'\nimport * as env from './environment.js'\nimport * as encoding from './encoding.js'\nimport * as decoding from './decoding.js'\n\n/**\n * @param {number} len\n */\nexport const createUint8ArrayFromLen = len => new Uint8Array(len)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n * @param {number} byteOffset\n * @param {number} length\n */\nexport const createUint8ArrayViewFromArrayBuffer = (buffer, byteOffset, length) => new Uint8Array(buffer, byteOffset, length)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n */\nexport const createUint8ArrayFromArrayBuffer = buffer => new Uint8Array(buffer)\n\n/* c8 ignore start */\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Browser = bytes => {\n let s = ''\n for (let i = 0; i < bytes.byteLength; i++) {\n s += string.fromCharCode(bytes[i])\n }\n // eslint-disable-next-line no-undef\n return btoa(s)\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Node = bytes => Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64')\n\n/* c8 ignore start */\n/**\n * @param {string} s\n * @return {Uint8Array}\n */\nconst fromBase64Browser = s => {\n // eslint-disable-next-line no-undef\n const a = atob(s)\n const bytes = createUint8ArrayFromLen(a.length)\n for (let i = 0; i < a.length; i++) {\n bytes[i] = a.charCodeAt(i)\n }\n return bytes\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} s\n */\nconst fromBase64Node = s => {\n const buf = Buffer.from(s, 'base64')\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/* c8 ignore next */\nexport const toBase64 = env.isBrowser ? toBase64Browser : toBase64Node\n\n/* c8 ignore next */\nexport const fromBase64 = env.isBrowser ? fromBase64Browser : fromBase64Node\n\n/**\n * Copy the content of an Uint8Array view to a new ArrayBuffer.\n *\n * @param {Uint8Array} uint8Array\n * @return {Uint8Array}\n */\nexport const copyUint8Array = uint8Array => {\n const newBuf = createUint8ArrayFromLen(uint8Array.byteLength)\n newBuf.set(uint8Array)\n return newBuf\n}\n\n/**\n * Encode anything as a UInt8Array. It's a pun on typescripts's `any` type.\n * See encoding.writeAny for more information.\n *\n * @param {any} data\n * @return {Uint8Array}\n */\nexport const encodeAny = data => {\n const encoder = encoding.createEncoder()\n encoding.writeAny(encoder, data)\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Decode an any-encoded value.\n *\n * @param {Uint8Array} buf\n * @return {any}\n */\nexport const decodeAny = buf => decoding.readAny(decoding.createDecoder(buf))\n","/**\n * Error helpers.\n *\n * @module error\n */\n\n/**\n * @param {string} s\n * @return {Error}\n */\n/* c8 ignore next */\nexport const create = s => new Error(s)\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const methodUnimplemented = () => {\n throw create('Method unimplemented')\n}\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const unexpectedCase = () => {\n throw create('Unexpected case')\n}\n","/**\n * Efficient schema-less binary decoding with support for variable length encoding.\n *\n * Use [lib0/decoding] with [lib0/encoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module decoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as binary from './binary.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as string from './string.js'\nimport * as error from './error.js'\n\nconst errorUnexpectedEndOfArray = error.create('Unexpected end of array')\nconst errorIntegerOutOfRange = error.create('Integer out of Range')\n\n/**\n * A Decoder handles the decoding of an Uint8Array.\n */\nexport class Decoder {\n /**\n * @param {Uint8Array} uint8Array Binary data to decode\n */\n constructor (uint8Array) {\n /**\n * Decoding target.\n *\n * @type {Uint8Array}\n */\n this.arr = uint8Array\n /**\n * Current decoding position.\n *\n * @type {number}\n */\n this.pos = 0\n }\n}\n\n/**\n * @function\n * @param {Uint8Array} uint8Array\n * @return {Decoder}\n */\nexport const createDecoder = uint8Array => new Decoder(uint8Array)\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {boolean}\n */\nexport const hasContent = decoder => decoder.pos !== decoder.arr.length\n\n/**\n * Clone a decoder instance.\n * Optionally set a new position parameter.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} [newPos] Defaults to current position\n * @return {Decoder} A clone of `decoder`\n */\nexport const clone = (decoder, newPos = decoder.pos) => {\n const _decoder = createDecoder(decoder.arr)\n _decoder.pos = newPos\n return _decoder\n}\n\n/**\n * Create an Uint8Array view of the next `len` bytes and advance the position by `len`.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} len The length of bytes to read\n * @return {Uint8Array}\n */\nexport const readUint8Array = (decoder, len) => {\n const view = buffer.createUint8ArrayViewFromArrayBuffer(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len)\n decoder.pos += len\n return view\n}\n\n/**\n * Read variable length Uint8Array.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readVarUint8Array = decoder => readUint8Array(decoder, readVarUint(decoder))\n\n/**\n * Read the rest of the content as an ArrayBuffer\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTailAsUint8Array = decoder => readUint8Array(decoder, decoder.arr.length - decoder.pos)\n\n/**\n * Skip one byte, jump to the next position.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} The next position\n */\nexport const skip8 = decoder => decoder.pos++\n\n/**\n * Read one byte as unsigned integer.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} Unsigned 8-bit integer\n */\nexport const readUint8 = decoder => decoder.arr[decoder.pos++]\n\n/**\n * Read 2 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint16 = decoder => {\n const uint =\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n decoder.pos += 2\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32 = decoder => {\n const uint =\n (decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32BigEndian = decoder => {\n const uint =\n (decoder.arr[decoder.pos + 3] +\n (decoder.arr[decoder.pos + 2] << 8) +\n (decoder.arr[decoder.pos + 1] << 16) +\n (decoder.arr[decoder.pos] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint8 = decoder => decoder.arr[decoder.pos]\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint16 = decoder =>\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint32 = decoder => (\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)\n) >>> 0\n\n/**\n * Read unsigned integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarUint = decoder => {\n let num = 0\n let mult = 1\n const len = decoder.arr.length\n while (decoder.pos < len) {\n const r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult // shift $r << (7*#iterations) and add it to num\n mult *= 128 // next iteration, shift 7 \"more\" to the left\n if (r < binary.BIT8) {\n return num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Read signed integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n * @todo This should probably create the inverse ~num if number is negative - but this would be a breaking change.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarInt = decoder => {\n let r = decoder.arr[decoder.pos++]\n let num = r & binary.BITS6\n let mult = 64\n const sign = (r & binary.BIT7) > 0 ? -1 : 1\n if ((r & binary.BIT8) === 0) {\n // don't continue reading\n return sign * num\n }\n const len = decoder.arr.length\n while (decoder.pos < len) {\n r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult\n mult *= 128\n if (r < binary.BIT8) {\n return sign * num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarUint = decoder => {\n const pos = decoder.pos\n const s = readVarUint(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarInt = decoder => {\n const pos = decoder.pos\n const s = readVarInt(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * We don't test this function anymore as we use native decoding/encoding by default now.\n * Better not modify this anymore..\n *\n * Transforming utf8 to a string is pretty expensive. The code performs 10x better\n * when String.fromCodePoint is fed with all characters as arguments.\n * But most environments have a maximum number of arguments per functions.\n * For effiency reasons we apply a maximum of 10000 characters at once.\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String.\n */\n/* c8 ignore start */\nexport const _readVarStringPolyfill = decoder => {\n let remainingLen = readVarUint(decoder)\n if (remainingLen === 0) {\n return ''\n } else {\n let encodedString = String.fromCodePoint(readUint8(decoder)) // remember to decrease remainingLen\n if (--remainingLen < 100) { // do not create a Uint8Array for small strings\n while (remainingLen--) {\n encodedString += String.fromCodePoint(readUint8(decoder))\n }\n } else {\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n // this is dangerous, we create a fresh array view from the existing buffer\n const bytes = decoder.arr.subarray(decoder.pos, decoder.pos + nextLen)\n decoder.pos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n }\n return decodeURIComponent(escape(encodedString))\n }\n}\n/* c8 ignore stop */\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n */\nexport const _readVarStringNative = decoder =>\n /** @type any */ (string.utf8TextDecoder).decode(readVarUint8Array(decoder))\n\n/**\n * Read string of variable length\n * * varUint is used to store the length of the string\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n *\n */\n/* c8 ignore next */\nexport const readVarString = string.utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill\n\n/**\n * Look ahead and read varString without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const peekVarString = decoder => {\n const pos = decoder.pos\n const s = readVarString(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * @param {Decoder} decoder\n * @param {number} len\n * @return {DataView}\n */\nexport const readFromDataView = (decoder, len) => {\n const dv = new DataView(decoder.arr.buffer, decoder.arr.byteOffset + decoder.pos, len)\n decoder.pos += len\n return dv\n}\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat32 = decoder => readFromDataView(decoder, 4).getFloat32(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat64 = decoder => readFromDataView(decoder, 8).getFloat64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigInt64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigInt64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigUint64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigUint64(0, false)\n\n/**\n * @type {Array}\n */\nconst readAnyLookupTable = [\n decoder => undefined, // CASE 127: undefined\n decoder => null, // CASE 126: null\n readVarInt, // CASE 125: integer\n readFloat32, // CASE 124: float32\n readFloat64, // CASE 123: float64\n readBigInt64, // CASE 122: bigint\n decoder => false, // CASE 121: boolean (false)\n decoder => true, // CASE 120: boolean (true)\n readVarString, // CASE 119: string\n decoder => { // CASE 118: object\n const len = readVarUint(decoder)\n /**\n * @type {Object}\n */\n const obj = {}\n for (let i = 0; i < len; i++) {\n const key = readVarString(decoder)\n obj[key] = readAny(decoder)\n }\n return obj\n },\n decoder => { // CASE 117: array\n const len = readVarUint(decoder)\n const arr = []\n for (let i = 0; i < len; i++) {\n arr.push(readAny(decoder))\n }\n return arr\n },\n readVarUint8Array // CASE 116: Uint8Array\n]\n\n/**\n * @param {Decoder} decoder\n */\nexport const readAny = decoder => readAnyLookupTable[127 - readUint8(decoder)](decoder)\n\n/**\n * T must not be null.\n *\n * @template T\n */\nexport class RleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {function(Decoder):T} reader\n */\n constructor (uint8Array, reader) {\n super(uint8Array)\n /**\n * The reader\n */\n this.reader = reader\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = this.reader(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {T} */ (this.s)\n }\n}\n\nexport class IntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @return {number}\n */\n read () {\n this.s += readVarInt(this)\n return this.s\n }\n}\n\nexport class RleIntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n this.s += readVarInt(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class UintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class IncUintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s++)\n }\n}\n\nexport class IntDiffOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n const diff = readVarInt(this)\n // if the first bit is set, we read more data\n const hasCount = diff & 1\n this.diff = math.floor(diff / 2) // shift >> 1\n this.count = 1\n if (hasCount) {\n this.count = readVarUint(this) + 2\n }\n }\n this.s += this.diff\n this.count--\n return this.s\n }\n}\n\nexport class StringDecoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n this.decoder = new UintOptRleDecoder(uint8Array)\n this.str = readVarString(this.decoder)\n /**\n * @type {number}\n */\n this.spos = 0\n }\n\n /**\n * @return {string}\n */\n read () {\n const end = this.spos + this.decoder.read()\n const res = this.str.slice(this.spos, end)\n this.spos = end\n return res\n }\n}\n","import {\n createDecoder,\n Decoder,\n readVarUint,\n readVarUint8Array,\n readVarString,\n} from 'lib0/decoding'\nimport {\n createEncoder,\n Encoder,\n toUint8Array,\n writeVarUint,\n writeVarString,\n length,\n} from 'lib0/encoding'\nimport { MessageType } from './types.js'\n\nexport class IncomingMessage {\n /**\n * Access to the received message.\n */\n decoder: Decoder\n\n /**\n * Access to the reply.\n */\n encoder: Encoder\n\n constructor(input: any) {\n if (!(input instanceof Uint8Array)) {\n input = new Uint8Array(input)\n }\n\n this.encoder = createEncoder()\n this.decoder = createDecoder(input)\n }\n\n readVarUint8Array() {\n return readVarUint8Array(this.decoder)\n }\n\n readVarUint() {\n return readVarUint(this.decoder)\n }\n\n readVarString() {\n return readVarString(this.decoder)\n }\n\n toUint8Array() {\n return toUint8Array(this.encoder)\n }\n\n writeVarUint(type: MessageType) {\n writeVarUint(this.encoder, type)\n }\n\n writeVarString(string: string) {\n writeVarString(this.encoder, string)\n }\n\n get length(): number {\n return length(this.encoder)\n }\n}\n","/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them.\n * Therefore it is necesarry that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Will not be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n","/**\n * Utility module to work with time.\n *\n * @module time\n */\n\nimport * as metric from './metric.js'\nimport * as math from './math.js'\n\n/**\n * Return current time.\n *\n * @return {Date}\n */\nexport const getDate = () => new Date()\n\n/**\n * Return current unix time.\n *\n * @return {number}\n */\nexport const getUnixTime = Date.now\n\n/**\n * Transform time (in ms) to a human readable format. E.g. 1100 => 1.1s. 60s => 1min. .001 => 10μs.\n *\n * @param {number} d duration in milliseconds\n * @return {string} humanized approximation of time\n */\nexport const humanizeDuration = d => {\n if (d < 60000) {\n const p = metric.prefix(d, -1)\n return math.round(p.n * 100) / 100 + p.prefix + 's'\n }\n d = math.floor(d / 1000)\n const seconds = d % 60\n const minutes = math.floor(d / 60) % 60\n const hours = math.floor(d / 3600) % 24\n const days = math.floor(d / 86400)\n if (days > 0) {\n return days + 'd' + ((hours > 0 || minutes > 30) ? ' ' + (minutes > 30 ? hours + 1 : hours) + 'h' : '')\n }\n if (hours > 0) {\n /* c8 ignore next */\n return hours + 'h' + ((minutes > 0 || seconds > 30) ? ' ' + (seconds > 30 ? minutes + 1 : minutes) + 'min' : '')\n }\n return minutes + 'min' + (seconds > 0 ? ' ' + seconds + 's' : '')\n}\n","/**\n * Observable class prototype.\n *\n * @module observable\n */\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as array from './array.js'\n\n/**\n * Handles named events.\n *\n * @template N\n */\nexport class Observable {\n constructor () {\n /**\n * Some desc.\n * @type {Map}\n */\n this._observers = map.create()\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, name, set.create).add(f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, _f)\n f(...args)\n }\n this.on(name, _f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @param {N} name The event name.\n * @param {Array} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n","/**\n * @module awareness-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as time from 'lib0/time'\nimport * as math from 'lib0/math'\nimport { Observable } from 'lib0/observable'\nimport * as f from 'lib0/function'\nimport * as Y from 'yjs' // eslint-disable-line\n\nexport const outdatedTimeout = 30000\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable}\n */\nexport class Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super()\n this.doc = doc\n /**\n * @type {number}\n */\n this.clientID = doc.clientID\n /**\n * Maps from client id to client state\n * @type {Map>}\n */\n this.states = new Map()\n /**\n * @type {Map}\n */\n this.meta = new Map()\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = time.getUnixTime()\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState())\n }\n /**\n * @type {Array}\n */\n const remove = []\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid)\n }\n })\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout')\n }\n }, math.floor(outdatedTimeout / 10)))\n doc.on('destroy', () => {\n this.destroy()\n })\n this.setLocalState({})\n }\n\n destroy () {\n this.emit('destroy', [this])\n this.setLocalState(null)\n super.destroy()\n clearInterval(this._checkInterval)\n }\n\n /**\n * @return {Object|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID\n const currLocalMeta = this.meta.get(clientID)\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1\n const prevState = this.states.get(clientID)\n if (state === null) {\n this.states.delete(clientID)\n } else {\n this.states.set(clientID, state)\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: time.getUnixTime()\n })\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n if (state === null) {\n removed.push(clientID)\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID)\n }\n } else {\n updated.push(clientID)\n if (!f.equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID)\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local'])\n }\n this.emit('update', [{ added, updated, removed }, 'local'])\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState()\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n })\n }\n }\n\n /**\n * @return {Map>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array} clients\n * @param {any} origin\n */\nexport const removeAwarenessStates = (awareness, clients, origin) => {\n const removed = []\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i]\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID)\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID))\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: time.getUnixTime()\n })\n }\n removed.push(clientID)\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin])\n awareness.emit('update', [{ added: [], updated: [], removed }, origin])\n }\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Array} clients\n * @return {Uint8Array}\n */\nexport const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = clients[i]\n const state = states.get(clientID) || null\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(state))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Modify the content of an awareness update before re-encoding it to an awareness update.\n *\n * This might be useful when you have a central server that wants to ensure that clients\n * cant hijack somebody elses identity.\n *\n * @param {Uint8Array} update\n * @param {function(any):any} modify\n * @return {Uint8Array}\n */\nexport const modifyAwarenessUpdate = (update, modify) => {\n const decoder = decoding.createDecoder(update)\n const encoder = encoding.createEncoder()\n const len = decoding.readVarUint(decoder)\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n const clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const modifiedState = modify(state)\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(modifiedState))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nexport const applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = decoding.createDecoder(update)\n const timestamp = time.getUnixTime()\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n const len = decoding.readVarUint(decoder)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n let clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const clientMeta = awareness.meta.get(clientID)\n const prevState = awareness.states.get(clientID)\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++\n } else {\n awareness.states.delete(clientID)\n }\n } else {\n awareness.states.set(clientID, state)\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n })\n if (clientMeta === undefined && state !== null) {\n added.push(clientID)\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID)\n } else if (state !== null) {\n if (!f.equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID)\n }\n updated.push(clientID)\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin])\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin])\n }\n}\n","import {\n IncomingHttpHeaders, IncomingMessage, ServerResponse,\n} from 'http'\nimport { URLSearchParams } from 'url'\nimport { Awareness } from 'y-protocols/awareness'\nimport Document from './Document.js'\nimport { Hocuspocus } from './Hocuspocus.js'\nimport Connection from './Connection.js'\n\nexport enum MessageType {\n Unknown = -1,\n Sync = 0,\n Awareness = 1,\n Auth = 2,\n QueryAwareness = 3,\n SyncReply = 4, // same as Sync, but won't trigger another 'SyncStep1'\n Stateless = 5,\n BroadcastStateless = 6,\n\n CLOSE = 7,\n}\n\nexport interface AwarenessUpdate {\n added: Array,\n updated: Array,\n removed: Array,\n}\n\nexport interface ConnectionConfiguration {\n readOnly: boolean\n requiresAuthentication: boolean\n isAuthenticated: boolean\n}\n\nexport interface Extension {\n priority?: number,\n onConfigure?(data: onConfigurePayload): Promise,\n onListen?(data: onListenPayload): Promise,\n onUpgrade?(data: onUpgradePayload): Promise,\n onConnect?(data: onConnectPayload): Promise,\n connected?(data: connectedPayload): Promise,\n onAuthenticate?(data: onAuthenticatePayload): Promise,\n onLoadDocument?(data: onLoadDocumentPayload): Promise,\n afterLoadDocument?(data: onLoadDocumentPayload): Promise,\n beforeHandleMessage?(data: beforeHandleMessagePayload): Promise,\n beforeBroadcastStateless?(data: beforeBroadcastStatelessPayload): Promise,\n onStateless?(payload: onStatelessPayload): Promise;\n onChange?(data: onChangePayload): Promise,\n onStoreDocument?(data: onStoreDocumentPayload): Promise,\n afterStoreDocument?(data: afterStoreDocumentPayload): Promise,\n onAwarenessUpdate?(data: onAwarenessUpdatePayload): Promise,\n onRequest?(data: onRequestPayload): Promise,\n onDisconnect?(data: onDisconnectPayload): Promise\n onDestroy?(data: onDestroyPayload): Promise,\n}\n\nexport type HookName =\n 'onConfigure' |\n 'onListen' |\n 'onUpgrade' |\n 'onConnect' |\n 'connected' |\n 'onAuthenticate' |\n 'onLoadDocument' |\n 'afterLoadDocument' |\n 'beforeHandleMessage' |\n 'beforeBroadcastStateless' |\n 'onStateless' |\n 'onChange' |\n 'onStoreDocument' |\n 'afterStoreDocument' |\n 'onAwarenessUpdate' |\n 'onRequest' |\n 'onDisconnect' |\n 'onDestroy'\n\nexport type HookPayload =\n onConfigurePayload |\n onListenPayload |\n onUpgradePayload |\n onConnectPayload |\n connectedPayload |\n onAuthenticatePayload |\n onLoadDocumentPayload |\n onStatelessPayload |\n beforeHandleMessagePayload |\n beforeBroadcastStatelessPayload |\n onChangePayload |\n onStoreDocumentPayload |\n afterStoreDocumentPayload |\n onAwarenessUpdatePayload |\n onRequestPayload |\n onDisconnectPayload |\n onDestroyPayload\n\nexport interface Configuration extends Extension {\n /**\n * A name for the instance, used for logging.\n */\n name: string | null,\n /**\n * A list of hocuspocus extenions.\n */\n extensions: Array,\n /**\n * The port which the server listens on.\n */\n port?: number,\n /**\n * The address which the server listens on.\n */\n address?: string,\n /**\n * Defines in which interval the server sends a ping, and closes the connection when no pong is sent back.\n */\n timeout: number,\n /**\n * Debounces the call of the `onStoreDocument` hook for the given amount of time in ms.\n * Otherwise every single update would be persisted.\n */\n debounce: number,\n /**\n * Makes sure to call `onStoreDocument` at least in the given amount of time (ms).\n */\n maxDebounce: number\n /**\n * By default, the servers show a start screen. If passed false, the server will start quietly.\n */\n quiet: boolean,\n\n /**\n * options to pass to the ydoc document\n */\n yDocOptions: {\n gc: boolean, // enable or disable garbage collection (see https://github.com/yjs/yjs/blob/main/INTERNALS.md#deletions)\n gcFilter: () => boolean, // will be called before garbage collecting ; return false to keep it\n },\n /**\n * Function which returns the (customized) document name based on the request\n */\n getDocumentName?(data: getDocumentNamePayload): string | Promise,\n}\n\nexport interface getDocumentNamePayload {\n documentName: string,\n request: IncomingMessage,\n requestParameters: URLSearchParams,\n}\n\nexport interface onStatelessPayload {\n connection: Connection,\n documentName: string,\n document: Document,\n payload: string,\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface onAuthenticatePayload {\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n token: string,\n connection: ConnectionConfiguration\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface onConnectPayload {\n documentName: string,\n instance: Hocuspocus,\n request: IncomingMessage,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\n// @todo Change 'connection' to 'connectionConfig', and 'connectionInstance' to 'connection' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface connectedPayload {\n context: any,\n documentName: string,\n instance: Hocuspocus,\n request: IncomingMessage,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration,\n connectionInstance: Connection\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface onLoadDocumentPayload {\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface afterLoadDocumentPayload {\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\nexport interface onChangePayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n update: Uint8Array,\n socketId: string,\n}\n\nexport interface beforeHandleMessagePayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n update: Uint8Array,\n socketId: string,\n connection: Connection\n}\n\nexport interface beforeBroadcastStatelessPayload {\n document: Document,\n documentName: string,\n payload: string,\n}\n\nexport interface onStoreDocumentPayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n}\n\nexport interface afterStoreDocumentPayload extends onStoreDocumentPayload {}\n\nexport interface onAwarenessUpdatePayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n update: Uint8Array,\n socketId: string,\n added: number[],\n updated: number[],\n removed: number[],\n awareness: Awareness,\n states: StatesArray,\n}\n\nexport type StatesArray = { clientId: number, [key: string | number]: any }[]\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface fetchPayload {\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\nexport interface storePayload extends onStoreDocumentPayload {\n state: Buffer,\n}\n\nexport interface onDisconnectPayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n}\n\nexport interface onRequestPayload {\n request: IncomingMessage,\n response: ServerResponse,\n instance: Hocuspocus,\n}\n\nexport interface onUpgradePayload {\n request: IncomingMessage,\n socket: any,\n head: any,\n instance: Hocuspocus,\n}\n\nexport interface onListenPayload {\n instance: Hocuspocus,\n configuration: Configuration,\n port: number,\n}\n\nexport interface onDestroyPayload {\n instance: Hocuspocus,\n}\n\nexport interface onConfigurePayload {\n instance: Hocuspocus,\n configuration: Configuration,\n version: string,\n}\n","import {\n createEncoder,\n Encoder,\n toUint8Array,\n writeVarString,\n writeVarUint,\n writeVarUint8Array,\n} from 'lib0/encoding'\nimport { writeSyncStep1, writeUpdate } from 'y-protocols/sync'\nimport { Awareness, encodeAwarenessUpdate } from 'y-protocols/awareness'\n\nimport { writeAuthenticated, writePermissionDenied } from '@hocuspocus/common'\nimport { MessageType } from './types.js'\nimport Document from './Document.js'\n\nexport class OutgoingMessage {\n\n encoder: Encoder\n\n type?: number\n\n category?: string\n\n constructor(documentName: string) {\n this.encoder = createEncoder()\n\n writeVarString(this.encoder, documentName)\n }\n\n createSyncMessage(): OutgoingMessage {\n this.type = MessageType.Sync\n\n writeVarUint(this.encoder, MessageType.Sync)\n\n return this\n }\n\n createSyncReplyMessage(): OutgoingMessage {\n this.type = MessageType.SyncReply\n\n writeVarUint(this.encoder, MessageType.SyncReply)\n\n return this\n }\n\n createAwarenessUpdateMessage(awareness: Awareness, changedClients?: Array): OutgoingMessage {\n this.type = MessageType.Awareness\n this.category = 'Update'\n\n const message = encodeAwarenessUpdate(\n awareness,\n changedClients || Array.from(awareness.getStates().keys()),\n )\n\n writeVarUint(this.encoder, MessageType.Awareness)\n writeVarUint8Array(this.encoder, message)\n\n return this\n }\n\n writeQueryAwareness(): OutgoingMessage {\n this.type = MessageType.QueryAwareness\n this.category = 'Update'\n\n writeVarUint(this.encoder, MessageType.QueryAwareness)\n\n return this\n }\n\n writeAuthenticated(readonly: boolean): OutgoingMessage {\n this.type = MessageType.Auth\n this.category = 'Authenticated'\n\n writeVarUint(this.encoder, MessageType.Auth)\n writeAuthenticated(this.encoder, readonly ? 'readonly' : 'read-write')\n\n return this\n }\n\n writePermissionDenied(reason: string): OutgoingMessage {\n this.type = MessageType.Auth\n this.category = 'PermissionDenied'\n\n writeVarUint(this.encoder, MessageType.Auth)\n writePermissionDenied(this.encoder, reason)\n\n return this\n }\n\n writeFirstSyncStepFor(document: Document): OutgoingMessage {\n this.category = 'SyncStep1'\n\n writeSyncStep1(this.encoder, document)\n\n return this\n }\n\n writeUpdate(update: Uint8Array): OutgoingMessage {\n this.category = 'Update'\n\n writeUpdate(this.encoder, update)\n\n return this\n }\n\n writeStateless(payload: string): OutgoingMessage {\n this.category = 'Stateless'\n\n writeVarUint(this.encoder, MessageType.Stateless)\n writeVarString(this.encoder, payload)\n\n return this\n }\n\n writeBroadcastStateless(payload: string): OutgoingMessage {\n this.category = 'Stateless'\n\n writeVarUint(this.encoder, MessageType.BroadcastStateless)\n writeVarString(this.encoder, payload)\n\n return this\n }\n\n toUint8Array(): Uint8Array {\n return toUint8Array(this.encoder)\n }\n\n}\n","import {\n messageYjsSyncStep1,\n messageYjsSyncStep2,\n messageYjsUpdate,\n readSyncStep1,\n readSyncStep2,\n readUpdate,\n} from 'y-protocols/sync'\nimport { applyAwarenessUpdate } from 'y-protocols/awareness'\nimport { readVarString } from 'lib0/decoding'\nimport { MessageType } from './types.js'\nimport Connection from './Connection.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { Debugger } from './Debugger.js'\nimport Document from './Document.js'\n\nexport class MessageReceiver {\n\n message: IncomingMessage\n\n logger: Debugger\n\n constructor(message: IncomingMessage, logger: Debugger) {\n this.message = message\n this.logger = logger\n }\n\n public apply(document: Document, connection?: Connection, reply?: (message: Uint8Array) => void) {\n const { message } = this\n const type = message.readVarUint()\n const emptyMessageLength = message.length\n\n switch (type) {\n case MessageType.Sync:\n case MessageType.SyncReply: {\n message.writeVarUint(MessageType.Sync)\n this.readSyncMessage(message, document, connection, reply, type !== MessageType.SyncReply)\n\n if (message.length > emptyMessageLength + 1) {\n if (reply) {\n reply(message.toUint8Array())\n } else if (connection) {\n // TODO: We should log this, shouldn’t we?\n // this.logger.log({\n // direction: 'out',\n // type: MessageType.Awareness,\n // category: 'Update',\n // })\n connection.send(message.toUint8Array())\n }\n }\n\n break\n }\n case MessageType.Awareness: {\n this.logger.log({\n direction: 'in',\n type: MessageType.Awareness,\n category: 'Update',\n })\n\n applyAwarenessUpdate(document.awareness, message.readVarUint8Array(), connection)\n\n break\n }\n case MessageType.QueryAwareness: {\n\n this.applyQueryAwarenessMessage(document, reply)\n\n break\n }\n case MessageType.Stateless: {\n connection?.callbacks.statelessCallback({\n connection,\n documentName: document.name,\n document,\n payload: readVarString(message.decoder),\n })\n\n break\n }\n case MessageType.BroadcastStateless: {\n const msg = message.readVarString()\n document.getConnections().forEach(connection => {\n connection.sendStateless(msg)\n })\n break\n }\n\n case MessageType.CLOSE: {\n connection?.close({\n code: 1000,\n reason: 'provider_initiated',\n })\n break\n }\n default:\n console.error(`Unable to handle message of type ${type}: no handler defined!`)\n // Do nothing\n }\n }\n\n readSyncMessage(message: IncomingMessage, document: Document, connection?: Connection, reply?: (message: Uint8Array) => void, requestFirstSync = true) {\n const type = message.readVarUint()\n\n switch (type) {\n case messageYjsSyncStep1: {\n this.logger.log({\n direction: 'in',\n type: MessageType.Sync,\n category: 'SyncStep1',\n })\n\n readSyncStep1(message.decoder, message.encoder, document)\n\n // When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1.\n this.logger.log({\n direction: 'out',\n type: MessageType.Sync,\n category: 'SyncStep2',\n })\n\n if (reply && requestFirstSync) {\n const syncMessage = (new OutgoingMessage(document.name)\n .createSyncReplyMessage()\n .writeFirstSyncStepFor(document))\n\n this.logger.log({\n direction: 'out',\n type: MessageType.Sync,\n category: 'SyncStep1',\n })\n\n reply(syncMessage.toUint8Array())\n } else if (connection) {\n const syncMessage = (new OutgoingMessage(document.name)\n .createSyncMessage()\n .writeFirstSyncStepFor(document))\n\n this.logger.log({\n direction: 'out',\n type: MessageType.Sync,\n category: 'SyncStep1',\n })\n\n connection.send(syncMessage.toUint8Array())\n }\n break\n }\n case messageYjsSyncStep2:\n this.logger.log({\n direction: 'in',\n type: MessageType.Sync,\n category: 'SyncStep2',\n })\n\n if (connection?.readOnly) {\n break\n }\n\n readSyncStep2(message.decoder, document, connection)\n break\n case messageYjsUpdate:\n this.logger.log({\n direction: 'in',\n type: MessageType.Sync,\n category: 'Update',\n })\n\n if (connection?.readOnly) {\n break\n }\n\n readUpdate(message.decoder, document, connection)\n break\n default:\n throw new Error(`Received a message with an unknown type: ${type}`)\n }\n\n return type\n }\n\n applyQueryAwarenessMessage(document: Document, reply?: (message: Uint8Array) => void) {\n const message = new OutgoingMessage(document.name)\n .createAwarenessUpdateMessage(document.awareness)\n\n if (reply) {\n reply(message.toUint8Array())\n }\n\n // TODO: We should add support for WebSocket connections, too, right?\n // this.logger.log({\n // direction: 'out',\n // type: MessageType.Sync,\n // category: 'SyncStep1',\n // })\n\n // connection.send(syncMessage.toUint8Array())\n }\n}\n","import { IncomingMessage as HTTPIncomingMessage } from 'http'\nimport AsyncLock from 'async-lock'\nimport WebSocket from 'ws'\nimport {\n CloseEvent, ConnectionTimeout, Forbidden, WsReadyStates,\n} from '@hocuspocus/common'\nimport Document from './Document.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { MessageReceiver } from './MessageReceiver.js'\nimport { Debugger } from './Debugger.js'\nimport { onStatelessPayload } from './types.js'\n\nexport class Connection {\n\n webSocket: WebSocket\n\n context: any\n\n document: Document\n\n pingInterval: NodeJS.Timeout\n\n pongReceived = true\n\n request: HTTPIncomingMessage\n\n timeout: number\n\n callbacks: any = {\n onClose: [(document: Document, event?: CloseEvent) => null],\n beforeHandleMessage: (connection: Connection, update: Uint8Array) => Promise,\n statelessCallback: () => Promise,\n }\n\n socketId: string\n\n lock: AsyncLock\n\n readOnly: Boolean\n\n logger: Debugger\n\n /**\n * Constructor.\n */\n constructor(\n connection: WebSocket,\n request: HTTPIncomingMessage,\n document: Document,\n timeout: number,\n socketId: string,\n context: any,\n readOnly = false,\n logger: Debugger,\n ) {\n this.webSocket = connection\n this.context = context\n this.document = document\n this.request = request\n this.timeout = timeout\n this.socketId = socketId\n this.readOnly = readOnly\n this.logger = logger\n\n this.lock = new AsyncLock()\n\n this.webSocket.binaryType = 'arraybuffer'\n this.document.addConnection(this)\n\n this.pingInterval = setInterval(this.check.bind(this), this.timeout)\n\n this.webSocket.on('close', this.boundClose)\n this.webSocket.on('message', this.boundHandleMessage)\n this.webSocket.on('pong', this.boundHandlePong)\n\n this.sendCurrentAwareness()\n }\n\n boundClose = this.close.bind(this)\n\n boundHandleMessage = this.handleMessage.bind(this)\n\n boundHandlePong = this.handlePong.bind(this)\n\n handlePong() {\n this.pongReceived = true\n }\n\n /**\n * Set a callback that will be triggered when the connection is closed\n */\n onClose(callback: (document: Document, event?: CloseEvent) => void): Connection {\n this.callbacks.onClose.push(callback)\n\n return this\n }\n\n /**\n * Set a callback that will be triggered when an stateless message is received\n */\n onStatelessCallback(callback: (payload: onStatelessPayload) => Promise): Connection {\n this.callbacks.statelessCallback = callback\n\n return this\n }\n\n /**\n * Set a callback that will be triggered before an message is handled\n */\n beforeHandleMessage(callback: (connection: Connection, update: Uint8Array) => Promise): Connection {\n this.callbacks.beforeHandleMessage = callback\n\n return this\n }\n\n /**\n * Send the given message\n */\n send(message: any): void {\n if (\n this.webSocket.readyState === WsReadyStates.Closing\n || this.webSocket.readyState === WsReadyStates.Closed\n ) {\n this.close()\n }\n\n try {\n this.webSocket.send(message, (error: any) => {\n if (error != null) this.close()\n })\n } catch (exception) {\n this.close()\n }\n }\n\n /**\n * Send a stateless message with payload\n */\n public sendStateless(payload: string): void {\n const message = new OutgoingMessage(this.document.name)\n .writeStateless(payload)\n\n this.logger.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n this.send(\n message.toUint8Array(),\n )\n }\n\n /**\n * Graceful wrapper around the WebSocket close method.\n */\n close(event?: CloseEvent): void {\n this.lock.acquire('close', (done: Function) => {\n if (this.pingInterval) {\n clearInterval(this.pingInterval)\n }\n\n if (this.document.hasConnection(this)) {\n this.document.removeConnection(this)\n clearInterval(this.pingInterval)\n\n this.webSocket.removeListener('close', this.boundClose)\n this.webSocket.removeListener('message', this.boundHandleMessage)\n this.webSocket.removeListener('pong', this.boundHandlePong)\n\n this.callbacks.onClose.forEach((callback: (arg0: Document, arg1?: CloseEvent) => any) => callback(this.document, event))\n }\n\n done()\n })\n }\n\n /**\n * Check if pong was received and close the connection otherwise\n * @private\n */\n private check(): void {\n if (!this.pongReceived) {\n return this.close(ConnectionTimeout)\n }\n\n if (this.document.hasConnection(this)) {\n this.pongReceived = false\n\n try {\n this.webSocket.ping()\n } catch (error) {\n this.close(ConnectionTimeout)\n }\n }\n }\n\n /**\n * Send the current document awareness to the client, if any\n * @private\n */\n private sendCurrentAwareness(): void {\n if (!this.document.hasAwarenessStates()) {\n return\n }\n\n const awarenessMessage = new OutgoingMessage(this.document.name)\n .createAwarenessUpdateMessage(this.document.awareness)\n\n this.logger.log({\n direction: 'out',\n type: awarenessMessage.type,\n category: awarenessMessage.category,\n })\n\n this.send(awarenessMessage.toUint8Array())\n }\n\n /**\n * Handle an incoming message\n * @private\n */\n private handleMessage(data: Uint8Array): void {\n const message = new IncomingMessage(data)\n const documentName = message.readVarString()\n\n if (documentName !== this.document.name) return\n\n message.writeVarString(documentName)\n\n this.callbacks.beforeHandleMessage(this, data)\n .then(() => {\n new MessageReceiver(\n message,\n this.logger,\n ).apply(this.document, this)\n })\n .catch((e: any) => {\n console.log('closing connection because of exception', e)\n this.close({\n code: 'code' in e ? e.code : Forbidden.code,\n reason: 'reason' in e ? e.reason : Forbidden.reason,\n })\n })\n }\n\n}\n\nexport default Connection\n","// import * as time from 'lib0/time'\nimport { MessageType } from './types.js'\n\nexport class Debugger {\n logs: any[] = []\n\n listen = false\n\n output = false\n\n enable() {\n this.flush()\n\n this.listen = true\n }\n\n disable() {\n this.listen = false\n }\n\n verbose() {\n this.output = true\n }\n\n quiet() {\n this.output = false\n }\n\n log(message: any) {\n if (!this.listen) {\n return this\n }\n\n const item = {\n ...message,\n type: MessageType[message.type],\n // time: time.getUnixTime(),\n }\n\n this.logs.push(item)\n\n if (this.output) {\n console.log('[DEBUGGER]', item.direction === 'in' ? 'IN –>' : 'OUT <–', `${item.type}/${item.category}`)\n }\n\n return this\n }\n\n flush() {\n this.logs = []\n\n return this\n }\n\n get() {\n return {\n logs: this.logs,\n }\n }\n}\n","/**\n * Mutual exclude for JavaScript.\n *\n * @module mutex\n */\n\n/**\n * @callback mutex\n * @param {function():void} cb Only executed when this mutex is not in the current stack\n * @param {function():void} [elseCb] Executed when this mutex is in the current stack\n */\n\n/**\n * Creates a mutual exclude function with the following property:\n *\n * ```js\n * const mutex = createMutex()\n * mutex(() => {\n * // This function is immediately executed\n * mutex(() => {\n * // This function is not executed, as the mutex is already active.\n * })\n * })\n * ```\n *\n * @return {mutex} A mutual exclude function\n * @public\n */\nexport const createMutex = () => {\n let token = true\n return (f, g) => {\n if (token) {\n token = false\n try {\n f()\n } finally {\n token = true\n }\n } else if (g !== undefined) {\n g()\n }\n }\n}\n","import WebSocket from 'ws'\nimport { Awareness, removeAwarenessStates, applyAwarenessUpdate } from 'y-protocols/awareness'\nimport { applyUpdate, Doc, encodeStateAsUpdate } from 'yjs'\nimport { mutex, createMutex } from 'lib0/mutex.js'\nimport { AwarenessUpdate } from './types.js'\nimport Connection from './Connection.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { Debugger } from './Debugger.js'\n\nexport class Document extends Doc {\n\n awareness: Awareness\n\n callbacks = {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onUpdate: (document: Document, connection: Connection, update: Uint8Array) => {},\n beforeBroadcastStateless: (document: Document, stateless: string) => {},\n }\n\n connections: Map,\n connection: Connection\n }> = new Map()\n\n // The number of direct (non-websocket) connections to this document\n directConnectionsCount = 0\n\n name: string\n\n mux: mutex\n\n logger: Debugger\n\n isLoading: boolean\n\n /**\n * Constructor.\n */\n constructor(name: string, logger: Debugger, yDocOptions: {}) {\n super(yDocOptions)\n\n this.name = name\n this.mux = createMutex()\n\n this.awareness = new Awareness(this)\n this.awareness.setLocalState(null)\n\n this.awareness.on('update', this.handleAwarenessUpdate.bind(this))\n this.on('update', this.handleUpdate.bind(this))\n\n this.logger = logger\n this.isLoading = true\n }\n\n /**\n * Check if the Document is empty\n */\n isEmpty(fieldName: string): boolean {\n // eslint-disable-next-line no-underscore-dangle\n return !this.get(fieldName)._start\n }\n\n /**\n * Merge the given document(s) into this one\n */\n merge(documents: Doc|Array): Document {\n (Array.isArray(documents) ? documents : [documents]).forEach(document => {\n applyUpdate(this, encodeStateAsUpdate(document))\n })\n\n return this\n }\n\n /**\n * Set a callback that will be triggered when the document is updated\n */\n onUpdate(callback: (document: Document, connection: Connection, update: Uint8Array) => void): Document {\n this.callbacks.onUpdate = callback\n\n return this\n }\n\n /**\n * Set a callback that will be triggered before a stateless message is broadcasted\n */\n beforeBroadcastStateless(callback: (document: Document, stateless: string) => void): Document {\n this.callbacks.beforeBroadcastStateless = callback\n\n return this\n }\n\n /**\n * Register a connection and a set of clients on this document keyed by the\n * underlying websocket connection\n */\n addConnection(connection: Connection): Document {\n this.connections.set(connection.webSocket, {\n clients: new Set(),\n connection,\n })\n\n return this\n }\n\n /**\n * Is the given connection registered on this document\n */\n hasConnection(connection: Connection): boolean {\n return this.connections.has(connection.webSocket)\n }\n\n /**\n * Remove the given connection from this document\n */\n removeConnection(connection: Connection): Document {\n removeAwarenessStates(\n this.awareness,\n Array.from(this.getClients(connection.webSocket)),\n null,\n )\n\n this.connections.delete(connection.webSocket)\n\n return this\n }\n\n addDirectConnection(): Document {\n this.directConnectionsCount += 1\n\n return this\n }\n\n removeDirectConnection(): Document {\n if (this.directConnectionsCount > 0) {\n this.directConnectionsCount -= 1\n }\n\n return this\n }\n\n /**\n * Get the number of active connections for this document\n */\n getConnectionsCount(): number {\n return this.connections.size + this.directConnectionsCount\n }\n\n /**\n * Get an array of registered connections\n */\n getConnections(): Array {\n return Array.from(this.connections.values()).map(data => data.connection)\n }\n\n /**\n * Get the client ids for the given connection instance\n */\n getClients(connectionInstance: WebSocket): Set {\n const connection = this.connections.get(connectionInstance)\n\n return connection?.clients === undefined ? new Set() : connection.clients\n }\n\n /**\n * Has the document awareness states\n */\n hasAwarenessStates(): boolean {\n return this.awareness.getStates().size > 0\n }\n\n /**\n * Apply the given awareness update\n */\n applyAwarenessUpdate(connection: Connection, update: Uint8Array): Document {\n applyAwarenessUpdate(\n this.awareness,\n update,\n connection.webSocket,\n )\n\n return this\n }\n\n /**\n * Handle an awareness update and sync changes to clients\n * @private\n */\n private handleAwarenessUpdate(\n { added, updated, removed }: AwarenessUpdate,\n connectionInstance: WebSocket,\n ): Document {\n const changedClients = added.concat(updated, removed)\n\n if (connectionInstance !== null) {\n const connection = this.connections.get(connectionInstance)\n\n if (connection) {\n added.forEach((clientId: any) => connection.clients.add(clientId))\n removed.forEach((clientId: any) => connection.clients.delete(clientId))\n }\n }\n\n this.getConnections().forEach(connection => {\n const awarenessMessage = new OutgoingMessage(this.name)\n .createAwarenessUpdateMessage(this.awareness, changedClients)\n\n this.logger.log({\n direction: 'out',\n type: awarenessMessage.type,\n category: awarenessMessage.category,\n })\n\n connection.send(\n awarenessMessage.toUint8Array(),\n )\n })\n\n return this\n }\n\n /**\n * Handle an updated document and sync changes to clients\n */\n private handleUpdate(update: Uint8Array, connection: Connection): Document {\n this.callbacks.onUpdate(this, connection, update)\n\n const message = new OutgoingMessage(this.name)\n .createSyncMessage()\n .writeUpdate(update)\n\n this.getConnections().forEach(connection => {\n this.logger.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n connection.send(\n message.toUint8Array(),\n )\n })\n\n return this\n }\n\n /**\n * Broadcast stateless message to all connections\n */\n public broadcastStateless(payload: string): void {\n this.callbacks.beforeBroadcastStateless(this, payload)\n\n this.getConnections().forEach(connection => {\n connection.sendStateless(payload)\n })\n }\n}\n\nexport default Document\n","import { URLSearchParams } from 'url'\nimport Document from './Document.js'\nimport type { Hocuspocus } from './Hocuspocus.js'\n\nexport class DirectConnection {\n document: Document | null = null\n\n instance!: Hocuspocus\n\n context: any\n\n /**\n * Constructor.\n */\n constructor(\n document: Document,\n instance: Hocuspocus,\n context?: any,\n ) {\n this.document = document\n this.instance = instance\n this.context = context\n\n this.document.addDirectConnection()\n }\n\n async transact(transaction: (document: Document) => void) {\n if (!this.document) {\n throw new Error('direct connection closed')\n }\n\n transaction(this.document)\n\n this.instance.storeDocumentHooks(this.document, {\n clientsCount: this.document.getConnectionsCount(),\n context: this.context,\n document: this.document,\n documentName: this.document.name,\n instance: this.instance,\n requestHeaders: {},\n requestParameters: new URLSearchParams(),\n socketId: 'server',\n })\n }\n\n disconnect() {\n this.document?.removeDirectConnection()\n this.document = null\n }\n}\n","import { createServer, IncomingMessage, Server as HTTPServer } from 'http'\nimport { URLSearchParams } from 'url'\nimport { ListenOptions } from 'net'\nimport * as decoding from 'lib0/decoding'\nimport WebSocket, { AddressInfo, WebSocketServer } from 'ws'\nimport { Doc, encodeStateAsUpdate, applyUpdate } from 'yjs'\nimport { v4 as uuid } from 'uuid'\nimport kleur from 'kleur'\nimport {\n ResetConnection,\n Unauthorized,\n Forbidden,\n awarenessStatesToArray,\n WsReadyStates,\n} from '@hocuspocus/common'\nimport meta from '../package.json' assert {type: 'json'}\nimport { IncomingMessage as SocketIncomingMessage } from './IncomingMessage.js'\nimport {\n MessageType,\n Configuration,\n ConnectionConfiguration,\n HookName,\n AwarenessUpdate,\n HookPayload,\n beforeHandleMessagePayload,\n beforeBroadcastStatelessPayload,\n onListenPayload,\n onStoreDocumentPayload,\n} from './types.js'\nimport Document from './Document.js'\nimport Connection from './Connection.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { Debugger } from './Debugger.js'\nimport { DirectConnection } from './DirectConnection.js'\n\nexport const defaultConfiguration = {\n name: null,\n port: 80,\n address: '0.0.0.0',\n timeout: 30000,\n debounce: 2000,\n maxDebounce: 10000,\n quiet: false,\n yDocOptions: {\n gc: true,\n gcFilter: () => true,\n },\n}\n\n/**\n * Hocuspocus Server\n */\nexport class Hocuspocus {\n configuration: Configuration = {\n ...defaultConfiguration,\n extensions: [],\n onConfigure: () => new Promise(r => r(null)),\n onListen: () => new Promise(r => r(null)),\n onUpgrade: () => new Promise(r => r(null)),\n onConnect: () => new Promise(r => r(null)),\n connected: () => new Promise(r => r(null)),\n beforeHandleMessage: () => new Promise(r => r(null)),\n beforeBroadcastStateless: () => new Promise(r => r(null)),\n onStateless: () => new Promise(r => r(null)),\n onChange: () => new Promise(r => r(null)),\n onLoadDocument: () => new Promise(r => r(null)),\n onStoreDocument: () => new Promise(r => r(null)),\n afterStoreDocument: () => new Promise(r => r(null)),\n onAwarenessUpdate: () => new Promise(r => r(null)),\n onRequest: () => new Promise(r => r(null)),\n onDisconnect: () => new Promise(r => r(null)),\n onDestroy: () => new Promise(r => r(null)),\n }\n\n documents: Map = new Map()\n\n httpServer?: HTTPServer\n\n webSocketServer?: WebSocketServer\n\n debugger = new Debugger()\n\n constructor(configuration?: Partial) {\n if (configuration) {\n this.configure(configuration)\n }\n }\n\n /**\n * Configure the server\n */\n configure(configuration: Partial): Hocuspocus {\n this.configuration = {\n ...this.configuration,\n ...configuration,\n }\n\n this.configuration.extensions.sort((a, b) => {\n const one = typeof a.priority === 'undefined' ? 100 : a.priority\n const two = typeof b.priority === 'undefined' ? 100 : b.priority\n\n if (one > two) {\n return -1\n }\n\n if (one < two) {\n return 1\n }\n\n return 0\n })\n\n this.configuration.extensions.push({\n onConfigure: this.configuration.onConfigure,\n onListen: this.configuration.onListen,\n onUpgrade: this.configuration.onUpgrade,\n onConnect: this.configuration.onConnect,\n connected: this.configuration.connected,\n onAuthenticate: this.configuration.onAuthenticate,\n onLoadDocument: this.configuration.onLoadDocument,\n beforeHandleMessage: this.configuration.beforeHandleMessage,\n beforeBroadcastStateless: this.configuration.beforeBroadcastStateless,\n onStateless: this.configuration.onStateless,\n onChange: this.configuration.onChange,\n onStoreDocument: this.configuration.onStoreDocument,\n afterStoreDocument: this.configuration.afterStoreDocument,\n onAwarenessUpdate: this.configuration.onAwarenessUpdate,\n onRequest: this.configuration.onRequest,\n onDisconnect: this.configuration.onDisconnect,\n onDestroy: this.configuration.onDestroy,\n })\n\n this.hooks('onConfigure', {\n configuration: this.configuration,\n version: meta.version,\n instance: this,\n })\n\n return this\n }\n\n get requiresAuthentication(): boolean {\n return !!this.configuration.extensions.find(extension => {\n return extension.onAuthenticate !== undefined\n })\n }\n\n /**\n * Start the server\n */\n async listen(\n portOrCallback: number | ((data: onListenPayload) => Promise) | null = null,\n callback: any = null,\n ): Promise {\n if (typeof portOrCallback === 'number') {\n this.configuration.port = portOrCallback\n }\n\n if (typeof portOrCallback === 'function') {\n this.configuration.extensions.push({\n onListen: portOrCallback,\n })\n }\n\n if (typeof callback === 'function') {\n this.configuration.extensions.push({\n onListen: callback,\n })\n }\n\n const webSocketServer = new WebSocketServer({ noServer: true })\n\n webSocketServer.on('connection', async (incoming: WebSocket, request: IncomingMessage) => {\n\n incoming.on('error', error => {\n /**\n * Handle a ws instance error, which is required to prevent\n * the server from crashing when one happens\n * See https://github.com/websockets/ws/issues/1777#issuecomment-660803472\n * @private\n */\n this.debugger.log('Error emitted from webSocket instance:')\n this.debugger.log(error)\n })\n\n this.handleConnection(incoming, request)\n })\n\n const server = createServer((request, response) => {\n this.hooks('onRequest', { request, response, instance: this })\n .then(() => {\n // default response if all prior hooks don't interfere\n response.writeHead(200, { 'Content-Type': 'text/plain' })\n response.end('OK')\n })\n .catch(error => {\n // if a hook rejects and the error is empty, do nothing\n // this is only meant to prevent later hooks and the\n // default handler to do something. if a error is present\n // just rethrow it\n if (error) {\n throw error\n }\n })\n })\n\n server.on('upgrade', (request, socket, head) => {\n this.hooks('onUpgrade', {\n request,\n socket,\n head,\n instance: this,\n })\n .then(() => {\n // let the default websocket server handle the connection if\n // prior hooks don't interfere\n webSocketServer.handleUpgrade(request, socket, head, ws => {\n webSocketServer.emit('connection', ws, request)\n })\n })\n .catch(error => {\n // if a hook rejects and the error is empty, do nothing\n // this is only meant to prevent later hooks and the\n // default handler to do something. if a error is present\n // just rethrow it\n if (error) {\n throw error\n }\n })\n })\n\n this.httpServer = server\n this.webSocketServer = webSocketServer\n\n return new Promise((resolve: Function, reject: Function) => {\n server.listen({\n port: this.configuration.port,\n host: this.configuration.address,\n } as ListenOptions, () => {\n if (!this.configuration.quiet && process.env.NODE_ENV !== 'testing') {\n this.showStartScreen()\n }\n\n const onListenPayload = {\n instance: this,\n configuration: this.configuration,\n port: this.address.port,\n }\n\n this.hooks('onListen', onListenPayload)\n .then(() => resolve(this))\n .catch(error => reject(error))\n })\n })\n }\n\n get address(): AddressInfo {\n return (this.httpServer?.address() || {\n port: this.configuration.port,\n address: this.configuration.address,\n family: 'IPv4',\n }) as AddressInfo\n }\n\n get URL(): string {\n return `${this.configuration.address}:${this.address.port}`\n }\n\n get webSocketURL(): string {\n return `ws://${this.URL}`\n }\n\n get httpURL(): string {\n return `http://${this.URL}`\n }\n\n private showStartScreen() {\n const name = this.configuration.name ? ` (${this.configuration.name})` : ''\n\n console.log()\n console.log(` ${kleur.cyan(`Hocuspocus v${meta.version}${name}`)}${kleur.green(' running at:')}`)\n console.log()\n console.log(` > HTTP: ${kleur.cyan(`${this.httpURL}`)}`)\n console.log(` > WebSocket: ${this.webSocketURL}`)\n\n const extensions = this.configuration?.extensions.map(extension => {\n return extension.constructor?.name\n })\n .filter(name => name)\n .filter(name => name !== 'Object')\n\n if (!extensions.length) {\n return\n }\n\n console.log()\n console.log(' Extensions:')\n\n extensions\n .forEach(name => {\n console.log(` - ${name}`)\n })\n\n console.log()\n console.log(` ${kleur.green('Ready.')}`)\n console.log()\n }\n\n /**\n * Get the total number of active documents\n */\n getDocumentsCount(): number {\n return this.documents.size\n }\n\n /**\n * Get the total number of active connections\n */\n getConnectionsCount(): number {\n return Array.from(this.documents.values()).reduce((acc, document) => {\n acc += document.getConnectionsCount()\n return acc\n }, 0)\n }\n\n /**\n * Force close one or more connections\n */\n closeConnections(documentName?: string) {\n // Iterate through all connections for all documents\n // and invoke their close method, which is a graceful\n // disconnect wrapper around the underlying websocket.close\n this.documents.forEach((document: Document) => {\n // If a documentName was specified, bail if it doesnt match\n if (documentName && document.name !== documentName) {\n return\n }\n\n document.connections.forEach(({ connection }) => {\n connection.close(ResetConnection)\n })\n })\n }\n\n /**\n * Destroy the server\n */\n async destroy(): Promise {\n this.httpServer?.close()\n\n try {\n this.webSocketServer?.close()\n this.webSocketServer?.clients.forEach(client => {\n client.terminate()\n })\n } catch (error) {\n console.error(error)\n //\n }\n\n this.debugger.flush()\n\n await this.hooks('onDestroy', { instance: this })\n }\n\n /**\n * The `handleConnection` method receives incoming WebSocket connections,\n * runs all hooks:\n *\n * - onConnect for all connections\n * - onAuthenticate only if required\n *\n * … and if nothings fails it’ll fully establish the connection and\n * load the Document then.\n */\n handleConnection(incoming: WebSocket, request: IncomingMessage, context: any = null): void {\n // Make sure to close an idle connection after a while.\n const closeIdleConnection = setTimeout(() => {\n incoming.close(Unauthorized.code, Unauthorized.reason)\n }, this.configuration.timeout)\n\n // Every new connection gets a unique identifier.\n const socketId = uuid()\n\n // To override settings for specific connections, we’ll\n // keep track of a few things in the `ConnectionConfiguration`.\n const connection: ConnectionConfiguration = {\n readOnly: false,\n requiresAuthentication: this.requiresAuthentication,\n isAuthenticated: false,\n }\n\n // The `onConnect` and `onAuthenticate` hooks need some context\n // to decide who’s connecting, so let’s put it together:\n const hookPayload = {\n instance: this,\n request,\n requestHeaders: request.headers,\n requestParameters: Hocuspocus.getParameters(request),\n socketId,\n connection,\n }\n\n // this map indicates whether a `Connection` instance has already taken over for incoming message for the key (i.e. documentName)\n const documentConnections: Record = {}\n\n // While the connection will be establishing messages will\n // be queued and handled later.\n const incomingMessageQueue: Record = {}\n\n // While the connection is establishing\n const connectionEstablishing: Record = {}\n\n // Once all hooks are run, we’ll fully establish the connection:\n const setUpNewConnection = async (documentName: string) => {\n // Not an idle connection anymore, no need to close it then.\n clearTimeout(closeIdleConnection)\n\n // If no hook interrupts, create a document and connection\n const document = await this.createDocument(documentName, request, socketId, connection, context)\n const instance = this.createConnection(incoming, request, document, socketId, connection.readOnly, context)\n\n instance.onClose((document, event) => {\n delete documentConnections[documentName]\n delete incomingMessageQueue[documentName]\n delete connectionEstablishing[documentName]\n\n if (Object.keys(documentConnections).length === 0) {\n instance.webSocket.close(event?.code, event?.reason) // TODO: Move this to Hocuspocus connection handler\n }\n })\n\n documentConnections[documentName] = true\n\n // There’s no need to queue messages anymore.\n // Let’s work through queued messages.\n incomingMessageQueue[documentName].forEach(input => {\n incoming.emit('message', input)\n })\n\n this.hooks('connected', {\n ...hookPayload,\n documentName,\n context,\n connectionInstance: instance,\n })\n }\n\n // This listener handles authentication messages and queues everything else.\n const handleQueueingMessage = (data: Uint8Array) => {\n try {\n const tmpMsg = new SocketIncomingMessage(data)\n\n const documentName = decoding.readVarString(tmpMsg.decoder)\n const type = decoding.readVarUint(tmpMsg.decoder)\n\n // Okay, we’ve got the authentication message we’re waiting for:\n if (type === MessageType.Auth && !connectionEstablishing[documentName]) {\n connectionEstablishing[documentName] = true\n\n // The 2nd integer contains the submessage type\n // which will always be authentication when sent from client -> server\n decoding.readVarUint(tmpMsg.decoder)\n const token = decoding.readVarString(tmpMsg.decoder)\n\n this.debugger.log({\n direction: 'in',\n type,\n category: 'Token',\n })\n\n this.hooks('onAuthenticate', {\n token,\n ...hookPayload,\n documentName,\n }, (contextAdditions: any) => {\n // Hooks are allowed to give us even more context and we’ll merge everything together.\n // We’ll pass the context to other hooks then.\n context = { ...context, ...contextAdditions }\n })\n .then(() => {\n // All `onAuthenticate` hooks passed.\n connection.isAuthenticated = true\n\n // Let the client know that authentication was successful.\n const message = new OutgoingMessage(documentName).writeAuthenticated(connection.readOnly)\n\n this.debugger.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n incoming.send(message.toUint8Array())\n })\n .then(() => {\n // Time to actually establish the connection.\n return setUpNewConnection(documentName)\n })\n .catch((error = Forbidden) => {\n const message = new OutgoingMessage(documentName).writePermissionDenied(error.reason ?? 'permission-denied')\n\n this.debugger.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n // Ensure that the permission denied message is sent before the\n // connection is closed\n incoming.send(message.toUint8Array(), () => {\n if (Object.keys(documentConnections).length === 0) {\n try {\n incoming.close(error.code ?? Forbidden.code, error.reason ?? Forbidden.reason)\n } catch (closeError) {\n // catch is needed in case invalid error code is returned by hook (that would fail sending the close message)\n console.error(closeError)\n incoming.close(Forbidden.code, Forbidden.reason)\n }\n }\n })\n })\n } else {\n incomingMessageQueue[documentName].push(data)\n }\n\n // Catch errors due to failed decoding of data\n } catch (error) {\n console.error(error)\n incoming.close(Unauthorized.code, Unauthorized.reason)\n }\n }\n\n const messageHandler = (data: Uint8Array) => {\n try {\n const tmpMsg = new SocketIncomingMessage(data)\n\n const documentName = decoding.readVarString(tmpMsg.decoder)\n\n if (documentConnections[documentName] === true) {\n // we already have a `Connection` set up for this document\n return\n }\n\n // if this is the first message, trigger onConnect & check if we can start the connection (only if no auth is required)\n if (incomingMessageQueue[documentName] === undefined) {\n incomingMessageQueue[documentName] = []\n\n this.hooks('onConnect', { ...hookPayload, documentName }, (contextAdditions: any) => {\n // merge context from all hooks\n context = { ...context, ...contextAdditions }\n })\n .then(() => {\n // Authentication is required, we’ll need to wait for the Authentication message.\n if (connection.requiresAuthentication || connectionEstablishing[documentName]) {\n return\n }\n connectionEstablishing[documentName] = true\n\n return setUpNewConnection(documentName)\n })\n .catch((error = Forbidden) => {\n // if a hook interrupts, close the websocket connection\n try {\n incoming.close(error.code ?? Forbidden.code, error.reason ?? Forbidden.reason)\n } catch (closeError) {\n // catch is needed in case invalid error code is returned by hook (that would fail sending the close message)\n console.error(closeError)\n incoming.close(Unauthorized.code, Unauthorized.reason)\n }\n })\n }\n\n handleQueueingMessage(data)\n } catch (closeError) {\n // catch is needed in case an invalid payload crashes the parsing of the Uint8Array\n console.error(closeError)\n incoming.close(Unauthorized.code, Unauthorized.reason)\n }\n\n }\n\n incoming.on('message', messageHandler)\n }\n\n /**\n * Handle update of the given document\n */\n private handleDocumentUpdate(document: Document, connection: Connection | undefined, update: Uint8Array, request?: IncomingMessage): void {\n const hookPayload = {\n instance: this,\n clientsCount: document.getConnectionsCount(),\n context: connection?.context || {},\n document,\n documentName: document.name,\n requestHeaders: request?.headers ?? {},\n requestParameters: Hocuspocus.getParameters(request),\n socketId: connection?.socketId ?? '',\n update,\n }\n\n this.hooks('onChange', hookPayload).catch(error => {\n throw error\n })\n\n // If the update was received through other ways than the\n // WebSocket connection, we don’t need to feel responsible for\n // storing the content.\n if (!connection) {\n return\n }\n\n this.debounce(`onStoreDocument-${document.name}`, () => {\n this.storeDocumentHooks(document, hookPayload)\n })\n }\n\n timers: Map = new Map()\n\n /**\n * debounce the given function, using the given identifier\n */\n debounce(id: string, func: Function, immediately = false) {\n const old = this.timers.get(id)\n const start = old?.start || Date.now()\n\n const run = () => {\n this.timers.delete(id)\n func()\n }\n\n if (old?.timeout) {\n clearTimeout(old.timeout)\n }\n\n if (immediately) {\n return run()\n }\n\n if (Date.now() - start >= this.configuration.maxDebounce) {\n return run()\n }\n\n this.timers.set(id, {\n start,\n timeout: setTimeout(run, this.configuration.debounce),\n })\n }\n\n /**\n * Create a new document by the given request\n */\n private async createDocument(documentName: string, request: Partial>, socketId: string, connection: ConnectionConfiguration, context?: any): Promise {\n if (this.documents.has(documentName)) {\n const document = this.documents.get(documentName)\n\n if (document) {\n return document\n }\n }\n\n const document = new Document(documentName, this.debugger, this.configuration.yDocOptions)\n this.documents.set(documentName, document)\n\n const hookPayload = {\n instance: this,\n context,\n connection,\n document,\n documentName,\n socketId,\n requestHeaders: request.headers,\n requestParameters: Hocuspocus.getParameters(request),\n }\n\n try {\n await this.hooks('onLoadDocument', hookPayload, (loadedDocument: Doc | undefined) => {\n // if a hook returns a Y-Doc, encode the document state as update\n // and apply it to the newly created document\n // Note: instanceof doesn't work, because Doc !== Doc for some reason I don't understand\n if (\n loadedDocument?.constructor.name === 'Document'\n || loadedDocument?.constructor.name === 'Doc'\n ) {\n applyUpdate(document, encodeStateAsUpdate(loadedDocument))\n }\n })\n } catch (e) {\n this.closeConnections(documentName)\n this.documents.delete(documentName)\n throw e\n }\n\n document.isLoading = false\n await this.hooks('afterLoadDocument', hookPayload)\n\n document.onUpdate((document: Document, connection: Connection, update: Uint8Array) => {\n this.handleDocumentUpdate(document, connection, update, connection?.request)\n })\n\n document.beforeBroadcastStateless((document: Document, stateless: string) => {\n const hookPayload: beforeBroadcastStatelessPayload = {\n document,\n documentName: document.name,\n payload: stateless,\n }\n\n this.hooks('beforeBroadcastStateless', hookPayload)\n })\n\n document.awareness.on('update', (update: AwarenessUpdate) => {\n this.hooks('onAwarenessUpdate', {\n ...hookPayload,\n ...update,\n awareness: document.awareness,\n states: awarenessStatesToArray(document.awareness.getStates()),\n })\n })\n\n return document\n }\n\n /**\n * Create a new connection by the given request and document\n */\n private createConnection(connection: WebSocket, request: IncomingMessage, document: Document, socketId: string, readOnly = false, context?: any): Connection {\n const instance = new Connection(\n connection,\n request,\n document,\n this.configuration.timeout,\n socketId,\n context,\n readOnly,\n this.debugger,\n )\n\n instance.onClose(document => {\n const hookPayload = {\n instance: this,\n clientsCount: document.getConnectionsCount(),\n context,\n document,\n socketId,\n documentName: document.name,\n requestHeaders: request.headers,\n requestParameters: Hocuspocus.getParameters(request),\n }\n\n this.hooks('onDisconnect', hookPayload).then(() => {\n // Check if there are still no connections to the document, as these hooks\n // may take some time to resolve (e.g. database queries). If a\n // new connection were to come in during that time it would rely on the\n // document in the map that we remove now.\n if (document.getConnectionsCount() > 0) {\n return\n }\n\n // If it’s the last connection, we need to make sure to store the\n // document. Use the debounce helper, to clear running timers,\n // but make it run immediately (`true`).\n // Only run this if the document has finished loading earlier (i.e. not to persist the empty\n // ydoc if the onLoadDocument hook returned an error)\n if (!document.isLoading) {\n this.debounce(`onStoreDocument-${document.name}`, () => {\n this.storeDocumentHooks(document, hookPayload)\n }, true)\n\n } else {\n // Remove document from memory immediately\n this.documents.delete(document.name)\n document.destroy()\n }\n })\n\n })\n\n instance.onStatelessCallback(payload => {\n return this.hooks('onStateless', payload)\n .catch(error => {\n if (error?.message) {\n throw error\n }\n })\n })\n\n instance.beforeHandleMessage((connection, update) => {\n const hookPayload: beforeHandleMessagePayload = {\n instance: this,\n clientsCount: document.getConnectionsCount(),\n context,\n document,\n socketId,\n connection,\n documentName: document.name,\n requestHeaders: request.headers,\n requestParameters: Hocuspocus.getParameters(request),\n update,\n }\n\n return this.hooks('beforeHandleMessage', hookPayload)\n })\n\n // If the WebSocket has already disconnected (wow, that was fast) – then\n // immediately call close to cleanup the connection and document in memory.\n if (\n connection.readyState === WsReadyStates.Closing\n || connection.readyState === WsReadyStates.Closed\n ) {\n instance.close()\n }\n\n return instance\n }\n\n storeDocumentHooks(document: Document, hookPayload: onStoreDocumentPayload) {\n this.hooks('onStoreDocument', hookPayload)\n .catch(error => {\n if (error?.message) {\n throw error\n }\n })\n .then(() => {\n this.hooks('afterStoreDocument', hookPayload).then(() => {\n // Remove document from memory.\n\n if (document.getConnectionsCount() > 0) {\n return\n }\n\n this.documents.delete(document.name)\n document.destroy()\n })\n })\n }\n\n /**\n * Run the given hook on all configured extensions.\n * Runs the given callback after each hook.\n */\n hooks(name: HookName, payload: HookPayload, callback: Function | null = null): Promise {\n const { extensions } = this.configuration\n\n // create a new `thenable` chain\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve\n let chain = Promise.resolve()\n\n extensions\n // get me all extensions which have the given hook\n .filter(extension => typeof extension[name] === 'function')\n // run through all the configured hooks\n .forEach(extension => {\n chain = chain\n .then(() => (extension[name] as any)?.(payload))\n .catch(error => {\n // make sure to log error messages\n if (error?.message) {\n console.error(`[${name}]`, error.message)\n }\n\n throw error\n })\n\n if (callback) {\n chain = chain.then((...args: any[]) => callback(...args))\n }\n })\n\n return chain\n }\n\n /**\n * Get parameters by the given request\n */\n private static getParameters(request?: Pick): URLSearchParams {\n const query = request?.url?.split('?') || []\n return new URLSearchParams(query[1] ? query[1] : '')\n }\n\n enableDebugging() {\n this.debugger.enable()\n }\n\n enableMessageLogging() {\n this.debugger.enable()\n this.debugger.verbose()\n }\n\n disableLogging() {\n this.debugger.quiet()\n }\n\n disableDebugging() {\n this.debugger.disable()\n }\n\n flushMessageLogs() {\n this.debugger.flush()\n\n return this\n }\n\n getMessageLogs() {\n return this.debugger.get()?.logs\n }\n\n async openDirectConnection(documentName: string, context?: any): Promise {\n const connectionConfig: ConnectionConfiguration = {\n isAuthenticated: true,\n readOnly: false,\n requiresAuthentication: true,\n }\n\n const document: Document = await this.createDocument(\n documentName,\n {}, // direct connection has no request params\n uuid(),\n connectionConfig,\n context,\n )\n\n return new DirectConnection(document, this, context)\n }\n}\n\nexport const Server = new Hocuspocus()\n"],"names":["create","length","object.length","object.hasProperty","map.create","string.fromCamelCase","conditions.undefinedToNull","storage.varStorage","f.isOneOf","buffer.createUint8ArrayViewFromArrayBuffer","binary.BITS7","binary.BIT8","math.floor","string.utf8TextEncoder","string.encodeUtf8","math.min","math.max","error.create","number.MAX_SAFE_INTEGER","string.utf8TextDecoder","encoding.writeVarUint","encoding.writeVarUint8Array","decoding.readVarUint8Array","map.setIfUndefined","set.create","array.from","time.getUnixTime","f.equalityDeep","encoding.createEncoder","encoding.writeVarString","encoding.toUint8Array","decoding.createDecoder","decoding.readVarUint","decoding.readVarString","uuid","SocketIncomingMessage"],"mappings":"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"} +\ No newline at end of file ++{"version":3,"file":"hocuspocus-server.esm.js","sources":["../../../node_modules/lib0/set.js","../../../node_modules/lib0/array.js","../../../node_modules/lib0/string.js","../../../node_modules/lib0/map.js","../../../node_modules/lib0/conditions.js","../../../node_modules/lib0/storage.js","../../../node_modules/lib0/object.js","../../../node_modules/lib0/function.js","../../../node_modules/lib0/environment.js","../../../node_modules/lib0/math.js","../../../node_modules/lib0/binary.js","../../../node_modules/lib0/number.js","../../../node_modules/lib0/encoding.js","../../../node_modules/lib0/buffer.js","../../../node_modules/lib0/error.js","../../../node_modules/lib0/decoding.js","../src/IncomingMessage.ts","../../../node_modules/lib0/time.js","../../../node_modules/lib0/observable.js","../../../node_modules/y-protocols/awareness.js","../../../node_modules/y-protocols/sync.js","../src/types.ts","../src/OutgoingMessage.ts","../src/MessageReceiver.ts","../src/Connection.ts","../src/Debugger.ts","../../../node_modules/lib0/mutex.js","../src/Document.ts","../src/util/getParameters.ts","../src/ClientConnection.ts","../src/DirectConnection.ts","../src/Hocuspocus.ts"],"sourcesContent":["/**\n * Utility module to work with sets.\n *\n * @module set\n */\n\nexport const create = () => new Set()\n\n/**\n * @template T\n * @param {Set} set\n * @return {Array}\n */\nexport const toArray = set => Array.from(set)\n\n/**\n * @template T\n * @param {Set} set\n * @return {T}\n */\nexport const first = set =>\n set.values().next().value || undefined\n\n/**\n * @template T\n * @param {Iterable} entries\n * @return {Set}\n */\nexport const from = entries => new Set(entries)\n","/**\n * Utility module to work with Arrays.\n *\n * @module array\n */\n\nimport * as set from './set.js'\n\n/**\n * Return the last element of an array. The element must exist\n *\n * @template L\n * @param {ArrayLike} arr\n * @return {L}\n */\nexport const last = arr => arr[arr.length - 1]\n\n/**\n * @template C\n * @return {Array}\n */\nexport const create = () => /** @type {Array} */ ([])\n\n/**\n * @template D\n * @param {Array} a\n * @return {Array}\n */\nexport const copy = a => /** @type {Array} */ (a.slice())\n\n/**\n * Append elements from src to dest\n *\n * @template M\n * @param {Array} dest\n * @param {Array} src\n */\nexport const appendTo = (dest, src) => {\n for (let i = 0; i < src.length; i++) {\n dest.push(src[i])\n }\n}\n\n/**\n * Transforms something array-like to an actual Array.\n *\n * @function\n * @template T\n * @param {ArrayLike|Iterable} arraylike\n * @return {T}\n */\nexport const from = Array.from\n\n/**\n * True iff condition holds on every element in the Array.\n *\n * @function\n * @template ITEM\n * @template {ArrayLike} ARR\n *\n * @param {ARR} arr\n * @param {function(ITEM, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const every = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (!f(arr[i], i, arr)) {\n return false\n }\n }\n return true\n}\n\n/**\n * True iff condition holds on some element in the Array.\n *\n * @function\n * @template S\n * @template {ArrayLike} ARR\n * @param {ARR} arr\n * @param {function(S, number, ARR):boolean} f\n * @return {boolean}\n */\nexport const some = (arr, f) => {\n for (let i = 0; i < arr.length; i++) {\n if (f(arr[i], i, arr)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @template ELEM\n *\n * @param {ArrayLike} a\n * @param {ArrayLike} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a.length === b.length && every(a, (item, index) => item === b[index])\n\n/**\n * @template ELEM\n * @param {Array>} arr\n * @return {Array}\n */\nexport const flatten = arr => fold(arr, /** @type {Array} */ ([]), (acc, val) => acc.concat(val))\n\n/**\n * @template T\n * @param {number} len\n * @param {function(number, Array):T} f\n * @return {Array}\n */\nexport const unfold = (len, f) => {\n const array = new Array(len)\n for (let i = 0; i < len; i++) {\n array[i] = f(i, array)\n }\n return array\n}\n\n/**\n * @template T\n * @template RESULT\n * @param {Array} arr\n * @param {RESULT} seed\n * @param {function(RESULT, T, number):RESULT} folder\n */\nexport const fold = (arr, seed, folder) => arr.reduce(folder, seed)\n\nexport const isArray = Array.isArray\n\n/**\n * @template T\n * @param {Array} arr\n * @return {Array}\n */\nexport const unique = arr => from(set.from(arr))\n\n/**\n * @template T\n * @template M\n * @param {ArrayLike} arr\n * @param {function(T):M} mapper\n * @return {Array}\n */\nexport const uniqueBy = (arr, mapper) => {\n /**\n * @type {Set}\n */\n const happened = set.create()\n /**\n * @type {Array}\n */\n const result = []\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i]\n const mapped = mapper(el)\n if (!happened.has(mapped)) {\n happened.add(mapped)\n result.push(el)\n }\n }\n return result\n}\n","import * as array from './array.js'\n\n/**\n * Utility module to work with strings.\n *\n * @module string\n */\n\nexport const fromCharCode = String.fromCharCode\nexport const fromCodePoint = String.fromCodePoint\n\n/**\n * The largest utf16 character.\n * Corresponds to Uint8Array([255, 255]) or charcodeof(2x2^8)\n */\nexport const MAX_UTF16_CHARACTER = fromCharCode(65535)\n\n/**\n * @param {string} s\n * @return {string}\n */\nconst toLowerCase = s => s.toLowerCase()\n\nconst trimLeftRegex = /^\\s*/g\n\n/**\n * @param {string} s\n * @return {string}\n */\nexport const trimLeft = s => s.replace(trimLeftRegex, '')\n\nconst fromCamelCaseRegex = /([A-Z])/g\n\n/**\n * @param {string} s\n * @param {string} separator\n * @return {string}\n */\nexport const fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, match => `${separator}${toLowerCase(match)}`))\n\n/**\n * Compute the utf8ByteLength\n * @param {string} str\n * @return {number}\n */\nexport const utf8ByteLength = str => unescape(encodeURIComponent(str)).length\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Polyfill = str => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n const buf = new Uint8Array(len)\n for (let i = 0; i < len; i++) {\n buf[i] = /** @type {number} */ (encodedString.codePointAt(i))\n }\n return buf\n}\n\n/* c8 ignore next */\nexport const utf8TextEncoder = /** @type {TextEncoder} */ (typeof TextEncoder !== 'undefined' ? new TextEncoder() : null)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nexport const _encodeUtf8Native = str => utf8TextEncoder.encode(str)\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nexport const encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Polyfill = buf => {\n let remainingLen = buf.length\n let encodedString = ''\n let bufPos = 0\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n const bytes = buf.subarray(bufPos, bufPos + nextLen)\n bufPos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n return decodeURIComponent(escape(encodedString))\n}\n\n/* c8 ignore next */\nexport let utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true })\n\n/* c8 ignore start */\nif (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {\n // Safari doesn't handle BOM correctly.\n // This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call\n // Another issue is that from then on no BOM chars are recognized anymore\n /* c8 ignore next */\n utf8TextDecoder = null\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\nexport const _decodeUtf8Native = buf => /** @type {TextDecoder} */ (utf8TextDecoder).decode(buf)\n\n/**\n * @param {Uint8Array} buf\n * @return {string}\n */\n/* c8 ignore next */\nexport const decodeUtf8 = utf8TextDecoder ? _decodeUtf8Native : _decodeUtf8Polyfill\n\n/**\n * @param {string} str The initial string\n * @param {number} index Starting position\n * @param {number} remove Number of characters to remove\n * @param {string} insert New content to insert\n */\nexport const splice = (str, index, remove, insert = '') => str.slice(0, index) + insert + str.slice(index + remove)\n\n/**\n * @param {string} source\n * @param {number} n\n */\nexport const repeat = (source, n) => array.unfold(n, () => source).join('')\n","/**\n * Utility module to work with key-value stores.\n *\n * @module map\n */\n\n/**\n * Creates a new Map instance.\n *\n * @function\n * @return {Map}\n *\n * @function\n */\nexport const create = () => new Map()\n\n/**\n * Copy a Map object into a fresh Map object.\n *\n * @function\n * @template X,Y\n * @param {Map} m\n * @return {Map}\n */\nexport const copy = m => {\n const r = create()\n m.forEach((v, k) => { r.set(k, v) })\n return r\n}\n\n/**\n * Get map property. Create T if property is undefined and set T on map.\n *\n * ```js\n * const listeners = map.setIfUndefined(events, 'eventName', set.create)\n * listeners.add(listener)\n * ```\n *\n * @function\n * @template V,K\n * @template {Map} MAP\n * @param {MAP} map\n * @param {K} key\n * @param {function():V} createT\n * @return {V}\n */\nexport const setIfUndefined = (map, key, createT) => {\n let set = map.get(key)\n if (set === undefined) {\n map.set(key, set = createT())\n }\n return set\n}\n\n/**\n * Creates an Array and populates it with the content of all key-value pairs using the `f(value, key)` function.\n *\n * @function\n * @template K\n * @template V\n * @template R\n * @param {Map} m\n * @param {function(V,K):R} f\n * @return {Array}\n */\nexport const map = (m, f) => {\n const res = []\n for (const [key, value] of m) {\n res.push(f(value, key))\n }\n return res\n}\n\n/**\n * Tests whether any key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @todo should rename to some - similarly to Array.some\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const any = (m, f) => {\n for (const [key, value] of m) {\n if (f(value, key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * Tests whether all key-value pairs pass the test implemented by `f(value, key)`.\n *\n * @function\n * @template K\n * @template V\n * @param {Map} m\n * @param {function(V,K):boolean} f\n * @return {boolean}\n */\nexport const all = (m, f) => {\n for (const [key, value] of m) {\n if (!f(value, key)) {\n return false\n }\n }\n return true\n}\n","/**\n * Often used conditions.\n *\n * @module conditions\n */\n\n/**\n * @template T\n * @param {T|null|undefined} v\n * @return {T|null}\n */\n/* c8 ignore next */\nexport const undefinedToNull = v => v === undefined ? null : v\n","/* eslint-env browser */\n\n/**\n * Isomorphic variable storage.\n *\n * Uses LocalStorage in the browser and falls back to in-memory storage.\n *\n * @module storage\n */\n\n/* c8 ignore start */\nclass VarStoragePolyfill {\n constructor () {\n this.map = new Map()\n }\n\n /**\n * @param {string} key\n * @param {any} newValue\n */\n setItem (key, newValue) {\n this.map.set(key, newValue)\n }\n\n /**\n * @param {string} key\n */\n getItem (key) {\n return this.map.get(key)\n }\n}\n/* c8 ignore stop */\n\n/**\n * @type {any}\n */\nlet _localStorage = new VarStoragePolyfill()\nlet usePolyfill = true\n\n/* c8 ignore start */\ntry {\n // if the same-origin rule is violated, accessing localStorage might thrown an error\n if (typeof localStorage !== 'undefined') {\n _localStorage = localStorage\n usePolyfill = false\n }\n} catch (e) { }\n/* c8 ignore stop */\n\n/**\n * This is basically localStorage in browser, or a polyfill in nodejs\n */\n/* c8 ignore next */\nexport const varStorage = _localStorage\n\n/**\n * A polyfill for `addEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const onChange = eventHandler => usePolyfill || addEventListener('storage', /** @type {any} */ (eventHandler))\n\n/**\n * A polyfill for `removeEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nexport const offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler))\n","/**\n * Utility functions for working with EcmaScript objects.\n *\n * @module object\n */\n\n/**\n * @return {Object} obj\n */\nexport const create = () => Object.create(null)\n\n/**\n * Object.assign\n */\nexport const assign = Object.assign\n\n/**\n * @param {Object} obj\n */\nexport const keys = Object.keys\n\n/**\n * @template V\n * @param {{[k:string]:V}} obj\n * @param {function(V,string):any} f\n */\nexport const forEach = (obj, f) => {\n for (const key in obj) {\n f(obj[key], key)\n }\n}\n\n/**\n * @todo implement mapToArray & map\n *\n * @template R\n * @param {Object} obj\n * @param {function(any,string):R} f\n * @return {Array}\n */\nexport const map = (obj, f) => {\n const results = []\n for (const key in obj) {\n results.push(f(obj[key], key))\n }\n return results\n}\n\n/**\n * @param {Object} obj\n * @return {number}\n */\nexport const length = obj => keys(obj).length\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const some = (obj, f) => {\n for (const key in obj) {\n if (f(obj[key], key)) {\n return true\n }\n }\n return false\n}\n\n/**\n * @param {Object|undefined} obj\n */\nexport const isEmpty = obj => {\n for (const _k in obj) {\n return false\n }\n return true\n}\n\n/**\n * @param {Object} obj\n * @param {function(any,string):boolean} f\n * @return {boolean}\n */\nexport const every = (obj, f) => {\n for (const key in obj) {\n if (!f(obj[key], key)) {\n return false\n }\n }\n return true\n}\n\n/**\n * Calls `Object.prototype.hasOwnProperty`.\n *\n * @param {any} obj\n * @param {string|symbol} key\n * @return {boolean}\n */\nexport const hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key)\n\n/**\n * @param {Object} a\n * @param {Object} b\n * @return {boolean}\n */\nexport const equalFlat = (a, b) => a === b || (length(a) === length(b) && every(a, (val, key) => (val !== undefined || hasProperty(b, key)) && b[key] === val))\n","/**\n * Common functions and function call helpers.\n *\n * @module function\n */\n\nimport * as array from './array.js'\nimport * as object from './object.js'\n\n/**\n * Calls all functions in `fs` with args. Only throws after all functions were called.\n *\n * @param {Array} fs\n * @param {Array} args\n */\nexport const callAll = (fs, args, i = 0) => {\n try {\n for (; i < fs.length; i++) {\n fs[i](...args)\n }\n } finally {\n if (i < fs.length) {\n callAll(fs, args, i + 1)\n }\n }\n}\n\nexport const nop = () => {}\n\n/**\n * @template T\n * @param {function():T} f\n * @return {T}\n */\nexport const apply = f => f()\n\n/**\n * @template A\n *\n * @param {A} a\n * @return {A}\n */\nexport const id = a => a\n\n/**\n * @template T\n *\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n */\nexport const equalityStrict = (a, b) => a === b\n\n/**\n * @template T\n *\n * @param {Array|object} a\n * @param {Array|object} b\n * @return {boolean}\n */\nexport const equalityFlat = (a, b) => a === b || (a != null && b != null && a.constructor === b.constructor && ((array.isArray(a) && array.equalFlat(a, /** @type {Array} */ (b))) || (typeof a === 'object' && object.equalFlat(a, b))))\n\n/* c8 ignore start */\n\n/**\n * @param {any} a\n * @param {any} b\n * @return {boolean}\n */\nexport const equalityDeep = (a, b) => {\n if (a == null || b == null) {\n return equalityStrict(a, b)\n }\n if (a.constructor !== b.constructor) {\n return false\n }\n if (a === b) {\n return true\n }\n switch (a.constructor) {\n case ArrayBuffer:\n a = new Uint8Array(a)\n b = new Uint8Array(b)\n // eslint-disable-next-line no-fallthrough\n case Uint8Array: {\n if (a.byteLength !== b.byteLength) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n break\n }\n case Set: {\n if (a.size !== b.size) {\n return false\n }\n for (const value of a) {\n if (!b.has(value)) {\n return false\n }\n }\n break\n }\n case Map: {\n if (a.size !== b.size) {\n return false\n }\n for (const key of a.keys()) {\n if (!b.has(key) || !equalityDeep(a.get(key), b.get(key))) {\n return false\n }\n }\n break\n }\n case Object:\n if (object.length(a) !== object.length(b)) {\n return false\n }\n for (const key in a) {\n if (!object.hasProperty(a, key) || !equalityDeep(a[key], b[key])) {\n return false\n }\n }\n break\n case Array:\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!equalityDeep(a[i], b[i])) {\n return false\n }\n }\n break\n default:\n return false\n }\n return true\n}\n\n/**\n * @template V\n * @template {V} OPTS\n *\n * @param {V} value\n * @param {Array} options\n */\n// @ts-ignore\nexport const isOneOf = (value, options) => options.includes(value)\n/* c8 ignore stop */\n\nexport const isArray = array.isArray\n\n/**\n * @param {any} s\n * @return {s is String}\n */\nexport const isString = (s) => s && s.constructor === String\n\n/**\n * @param {any} n\n * @return {n is Number}\n */\nexport const isNumber = n => n != null && n.constructor === Number\n\n/**\n * @template {abstract new (...args: any) => any} TYPE\n * @param {any} n\n * @param {TYPE} T\n * @return {n is InstanceType}\n */\nexport const is = (n, T) => n && n.constructor === T\n\n/**\n * @template {abstract new (...args: any) => any} TYPE\n * @param {TYPE} T\n */\nexport const isTemplate = (T) =>\n /**\n * @param {any} n\n * @return {n is InstanceType}\n **/\n n => n && n.constructor === T\n","/**\n * Isomorphic module to work access the environment (query params, env variables).\n *\n * @module map\n */\n\nimport * as map from './map.js'\nimport * as string from './string.js'\nimport * as conditions from './conditions.js'\nimport * as storage from './storage.js'\nimport * as f from './function.js'\n\n/* c8 ignore next */\n// @ts-ignore\nexport const isNode = typeof process !== 'undefined' && process.release &&\n /node|io\\.js/.test(process.release.name)\n/* c8 ignore next */\nexport const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && !isNode\n/* c8 ignore next 3 */\nexport const isMac = typeof navigator !== 'undefined'\n ? /Mac/.test(navigator.platform)\n : false\n\n/**\n * @type {Map}\n */\nlet params\nconst args = []\n\n/* c8 ignore start */\nconst computeParams = () => {\n if (params === undefined) {\n if (isNode) {\n params = map.create()\n const pargs = process.argv\n let currParamName = null\n for (let i = 0; i < pargs.length; i++) {\n const parg = pargs[i]\n if (parg[0] === '-') {\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n currParamName = parg\n } else {\n if (currParamName !== null) {\n params.set(currParamName, parg)\n currParamName = null\n } else {\n args.push(parg)\n }\n }\n }\n if (currParamName !== null) {\n params.set(currParamName, '')\n }\n // in ReactNative for example this would not be true (unless connected to the Remote Debugger)\n } else if (typeof location === 'object') {\n params = map.create(); // eslint-disable-next-line no-undef\n (location.search || '?').slice(1).split('&').forEach((kv) => {\n if (kv.length !== 0) {\n const [key, value] = kv.split('=')\n params.set(`--${string.fromCamelCase(key, '-')}`, value)\n params.set(`-${string.fromCamelCase(key, '-')}`, value)\n }\n })\n } else {\n params = map.create()\n }\n }\n return params\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next */\nexport const hasParam = (name) => computeParams().has(name)\n\n/**\n * @param {string} name\n * @param {string} defaultVal\n * @return {string}\n */\n/* c8 ignore next 2 */\nexport const getParam = (name, defaultVal) =>\n computeParams().get(name) || defaultVal\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 4 */\nexport const getVariable = (name) =>\n isNode\n ? conditions.undefinedToNull(process.env[name.toUpperCase()])\n : conditions.undefinedToNull(storage.varStorage.getItem(name))\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 2 */\nexport const getConf = (name) =>\n computeParams().get('--' + name) || getVariable(name)\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next 2 */\nexport const hasConf = (name) =>\n hasParam('--' + name) || getVariable(name) !== null\n\n/* c8 ignore next */\nexport const production = hasConf('production')\n\n/* c8 ignore next 2 */\nconst forceColor = isNode &&\n f.isOneOf(process.env.FORCE_COLOR, ['true', '1', '2'])\n\n/* c8 ignore start */\nexport const supportsColor = !hasParam('no-colors') &&\n (!isNode || process.stdout.isTTY || forceColor) && (\n !isNode || hasParam('color') || forceColor ||\n getVariable('COLORTERM') !== null ||\n (getVariable('TERM') || '').includes('color')\n)\n/* c8 ignore stop */\n","/**\n * Common Math expressions.\n *\n * @module math\n */\n\nexport const floor = Math.floor\nexport const ceil = Math.ceil\nexport const abs = Math.abs\nexport const imul = Math.imul\nexport const round = Math.round\nexport const log10 = Math.log10\nexport const log2 = Math.log2\nexport const log = Math.log\nexport const sqrt = Math.sqrt\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The sum of a and b\n */\nexport const add = (a, b) => a + b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The smaller element of a and b\n */\nexport const min = (a, b) => a < b ? a : b\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The bigger element of a and b\n */\nexport const max = (a, b) => a > b ? a : b\n\nexport const isNaN = Number.isNaN\n\nexport const pow = Math.pow\n/**\n * Base 10 exponential function. Returns the value of 10 raised to the power of pow.\n *\n * @param {number} exp\n * @return {number}\n */\nexport const exp10 = exp => Math.pow(10, exp)\n\nexport const sign = Math.sign\n\n/**\n * @param {number} n\n * @return {boolean} Wether n is negative. This function also differentiates between -0 and +0\n */\nexport const isNegativeZero = n => n !== 0 ? n < 0 : 1 / n < 0\n","/* eslint-env browser */\n\n/**\n * Binary data constants.\n *\n * @module binary\n */\n\n/**\n * n-th bit activated.\n *\n * @type {number}\n */\nexport const BIT1 = 1\nexport const BIT2 = 2\nexport const BIT3 = 4\nexport const BIT4 = 8\nexport const BIT5 = 16\nexport const BIT6 = 32\nexport const BIT7 = 64\nexport const BIT8 = 128\nexport const BIT9 = 256\nexport const BIT10 = 512\nexport const BIT11 = 1024\nexport const BIT12 = 2048\nexport const BIT13 = 4096\nexport const BIT14 = 8192\nexport const BIT15 = 16384\nexport const BIT16 = 32768\nexport const BIT17 = 65536\nexport const BIT18 = 1 << 17\nexport const BIT19 = 1 << 18\nexport const BIT20 = 1 << 19\nexport const BIT21 = 1 << 20\nexport const BIT22 = 1 << 21\nexport const BIT23 = 1 << 22\nexport const BIT24 = 1 << 23\nexport const BIT25 = 1 << 24\nexport const BIT26 = 1 << 25\nexport const BIT27 = 1 << 26\nexport const BIT28 = 1 << 27\nexport const BIT29 = 1 << 28\nexport const BIT30 = 1 << 29\nexport const BIT31 = 1 << 30\nexport const BIT32 = 1 << 31\n\n/**\n * First n bits activated.\n *\n * @type {number}\n */\nexport const BITS0 = 0\nexport const BITS1 = 1\nexport const BITS2 = 3\nexport const BITS3 = 7\nexport const BITS4 = 15\nexport const BITS5 = 31\nexport const BITS6 = 63\nexport const BITS7 = 127\nexport const BITS8 = 255\nexport const BITS9 = 511\nexport const BITS10 = 1023\nexport const BITS11 = 2047\nexport const BITS12 = 4095\nexport const BITS13 = 8191\nexport const BITS14 = 16383\nexport const BITS15 = 32767\nexport const BITS16 = 65535\nexport const BITS17 = BIT18 - 1\nexport const BITS18 = BIT19 - 1\nexport const BITS19 = BIT20 - 1\nexport const BITS20 = BIT21 - 1\nexport const BITS21 = BIT22 - 1\nexport const BITS22 = BIT23 - 1\nexport const BITS23 = BIT24 - 1\nexport const BITS24 = BIT25 - 1\nexport const BITS25 = BIT26 - 1\nexport const BITS26 = BIT27 - 1\nexport const BITS27 = BIT28 - 1\nexport const BITS28 = BIT29 - 1\nexport const BITS29 = BIT30 - 1\nexport const BITS30 = BIT31 - 1\n/**\n * @type {number}\n */\nexport const BITS31 = 0x7FFFFFFF\n/**\n * @type {number}\n */\nexport const BITS32 = 0xFFFFFFFF\n","/**\n * Utility helpers for working with numbers.\n *\n * @module number\n */\n\nimport * as math from './math.js'\nimport * as binary from './binary.js'\n\nexport const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER\nexport const MIN_SAFE_INTEGER = Number.MIN_SAFE_INTEGER\n\nexport const LOWEST_INT32 = 1 << 31\nexport const HIGHEST_INT32 = binary.BITS31\nexport const HIGHEST_UINT32 = binary.BITS32\n\n/* c8 ignore next */\nexport const isInteger = Number.isInteger || (num => typeof num === 'number' && isFinite(num) && math.floor(num) === num)\nexport const isNaN = Number.isNaN\nexport const parseInt = Number.parseInt\n","/**\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module encoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as binary from './binary.js'\nimport * as string from './string.js'\nimport * as array from './array.js'\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nexport class Encoder {\n constructor () {\n this.cpos = 0\n this.cbuf = new Uint8Array(100)\n /**\n * @type {Array}\n */\n this.bufs = []\n }\n}\n\n/**\n * @function\n * @return {Encoder}\n */\nexport const createEncoder = () => new Encoder()\n\n/**\n * @param {function(Encoder):void} f\n */\nexport const encode = (f) => {\n const encoder = createEncoder()\n f(encoder)\n return toUint8Array(encoder)\n}\n\n/**\n * The current length of the encoded data.\n *\n * @function\n * @param {Encoder} encoder\n * @return {number}\n */\nexport const length = encoder => {\n let len = encoder.cpos\n for (let i = 0; i < encoder.bufs.length; i++) {\n len += encoder.bufs[i].length\n }\n return len\n}\n\n/**\n * Check whether encoder is empty.\n *\n * @function\n * @param {Encoder} encoder\n * @return {boolean}\n */\nexport const hasContent = encoder => encoder.cpos > 0 || encoder.bufs.length > 0\n\n/**\n * Transform to Uint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @return {Uint8Array} The created ArrayBuffer.\n */\nexport const toUint8Array = encoder => {\n const uint8arr = new Uint8Array(length(encoder))\n let curPos = 0\n for (let i = 0; i < encoder.bufs.length; i++) {\n const d = encoder.bufs[i]\n uint8arr.set(d, curPos)\n curPos += d.length\n }\n uint8arr.set(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos), curPos)\n return uint8arr\n}\n\n/**\n * Verify that it is possible to write `len` bytes wtihout checking. If\n * necessary, a new Buffer with the required length is attached.\n *\n * @param {Encoder} encoder\n * @param {number} len\n */\nexport const verifyLen = (encoder, len) => {\n const bufferLen = encoder.cbuf.length\n if (bufferLen - encoder.cpos < len) {\n encoder.bufs.push(buffer.createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos))\n encoder.cbuf = new Uint8Array(math.max(bufferLen, len) * 2)\n encoder.cpos = 0\n }\n}\n\n/**\n * Write one byte to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The byte that is to be encoded.\n */\nexport const write = (encoder, num) => {\n const bufferLen = encoder.cbuf.length\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf)\n encoder.cbuf = new Uint8Array(bufferLen * 2)\n encoder.cpos = 0\n }\n encoder.cbuf[encoder.cpos++] = num\n}\n\n/**\n * Write one byte at a specific position.\n * Position must already be written (i.e. encoder.length > pos)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos Position to which to write data\n * @param {number} num Unsigned 8-bit integer\n */\nexport const set = (encoder, pos, num) => {\n let buffer = null\n // iterate all buffers and adjust position\n for (let i = 0; i < encoder.bufs.length && buffer === null; i++) {\n const b = encoder.bufs[i]\n if (pos < b.length) {\n buffer = b // found buffer\n } else {\n pos -= b.length\n }\n }\n if (buffer === null) {\n // use current buffer\n buffer = encoder.cbuf\n }\n buffer[pos] = num\n}\n\n/**\n * Write one byte as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint8 = write\n\n/**\n * Write one byte as an unsigned Integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint8 = set\n\n/**\n * Write two bytes as an unsigned integer.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint16 = (encoder, num) => {\n write(encoder, num & binary.BITS8)\n write(encoder, (num >>> 8) & binary.BITS8)\n}\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint16 = (encoder, pos, num) => {\n set(encoder, pos, num & binary.BITS8)\n set(encoder, pos + 1, (num >>> 8) & binary.BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32 = (encoder, num) => {\n for (let i = 0; i < 4; i++) {\n write(encoder, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write two bytes as an unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeUint32BigEndian = (encoder, num) => {\n for (let i = 3; i >= 0; i--) {\n write(encoder, (num >>> (8 * i)) & binary.BITS8)\n }\n}\n\n/**\n * Write two bytes as an unsigned integer at a specific location.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} pos The location where the data will be written.\n * @param {number} num The number that is to be encoded.\n */\nexport const setUint32 = (encoder, pos, num) => {\n for (let i = 0; i < 4; i++) {\n set(encoder, pos + i, num & binary.BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarUint = (encoder, num) => {\n while (num > binary.BITS7) {\n write(encoder, binary.BIT8 | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n write(encoder, binary.BITS7 & num)\n}\n\n/**\n * Write a variable length integer.\n *\n * We use the 7th bit instead for signaling that this is a negative number.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nexport const writeVarInt = (encoder, num) => {\n const isNegative = math.isNegativeZero(num)\n if (isNegative) {\n num = -num\n }\n // |- whether to continue reading |- whether is negative |- number\n write(encoder, (num > binary.BITS6 ? binary.BIT8 : 0) | (isNegative ? binary.BIT7 : 0) | (binary.BITS6 & num))\n num = math.floor(num / 64) // shift >>> 6\n // We don't need to consider the case of num === 0 so we can use a different\n // pattern here than above.\n while (num > 0) {\n write(encoder, (num > binary.BITS7 ? binary.BIT8 : 0) | (binary.BITS7 & num))\n num = math.floor(num / 128) // shift >>> 7\n }\n}\n\n/**\n * A cache to store strings temporarily\n */\nconst _strBuffer = new Uint8Array(30000)\nconst _maxStrBSize = _strBuffer.length / 3\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringNative = (encoder, str) => {\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n /* c8 ignore next */\n const written = string.utf8TextEncoder.encodeInto(str, _strBuffer).written || 0\n writeVarUint(encoder, written)\n for (let i = 0; i < written; i++) {\n write(encoder, _strBuffer[i])\n }\n } else {\n writeVarUint8Array(encoder, string.encodeUtf8(str))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const _writeVarStringPolyfill = (encoder, str) => {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n write(encoder, /** @type {number} */ (encodedString.codePointAt(i)))\n }\n}\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\n/* c8 ignore next */\nexport const writeVarString = (string.utf8TextEncoder && /** @type {any} */ (string.utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill\n\n/**\n * Write a string terminated by a special byte sequence. This is not very performant and is\n * generally discouraged. However, the resulting byte arrays are lexiographically ordered which\n * makes this a nice feature for databases.\n *\n * The string will be encoded using utf8 and then terminated and escaped using writeTerminatingUint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nexport const writeTerminatedString = (encoder, str) =>\n writeTerminatedUint8Array(encoder, string.encodeUtf8(str))\n\n/**\n * Write a terminating Uint8Array. Note that this is not performant and is generally\n * discouraged. There are few situations when this is needed.\n *\n * We use 0x0 as a terminating character. 0x1 serves as an escape character for 0x0 and 0x1.\n *\n * Example: [0,1,2] is encoded to [1,0,1,1,2,0]. 0x0, and 0x1 needed to be escaped using 0x1. Then\n * the result is terminated using the 0x0 character.\n *\n * This is basically how many systems implement null terminated strings. However, we use an escape\n * character 0x1 to avoid issues and potenial attacks on our database (if this is used as a key\n * encoder for NoSql databases).\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} buf The string that is to be encoded.\n */\nexport const writeTerminatedUint8Array = (encoder, buf) => {\n for (let i = 0; i < buf.length; i++) {\n const b = buf[i]\n if (b === 0 || b === 1) {\n write(encoder, 1)\n }\n write(encoder, buf[i])\n }\n write(encoder, 0)\n}\n\n/**\n * Write the content of another Encoder.\n *\n * @TODO: can be improved!\n * - Note: Should consider that when appending a lot of small Encoders, we should rather clone than referencing the old structure.\n * Encoders start with a rather big initial buffer.\n *\n * @function\n * @param {Encoder} encoder The enUint8Arr\n * @param {Encoder} append The BinaryEncoder to be written.\n */\nexport const writeBinaryEncoder = (encoder, append) => writeUint8Array(encoder, toUint8Array(append))\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeUint8Array = (encoder, uint8Array) => {\n const bufferLen = encoder.cbuf.length\n const cpos = encoder.cpos\n const leftCopyLen = math.min(bufferLen - cpos, uint8Array.length)\n const rightCopyLen = uint8Array.length - leftCopyLen\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos)\n encoder.cpos += leftCopyLen\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf)\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(math.max(bufferLen * 2, rightCopyLen))\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen))\n encoder.cpos = rightCopyLen\n }\n}\n\n/**\n * Append an Uint8Array to Encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nexport const writeVarUint8Array = (encoder, uint8Array) => {\n writeVarUint(encoder, uint8Array.byteLength)\n writeUint8Array(encoder, uint8Array)\n}\n\n/**\n * Create an DataView of the next `len` bytes. Use it to write data after\n * calling this function.\n *\n * ```js\n * // write float32 using DataView\n * const dv = writeOnDataView(encoder, 4)\n * dv.setFloat32(0, 1.1)\n * // read float32 using DataView\n * const dv = readFromDataView(encoder, 4)\n * dv.getFloat32(0) // => 1.100000023841858 (leaving it to the reader to find out why this is the correct result)\n * ```\n *\n * @param {Encoder} encoder\n * @param {number} len\n * @return {DataView}\n */\nexport const writeOnDataView = (encoder, len) => {\n verifyLen(encoder, len)\n const dview = new DataView(encoder.cbuf.buffer, encoder.cpos, len)\n encoder.cpos += len\n return dview\n}\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat32 = (encoder, num) => writeOnDataView(encoder, 4).setFloat32(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {number} num\n */\nexport const writeFloat64 = (encoder, num) => writeOnDataView(encoder, 8).setFloat64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigInt64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigInt64(0, num, false)\n\n/**\n * @param {Encoder} encoder\n * @param {bigint} num\n */\nexport const writeBigUint64 = (encoder, num) => /** @type {any} */ (writeOnDataView(encoder, 8)).setBigUint64(0, num, false)\n\nconst floatTestBed = new DataView(new ArrayBuffer(4))\n/**\n * Check if a number can be encoded as a 32 bit float.\n *\n * @param {number} num\n * @return {boolean}\n */\nconst isFloat32 = num => {\n floatTestBed.setFloat32(0, num)\n return floatTestBed.getFloat32(0) === num\n}\n\n/**\n * Encode data with efficient binary format.\n *\n * Differences to JSON:\n * • Transforms data to a binary format (not to a string)\n * • Encodes undefined, NaN, and ArrayBuffer (these can't be represented in JSON)\n * • Numbers are efficiently encoded either as a variable length integer, as a\n * 32 bit float, as a 64 bit float, or as a 64 bit bigint.\n *\n * Encoding table:\n *\n * | Data Type | Prefix | Encoding Method | Comment |\n * | ------------------- | -------- | ------------------ | ------- |\n * | undefined | 127 | | Functions, symbol, and everything that cannot be identified is encoded as undefined |\n * | null | 126 | | |\n * | integer | 125 | writeVarInt | Only encodes 32 bit signed integers |\n * | float32 | 124 | writeFloat32 | |\n * | float64 | 123 | writeFloat64 | |\n * | bigint | 122 | writeBigInt64 | |\n * | boolean (false) | 121 | | True and false are different data types so we save the following byte |\n * | boolean (true) | 120 | | - 0b01111000 so the last bit determines whether true or false |\n * | string | 119 | writeVarString | |\n * | object | 118 | custom | Writes {length} then {length} key-value pairs |\n * | array | 117 | custom | Writes {length} then {length} json values |\n * | Uint8Array | 116 | writeVarUint8Array | We use Uint8Array for any kind of binary data |\n *\n * Reasons for the decreasing prefix:\n * We need the first bit for extendability (later we may want to encode the\n * prefix with writeVarUint). The remaining 7 bits are divided as follows:\n * [0-30] the beginning of the data range is used for custom purposes\n * (defined by the function that uses this library)\n * [31-127] the end of the data range is used for data encoding by\n * lib0/encoding.js\n *\n * @param {Encoder} encoder\n * @param {undefined|null|number|bigint|boolean|string|Object|Array|Uint8Array} data\n */\nexport const writeAny = (encoder, data) => {\n switch (typeof data) {\n case 'string':\n // TYPE 119: STRING\n write(encoder, 119)\n writeVarString(encoder, data)\n break\n case 'number':\n if (number.isInteger(data) && math.abs(data) <= binary.BITS31) {\n // TYPE 125: INTEGER\n write(encoder, 125)\n writeVarInt(encoder, data)\n } else if (isFloat32(data)) {\n // TYPE 124: FLOAT32\n write(encoder, 124)\n writeFloat32(encoder, data)\n } else {\n // TYPE 123: FLOAT64\n write(encoder, 123)\n writeFloat64(encoder, data)\n }\n break\n case 'bigint':\n // TYPE 122: BigInt\n write(encoder, 122)\n writeBigInt64(encoder, data)\n break\n case 'object':\n if (data === null) {\n // TYPE 126: null\n write(encoder, 126)\n } else if (array.isArray(data)) {\n // TYPE 117: Array\n write(encoder, 117)\n writeVarUint(encoder, data.length)\n for (let i = 0; i < data.length; i++) {\n writeAny(encoder, data[i])\n }\n } else if (data instanceof Uint8Array) {\n // TYPE 116: ArrayBuffer\n write(encoder, 116)\n writeVarUint8Array(encoder, data)\n } else {\n // TYPE 118: Object\n write(encoder, 118)\n const keys = Object.keys(data)\n writeVarUint(encoder, keys.length)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n writeVarString(encoder, key)\n writeAny(encoder, data[key])\n }\n }\n break\n case 'boolean':\n // TYPE 120/121: boolean (true/false)\n write(encoder, data ? 120 : 121)\n break\n default:\n // TYPE 127: undefined\n write(encoder, 127)\n }\n}\n\n/**\n * Now come a few stateful encoder that have their own classes.\n */\n\n/**\n * Basic Run Length Encoder - a basic compression implementation.\n *\n * Encodes [1,1,1,7] to [1,3,7,1] (3 times 1, 1 time 7). This encoder might do more harm than good if there are a lot of values that are not repeated.\n *\n * It was originally used for image compression. Cool .. article http://csbruce.com/cbm/transactor/pdfs/trans_v7_i06.pdf\n *\n * @note T must not be null!\n *\n * @template T\n */\nexport class RleEncoder extends Encoder {\n /**\n * @param {function(Encoder, T):void} writer\n */\n constructor (writer) {\n super()\n /**\n * The writer\n */\n this.w = writer\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n /**\n * @param {T} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n this.w(this, v)\n this.s = v\n }\n }\n}\n\n/**\n * Basic diff decoder using variable length encoding.\n *\n * Encodes the values [3, 1100, 1101, 1050, 0] to [3, 1097, 1, -51, -1050] using writeVarInt.\n */\nexport class IntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n writeVarInt(this, v - this.s)\n this.s = v\n }\n}\n\n/**\n * A combination of IntDiffEncoder and RleEncoder.\n *\n * Basically first writes the IntDiffEncoder and then counts duplicate diffs using RleEncoding.\n *\n * Encodes the values [1,1,1,2,3,4,5,6] as [1,1,0,2,1,5] (RLE([1,0,0,1,1,1,1,1]) ⇒ RleIntDiff[1,1,0,2,1,5])\n */\nexport class RleIntDiffEncoder extends Encoder {\n /**\n * @param {number} start\n */\n constructor (start) {\n super()\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v && this.count > 0) {\n this.count++\n } else {\n if (this.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n writeVarUint(this, this.count - 1) // since count is always > 0, we can decrement by one. non-standard encoding ftw\n }\n this.count = 1\n // write first value\n writeVarInt(this, v - this.s)\n this.s = v\n }\n }\n}\n\n/**\n * @param {UintOptRleEncoder} encoder\n */\nconst flushUintOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set sign to positive\n // case 2: write several values. set sign to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encoder.count === 1 ? encoder.s : -encoder.s)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * Optimized Rle encoder that does not suffer from the mentioned problem of the basic Rle encoder.\n *\n * Internally uses VarInt encoder to write unsigned integers. If the input occurs multiple times, we write\n * write it as a negative number. The UintOptRleDecoder then understands that it needs to read a count.\n *\n * Encodes [1,2,3,3,3] as [1,2,-3,3] (once 1, once 2, three times 3)\n */\nexport class UintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Increasing Uint Optimized RLE Encoder\n *\n * The RLE encoder counts the number of same occurences of the same value.\n * The IncUintOptRle encoder counts if the value increases.\n * I.e. 7, 8, 9, 10 will be encoded as [-7, 4]. 1, 3, 5 will be encoded\n * as [1, 3, 5].\n */\nexport class IncUintOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.s + this.count === v) {\n this.count++\n } else {\n flushUintOptRleEncoder(this)\n this.count = 1\n this.s = v\n }\n }\n\n toUint8Array () {\n flushUintOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * @param {IntDiffOptRleEncoder} encoder\n */\nconst flushIntDiffOptRleEncoder = encoder => {\n if (encoder.count > 0) {\n // 31 bit making up the diff | wether to write the counter\n // const encodedDiff = encoder.diff << 1 | (encoder.count === 1 ? 0 : 1)\n const encodedDiff = encoder.diff * 2 + (encoder.count === 1 ? 0 : 1)\n // flush counter, unless this is the first value (count = 0)\n // case 1: just a single value. set first bit to positive\n // case 2: write several values. set first bit to negative to indicate that there is a length coming\n writeVarInt(encoder.encoder, encodedDiff)\n if (encoder.count > 1) {\n writeVarUint(encoder.encoder, encoder.count - 2) // since count is always > 1, we can decrement by one. non-standard encoding ftw\n }\n }\n}\n\n/**\n * A combination of the IntDiffEncoder and the UintOptRleEncoder.\n *\n * The count approach is similar to the UintDiffOptRleEncoder, but instead of using the negative bitflag, it encodes\n * in the LSB whether a count is to be read. Therefore this Encoder only supports 31 bit integers!\n *\n * Encodes [1, 2, 3, 2] as [3, 1, 6, -1] (more specifically [(1 << 1) | 1, (3 << 0) | 0, -1])\n *\n * Internally uses variable length encoding. Contrary to normal UintVar encoding, the first byte contains:\n * * 1 bit that denotes whether the next value is a count (LSB)\n * * 1 bit that denotes whether this value is negative (MSB - 1)\n * * 1 bit that denotes whether to continue reading the variable length integer (MSB)\n *\n * Therefore, only five bits remain to encode diff ranges.\n *\n * Use this Encoder only when appropriate. In most cases, this is probably a bad idea.\n */\nexport class IntDiffOptRleEncoder {\n constructor () {\n this.encoder = new Encoder()\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @param {number} v\n */\n write (v) {\n if (this.diff === v - this.s) {\n this.s = v\n this.count++\n } else {\n flushIntDiffOptRleEncoder(this)\n this.count = 1\n this.diff = v - this.s\n this.s = v\n }\n }\n\n toUint8Array () {\n flushIntDiffOptRleEncoder(this)\n return toUint8Array(this.encoder)\n }\n}\n\n/**\n * Optimized String Encoder.\n *\n * Encoding many small strings in a simple Encoder is not very efficient. The function call to decode a string takes some time and creates references that must be eventually deleted.\n * In practice, when decoding several million small strings, the GC will kick in more and more often to collect orphaned string objects (or maybe there is another reason?).\n *\n * This string encoder solves the above problem. All strings are concatenated and written as a single string using a single encoding call.\n *\n * The lengths are encoded using a UintOptRleEncoder.\n */\nexport class StringEncoder {\n constructor () {\n /**\n * @type {Array}\n */\n this.sarr = []\n this.s = ''\n this.lensE = new UintOptRleEncoder()\n }\n\n /**\n * @param {string} string\n */\n write (string) {\n this.s += string\n if (this.s.length > 19) {\n this.sarr.push(this.s)\n this.s = ''\n }\n this.lensE.write(string.length)\n }\n\n toUint8Array () {\n const encoder = new Encoder()\n this.sarr.push(this.s)\n this.s = ''\n writeVarString(encoder, this.sarr.join(''))\n writeUint8Array(encoder, this.lensE.toUint8Array())\n return toUint8Array(encoder)\n }\n}\n","/**\n * Utility functions to work with buffers (Uint8Array).\n *\n * @module buffer\n */\n\nimport * as string from './string.js'\nimport * as env from './environment.js'\nimport * as encoding from './encoding.js'\nimport * as decoding from './decoding.js'\n\n/**\n * @param {number} len\n */\nexport const createUint8ArrayFromLen = len => new Uint8Array(len)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n * @param {number} byteOffset\n * @param {number} length\n */\nexport const createUint8ArrayViewFromArrayBuffer = (buffer, byteOffset, length) => new Uint8Array(buffer, byteOffset, length)\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n */\nexport const createUint8ArrayFromArrayBuffer = buffer => new Uint8Array(buffer)\n\n/* c8 ignore start */\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Browser = bytes => {\n let s = ''\n for (let i = 0; i < bytes.byteLength; i++) {\n s += string.fromCharCode(bytes[i])\n }\n // eslint-disable-next-line no-undef\n return btoa(s)\n}\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Node = bytes => Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64')\n\n/* c8 ignore start */\n/**\n * @param {string} s\n * @return {Uint8Array}\n */\nconst fromBase64Browser = s => {\n // eslint-disable-next-line no-undef\n const a = atob(s)\n const bytes = createUint8ArrayFromLen(a.length)\n for (let i = 0; i < a.length; i++) {\n bytes[i] = a.charCodeAt(i)\n }\n return bytes\n}\n/* c8 ignore stop */\n\n/**\n * @param {string} s\n */\nconst fromBase64Node = s => {\n const buf = Buffer.from(s, 'base64')\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/* c8 ignore next */\nexport const toBase64 = env.isBrowser ? toBase64Browser : toBase64Node\n\n/* c8 ignore next */\nexport const fromBase64 = env.isBrowser ? fromBase64Browser : fromBase64Node\n\n/**\n * Copy the content of an Uint8Array view to a new ArrayBuffer.\n *\n * @param {Uint8Array} uint8Array\n * @return {Uint8Array}\n */\nexport const copyUint8Array = uint8Array => {\n const newBuf = createUint8ArrayFromLen(uint8Array.byteLength)\n newBuf.set(uint8Array)\n return newBuf\n}\n\n/**\n * Encode anything as a UInt8Array. It's a pun on typescripts's `any` type.\n * See encoding.writeAny for more information.\n *\n * @param {any} data\n * @return {Uint8Array}\n */\nexport const encodeAny = data => {\n const encoder = encoding.createEncoder()\n encoding.writeAny(encoder, data)\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Decode an any-encoded value.\n *\n * @param {Uint8Array} buf\n * @return {any}\n */\nexport const decodeAny = buf => decoding.readAny(decoding.createDecoder(buf))\n","/**\n * Error helpers.\n *\n * @module error\n */\n\n/**\n * @param {string} s\n * @return {Error}\n */\n/* c8 ignore next */\nexport const create = s => new Error(s)\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const methodUnimplemented = () => {\n throw create('Method unimplemented')\n}\n\n/**\n * @throws {Error}\n * @return {never}\n */\n/* c8 ignore next 3 */\nexport const unexpectedCase = () => {\n throw create('Unexpected case')\n}\n","/**\n * Efficient schema-less binary decoding with support for variable length encoding.\n *\n * Use [lib0/decoding] with [lib0/encoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module decoding\n */\n\nimport * as buffer from './buffer.js'\nimport * as binary from './binary.js'\nimport * as math from './math.js'\nimport * as number from './number.js'\nimport * as string from './string.js'\nimport * as error from './error.js'\nimport * as encoding from './encoding.js'\n\nconst errorUnexpectedEndOfArray = error.create('Unexpected end of array')\nconst errorIntegerOutOfRange = error.create('Integer out of Range')\n\n/**\n * A Decoder handles the decoding of an Uint8Array.\n */\nexport class Decoder {\n /**\n * @param {Uint8Array} uint8Array Binary data to decode\n */\n constructor (uint8Array) {\n /**\n * Decoding target.\n *\n * @type {Uint8Array}\n */\n this.arr = uint8Array\n /**\n * Current decoding position.\n *\n * @type {number}\n */\n this.pos = 0\n }\n}\n\n/**\n * @function\n * @param {Uint8Array} uint8Array\n * @return {Decoder}\n */\nexport const createDecoder = uint8Array => new Decoder(uint8Array)\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {boolean}\n */\nexport const hasContent = decoder => decoder.pos !== decoder.arr.length\n\n/**\n * Clone a decoder instance.\n * Optionally set a new position parameter.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} [newPos] Defaults to current position\n * @return {Decoder} A clone of `decoder`\n */\nexport const clone = (decoder, newPos = decoder.pos) => {\n const _decoder = createDecoder(decoder.arr)\n _decoder.pos = newPos\n return _decoder\n}\n\n/**\n * Create an Uint8Array view of the next `len` bytes and advance the position by `len`.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} len The length of bytes to read\n * @return {Uint8Array}\n */\nexport const readUint8Array = (decoder, len) => {\n const view = buffer.createUint8ArrayViewFromArrayBuffer(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len)\n decoder.pos += len\n return view\n}\n\n/**\n * Read variable length Uint8Array.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readVarUint8Array = decoder => readUint8Array(decoder, readVarUint(decoder))\n\n/**\n * Read the rest of the content as an ArrayBuffer\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTailAsUint8Array = decoder => readUint8Array(decoder, decoder.arr.length - decoder.pos)\n\n/**\n * Skip one byte, jump to the next position.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} The next position\n */\nexport const skip8 = decoder => decoder.pos++\n\n/**\n * Read one byte as unsigned integer.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} Unsigned 8-bit integer\n */\nexport const readUint8 = decoder => decoder.arr[decoder.pos++]\n\n/**\n * Read 2 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint16 = decoder => {\n const uint =\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n decoder.pos += 2\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32 = decoder => {\n const uint =\n (decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Read 4 bytes as unsigned integer in big endian order.\n * (most significant byte first)\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const readUint32BigEndian = decoder => {\n const uint =\n (decoder.arr[decoder.pos + 3] +\n (decoder.arr[decoder.pos + 2] << 8) +\n (decoder.arr[decoder.pos + 1] << 16) +\n (decoder.arr[decoder.pos] << 24)) >>> 0\n decoder.pos += 4\n return uint\n}\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint8 = decoder => decoder.arr[decoder.pos]\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint16 = decoder =>\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8)\n\n/**\n * Look ahead without incrementing the position\n * to the next byte and read it as unsigned integer.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.\n */\nexport const peekUint32 = decoder => (\n decoder.arr[decoder.pos] +\n (decoder.arr[decoder.pos + 1] << 8) +\n (decoder.arr[decoder.pos + 2] << 16) +\n (decoder.arr[decoder.pos + 3] << 24)\n) >>> 0\n\n/**\n * Read unsigned integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarUint = decoder => {\n let num = 0\n let mult = 1\n const len = decoder.arr.length\n while (decoder.pos < len) {\n const r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult // shift $r << (7*#iterations) and add it to num\n mult *= 128 // next iteration, shift 7 \"more\" to the left\n if (r < binary.BIT8) {\n return num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Read signed integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n * @todo This should probably create the inverse ~num if number is negative - but this would be a breaking change.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nexport const readVarInt = decoder => {\n let r = decoder.arr[decoder.pos++]\n let num = r & binary.BITS6\n let mult = 64\n const sign = (r & binary.BIT7) > 0 ? -1 : 1\n if ((r & binary.BIT8) === 0) {\n // don't continue reading\n return sign * num\n }\n const len = decoder.arr.length\n while (decoder.pos < len) {\n r = decoder.arr[decoder.pos++]\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & binary.BITS7) * mult\n mult *= 128\n if (r < binary.BIT8) {\n return sign * num\n }\n /* c8 ignore start */\n if (num > number.MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarUint = decoder => {\n const pos = decoder.pos\n const s = readVarUint(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * Look ahead and read varUint without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {number}\n */\nexport const peekVarInt = decoder => {\n const pos = decoder.pos\n const s = readVarInt(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * We don't test this function anymore as we use native decoding/encoding by default now.\n * Better not modify this anymore..\n *\n * Transforming utf8 to a string is pretty expensive. The code performs 10x better\n * when String.fromCodePoint is fed with all characters as arguments.\n * But most environments have a maximum number of arguments per functions.\n * For effiency reasons we apply a maximum of 10000 characters at once.\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String.\n */\n/* c8 ignore start */\nexport const _readVarStringPolyfill = decoder => {\n let remainingLen = readVarUint(decoder)\n if (remainingLen === 0) {\n return ''\n } else {\n let encodedString = String.fromCodePoint(readUint8(decoder)) // remember to decrease remainingLen\n if (--remainingLen < 100) { // do not create a Uint8Array for small strings\n while (remainingLen--) {\n encodedString += String.fromCodePoint(readUint8(decoder))\n }\n } else {\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000\n // this is dangerous, we create a fresh array view from the existing buffer\n const bytes = decoder.arr.subarray(decoder.pos, decoder.pos + nextLen)\n decoder.pos += nextLen\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes))\n remainingLen -= nextLen\n }\n }\n return decodeURIComponent(escape(encodedString))\n }\n}\n/* c8 ignore stop */\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n */\nexport const _readVarStringNative = decoder =>\n /** @type any */ (string.utf8TextDecoder).decode(readVarUint8Array(decoder))\n\n/**\n * Read string of variable length\n * * varUint is used to store the length of the string\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n *\n */\n/* c8 ignore next */\nexport const readVarString = string.utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill\n\n/**\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nexport const readTerminatedUint8Array = decoder => {\n const encoder = encoding.createEncoder()\n let b\n while (true) {\n b = readUint8(decoder)\n if (b === 0) {\n return encoding.toUint8Array(encoder)\n }\n if (b === 1) {\n b = readUint8(decoder)\n }\n encoding.write(encoder, b)\n }\n}\n\n/**\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const readTerminatedString = decoder => string.decodeUtf8(readTerminatedUint8Array(decoder))\n\n/**\n * Look ahead and read varString without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {string}\n */\nexport const peekVarString = decoder => {\n const pos = decoder.pos\n const s = readVarString(decoder)\n decoder.pos = pos\n return s\n}\n\n/**\n * @param {Decoder} decoder\n * @param {number} len\n * @return {DataView}\n */\nexport const readFromDataView = (decoder, len) => {\n const dv = new DataView(decoder.arr.buffer, decoder.arr.byteOffset + decoder.pos, len)\n decoder.pos += len\n return dv\n}\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat32 = decoder => readFromDataView(decoder, 4).getFloat32(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readFloat64 = decoder => readFromDataView(decoder, 8).getFloat64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigInt64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigInt64(0, false)\n\n/**\n * @param {Decoder} decoder\n */\nexport const readBigUint64 = decoder => /** @type {any} */ (readFromDataView(decoder, 8)).getBigUint64(0, false)\n\n/**\n * @type {Array}\n */\nconst readAnyLookupTable = [\n decoder => undefined, // CASE 127: undefined\n decoder => null, // CASE 126: null\n readVarInt, // CASE 125: integer\n readFloat32, // CASE 124: float32\n readFloat64, // CASE 123: float64\n readBigInt64, // CASE 122: bigint\n decoder => false, // CASE 121: boolean (false)\n decoder => true, // CASE 120: boolean (true)\n readVarString, // CASE 119: string\n decoder => { // CASE 118: object\n const len = readVarUint(decoder)\n /**\n * @type {Object}\n */\n const obj = {}\n for (let i = 0; i < len; i++) {\n const key = readVarString(decoder)\n obj[key] = readAny(decoder)\n }\n return obj\n },\n decoder => { // CASE 117: array\n const len = readVarUint(decoder)\n const arr = []\n for (let i = 0; i < len; i++) {\n arr.push(readAny(decoder))\n }\n return arr\n },\n readVarUint8Array // CASE 116: Uint8Array\n]\n\n/**\n * @param {Decoder} decoder\n */\nexport const readAny = decoder => readAnyLookupTable[127 - readUint8(decoder)](decoder)\n\n/**\n * T must not be null.\n *\n * @template T\n */\nexport class RleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {function(Decoder):T} reader\n */\n constructor (uint8Array, reader) {\n super(uint8Array)\n /**\n * The reader\n */\n this.reader = reader\n /**\n * Current state\n * @type {T|null}\n */\n this.s = null\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = this.reader(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {T} */ (this.s)\n }\n}\n\nexport class IntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n }\n\n /**\n * @return {number}\n */\n read () {\n this.s += readVarInt(this)\n return this.s\n }\n}\n\nexport class RleIntDiffDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n * @param {number} start\n */\n constructor (uint8Array, start) {\n super(uint8Array)\n /**\n * Current state\n * @type {number}\n */\n this.s = start\n this.count = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n this.s += readVarInt(this)\n if (hasContent(this)) {\n this.count = readVarUint(this) + 1 // see encoder implementation for the reason why this is incremented\n } else {\n this.count = -1 // read the current value forever\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class UintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s)\n }\n}\n\nexport class IncUintOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n }\n\n read () {\n if (this.count === 0) {\n this.s = readVarInt(this)\n // if the sign is negative, we read the count too, otherwise count is 1\n const isNegative = math.isNegativeZero(this.s)\n this.count = 1\n if (isNegative) {\n this.s = -this.s\n this.count = readVarUint(this) + 2\n }\n }\n this.count--\n return /** @type {number} */ (this.s++)\n }\n}\n\nexport class IntDiffOptRleDecoder extends Decoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n super(uint8Array)\n /**\n * @type {number}\n */\n this.s = 0\n this.count = 0\n this.diff = 0\n }\n\n /**\n * @return {number}\n */\n read () {\n if (this.count === 0) {\n const diff = readVarInt(this)\n // if the first bit is set, we read more data\n const hasCount = diff & 1\n this.diff = math.floor(diff / 2) // shift >> 1\n this.count = 1\n if (hasCount) {\n this.count = readVarUint(this) + 2\n }\n }\n this.s += this.diff\n this.count--\n return this.s\n }\n}\n\nexport class StringDecoder {\n /**\n * @param {Uint8Array} uint8Array\n */\n constructor (uint8Array) {\n this.decoder = new UintOptRleDecoder(uint8Array)\n this.str = readVarString(this.decoder)\n /**\n * @type {number}\n */\n this.spos = 0\n }\n\n /**\n * @return {string}\n */\n read () {\n const end = this.spos + this.decoder.read()\n const res = this.str.slice(this.spos, end)\n this.spos = end\n return res\n }\n}\n","import {\n createDecoder,\n Decoder,\n readVarUint,\n readVarUint8Array,\n readVarString,\n} from 'lib0/decoding'\nimport {\n createEncoder,\n Encoder,\n toUint8Array,\n writeVarUint,\n writeVarString,\n length,\n} from 'lib0/encoding'\nimport { MessageType } from './types.js'\n\nexport class IncomingMessage {\n /**\n * Access to the received message.\n */\n decoder: Decoder\n\n /**\n * Access to the reply.\n */\n encoder: Encoder\n\n constructor(input: any) {\n if (!(input instanceof Uint8Array)) {\n input = new Uint8Array(input)\n }\n\n this.encoder = createEncoder()\n this.decoder = createDecoder(input)\n }\n\n readVarUint8Array() {\n return readVarUint8Array(this.decoder)\n }\n\n readVarUint() {\n return readVarUint(this.decoder)\n }\n\n readVarString() {\n return readVarString(this.decoder)\n }\n\n toUint8Array() {\n return toUint8Array(this.encoder)\n }\n\n writeVarUint(type: MessageType) {\n writeVarUint(this.encoder, type)\n }\n\n writeVarString(string: string) {\n writeVarString(this.encoder, string)\n }\n\n get length(): number {\n return length(this.encoder)\n }\n}\n","/**\n * Utility module to work with time.\n *\n * @module time\n */\n\nimport * as metric from './metric.js'\nimport * as math from './math.js'\n\n/**\n * Return current time.\n *\n * @return {Date}\n */\nexport const getDate = () => new Date()\n\n/**\n * Return current unix time.\n *\n * @return {number}\n */\nexport const getUnixTime = Date.now\n\n/**\n * Transform time (in ms) to a human readable format. E.g. 1100 => 1.1s. 60s => 1min. .001 => 10μs.\n *\n * @param {number} d duration in milliseconds\n * @return {string} humanized approximation of time\n */\nexport const humanizeDuration = d => {\n if (d < 60000) {\n const p = metric.prefix(d, -1)\n return math.round(p.n * 100) / 100 + p.prefix + 's'\n }\n d = math.floor(d / 1000)\n const seconds = d % 60\n const minutes = math.floor(d / 60) % 60\n const hours = math.floor(d / 3600) % 24\n const days = math.floor(d / 86400)\n if (days > 0) {\n return days + 'd' + ((hours > 0 || minutes > 30) ? ' ' + (minutes > 30 ? hours + 1 : hours) + 'h' : '')\n }\n if (hours > 0) {\n /* c8 ignore next */\n return hours + 'h' + ((minutes > 0 || seconds > 30) ? ' ' + (seconds > 30 ? minutes + 1 : minutes) + 'min' : '')\n }\n return minutes + 'min' + (seconds > 0 ? ' ' + seconds + 's' : '')\n}\n","/**\n * Observable class prototype.\n *\n * @module observable\n */\n\nimport * as map from './map.js'\nimport * as set from './set.js'\nimport * as array from './array.js'\n\n/**\n * Handles named events.\n *\n * @template N\n */\nexport class Observable {\n constructor () {\n /**\n * Some desc.\n * @type {Map}\n */\n this._observers = map.create()\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n on (name, f) {\n map.setIfUndefined(this._observers, name, set.create).add(f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, _f)\n f(...args)\n }\n this.on(name, _f)\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n off (name, f) {\n const observers = this._observers.get(name)\n if (observers !== undefined) {\n observers.delete(f)\n if (observers.size === 0) {\n this._observers.delete(name)\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @param {N} name The event name.\n * @param {Array} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return array.from((this._observers.get(name) || map.create()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = map.create()\n }\n}\n","/**\n * @module awareness-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as time from 'lib0/time'\nimport * as math from 'lib0/math'\nimport { Observable } from 'lib0/observable'\nimport * as f from 'lib0/function'\nimport * as Y from 'yjs' // eslint-disable-line\n\nexport const outdatedTimeout = 30000\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable}\n */\nexport class Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super()\n this.doc = doc\n /**\n * @type {number}\n */\n this.clientID = doc.clientID\n /**\n * Maps from client id to client state\n * @type {Map>}\n */\n this.states = new Map()\n /**\n * @type {Map}\n */\n this.meta = new Map()\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = time.getUnixTime()\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState())\n }\n /**\n * @type {Array}\n */\n const remove = []\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid)\n }\n })\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout')\n }\n }, math.floor(outdatedTimeout / 10)))\n doc.on('destroy', () => {\n this.destroy()\n })\n this.setLocalState({})\n }\n\n destroy () {\n this.emit('destroy', [this])\n this.setLocalState(null)\n super.destroy()\n clearInterval(this._checkInterval)\n }\n\n /**\n * @return {Object|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID\n const currLocalMeta = this.meta.get(clientID)\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1\n const prevState = this.states.get(clientID)\n if (state === null) {\n this.states.delete(clientID)\n } else {\n this.states.set(clientID, state)\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: time.getUnixTime()\n })\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n if (state === null) {\n removed.push(clientID)\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID)\n }\n } else {\n updated.push(clientID)\n if (!f.equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID)\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local'])\n }\n this.emit('update', [{ added, updated, removed }, 'local'])\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState()\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n })\n }\n }\n\n /**\n * @return {Map>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array} clients\n * @param {any} origin\n */\nexport const removeAwarenessStates = (awareness, clients, origin) => {\n const removed = []\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i]\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID)\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID))\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: time.getUnixTime()\n })\n }\n removed.push(clientID)\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin])\n awareness.emit('update', [{ added: [], updated: [], removed }, origin])\n }\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Array} clients\n * @return {Uint8Array}\n */\nexport const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length\n const encoder = encoding.createEncoder()\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = clients[i]\n const state = states.get(clientID) || null\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(state))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * Modify the content of an awareness update before re-encoding it to an awareness update.\n *\n * This might be useful when you have a central server that wants to ensure that clients\n * cant hijack somebody elses identity.\n *\n * @param {Uint8Array} update\n * @param {function(any):any} modify\n * @return {Uint8Array}\n */\nexport const modifyAwarenessUpdate = (update, modify) => {\n const decoder = decoding.createDecoder(update)\n const encoder = encoding.createEncoder()\n const len = decoding.readVarUint(decoder)\n encoding.writeVarUint(encoder, len)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n const clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const modifiedState = modify(state)\n encoding.writeVarUint(encoder, clientID)\n encoding.writeVarUint(encoder, clock)\n encoding.writeVarString(encoder, JSON.stringify(modifiedState))\n }\n return encoding.toUint8Array(encoder)\n}\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nexport const applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = decoding.createDecoder(update)\n const timestamp = time.getUnixTime()\n const added = []\n const updated = []\n const filteredUpdated = []\n const removed = []\n const len = decoding.readVarUint(decoder)\n for (let i = 0; i < len; i++) {\n const clientID = decoding.readVarUint(decoder)\n let clock = decoding.readVarUint(decoder)\n const state = JSON.parse(decoding.readVarString(decoder))\n const clientMeta = awareness.meta.get(clientID)\n const prevState = awareness.states.get(clientID)\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++\n } else {\n awareness.states.delete(clientID)\n }\n } else {\n awareness.states.set(clientID, state)\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n })\n if (clientMeta === undefined && state !== null) {\n added.push(clientID)\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID)\n } else if (state !== null) {\n if (!f.equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID)\n }\n updated.push(clientID)\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin])\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin])\n }\n}\n","/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server shoul only reply to requests, and not initiate them.\n * Therefore it is necesarry that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Will not be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n","import {\n IncomingHttpHeaders, IncomingMessage, ServerResponse,\n} from 'http'\nimport { URLSearchParams } from 'url'\nimport { Awareness } from 'y-protocols/awareness'\nimport Connection from './Connection.js'\nimport Document from './Document.js'\nimport { Hocuspocus } from './Hocuspocus.js'\n\nexport enum MessageType {\n Unknown = -1,\n Sync = 0,\n Awareness = 1,\n Auth = 2,\n QueryAwareness = 3,\n SyncReply = 4, // same as Sync, but won't trigger another 'SyncStep1'\n Stateless = 5,\n BroadcastStateless = 6,\n CLOSE = 7,\n SyncStatus = 8, // TODO: should this be 8?\n}\n\nexport interface AwarenessUpdate {\n added: Array,\n updated: Array,\n removed: Array,\n}\n\nexport interface ConnectionConfiguration {\n readOnly: boolean\n requiresAuthentication: boolean\n isAuthenticated: boolean\n}\n\nexport interface Extension {\n priority?: number,\n onConfigure?(data: onConfigurePayload): Promise,\n onListen?(data: onListenPayload): Promise,\n onUpgrade?(data: onUpgradePayload): Promise,\n onConnect?(data: onConnectPayload): Promise,\n connected?(data: connectedPayload): Promise,\n onAuthenticate?(data: onAuthenticatePayload): Promise,\n onLoadDocument?(data: onLoadDocumentPayload): Promise,\n afterLoadDocument?(data: onLoadDocumentPayload): Promise,\n beforeHandleMessage?(data: beforeHandleMessagePayload): Promise,\n beforeBroadcastStateless?(data: beforeBroadcastStatelessPayload): Promise,\n onStateless?(payload: onStatelessPayload): Promise;\n onChange?(data: onChangePayload): Promise,\n onStoreDocument?(data: onStoreDocumentPayload): Promise,\n afterStoreDocument?(data: afterStoreDocumentPayload): Promise,\n onAwarenessUpdate?(data: onAwarenessUpdatePayload): Promise,\n onRequest?(data: onRequestPayload): Promise,\n onDisconnect?(data: onDisconnectPayload): Promise\n onDestroy?(data: onDestroyPayload): Promise,\n}\n\nexport type HookName =\n 'onConfigure' |\n 'onListen' |\n 'onUpgrade' |\n 'onConnect' |\n 'connected' |\n 'onAuthenticate' |\n 'onLoadDocument' |\n 'afterLoadDocument' |\n 'beforeHandleMessage' |\n 'beforeBroadcastStateless' |\n 'onStateless' |\n 'onChange' |\n 'onStoreDocument' |\n 'afterStoreDocument' |\n 'onAwarenessUpdate' |\n 'onRequest' |\n 'onDisconnect' |\n 'onDestroy'\n\nexport type HookPayload =\n onConfigurePayload |\n onListenPayload |\n onUpgradePayload |\n onConnectPayload |\n connectedPayload |\n onAuthenticatePayload |\n onLoadDocumentPayload |\n onStatelessPayload |\n beforeHandleMessagePayload |\n beforeBroadcastStatelessPayload |\n onChangePayload |\n onStoreDocumentPayload |\n afterStoreDocumentPayload |\n onAwarenessUpdatePayload |\n onRequestPayload |\n onDisconnectPayload |\n onDestroyPayload\n\nexport interface Configuration extends Extension {\n /**\n * A name for the instance, used for logging.\n */\n name: string | null,\n /**\n * A list of hocuspocus extenions.\n */\n extensions: Array,\n /**\n * The port which the server listens on.\n */\n port?: number,\n /**\n * The address which the server listens on.\n */\n address?: string,\n /**\n * Defines in which interval the server sends a ping, and closes the connection when no pong is sent back.\n */\n timeout: number,\n /**\n * Debounces the call of the `onStoreDocument` hook for the given amount of time in ms.\n * Otherwise every single update would be persisted.\n */\n debounce: number,\n /**\n * Makes sure to call `onStoreDocument` at least in the given amount of time (ms).\n */\n maxDebounce: number\n /**\n * By default, the servers show a start screen. If passed false, the server will start quietly.\n */\n quiet: boolean,\n\n /**\n * options to pass to the ydoc document\n */\n yDocOptions: {\n gc: boolean, // enable or disable garbage collection (see https://github.com/yjs/yjs/blob/main/INTERNALS.md#deletions)\n gcFilter: () => boolean, // will be called before garbage collecting ; return false to keep it\n },\n /**\n * Function which returns the (customized) document name based on the request\n */\n getDocumentName?(data: getDocumentNamePayload): string | Promise,\n}\n\nexport interface getDocumentNamePayload {\n documentName: string,\n request: IncomingMessage,\n requestParameters: URLSearchParams,\n}\n\nexport interface onStatelessPayload {\n connection: Connection,\n documentName: string,\n document: Document,\n payload: string,\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface onAuthenticatePayload {\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n token: string,\n connection: ConnectionConfiguration\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface onConnectPayload {\n documentName: string,\n instance: Hocuspocus,\n request: IncomingMessage,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\n// @todo Change 'connection' to 'connectionConfig', and 'connectionInstance' to 'connection' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface connectedPayload {\n context: any,\n documentName: string,\n instance: Hocuspocus,\n request: IncomingMessage,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration,\n connectionInstance: Connection\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface onLoadDocumentPayload {\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface afterLoadDocumentPayload {\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\nexport interface onChangePayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n update: Uint8Array,\n socketId: string,\n}\n\nexport interface beforeHandleMessagePayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n update: Uint8Array,\n socketId: string,\n connection: Connection\n}\n\nexport interface beforeBroadcastStatelessPayload {\n document: Document,\n documentName: string,\n payload: string,\n}\n\nexport interface onStoreDocumentPayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n}\n\nexport interface afterStoreDocumentPayload extends onStoreDocumentPayload {}\n\nexport interface onAwarenessUpdatePayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n update: Uint8Array,\n socketId: string,\n added: number[],\n updated: number[],\n removed: number[],\n awareness: Awareness,\n states: StatesArray,\n}\n\nexport type StatesArray = { clientId: number, [key: string | number]: any }[]\n\n// @todo Change 'connection' to 'connectionConfig' in next major release\n// see https://github.com/ueberdosis/hocuspocus/pull/607#issuecomment-1553559805\nexport interface fetchPayload {\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n connection: ConnectionConfiguration\n}\n\nexport interface storePayload extends onStoreDocumentPayload {\n state: Buffer,\n}\n\nexport interface onDisconnectPayload {\n clientsCount: number,\n context: any,\n document: Document,\n documentName: string,\n instance: Hocuspocus,\n requestHeaders: IncomingHttpHeaders,\n requestParameters: URLSearchParams,\n socketId: string,\n}\n\nexport interface onRequestPayload {\n request: IncomingMessage,\n response: ServerResponse,\n instance: Hocuspocus,\n}\n\nexport interface onUpgradePayload {\n request: IncomingMessage,\n socket: any,\n head: any,\n instance: Hocuspocus,\n}\n\nexport interface onListenPayload {\n instance: Hocuspocus,\n configuration: Configuration,\n port: number,\n}\n\nexport interface onDestroyPayload {\n instance: Hocuspocus,\n}\n\nexport interface onConfigurePayload {\n instance: Hocuspocus,\n configuration: Configuration,\n version: string,\n}\n","import {\n createEncoder,\n Encoder,\n toUint8Array,\n writeVarString,\n writeVarUint,\n writeVarUint8Array,\n} from 'lib0/encoding'\nimport { Awareness, encodeAwarenessUpdate } from 'y-protocols/awareness'\nimport { writeSyncStep1, writeUpdate } from 'y-protocols/sync'\n\nimport { writeAuthenticated, writePermissionDenied } from '@hocuspocus/common'\nimport Document from './Document.js'\nimport { MessageType } from './types.js'\n\nexport class OutgoingMessage {\n\n encoder: Encoder\n\n type?: number\n\n category?: string\n\n constructor(documentName: string) {\n this.encoder = createEncoder()\n\n writeVarString(this.encoder, documentName)\n }\n\n createSyncMessage(): OutgoingMessage {\n this.type = MessageType.Sync\n\n writeVarUint(this.encoder, MessageType.Sync)\n\n return this\n }\n\n createSyncReplyMessage(): OutgoingMessage {\n this.type = MessageType.SyncReply\n\n writeVarUint(this.encoder, MessageType.SyncReply)\n\n return this\n }\n\n createAwarenessUpdateMessage(awareness: Awareness, changedClients?: Array): OutgoingMessage {\n this.type = MessageType.Awareness\n this.category = 'Update'\n\n const message = encodeAwarenessUpdate(\n awareness,\n changedClients || Array.from(awareness.getStates().keys()),\n )\n\n writeVarUint(this.encoder, MessageType.Awareness)\n writeVarUint8Array(this.encoder, message)\n\n return this\n }\n\n writeQueryAwareness(): OutgoingMessage {\n this.type = MessageType.QueryAwareness\n this.category = 'Update'\n\n writeVarUint(this.encoder, MessageType.QueryAwareness)\n\n return this\n }\n\n writeAuthenticated(readonly: boolean): OutgoingMessage {\n this.type = MessageType.Auth\n this.category = 'Authenticated'\n\n writeVarUint(this.encoder, MessageType.Auth)\n writeAuthenticated(this.encoder, readonly ? 'readonly' : 'read-write')\n\n return this\n }\n\n writePermissionDenied(reason: string): OutgoingMessage {\n this.type = MessageType.Auth\n this.category = 'PermissionDenied'\n\n writeVarUint(this.encoder, MessageType.Auth)\n writePermissionDenied(this.encoder, reason)\n\n return this\n }\n\n writeFirstSyncStepFor(document: Document): OutgoingMessage {\n this.category = 'SyncStep1'\n\n writeSyncStep1(this.encoder, document)\n\n return this\n }\n\n writeUpdate(update: Uint8Array): OutgoingMessage {\n this.category = 'Update'\n\n writeUpdate(this.encoder, update)\n\n return this\n }\n\n writeStateless(payload: string): OutgoingMessage {\n this.category = 'Stateless'\n\n writeVarUint(this.encoder, MessageType.Stateless)\n writeVarString(this.encoder, payload)\n\n return this\n }\n\n writeBroadcastStateless(payload: string): OutgoingMessage {\n this.category = 'Stateless'\n\n writeVarUint(this.encoder, MessageType.BroadcastStateless)\n writeVarString(this.encoder, payload)\n\n return this\n }\n\n // TODO: should this be write* or create* as method name?\n writeSyncStatus(updateSaved: boolean): OutgoingMessage {\n this.category = 'SyncStatus'\n\n writeVarUint(this.encoder, MessageType.SyncStatus)\n writeVarUint(this.encoder, updateSaved ? 1 : 0)\n\n return this\n }\n\n toUint8Array(): Uint8Array {\n return toUint8Array(this.encoder)\n }\n\n}\n","import * as decoding from 'lib0/decoding'\nimport { readVarString } from 'lib0/decoding'\nimport { applyAwarenessUpdate } from 'y-protocols/awareness'\nimport {\n messageYjsSyncStep1,\n messageYjsSyncStep2,\n messageYjsUpdate,\n readSyncStep1,\n readSyncStep2,\n readUpdate,\n} from 'y-protocols/sync'\nimport * as Y from 'yjs'\nimport Connection from './Connection.js'\nimport { Debugger } from './Debugger.js'\nimport Document from './Document.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { MessageType } from './types.js'\n\nexport class MessageReceiver {\n\n message: IncomingMessage\n\n logger: Debugger\n\n constructor(message: IncomingMessage, logger: Debugger) {\n this.message = message\n this.logger = logger\n }\n\n public apply(document: Document, connection?: Connection, reply?: (message: Uint8Array) => void) {\n const { message } = this\n const type = message.readVarUint()\n const emptyMessageLength = message.length\n\n switch (type) {\n case MessageType.Sync:\n case MessageType.SyncReply: {\n message.writeVarUint(MessageType.Sync)\n this.readSyncMessage(message, document, connection, reply, type !== MessageType.SyncReply)\n\n if (message.length > emptyMessageLength + 1) {\n if (reply) {\n reply(message.toUint8Array())\n } else if (connection) {\n // TODO: We should log this, shouldn’t we?\n // this.logger.log({\n // direction: 'out',\n // type: MessageType.Awareness,\n // category: 'Update',\n // })\n connection.send(message.toUint8Array())\n }\n }\n\n break\n }\n case MessageType.Awareness: {\n this.logger.log({\n direction: 'in',\n type: MessageType.Awareness,\n category: 'Update',\n })\n\n applyAwarenessUpdate(document.awareness, message.readVarUint8Array(), connection)\n\n break\n }\n case MessageType.QueryAwareness: {\n\n this.applyQueryAwarenessMessage(document, reply)\n\n break\n }\n case MessageType.Stateless: {\n connection?.callbacks.statelessCallback({\n connection,\n documentName: document.name,\n document,\n payload: readVarString(message.decoder),\n })\n\n break\n }\n case MessageType.BroadcastStateless: {\n const msg = message.readVarString()\n document.getConnections().forEach(connection => {\n connection.sendStateless(msg)\n })\n break\n }\n\n case MessageType.CLOSE: {\n connection?.close({\n code: 1000,\n reason: 'provider_initiated',\n })\n break\n }\n default:\n console.error(`Unable to handle message of type ${type}: no handler defined!`)\n // Do nothing\n }\n }\n\n readSyncMessage(message: IncomingMessage, document: Document, connection?: Connection, reply?: (message: Uint8Array) => void, requestFirstSync = true) {\n const type = message.readVarUint()\n\n switch (type) {\n case messageYjsSyncStep1: {\n this.logger.log({\n direction: 'in',\n type: MessageType.Sync,\n category: 'SyncStep1',\n })\n\n readSyncStep1(message.decoder, message.encoder, document)\n\n // When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1.\n this.logger.log({\n direction: 'out',\n type: MessageType.Sync,\n category: 'SyncStep2',\n })\n\n if (reply && requestFirstSync) {\n const syncMessage = (new OutgoingMessage(document.name)\n .createSyncReplyMessage()\n .writeFirstSyncStepFor(document))\n\n this.logger.log({\n direction: 'out',\n type: MessageType.Sync,\n category: 'SyncStep1',\n })\n\n reply(syncMessage.toUint8Array())\n } else if (connection) {\n const syncMessage = (new OutgoingMessage(document.name)\n .createSyncMessage()\n .writeFirstSyncStepFor(document))\n\n this.logger.log({\n direction: 'out',\n type: MessageType.Sync,\n category: 'SyncStep1',\n })\n\n connection.send(syncMessage.toUint8Array())\n }\n break\n }\n case messageYjsSyncStep2:\n this.logger.log({\n direction: 'in',\n type: MessageType.Sync,\n category: 'SyncStep2',\n })\n\n if (connection?.readOnly) {\n // We're in read-only mode, so we can't apply the update.\n // Let's use snapshotContainsUpdate to see if the update actually contains changes.\n // If not, we can still ack the update\n const snapshot = Y.snapshot(document)\n const update = decoding.readVarUint8Array(message.decoder)\n if (Y.snapshotContainsUpdate(snapshot, update)) {\n // no new changes in update\n const ackMessage = new OutgoingMessage(document.name)\n .writeSyncStatus(true)\n\n connection.send(ackMessage.toUint8Array())\n } else {\n // new changes in update that we can't apply, because readOnly\n const ackMessage = new OutgoingMessage(document.name)\n .writeSyncStatus(false)\n\n connection.send(ackMessage.toUint8Array())\n }\n break\n }\n\n readSyncStep2(message.decoder, document, connection)\n\n if (connection) {\n // TODO: how should this work if connection is not set? should we use reply?\n // reply is used by redis, but I'm unsure how that code path works\n connection.send(new OutgoingMessage(document.name)\n .writeSyncStatus(true).toUint8Array())\n }\n break\n case messageYjsUpdate:\n this.logger.log({\n direction: 'in',\n type: MessageType.Sync,\n category: 'Update',\n })\n\n if (connection?.readOnly) {\n connection.send(new OutgoingMessage(document.name)\n .writeSyncStatus(false).toUint8Array())\n break\n }\n\n readUpdate(message.decoder, document, connection)\n if (connection) {\n // TODO: how should this work if connection is not set? should we use reply?\n // reply is used by redis, but I'm unsure how that code path works\n connection.send(new OutgoingMessage(document.name)\n .writeSyncStatus(true).toUint8Array())\n }\n break\n default:\n throw new Error(`Received a message with an unknown type: ${type}`)\n }\n\n return type\n }\n\n applyQueryAwarenessMessage(document: Document, reply?: (message: Uint8Array) => void) {\n const message = new OutgoingMessage(document.name)\n .createAwarenessUpdateMessage(document.awareness)\n\n if (reply) {\n reply(message.toUint8Array())\n }\n\n // TODO: We should add support for WebSocket connections, too, right?\n // this.logger.log({\n // direction: 'out',\n // type: MessageType.Sync,\n // category: 'SyncStep1',\n // })\n\n // connection.send(syncMessage.toUint8Array())\n }\n}\n","import { IncomingMessage as HTTPIncomingMessage } from 'http'\nimport AsyncLock from 'async-lock'\nimport WebSocket from 'ws'\nimport {\n CloseEvent, ConnectionTimeout, Forbidden, WsReadyStates,\n} from '@hocuspocus/common'\nimport Document from './Document.js'\nimport { IncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { MessageReceiver } from './MessageReceiver.js'\nimport { Debugger } from './Debugger.js'\nimport { onStatelessPayload } from './types.js'\n\nexport class Connection {\n\n webSocket: WebSocket\n\n context: any\n\n document: Document\n\n pingInterval: NodeJS.Timeout\n\n pongReceived = true\n\n request: HTTPIncomingMessage\n\n timeout: number\n\n callbacks: any = {\n onClose: [(document: Document, event?: CloseEvent) => null],\n beforeHandleMessage: (connection: Connection, update: Uint8Array) => Promise,\n statelessCallback: () => Promise,\n }\n\n socketId: string\n\n lock: AsyncLock\n\n readOnly: Boolean\n\n logger: Debugger\n\n /**\n * Constructor.\n */\n constructor(\n connection: WebSocket,\n request: HTTPIncomingMessage,\n document: Document,\n timeout: number,\n socketId: string,\n context: any,\n readOnly = false,\n logger: Debugger,\n ) {\n this.webSocket = connection\n this.context = context\n this.document = document\n this.request = request\n this.timeout = timeout\n this.socketId = socketId\n this.readOnly = readOnly\n this.logger = logger\n\n this.lock = new AsyncLock()\n\n this.webSocket.binaryType = 'arraybuffer'\n this.document.addConnection(this)\n\n this.pingInterval = setInterval(this.check.bind(this), this.timeout)\n\n this.webSocket.on('close', this.boundClose)\n this.webSocket.on('message', this.boundHandleMessage)\n this.webSocket.on('pong', this.boundHandlePong)\n\n this.sendCurrentAwareness()\n }\n\n boundClose = this.close.bind(this)\n\n boundHandleMessage = this.handleMessage.bind(this)\n\n boundHandlePong = this.handlePong.bind(this)\n\n handlePong() {\n this.pongReceived = true\n }\n\n /**\n * Set a callback that will be triggered when the connection is closed\n */\n onClose(callback: (document: Document, event?: CloseEvent) => void): Connection {\n this.callbacks.onClose.push(callback)\n\n return this\n }\n\n /**\n * Set a callback that will be triggered when an stateless message is received\n */\n onStatelessCallback(callback: (payload: onStatelessPayload) => Promise): Connection {\n this.callbacks.statelessCallback = callback\n\n return this\n }\n\n /**\n * Set a callback that will be triggered before an message is handled\n */\n beforeHandleMessage(callback: (connection: Connection, update: Uint8Array) => Promise): Connection {\n this.callbacks.beforeHandleMessage = callback\n\n return this\n }\n\n /**\n * Send the given message\n */\n send(message: any): void {\n if (\n this.webSocket.readyState === WsReadyStates.Closing\n || this.webSocket.readyState === WsReadyStates.Closed\n ) {\n this.close()\n }\n\n try {\n this.webSocket.send(message, (error: any) => {\n if (error != null) this.close()\n })\n } catch (exception) {\n this.close()\n }\n }\n\n /**\n * Send a stateless message with payload\n */\n public sendStateless(payload: string): void {\n const message = new OutgoingMessage(this.document.name)\n .writeStateless(payload)\n\n this.logger.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n this.send(\n message.toUint8Array(),\n )\n }\n\n /**\n * Graceful wrapper around the WebSocket close method.\n */\n close(event?: CloseEvent): void {\n this.lock.acquire('close', (done: Function) => {\n if (this.pingInterval) {\n clearInterval(this.pingInterval)\n }\n\n if (this.document.hasConnection(this)) {\n this.document.removeConnection(this)\n clearInterval(this.pingInterval)\n\n this.webSocket.removeListener('close', this.boundClose)\n this.webSocket.removeListener('message', this.boundHandleMessage)\n this.webSocket.removeListener('pong', this.boundHandlePong)\n\n this.callbacks.onClose.forEach((callback: (arg0: Document, arg1?: CloseEvent) => any) => callback(this.document, event))\n }\n\n done()\n })\n }\n\n /**\n * Check if pong was received and close the connection otherwise\n * @private\n */\n private check(): void {\n if (!this.pongReceived) {\n return this.close(ConnectionTimeout)\n }\n\n if (this.document.hasConnection(this)) {\n this.pongReceived = false\n\n try {\n this.webSocket.ping()\n } catch (error) {\n this.close(ConnectionTimeout)\n }\n }\n }\n\n /**\n * Send the current document awareness to the client, if any\n * @private\n */\n private sendCurrentAwareness(): void {\n if (!this.document.hasAwarenessStates()) {\n return\n }\n\n const awarenessMessage = new OutgoingMessage(this.document.name)\n .createAwarenessUpdateMessage(this.document.awareness)\n\n this.logger.log({\n direction: 'out',\n type: awarenessMessage.type,\n category: awarenessMessage.category,\n })\n\n this.send(awarenessMessage.toUint8Array())\n }\n\n /**\n * Handle an incoming message\n * @private\n */\n private handleMessage(data: Uint8Array): void {\n const message = new IncomingMessage(data)\n const documentName = message.readVarString()\n\n if (documentName !== this.document.name) return\n\n message.writeVarString(documentName)\n\n this.callbacks.beforeHandleMessage(this, data)\n .then(() => {\n new MessageReceiver(\n message,\n this.logger,\n ).apply(this.document, this)\n })\n .catch((e: any) => {\n console.log('closing connection because of exception', e)\n this.close({\n code: 'code' in e ? e.code : Forbidden.code,\n reason: 'reason' in e ? e.reason : Forbidden.reason,\n })\n })\n }\n\n}\n\nexport default Connection\n","// import * as time from 'lib0/time'\nimport { MessageType } from './types.js'\n\nexport class Debugger {\n logs: any[] = []\n\n listen = false\n\n output = false\n\n enable() {\n this.flush()\n\n this.listen = true\n }\n\n disable() {\n this.listen = false\n }\n\n verbose() {\n this.output = true\n }\n\n quiet() {\n this.output = false\n }\n\n log(message: any) {\n if (!this.listen) {\n return this\n }\n\n const item = {\n ...message,\n type: MessageType[message.type],\n // time: time.getUnixTime(),\n }\n\n this.logs.push(item)\n\n if (this.output) {\n console.log('[DEBUGGER]', item.direction === 'in' ? 'IN –>' : 'OUT <–', `${item.type}/${item.category}`)\n }\n\n return this\n }\n\n flush() {\n this.logs = []\n\n return this\n }\n\n get() {\n return {\n logs: this.logs,\n }\n }\n}\n","/**\n * Mutual exclude for JavaScript.\n *\n * @module mutex\n */\n\n/**\n * @callback mutex\n * @param {function():void} cb Only executed when this mutex is not in the current stack\n * @param {function():void} [elseCb] Executed when this mutex is in the current stack\n */\n\n/**\n * Creates a mutual exclude function with the following property:\n *\n * ```js\n * const mutex = createMutex()\n * mutex(() => {\n * // This function is immediately executed\n * mutex(() => {\n * // This function is not executed, as the mutex is already active.\n * })\n * })\n * ```\n *\n * @return {mutex} A mutual exclude function\n * @public\n */\nexport const createMutex = () => {\n let token = true\n return (f, g) => {\n if (token) {\n token = false\n try {\n f()\n } finally {\n token = true\n }\n } else if (g !== undefined) {\n g()\n }\n }\n}\n","import WebSocket from 'ws'\nimport { Awareness, removeAwarenessStates, applyAwarenessUpdate } from 'y-protocols/awareness'\nimport { applyUpdate, Doc, encodeStateAsUpdate } from 'yjs'\nimport { mutex, createMutex } from 'lib0/mutex.js'\nimport { AwarenessUpdate } from './types.js'\nimport Connection from './Connection.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport { Debugger } from './Debugger.js'\n\nexport class Document extends Doc {\n\n awareness: Awareness\n\n callbacks = {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onUpdate: (document: Document, connection: Connection, update: Uint8Array) => {},\n beforeBroadcastStateless: (document: Document, stateless: string) => {},\n }\n\n connections: Map,\n connection: Connection\n }> = new Map()\n\n // The number of direct (non-websocket) connections to this document\n directConnectionsCount = 0\n\n name: string\n\n mux: mutex\n\n logger: Debugger\n\n isLoading: boolean\n\n /**\n * Constructor.\n */\n constructor(name: string, logger: Debugger, yDocOptions: {}) {\n super(yDocOptions)\n\n this.name = name\n this.mux = createMutex()\n\n this.awareness = new Awareness(this)\n this.awareness.setLocalState(null)\n\n this.awareness.on('update', this.handleAwarenessUpdate.bind(this))\n this.on('update', this.handleUpdate.bind(this))\n\n this.logger = logger\n this.isLoading = true\n }\n\n /**\n * Check if the Document is empty\n */\n isEmpty(fieldName: string): boolean {\n // eslint-disable-next-line no-underscore-dangle\n return !this.get(fieldName)._start\n }\n\n /**\n * Merge the given document(s) into this one\n */\n merge(documents: Doc|Array): Document {\n (Array.isArray(documents) ? documents : [documents]).forEach(document => {\n applyUpdate(this, encodeStateAsUpdate(document))\n })\n\n return this\n }\n\n /**\n * Set a callback that will be triggered when the document is updated\n */\n onUpdate(callback: (document: Document, connection: Connection, update: Uint8Array) => void): Document {\n this.callbacks.onUpdate = callback\n\n return this\n }\n\n /**\n * Set a callback that will be triggered before a stateless message is broadcasted\n */\n beforeBroadcastStateless(callback: (document: Document, stateless: string) => void): Document {\n this.callbacks.beforeBroadcastStateless = callback\n\n return this\n }\n\n /**\n * Register a connection and a set of clients on this document keyed by the\n * underlying websocket connection\n */\n addConnection(connection: Connection): Document {\n this.connections.set(connection.webSocket, {\n clients: new Set(),\n connection,\n })\n\n return this\n }\n\n /**\n * Is the given connection registered on this document\n */\n hasConnection(connection: Connection): boolean {\n return this.connections.has(connection.webSocket)\n }\n\n /**\n * Remove the given connection from this document\n */\n removeConnection(connection: Connection): Document {\n removeAwarenessStates(\n this.awareness,\n Array.from(this.getClients(connection.webSocket)),\n null,\n )\n\n this.connections.delete(connection.webSocket)\n\n return this\n }\n\n addDirectConnection(): Document {\n this.directConnectionsCount += 1\n\n return this\n }\n\n removeDirectConnection(): Document {\n if (this.directConnectionsCount > 0) {\n this.directConnectionsCount -= 1\n }\n\n return this\n }\n\n /**\n * Get the number of active connections for this document\n */\n getConnectionsCount(): number {\n return this.connections.size + this.directConnectionsCount\n }\n\n /**\n * Get an array of registered connections\n */\n getConnections(): Array {\n return Array.from(this.connections.values()).map(data => data.connection)\n }\n\n /**\n * Get the client ids for the given connection instance\n */\n getClients(connectionInstance: WebSocket): Set {\n const connection = this.connections.get(connectionInstance)\n\n return connection?.clients === undefined ? new Set() : connection.clients\n }\n\n /**\n * Has the document awareness states\n */\n hasAwarenessStates(): boolean {\n return this.awareness.getStates().size > 0\n }\n\n /**\n * Apply the given awareness update\n */\n applyAwarenessUpdate(connection: Connection, update: Uint8Array): Document {\n applyAwarenessUpdate(\n this.awareness,\n update,\n connection.webSocket,\n )\n\n return this\n }\n\n /**\n * Handle an awareness update and sync changes to clients\n * @private\n */\n private handleAwarenessUpdate(\n { added, updated, removed }: AwarenessUpdate,\n connectionInstance: WebSocket,\n ): Document {\n const changedClients = added.concat(updated, removed)\n\n if (connectionInstance !== null) {\n const connection = this.connections.get(connectionInstance)\n\n if (connection) {\n added.forEach((clientId: any) => connection.clients.add(clientId))\n removed.forEach((clientId: any) => connection.clients.delete(clientId))\n }\n }\n\n this.getConnections().forEach(connection => {\n const awarenessMessage = new OutgoingMessage(this.name)\n .createAwarenessUpdateMessage(this.awareness, changedClients)\n\n this.logger.log({\n direction: 'out',\n type: awarenessMessage.type,\n category: awarenessMessage.category,\n })\n\n connection.send(\n awarenessMessage.toUint8Array(),\n )\n })\n\n return this\n }\n\n /**\n * Handle an updated document and sync changes to clients\n */\n private handleUpdate(update: Uint8Array, connection: Connection): Document {\n this.callbacks.onUpdate(this, connection, update)\n\n const message = new OutgoingMessage(this.name)\n .createSyncMessage()\n .writeUpdate(update)\n\n this.getConnections().forEach(connection => {\n this.logger.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n connection.send(\n message.toUint8Array(),\n )\n })\n\n return this\n }\n\n /**\n * Broadcast stateless message to all connections\n */\n public broadcastStateless(payload: string): void {\n this.callbacks.beforeBroadcastStateless(this, payload)\n\n this.getConnections().forEach(connection => {\n connection.sendStateless(payload)\n })\n }\n}\n\nexport default Document\n","import { IncomingMessage } from 'http'\nimport { URLSearchParams } from 'url'\n\n/**\n * Get parameters by the given request\n */\nexport function getParameters(request?: Pick): URLSearchParams {\n const query = request?.url?.split('?') || []\n return new URLSearchParams(query[1] ? query[1] : '')\n}\n","import { IncomingHttpHeaders, IncomingMessage } from 'http'\nimport {\n Forbidden, Unauthorized, WsReadyStates,\n} from '@hocuspocus/common'\nimport * as decoding from 'lib0/decoding'\nimport { v4 as uuid } from 'uuid'\nimport WebSocket from 'ws'\n\nimport Connection from './Connection.js'\nimport { Debugger } from './Debugger.js'\nimport Document from './Document.js'\nimport { Hocuspocus } from './Hocuspocus.js'\nimport { IncomingMessage as SocketIncomingMessage } from './IncomingMessage.js'\nimport { OutgoingMessage } from './OutgoingMessage.js'\nimport {\n ConnectionConfiguration,\n MessageType,\n beforeHandleMessagePayload,\n onDisconnectPayload,\n} from './types.js'\nimport { getParameters } from './util/getParameters.js'\n\n/**\n * The `ClientConnection` class is responsible for handling an incoming WebSocket\n *\n * TODO-refactor:\n * - use event handlers instead of calling hooks directly, hooks should probably be called from Hocuspocus.ts\n */\nexport class ClientConnection {\n // this map indicates whether a `Connection` instance has already taken over for incoming message for the key (i.e. documentName)\n private readonly documentConnections: Record = {}\n\n // While the connection will be establishing messages will\n // be queued and handled later.\n private readonly incomingMessageQueue: Record = {}\n\n // While the connection is establishing, kee\n private readonly documentConnectionsEstablished = new Set()\n\n // hooks payload by Document\n private readonly hookPayloads: Record = {}\n\n private readonly callbacks = {\n onClose: [(document: Document, payload: onDisconnectPayload) => {}],\n }\n\n private readonly closeIdleConnectionTimeout: NodeJS.Timeout\n\n // Every new connection gets a unique identifier.\n private readonly socketId = uuid()\n\n /**\n * The `ClientConnection` class receives incoming WebSocket connections,\n * runs all hooks:\n *\n * - onConnect for all connections\n * - onAuthenticate only if required\n *\n * … and if nothings fails it’ll fully establish the connection and\n * load the Document then.\n */\n constructor(\n private readonly websocket: WebSocket,\n private readonly request: IncomingMessage,\n private readonly documentProvider: {\n createDocument: Hocuspocus['createDocument'],\n },\n // TODO: change to events\n private readonly hooks: Hocuspocus['hooks'],\n private readonly debuggerTool: Debugger,\n private readonly opts: {\n requiresAuthentication: boolean,\n timeout: number,\n },\n ) {\n // Make sure to close an idle connection after a while.\n this.closeIdleConnectionTimeout = setTimeout(() => {\n websocket.close(Unauthorized.code, Unauthorized.reason)\n }, opts.timeout)\n\n websocket.on('message', this.messageHandler)\n }\n\n /**\n * Set a callback that will be triggered when the connection is closed\n */\n public onClose(callback: (document: Document, payload: onDisconnectPayload) => void): ClientConnection {\n this.callbacks.onClose.push(callback)\n\n return this\n }\n\n /**\n * Create a new connection by the given request and document\n */\n private createConnection(connection: WebSocket, document: Document): Connection {\n const hookPayload = this.hookPayloads[document.name]\n const instance = new Connection(\n connection,\n hookPayload.request,\n document,\n this.opts.timeout,\n hookPayload.socketId,\n hookPayload.context,\n hookPayload.connection.readOnly,\n this.debuggerTool,\n )\n\n instance.onClose(async (document, event) => {\n const disconnectHookPayload: onDisconnectPayload = {\n instance: this.documentProvider as Hocuspocus, // TODO, this will be removed when we use events instead of hooks for this class\n clientsCount: document.getConnectionsCount(),\n context: hookPayload.context,\n document,\n socketId: hookPayload.socketId,\n documentName: document.name,\n requestHeaders: hookPayload.request.headers,\n requestParameters: getParameters(hookPayload.request),\n }\n\n await this.hooks('onDisconnect', hookPayload)\n this.callbacks.onClose.forEach((callback => callback(document, disconnectHookPayload)))\n })\n\n instance.onStatelessCallback(async payload => {\n try {\n return await this.hooks('onStateless', payload)\n } catch (error: any) {\n // TODO: weird pattern, what's the use of this?\n if (error?.message) {\n throw error\n }\n }\n })\n\n instance.beforeHandleMessage((connection, update) => {\n const beforeHandleMessagePayload: beforeHandleMessagePayload = {\n instance: this.documentProvider as Hocuspocus, // TODO, this will be removed when we use events instead of hooks for this class\n clientsCount: document.getConnectionsCount(),\n context: hookPayload.context,\n document,\n socketId: hookPayload.socketId,\n connection,\n documentName: document.name,\n requestHeaders: hookPayload.request.headers,\n requestParameters: getParameters(hookPayload.request),\n update,\n }\n\n return this.hooks('beforeHandleMessage', beforeHandleMessagePayload)\n })\n\n // If the WebSocket has already disconnected (wow, that was fast) – then\n // immediately call close to cleanup the connection and document in memory.\n if (\n connection.readyState === WsReadyStates.Closing\n || connection.readyState === WsReadyStates.Closed\n ) {\n instance.close()\n }\n\n return instance\n }\n\n // Once all hooks are run, we’ll fully establish the connection:\n private setUpNewConnection = async (documentName: string) => {\n // Not an idle connection anymore, no need to close it then.\n clearTimeout(this.closeIdleConnectionTimeout)\n\n const hookPayload = this.hookPayloads[documentName]\n // If no hook interrupts, create a document and connection\n const document = await this.documentProvider.createDocument(documentName, hookPayload.request, hookPayload.socketId, hookPayload.connection, hookPayload.context)\n const instance = this.createConnection(this.websocket, document)\n\n instance.onClose((document, event) => {\n delete this.hookPayloads[documentName]\n delete this.documentConnections[documentName]\n delete this.incomingMessageQueue[documentName]\n this.documentConnectionsEstablished.delete(documentName)\n\n if (Object.keys(this.documentConnections).length === 0) {\n instance.webSocket.close(event?.code, event?.reason) // TODO: Move this to Hocuspocus connection handler\n }\n })\n\n this.documentConnections[documentName] = true\n\n // There’s no need to queue messages anymore.\n // Let’s work through queued messages.\n this.incomingMessageQueue[documentName].forEach(input => {\n this.websocket.emit('message', input)\n })\n\n this.hooks('connected', {\n ...hookPayload,\n documentName,\n context: hookPayload.context,\n connectionInstance: instance,\n })\n }\n\n // This listener handles authentication messages and queues everything else.\n private handleQueueingMessage = async (data: Uint8Array) => {\n try {\n const tmpMsg = new SocketIncomingMessage(data)\n\n const documentName = decoding.readVarString(tmpMsg.decoder)\n const type = decoding.readVarUint(tmpMsg.decoder)\n\n if (!(type === MessageType.Auth && !this.documentConnectionsEstablished.has(documentName))) {\n this.incomingMessageQueue[documentName].push(data)\n return\n }\n\n // Okay, we’ve got the authentication message we’re waiting for:\n this.documentConnectionsEstablished.add(documentName)\n\n // The 2nd integer contains the submessage type\n // which will always be authentication when sent from client -> server\n decoding.readVarUint(tmpMsg.decoder)\n const token = decoding.readVarString(tmpMsg.decoder)\n\n this.debuggerTool.log({\n direction: 'in',\n type,\n category: 'Token',\n })\n\n try {\n const hookPayload = this.hookPayloads[documentName]\n await this.hooks('onAuthenticate', {\n token,\n ...hookPayload,\n documentName,\n }, (contextAdditions: any) => {\n // Hooks are allowed to give us even more context and we’ll merge everything together.\n // We’ll pass the context to other hooks then.\n hookPayload.context = { ...hookPayload.context, ...contextAdditions }\n })\n // All `onAuthenticate` hooks passed.\n hookPayload.connection.isAuthenticated = true\n\n // Let the client know that authentication was successful.\n const message = new OutgoingMessage(documentName).writeAuthenticated(hookPayload.connection.readOnly)\n\n this.debuggerTool.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n this.websocket.send(message.toUint8Array())\n\n // Time to actually establish the connection.\n await this.setUpNewConnection(documentName)\n } catch (err: any) {\n const error = err || Forbidden\n const message = new OutgoingMessage(documentName).writePermissionDenied(error.reason ?? 'permission-denied')\n\n this.debuggerTool.log({\n direction: 'out',\n type: message.type,\n category: message.category,\n })\n\n // Ensure that the permission denied message is sent before the\n // connection is closed\n this.websocket.send(message.toUint8Array(), () => {\n if (Object.keys(this.documentConnections).length === 0) {\n try {\n this.websocket.close(error.code ?? Forbidden.code, error.reason ?? Forbidden.reason)\n } catch (closeError) {\n // catch is needed in case invalid error code is returned by hook (that would fail sending the close message)\n console.error(closeError)\n this.websocket.close(Forbidden.code, Forbidden.reason)\n }\n }\n })\n }\n\n // Catch errors due to failed decoding of data\n } catch (error) {\n console.error(error)\n this.websocket.close(Unauthorized.code, Unauthorized.reason)\n }\n }\n\n private messageHandler = async (data: Uint8Array) => {\n try {\n const tmpMsg = new SocketIncomingMessage(data)\n\n const documentName = decoding.readVarString(tmpMsg.decoder)\n\n if (this.documentConnections[documentName] === true) {\n // we already have a `Connection` set up for this document\n return\n }\n\n const isFirst = this.incomingMessageQueue[documentName] === undefined\n if (isFirst) {\n this.incomingMessageQueue[documentName] = []\n if (this.hookPayloads[documentName]) {\n throw new Error('first message, but hookPayloads exists')\n }\n\n const hookPayload = {\n instance: this.documentProvider as Hocuspocus,\n request: this.request,\n connection: {\n readOnly: false,\n requiresAuthentication: this.opts.requiresAuthentication,\n isAuthenticated: false,\n },\n requestHeaders: this.request.headers,\n requestParameters: getParameters(this.request),\n socketId: this.socketId,\n context: {},\n }\n\n this.hookPayloads[documentName] = hookPayload\n }\n this.handleQueueingMessage(data)\n\n if (isFirst) {\n const hookPayload = this.hookPayloads[documentName]\n // if this is the first message, trigger onConnect & check if we can start the connection (only if no auth is required)\n try {\n await this.hooks('onConnect', { ...hookPayload, documentName }, (contextAdditions: any) => {\n // merge context from all hooks\n hookPayload.context = { ...hookPayload.context, ...contextAdditions }\n })\n\n if (hookPayload.connection.requiresAuthentication || this.documentConnectionsEstablished.has(documentName)) {\n // Authentication is required, we’ll need to wait for the Authentication message.\n return\n }\n this.documentConnectionsEstablished.add(documentName)\n\n await this.setUpNewConnection(documentName)\n } catch (err: any) {\n // if a hook interrupts, close the websocket connection\n const error = err || Forbidden\n try {\n this.websocket.close(error.code ?? Forbidden.code, error.reason ?? Forbidden.reason)\n } catch (closeError) {\n // catch is needed in case invalid error code is returned by hook (that would fail sending the close message)\n console.error(closeError)\n this.websocket.close(Unauthorized.code, Unauthorized.reason)\n }\n }\n }\n } catch (closeError) {\n // catch is needed in case an invalid payload crashes the parsing of the Uint8Array\n console.error(closeError)\n this.websocket.close(Unauthorized.code, Unauthorized.reason)\n }\n }\n}\n","import { URLSearchParams } from 'url'\nimport Document from './Document.js'\nimport type { Hocuspocus } from './Hocuspocus.js'\n\nexport class DirectConnection {\n document: Document | null = null\n\n instance!: Hocuspocus\n\n context: any\n\n /**\n * Constructor.\n */\n constructor(\n document: Document,\n instance: Hocuspocus,\n context?: any,\n ) {\n this.document = document\n this.instance = instance\n this.context = context\n\n this.document.addDirectConnection()\n }\n\n async transact(transaction: (document: Document) => void) {\n if (!this.document) {\n throw new Error('direct connection closed')\n }\n\n transaction(this.document)\n\n this.instance.storeDocumentHooks(this.document, {\n clientsCount: this.document.getConnectionsCount(),\n context: this.context,\n document: this.document,\n documentName: this.document.name,\n instance: this.instance,\n requestHeaders: {},\n requestParameters: new URLSearchParams(),\n socketId: 'server',\n })\n }\n\n disconnect() {\n this.document?.removeDirectConnection()\n this.document = null\n }\n}\n","import { Server as HTTPServer, IncomingMessage, createServer } from 'http'\nimport { ListenOptions } from 'net'\nimport {\n ResetConnection, awarenessStatesToArray,\n} from '@hocuspocus/common'\nimport kleur from 'kleur'\nimport { v4 as uuid } from 'uuid'\nimport WebSocket, { AddressInfo, WebSocketServer } from 'ws'\nimport { Doc, applyUpdate, encodeStateAsUpdate } from 'yjs'\nimport meta from '../package.json' assert { type: 'json' }\nimport { ClientConnection } from './ClientConnection'\n// TODO: would be nice to only have a dependency on ClientConnection, and not on Connection\nimport Connection from './Connection.js'\nimport { Debugger } from './Debugger.js'\nimport { DirectConnection } from './DirectConnection.js'\nimport Document from './Document.js'\nimport {\n AwarenessUpdate,\n Configuration,\n ConnectionConfiguration,\n HookName,\n HookPayload,\n beforeBroadcastStatelessPayload,\n onChangePayload,\n onDisconnectPayload,\n onListenPayload,\n onStoreDocumentPayload,\n} from './types.js'\nimport { getParameters } from './util/getParameters'\n\nexport const defaultConfiguration = {\n name: null,\n port: 80,\n address: '0.0.0.0',\n timeout: 30000,\n debounce: 2000,\n maxDebounce: 10000,\n quiet: false,\n yDocOptions: {\n gc: true,\n gcFilter: () => true,\n },\n}\n\n/**\n * Hocuspocus Server\n */\nexport class Hocuspocus {\n configuration: Configuration = {\n ...defaultConfiguration,\n extensions: [],\n onConfigure: () => new Promise(r => r(null)),\n onListen: () => new Promise(r => r(null)),\n onUpgrade: () => new Promise(r => r(null)),\n onConnect: () => new Promise(r => r(null)),\n connected: () => new Promise(r => r(null)),\n beforeHandleMessage: () => new Promise(r => r(null)),\n beforeBroadcastStateless: () => new Promise(r => r(null)),\n onStateless: () => new Promise(r => r(null)),\n onChange: () => new Promise(r => r(null)),\n onLoadDocument: () => new Promise(r => r(null)),\n onStoreDocument: () => new Promise(r => r(null)),\n afterStoreDocument: () => new Promise(r => r(null)),\n onAwarenessUpdate: () => new Promise(r => r(null)),\n onRequest: () => new Promise(r => r(null)),\n onDisconnect: () => new Promise(r => r(null)),\n onDestroy: () => new Promise(r => r(null)),\n }\n\n documents: Map = new Map()\n\n httpServer?: HTTPServer\n\n webSocketServer?: WebSocketServer\n\n debugger = new Debugger()\n\n constructor(configuration?: Partial) {\n if (configuration) {\n this.configure(configuration)\n }\n }\n\n /**\n * Configure the server\n */\n configure(configuration: Partial): Hocuspocus {\n this.configuration = {\n ...this.configuration,\n ...configuration,\n }\n\n this.configuration.extensions.sort((a, b) => {\n const one = typeof a.priority === 'undefined' ? 100 : a.priority\n const two = typeof b.priority === 'undefined' ? 100 : b.priority\n\n if (one > two) {\n return -1\n }\n\n if (one < two) {\n return 1\n }\n\n return 0\n })\n\n this.configuration.extensions.push({\n onConfigure: this.configuration.onConfigure,\n onListen: this.configuration.onListen,\n onUpgrade: this.configuration.onUpgrade,\n onConnect: this.configuration.onConnect,\n connected: this.configuration.connected,\n onAuthenticate: this.configuration.onAuthenticate,\n onLoadDocument: this.configuration.onLoadDocument,\n beforeHandleMessage: this.configuration.beforeHandleMessage,\n beforeBroadcastStateless: this.configuration.beforeBroadcastStateless,\n onStateless: this.configuration.onStateless,\n onChange: this.configuration.onChange,\n onStoreDocument: this.configuration.onStoreDocument,\n afterStoreDocument: this.configuration.afterStoreDocument,\n onAwarenessUpdate: this.configuration.onAwarenessUpdate,\n onRequest: this.configuration.onRequest,\n onDisconnect: this.configuration.onDisconnect,\n onDestroy: this.configuration.onDestroy,\n })\n\n this.hooks('onConfigure', {\n configuration: this.configuration,\n version: meta.version,\n instance: this,\n })\n\n return this\n }\n\n get requiresAuthentication(): boolean {\n return !!this.configuration.extensions.find(extension => {\n return extension.onAuthenticate !== undefined\n })\n }\n\n /**\n * Start the server\n */\n async listen(\n portOrCallback: number | ((data: onListenPayload) => Promise) | null = null,\n callback: any = null,\n ): Promise {\n if (typeof portOrCallback === 'number') {\n this.configuration.port = portOrCallback\n }\n\n if (typeof portOrCallback === 'function') {\n this.configuration.extensions.push({\n onListen: portOrCallback,\n })\n }\n\n if (typeof callback === 'function') {\n this.configuration.extensions.push({\n onListen: callback,\n })\n }\n\n const webSocketServer = new WebSocketServer({ noServer: true })\n\n webSocketServer.on('connection', async (incoming: WebSocket, request: IncomingMessage) => {\n\n incoming.on('error', error => {\n /**\n * Handle a ws instance error, which is required to prevent\n * the server from crashing when one happens\n * See https://github.com/websockets/ws/issues/1777#issuecomment-660803472\n * @private\n */\n this.debugger.log('Error emitted from webSocket instance:')\n this.debugger.log(error)\n })\n\n this.handleConnection(incoming, request)\n })\n\n const server = createServer(async (request, response) => {\n try {\n await this.hooks('onRequest', { request, response, instance: this })\n\n // default response if all prior hooks don't interfere\n response.writeHead(200, { 'Content-Type': 'text/plain' })\n response.end('OK')\n } catch (error) {\n // if a hook rejects and the error is empty, do nothing\n // this is only meant to prevent later hooks and the\n // default handler to do something. if a error is present\n // just rethrow it\n if (error) {\n throw error\n }\n }\n })\n\n server.on('upgrade', async (request, socket, head) => {\n try {\n await this.hooks('onUpgrade', {\n request,\n socket,\n head,\n instance: this,\n })\n\n // let the default websocket server handle the connection if\n // prior hooks don't interfere\n webSocketServer.handleUpgrade(request, socket, head, ws => {\n webSocketServer.emit('connection', ws, request)\n })\n } catch (error) {\n // if a hook rejects and the error is empty, do nothing\n // this is only meant to prevent later hooks and the\n // default handler to do something. if a error is present\n // just rethrow it\n\n // TODO: why?\n if (error) {\n throw error\n }\n }\n })\n\n this.httpServer = server\n this.webSocketServer = webSocketServer\n\n return new Promise((resolve: Function, reject: Function) => {\n server.listen({\n port: this.configuration.port,\n host: this.configuration.address,\n } as ListenOptions, async () => {\n if (!this.configuration.quiet && process.env.NODE_ENV !== 'testing') {\n this.showStartScreen()\n }\n\n const onListenPayload = {\n instance: this,\n configuration: this.configuration,\n port: this.address.port,\n }\n\n try {\n await this.hooks('onListen', onListenPayload)\n resolve(this)\n } catch (e) {\n reject(e)\n }\n })\n })\n }\n\n get address(): AddressInfo {\n return (this.httpServer?.address() || {\n port: this.configuration.port,\n address: this.configuration.address,\n family: 'IPv4',\n }) as AddressInfo\n }\n\n get URL(): string {\n return `${this.configuration.address}:${this.address.port}`\n }\n\n get webSocketURL(): string {\n return `ws://${this.URL}`\n }\n\n get httpURL(): string {\n return `http://${this.URL}`\n }\n\n private showStartScreen() {\n const name = this.configuration.name ? ` (${this.configuration.name})` : ''\n\n console.log()\n console.log(` ${kleur.cyan(`Hocuspocus v${meta.version}${name}`)}${kleur.green(' running at:')}`)\n console.log()\n console.log(` > HTTP: ${kleur.cyan(`${this.httpURL}`)}`)\n console.log(` > WebSocket: ${this.webSocketURL}`)\n\n const extensions = this.configuration?.extensions.map(extension => {\n return extension.constructor?.name\n })\n .filter(name => name)\n .filter(name => name !== 'Object')\n\n if (!extensions.length) {\n return\n }\n\n console.log()\n console.log(' Extensions:')\n\n extensions\n .forEach(name => {\n console.log(` - ${name}`)\n })\n\n console.log()\n console.log(` ${kleur.green('Ready.')}`)\n console.log()\n }\n\n /**\n * Get the total number of active documents\n */\n getDocumentsCount(): number {\n return this.documents.size\n }\n\n /**\n * Get the total number of active connections\n */\n getConnectionsCount(): number {\n return Array.from(this.documents.values()).reduce((acc, document) => {\n acc += document.getConnectionsCount()\n return acc\n }, 0)\n }\n\n /**\n * Force close one or more connections\n */\n closeConnections(documentName?: string) {\n // Iterate through all connections for all documents\n // and invoke their close method, which is a graceful\n // disconnect wrapper around the underlying websocket.close\n this.documents.forEach((document: Document) => {\n // If a documentName was specified, bail if it doesnt match\n if (documentName && document.name !== documentName) {\n return\n }\n\n document.connections.forEach(({ connection }) => {\n connection.close(ResetConnection)\n })\n })\n }\n\n /**\n * Destroy the server\n */\n async destroy(): Promise {\n this.httpServer?.close()\n\n try {\n this.webSocketServer?.close()\n this.webSocketServer?.clients.forEach(client => {\n client.terminate()\n })\n } catch (error) {\n console.error(error)\n //\n }\n\n this.debugger.flush()\n\n await this.hooks('onDestroy', { instance: this })\n }\n\n /**\n * The `handleConnection` method receives incoming WebSocket connections,\n * runs all hooks:\n *\n * - onConnect for all connections\n * - onAuthenticate only if required\n *\n * … and if nothings fails it’ll fully establish the connection and\n * load the Document then.\n */\n handleConnection(incoming: WebSocket, request: IncomingMessage): void {\n const clientConnection = new ClientConnection(incoming, request, this, this.hooks.bind(this), this.debugger, {\n requiresAuthentication: this.requiresAuthentication,\n timeout: this.configuration.timeout,\n })\n clientConnection.onClose((document: Document, hookPayload: onDisconnectPayload) => {\n // Check if there are still no connections to the document, as these hooks\n // may take some time to resolve (e.g. database queries). If a\n // new connection were to come in during that time it would rely on the\n // document in the map that we remove now.\n if (document.getConnectionsCount() > 0) {\n return\n }\n\n // If it’s the last connection, we need to make sure to store the\n // document. Use the debounce helper, to clear running timers,\n // but make it run immediately (`true`).\n // Only run this if the document has finished loading earlier (i.e. not to persist the empty\n // ydoc if the onLoadDocument hook returned an error)\n if (!document.isLoading) {\n this.debounce(`onStoreDocument-${document.name}`, () => {\n this.storeDocumentHooks(document, hookPayload)\n }, true)\n } else {\n // Remove document from memory immediately\n this.documents.delete(document.name)\n document.destroy()\n }\n })\n }\n\n /**\n * Handle update of the given document\n */\n private handleDocumentUpdate(document: Document, connection: Connection | undefined, update: Uint8Array, request?: IncomingMessage): void {\n const hookPayload: onChangePayload | onStoreDocumentPayload = {\n instance: this,\n clientsCount: document.getConnectionsCount(),\n context: connection?.context || {},\n document,\n documentName: document.name,\n requestHeaders: request?.headers ?? {},\n requestParameters: getParameters(request),\n socketId: connection?.socketId ?? '',\n update,\n }\n\n this.hooks('onChange', hookPayload).catch(error => {\n // TODO: what's the intention of this catch -> throw?\n throw error\n })\n\n // If the update was received through other ways than the\n // WebSocket connection, we don’t need to feel responsible for\n // storing the content.\n if (!connection) {\n return\n }\n\n this.debounce(`onStoreDocument-${document.name}`, () => {\n this.storeDocumentHooks(document, hookPayload)\n })\n }\n\n timers: Map = new Map()\n\n /**\n * debounce the given function, using the given identifier\n */\n debounce(id: string, func: Function, immediately = false) {\n const old = this.timers.get(id)\n const start = old?.start || Date.now()\n\n const run = () => {\n this.timers.delete(id)\n func()\n }\n\n if (old?.timeout) {\n clearTimeout(old.timeout)\n }\n\n if (immediately) {\n return run()\n }\n\n if (Date.now() - start >= this.configuration.maxDebounce) {\n return run()\n }\n\n this.timers.set(id, {\n start,\n timeout: setTimeout(run, this.configuration.debounce),\n })\n }\n\n /**\n * Create a new document by the given request\n */\n public async createDocument(documentName: string, request: Partial>, socketId: string, connection: ConnectionConfiguration, context?: any): Promise {\n if (this.documents.has(documentName)) {\n const document = this.documents.get(documentName)\n\n if (document) {\n return document\n }\n }\n\n const document = new Document(documentName, this.debugger, this.configuration.yDocOptions)\n this.documents.set(documentName, document)\n\n const hookPayload = {\n instance: this,\n context,\n connection,\n document,\n documentName,\n socketId,\n requestHeaders: request.headers,\n requestParameters: getParameters(request),\n }\n\n try {\n await this.hooks('onLoadDocument', hookPayload, (loadedDocument: Doc | undefined) => {\n // if a hook returns a Y-Doc, encode the document state as update\n // and apply it to the newly created document\n // Note: instanceof doesn't work, because Doc !== Doc for some reason I don't understand\n if (\n loadedDocument?.constructor.name === 'Document'\n || loadedDocument?.constructor.name === 'Doc'\n ) {\n applyUpdate(document, encodeStateAsUpdate(loadedDocument))\n }\n })\n } catch (e) {\n this.closeConnections(documentName)\n this.documents.delete(documentName)\n throw e\n }\n\n document.isLoading = false\n await this.hooks('afterLoadDocument', hookPayload)\n\n document.onUpdate((document: Document, connection: Connection, update: Uint8Array) => {\n this.handleDocumentUpdate(document, connection, update, connection?.request)\n })\n\n document.beforeBroadcastStateless((document: Document, stateless: string) => {\n const hookPayload: beforeBroadcastStatelessPayload = {\n document,\n documentName: document.name,\n payload: stateless,\n }\n\n this.hooks('beforeBroadcastStateless', hookPayload)\n })\n\n document.awareness.on('update', (update: AwarenessUpdate) => {\n this.hooks('onAwarenessUpdate', {\n ...hookPayload,\n ...update,\n awareness: document.awareness,\n states: awarenessStatesToArray(document.awareness.getStates()),\n })\n })\n\n return document\n }\n\n storeDocumentHooks(document: Document, hookPayload: onStoreDocumentPayload) {\n this.hooks('onStoreDocument', hookPayload)\n .catch(error => {\n if (error?.message) {\n throw error\n }\n })\n .then(() => {\n this.hooks('afterStoreDocument', hookPayload).then(() => {\n // Remove document from memory.\n\n if (document.getConnectionsCount() > 0) {\n return\n }\n\n this.documents.delete(document.name)\n document.destroy()\n })\n })\n }\n\n /**\n * Run the given hook on all configured extensions.\n * Runs the given callback after each hook.\n */\n hooks(name: HookName, payload: HookPayload, callback: Function | null = null): Promise {\n const { extensions } = this.configuration\n\n // create a new `thenable` chain\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve\n let chain = Promise.resolve()\n\n extensions\n // get me all extensions which have the given hook\n .filter(extension => typeof extension[name] === 'function')\n // run through all the configured hooks\n .forEach(extension => {\n chain = chain\n .then(() => (extension[name] as any)?.(payload))\n .catch(error => {\n // make sure to log error messages\n if (error?.message) {\n console.error(`[${name}]`, error.message)\n }\n\n throw error\n })\n\n if (callback) {\n chain = chain.then((...args: any[]) => callback(...args))\n }\n })\n\n return chain\n }\n\n enableDebugging() {\n this.debugger.enable()\n }\n\n enableMessageLogging() {\n this.debugger.enable()\n this.debugger.verbose()\n }\n\n disableLogging() {\n this.debugger.quiet()\n }\n\n disableDebugging() {\n this.debugger.disable()\n }\n\n flushMessageLogs() {\n this.debugger.flush()\n\n return this\n }\n\n getMessageLogs() {\n return this.debugger.get()?.logs\n }\n\n async openDirectConnection(documentName: string, context?: any): Promise {\n const connectionConfig: ConnectionConfiguration = {\n isAuthenticated: true,\n readOnly: false,\n requiresAuthentication: true,\n }\n\n const document: Document = await this.createDocument(\n documentName,\n {}, // direct connection has no request params\n uuid(),\n connectionConfig,\n context,\n )\n\n return new DirectConnection(document, this, context)\n }\n}\n\nexport const Server = new Hocuspocus()\n"],"names":["create","length","object.length","object.hasProperty","map.create","string.fromCamelCase","conditions.undefinedToNull","storage.varStorage","f.isOneOf","buffer.createUint8ArrayViewFromArrayBuffer","binary.BITS7","binary.BIT8","math.floor","string.utf8TextEncoder","string.encodeUtf8","math.min","math.max","error.create","number.MAX_SAFE_INTEGER","string.utf8TextDecoder","map.setIfUndefined","set.create","array.from","time.getUnixTime","f.equalityDeep","encoding.createEncoder","encoding.writeVarUint","encoding.writeVarString","encoding.toUint8Array","decoding.createDecoder","decoding.readVarUint","decoding.readVarString","encoding.writeVarUint8Array","decoding.readVarUint8Array","uuid","SocketIncomingMessage"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/@hocuspocus/server/dist/packages/provider/src/HocuspocusProvider.d.ts b/node_modules/@hocuspocus/server/dist/packages/provider/src/HocuspocusProvider.d.ts +index dffe09b..2168445 100644 +--- a/node_modules/@hocuspocus/server/dist/packages/provider/src/HocuspocusProvider.d.ts ++++ b/node_modules/@hocuspocus/server/dist/packages/provider/src/HocuspocusProvider.d.ts +@@ -1,10 +1,10 @@ +-import * as Y from 'yjs'; +-import { Awareness } from 'y-protocols/awareness'; + import * as mutex from 'lib0/mutex'; + import type { CloseEvent, Event, MessageEvent } from 'ws'; ++import { Awareness } from 'y-protocols/awareness'; ++import * as Y from 'yjs'; + import EventEmitter from './EventEmitter.js'; +-import { ConstructableOutgoingMessage, onAuthenticationFailedParameters, onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatelessParameters, onStatusParameters, onSyncedParameters, WebSocketStatus, onAwarenessChangeParameters, onAwarenessUpdateParameters } from './types.js'; + import { CompleteHocuspocusProviderWebsocketConfiguration, HocuspocusProviderWebsocket } from './HocuspocusProviderWebsocket.js'; ++import { ConstructableOutgoingMessage, WebSocketStatus, onAuthenticationFailedParameters, onAwarenessChangeParameters, onAwarenessUpdateParameters, onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatelessParameters, onStatusParameters, onSyncedParameters } from './types.js'; + export type HocuspocusProviderConfiguration = Required> & Partial & (Required> | Required>); + export interface CompleteHocuspocusProviderConfiguration { + /** +@@ -77,7 +77,8 @@ export declare class HocuspocusProvider extends EventEmitter { + get document(): Y.Doc; + get awareness(): Awareness; + get hasUnsyncedChanges(): boolean; +- updateUnsyncedChanges(unsyncedChanges?: number): void; ++ incrementUnsyncedChanges(): void; ++ decrementUnsyncedChanges(): void; + forceSync(): void; + boundBeforeUnload: () => void; + beforeUnload(): void; +diff --git a/node_modules/@hocuspocus/server/dist/packages/provider/src/HocuspocusProviderWebsocket.d.ts b/node_modules/@hocuspocus/server/dist/packages/provider/src/HocuspocusProviderWebsocket.d.ts +index a3abfae..866ab85 100644 +--- a/node_modules/@hocuspocus/server/dist/packages/provider/src/HocuspocusProviderWebsocket.d.ts ++++ b/node_modules/@hocuspocus/server/dist/packages/provider/src/HocuspocusProviderWebsocket.d.ts +@@ -2,8 +2,8 @@ import * as mutex from 'lib0/mutex'; + import type { MessageEvent } from 'ws'; + import { Event } from 'ws'; + import EventEmitter from './EventEmitter.js'; +-import { onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatusParameters, WebSocketStatus, onAwarenessChangeParameters, onAwarenessUpdateParameters } from './types.js'; + import { HocuspocusProvider } from './HocuspocusProvider.js'; ++import { WebSocketStatus, onAwarenessChangeParameters, onAwarenessUpdateParameters, onCloseParameters, onDisconnectParameters, onMessageParameters, onOpenParameters, onOutgoingMessageParameters, onStatusParameters } from './types.js'; + export type HocuspocusProviderWebsocketConfiguration = Required> & Partial; + export interface CompleteHocuspocusProviderWebsocketConfiguration { + /** +@@ -76,6 +76,7 @@ export interface CompleteHocuspocusProviderWebsocketConfiguration { + quiet: boolean; + } + export declare class HocuspocusProviderWebsocket extends EventEmitter { ++ private messageQueue; + configuration: CompleteHocuspocusProviderWebsocketConfiguration; + subscribedToBroadcastChannel: boolean; + webSocket: WebSocket | null; +diff --git a/node_modules/@hocuspocus/server/dist/packages/provider/src/MessageReceiver.d.ts b/node_modules/@hocuspocus/server/dist/packages/provider/src/MessageReceiver.d.ts +index 8e5d55c..4d41340 100644 +--- a/node_modules/@hocuspocus/server/dist/packages/provider/src/MessageReceiver.d.ts ++++ b/node_modules/@hocuspocus/server/dist/packages/provider/src/MessageReceiver.d.ts +@@ -5,8 +5,9 @@ export declare class MessageReceiver { + broadcasted: boolean; + constructor(message: IncomingMessage); + setBroadcasted(value: boolean): this; +- apply(provider: HocuspocusProvider, emitSynced?: boolean): void; ++ apply(provider: HocuspocusProvider, emitSynced: boolean): void; + private applySyncMessage; ++ applySyncStatusMessage(provider: HocuspocusProvider, applied: boolean): void; + private applyAwarenessMessage; + private applyAuthMessage; + private applyQueryAwarenessMessage; +diff --git a/node_modules/@hocuspocus/server/dist/packages/provider/src/types.d.ts b/node_modules/@hocuspocus/server/dist/packages/provider/src/types.d.ts +index 1a67c25..fd3379e 100644 +--- a/node_modules/@hocuspocus/server/dist/packages/provider/src/types.d.ts ++++ b/node_modules/@hocuspocus/server/dist/packages/provider/src/types.d.ts +@@ -1,22 +1,23 @@ ++import { Encoder } from 'lib0/encoding'; ++import type { CloseEvent, Event, MessageEvent } from 'ws'; + import { Awareness } from 'y-protocols/awareness'; + import * as Y from 'yjs'; +-import { Encoder } from 'lib0/encoding'; +-import type { Event, CloseEvent, MessageEvent } from 'ws'; ++import { IncomingMessage } from './IncomingMessage.js'; ++import { OutgoingMessage } from './OutgoingMessage.js'; + import { AuthenticationMessage } from './OutgoingMessages/AuthenticationMessage.js'; + import { AwarenessMessage } from './OutgoingMessages/AwarenessMessage.js'; + import { QueryAwarenessMessage } from './OutgoingMessages/QueryAwarenessMessage.js'; + import { SyncStepOneMessage } from './OutgoingMessages/SyncStepOneMessage.js'; + import { SyncStepTwoMessage } from './OutgoingMessages/SyncStepTwoMessage.js'; + import { UpdateMessage } from './OutgoingMessages/UpdateMessage.js'; +-import { IncomingMessage } from './IncomingMessage.js'; +-import { OutgoingMessage } from './OutgoingMessage.js'; + export declare enum MessageType { + Sync = 0, + Awareness = 1, + Auth = 2, + QueryAwareness = 3, + Stateless = 5, +- CLOSE = 7 ++ CLOSE = 7, ++ SyncStatus = 8 + } + export declare enum WebSocketStatus { + Connecting = "connecting", +diff --git a/node_modules/@hocuspocus/server/dist/packages/server/src/ClientConnection.d.ts b/node_modules/@hocuspocus/server/dist/packages/server/src/ClientConnection.d.ts +new file mode 100644 +index 0000000..894206f +--- /dev/null ++++ b/node_modules/@hocuspocus/server/dist/packages/server/src/ClientConnection.d.ts +@@ -0,0 +1,55 @@ ++/// ++import { IncomingMessage } from 'http'; ++import WebSocket from 'ws'; ++import { Debugger } from './Debugger.js'; ++import Document from './Document.js'; ++import { Hocuspocus } from './Hocuspocus.js'; ++import { onDisconnectPayload } from './types.js'; ++/** ++ * The `ClientConnection` class is responsible for handling an incoming WebSocket ++ * ++ * TODO-refactor: ++ * - use event handlers instead of calling hooks directly, hooks should probably be called from Hocuspocus.ts ++ */ ++export declare class ClientConnection { ++ private readonly websocket; ++ private readonly request; ++ private readonly documentProvider; ++ private readonly hooks; ++ private readonly debuggerTool; ++ private readonly opts; ++ private readonly documentConnections; ++ private readonly incomingMessageQueue; ++ private readonly documentConnectionsEstablished; ++ private readonly hookPayloads; ++ private readonly callbacks; ++ private readonly closeIdleConnectionTimeout; ++ private readonly socketId; ++ /** ++ * The `ClientConnection` class receives incoming WebSocket connections, ++ * runs all hooks: ++ * ++ * - onConnect for all connections ++ * - onAuthenticate only if required ++ * ++ * … and if nothings fails it’ll fully establish the connection and ++ * load the Document then. ++ */ ++ constructor(websocket: WebSocket, request: IncomingMessage, documentProvider: { ++ createDocument: Hocuspocus['createDocument']; ++ }, hooks: Hocuspocus['hooks'], debuggerTool: Debugger, opts: { ++ requiresAuthentication: boolean; ++ timeout: number; ++ }); ++ /** ++ * Set a callback that will be triggered when the connection is closed ++ */ ++ onClose(callback: (document: Document, payload: onDisconnectPayload) => void): ClientConnection; ++ /** ++ * Create a new connection by the given request and document ++ */ ++ private createConnection; ++ private setUpNewConnection; ++ private handleQueueingMessage; ++ private messageHandler; ++} +diff --git a/node_modules/@hocuspocus/server/dist/packages/server/src/Hocuspocus.d.ts b/node_modules/@hocuspocus/server/dist/packages/server/src/Hocuspocus.d.ts +index 2709615..90d46c5 100644 +--- a/node_modules/@hocuspocus/server/dist/packages/server/src/Hocuspocus.d.ts ++++ b/node_modules/@hocuspocus/server/dist/packages/server/src/Hocuspocus.d.ts +@@ -1,11 +1,11 @@ + /// + /// +-import { IncomingMessage, Server as HTTPServer } from 'http'; ++import { Server as HTTPServer, IncomingMessage } from 'http'; + import WebSocket, { AddressInfo, WebSocketServer } from 'ws'; +-import { Configuration, HookName, HookPayload, onListenPayload, onStoreDocumentPayload } from './types.js'; +-import Document from './Document.js'; + import { Debugger } from './Debugger.js'; + import { DirectConnection } from './DirectConnection.js'; ++import Document from './Document.js'; ++import { Configuration, ConnectionConfiguration, HookName, HookPayload, onListenPayload, onStoreDocumentPayload } from './types.js'; + export declare const defaultConfiguration: { + name: null; + port: number; +@@ -69,7 +69,7 @@ export declare class Hocuspocus { + * … and if nothings fails it’ll fully establish the connection and + * load the Document then. + */ +- handleConnection(incoming: WebSocket, request: IncomingMessage, context?: any): void; ++ handleConnection(incoming: WebSocket, request: IncomingMessage): void; + /** + * Handle update of the given document + */ +@@ -85,21 +85,13 @@ export declare class Hocuspocus { + /** + * Create a new document by the given request + */ +- private createDocument; +- /** +- * Create a new connection by the given request and document +- */ +- private createConnection; ++ createDocument(documentName: string, request: Partial>, socketId: string, connection: ConnectionConfiguration, context?: any): Promise; + storeDocumentHooks(document: Document, hookPayload: onStoreDocumentPayload): void; + /** + * Run the given hook on all configured extensions. + * Runs the given callback after each hook. + */ + hooks(name: HookName, payload: HookPayload, callback?: Function | null): Promise; +- /** +- * Get parameters by the given request +- */ +- private static getParameters; + enableDebugging(): void; + enableMessageLogging(): void; + disableLogging(): void; +diff --git a/node_modules/@hocuspocus/server/dist/packages/server/src/MessageReceiver.d.ts b/node_modules/@hocuspocus/server/dist/packages/server/src/MessageReceiver.d.ts +index 8a0a68a..7c12f51 100644 +--- a/node_modules/@hocuspocus/server/dist/packages/server/src/MessageReceiver.d.ts ++++ b/node_modules/@hocuspocus/server/dist/packages/server/src/MessageReceiver.d.ts +@@ -1,7 +1,7 @@ + import Connection from './Connection.js'; +-import { IncomingMessage } from './IncomingMessage.js'; + import { Debugger } from './Debugger.js'; + import Document from './Document.js'; ++import { IncomingMessage } from './IncomingMessage.js'; + export declare class MessageReceiver { + message: IncomingMessage; + logger: Debugger; +diff --git a/node_modules/@hocuspocus/server/dist/packages/server/src/OutgoingMessage.d.ts b/node_modules/@hocuspocus/server/dist/packages/server/src/OutgoingMessage.d.ts +index dbd17e3..8cb4f13 100644 +--- a/node_modules/@hocuspocus/server/dist/packages/server/src/OutgoingMessage.d.ts ++++ b/node_modules/@hocuspocus/server/dist/packages/server/src/OutgoingMessage.d.ts +@@ -16,5 +16,6 @@ export declare class OutgoingMessage { + writeUpdate(update: Uint8Array): OutgoingMessage; + writeStateless(payload: string): OutgoingMessage; + writeBroadcastStateless(payload: string): OutgoingMessage; ++ writeSyncStatus(updateSaved: boolean): OutgoingMessage; + toUint8Array(): Uint8Array; + } +diff --git a/node_modules/@hocuspocus/server/dist/packages/server/src/types.d.ts b/node_modules/@hocuspocus/server/dist/packages/server/src/types.d.ts +index 30e719d..d905fc0 100644 +--- a/node_modules/@hocuspocus/server/dist/packages/server/src/types.d.ts ++++ b/node_modules/@hocuspocus/server/dist/packages/server/src/types.d.ts +@@ -4,9 +4,9 @@ + import { IncomingHttpHeaders, IncomingMessage, ServerResponse } from 'http'; + import { URLSearchParams } from 'url'; + import { Awareness } from 'y-protocols/awareness'; ++import Connection from './Connection.js'; + import Document from './Document.js'; + import { Hocuspocus } from './Hocuspocus.js'; +-import Connection from './Connection.js'; + export declare enum MessageType { + Unknown = -1, + Sync = 0, +@@ -16,7 +16,8 @@ export declare enum MessageType { + SyncReply = 4, + Stateless = 5, + BroadcastStateless = 6, +- CLOSE = 7 ++ CLOSE = 7, ++ SyncStatus = 8 + } + export interface AwarenessUpdate { + added: Array; +diff --git a/node_modules/@hocuspocus/server/dist/packages/server/src/util/getParameters.d.ts b/node_modules/@hocuspocus/server/dist/packages/server/src/util/getParameters.d.ts +new file mode 100644 +index 0000000..9e5f4cf +--- /dev/null ++++ b/node_modules/@hocuspocus/server/dist/packages/server/src/util/getParameters.d.ts +@@ -0,0 +1,8 @@ ++/// ++/// ++import { IncomingMessage } from 'http'; ++import { URLSearchParams } from 'url'; ++/** ++ * Get parameters by the given request ++ */ ++export declare function getParameters(request?: Pick): URLSearchParams; +diff --git a/node_modules/@hocuspocus/server/dist/tests/provider/hasUnsyncedChanges.d.ts b/node_modules/@hocuspocus/server/dist/tests/provider/hasUnsyncedChanges.d.ts +new file mode 100644 +index 0000000..cb0ff5c +--- /dev/null ++++ b/node_modules/@hocuspocus/server/dist/tests/provider/hasUnsyncedChanges.d.ts +@@ -0,0 +1 @@ ++export {}; +diff --git a/node_modules/@hocuspocus/server/src/ClientConnection.ts b/node_modules/@hocuspocus/server/src/ClientConnection.ts +new file mode 100644 +index 0000000..7e65716 +--- /dev/null ++++ b/node_modules/@hocuspocus/server/src/ClientConnection.ts +@@ -0,0 +1,366 @@ ++import { IncomingHttpHeaders, IncomingMessage } from 'http' ++import { ++ Forbidden, Unauthorized, WsReadyStates, ++} from '@hocuspocus/common' ++import * as decoding from 'lib0/decoding' ++import { v4 as uuid } from 'uuid' ++import WebSocket from 'ws' ++ ++import Connection from './Connection.js' ++import { Debugger } from './Debugger.js' ++import Document from './Document.js' ++import { Hocuspocus } from './Hocuspocus.js' ++import { IncomingMessage as SocketIncomingMessage } from './IncomingMessage.js' ++import { OutgoingMessage } from './OutgoingMessage.js' ++import { ++ ConnectionConfiguration, ++ MessageType, ++ beforeHandleMessagePayload, ++ onDisconnectPayload, ++} from './types.js' ++import { getParameters } from './util/getParameters.js' ++ ++/** ++ * The `ClientConnection` class is responsible for handling an incoming WebSocket ++ * ++ * TODO-refactor: ++ * - use event handlers instead of calling hooks directly, hooks should probably be called from Hocuspocus.ts ++ */ ++export class ClientConnection { ++ // this map indicates whether a `Connection` instance has already taken over for incoming message for the key (i.e. documentName) ++ private readonly documentConnections: Record = {} ++ ++ // While the connection will be establishing messages will ++ // be queued and handled later. ++ private readonly incomingMessageQueue: Record = {} ++ ++ // While the connection is establishing, kee ++ private readonly documentConnectionsEstablished = new Set() ++ ++ // hooks payload by Document ++ private readonly hookPayloads: Record = {} ++ ++ private readonly callbacks = { ++ onClose: [(document: Document, payload: onDisconnectPayload) => {}], ++ } ++ ++ private readonly closeIdleConnectionTimeout: NodeJS.Timeout ++ ++ // Every new connection gets a unique identifier. ++ private readonly socketId = uuid() ++ ++ /** ++ * The `ClientConnection` class receives incoming WebSocket connections, ++ * runs all hooks: ++ * ++ * - onConnect for all connections ++ * - onAuthenticate only if required ++ * ++ * … and if nothings fails it’ll fully establish the connection and ++ * load the Document then. ++ */ ++ constructor( ++ private readonly websocket: WebSocket, ++ private readonly request: IncomingMessage, ++ private readonly documentProvider: { ++ createDocument: Hocuspocus['createDocument'], ++ }, ++ // TODO: change to events ++ private readonly hooks: Hocuspocus['hooks'], ++ private readonly debuggerTool: Debugger, ++ private readonly opts: { ++ requiresAuthentication: boolean, ++ timeout: number, ++ }, ++ ) { ++ // Make sure to close an idle connection after a while. ++ this.closeIdleConnectionTimeout = setTimeout(() => { ++ websocket.close(Unauthorized.code, Unauthorized.reason) ++ }, opts.timeout) ++ ++ websocket.on('message', this.messageHandler) ++ } ++ ++ /** ++ * Set a callback that will be triggered when the connection is closed ++ */ ++ public onClose(callback: (document: Document, payload: onDisconnectPayload) => void): ClientConnection { ++ this.callbacks.onClose.push(callback) ++ ++ return this ++ } ++ ++ /** ++ * Create a new connection by the given request and document ++ */ ++ private createConnection(connection: WebSocket, document: Document): Connection { ++ const hookPayload = this.hookPayloads[document.name] ++ const instance = new Connection( ++ connection, ++ hookPayload.request, ++ document, ++ this.opts.timeout, ++ hookPayload.socketId, ++ hookPayload.context, ++ hookPayload.connection.readOnly, ++ this.debuggerTool, ++ ) ++ ++ instance.onClose(async (document, event) => { ++ const disconnectHookPayload: onDisconnectPayload = { ++ instance: this.documentProvider as Hocuspocus, // TODO, this will be removed when we use events instead of hooks for this class ++ clientsCount: document.getConnectionsCount(), ++ context: hookPayload.context, ++ document, ++ socketId: hookPayload.socketId, ++ documentName: document.name, ++ requestHeaders: hookPayload.request.headers, ++ requestParameters: getParameters(hookPayload.request), ++ } ++ ++ await this.hooks('onDisconnect', hookPayload) ++ this.callbacks.onClose.forEach((callback => callback(document, disconnectHookPayload))) ++ }) ++ ++ instance.onStatelessCallback(async payload => { ++ try { ++ return await this.hooks('onStateless', payload) ++ } catch (error: any) { ++ // TODO: weird pattern, what's the use of this? ++ if (error?.message) { ++ throw error ++ } ++ } ++ }) ++ ++ instance.beforeHandleMessage((connection, update) => { ++ const beforeHandleMessagePayload: beforeHandleMessagePayload = { ++ instance: this.documentProvider as Hocuspocus, // TODO, this will be removed when we use events instead of hooks for this class ++ clientsCount: document.getConnectionsCount(), ++ context: hookPayload.context, ++ document, ++ socketId: hookPayload.socketId, ++ connection, ++ documentName: document.name, ++ requestHeaders: hookPayload.request.headers, ++ requestParameters: getParameters(hookPayload.request), ++ update, ++ } ++ ++ return this.hooks('beforeHandleMessage', beforeHandleMessagePayload) ++ }) ++ ++ // If the WebSocket has already disconnected (wow, that was fast) – then ++ // immediately call close to cleanup the connection and document in memory. ++ if ( ++ connection.readyState === WsReadyStates.Closing ++ || connection.readyState === WsReadyStates.Closed ++ ) { ++ instance.close() ++ } ++ ++ return instance ++ } ++ ++ // Once all hooks are run, we’ll fully establish the connection: ++ private setUpNewConnection = async (documentName: string) => { ++ // Not an idle connection anymore, no need to close it then. ++ clearTimeout(this.closeIdleConnectionTimeout) ++ ++ const hookPayload = this.hookPayloads[documentName] ++ // If no hook interrupts, create a document and connection ++ const document = await this.documentProvider.createDocument(documentName, hookPayload.request, hookPayload.socketId, hookPayload.connection, hookPayload.context) ++ const instance = this.createConnection(this.websocket, document) ++ ++ instance.onClose((document, event) => { ++ delete this.hookPayloads[documentName] ++ delete this.documentConnections[documentName] ++ delete this.incomingMessageQueue[documentName] ++ this.documentConnectionsEstablished.delete(documentName) ++ ++ if (Object.keys(this.documentConnections).length === 0) { ++ instance.webSocket.close(event?.code, event?.reason) // TODO: Move this to Hocuspocus connection handler ++ } ++ }) ++ ++ this.documentConnections[documentName] = true ++ ++ // There’s no need to queue messages anymore. ++ // Let’s work through queued messages. ++ this.incomingMessageQueue[documentName].forEach(input => { ++ this.websocket.emit('message', input) ++ }) ++ ++ this.hooks('connected', { ++ ...hookPayload, ++ documentName, ++ context: hookPayload.context, ++ connectionInstance: instance, ++ }) ++ } ++ ++ // This listener handles authentication messages and queues everything else. ++ private handleQueueingMessage = async (data: Uint8Array) => { ++ try { ++ const tmpMsg = new SocketIncomingMessage(data) ++ ++ const documentName = decoding.readVarString(tmpMsg.decoder) ++ const type = decoding.readVarUint(tmpMsg.decoder) ++ ++ if (!(type === MessageType.Auth && !this.documentConnectionsEstablished.has(documentName))) { ++ this.incomingMessageQueue[documentName].push(data) ++ return ++ } ++ ++ // Okay, we’ve got the authentication message we’re waiting for: ++ this.documentConnectionsEstablished.add(documentName) ++ ++ // The 2nd integer contains the submessage type ++ // which will always be authentication when sent from client -> server ++ decoding.readVarUint(tmpMsg.decoder) ++ const token = decoding.readVarString(tmpMsg.decoder) ++ ++ this.debuggerTool.log({ ++ direction: 'in', ++ type, ++ category: 'Token', ++ }) ++ ++ try { ++ const hookPayload = this.hookPayloads[documentName] ++ await this.hooks('onAuthenticate', { ++ token, ++ ...hookPayload, ++ documentName, ++ }, (contextAdditions: any) => { ++ // Hooks are allowed to give us even more context and we’ll merge everything together. ++ // We’ll pass the context to other hooks then. ++ hookPayload.context = { ...hookPayload.context, ...contextAdditions } ++ }) ++ // All `onAuthenticate` hooks passed. ++ hookPayload.connection.isAuthenticated = true ++ ++ // Let the client know that authentication was successful. ++ const message = new OutgoingMessage(documentName).writeAuthenticated(hookPayload.connection.readOnly) ++ ++ this.debuggerTool.log({ ++ direction: 'out', ++ type: message.type, ++ category: message.category, ++ }) ++ ++ this.websocket.send(message.toUint8Array()) ++ ++ // Time to actually establish the connection. ++ await this.setUpNewConnection(documentName) ++ } catch (err: any) { ++ const error = err || Forbidden ++ const message = new OutgoingMessage(documentName).writePermissionDenied(error.reason ?? 'permission-denied') ++ ++ this.debuggerTool.log({ ++ direction: 'out', ++ type: message.type, ++ category: message.category, ++ }) ++ ++ // Ensure that the permission denied message is sent before the ++ // connection is closed ++ this.websocket.send(message.toUint8Array(), () => { ++ if (Object.keys(this.documentConnections).length === 0) { ++ try { ++ this.websocket.close(error.code ?? Forbidden.code, error.reason ?? Forbidden.reason) ++ } catch (closeError) { ++ // catch is needed in case invalid error code is returned by hook (that would fail sending the close message) ++ console.error(closeError) ++ this.websocket.close(Forbidden.code, Forbidden.reason) ++ } ++ } ++ }) ++ } ++ ++ // Catch errors due to failed decoding of data ++ } catch (error) { ++ console.error(error) ++ this.websocket.close(Unauthorized.code, Unauthorized.reason) ++ } ++ } ++ ++ private messageHandler = async (data: Uint8Array) => { ++ try { ++ const tmpMsg = new SocketIncomingMessage(data) ++ ++ const documentName = decoding.readVarString(tmpMsg.decoder) ++ ++ if (this.documentConnections[documentName] === true) { ++ // we already have a `Connection` set up for this document ++ return ++ } ++ ++ const isFirst = this.incomingMessageQueue[documentName] === undefined ++ if (isFirst) { ++ this.incomingMessageQueue[documentName] = [] ++ if (this.hookPayloads[documentName]) { ++ throw new Error('first message, but hookPayloads exists') ++ } ++ ++ const hookPayload = { ++ instance: this.documentProvider as Hocuspocus, ++ request: this.request, ++ connection: { ++ readOnly: false, ++ requiresAuthentication: this.opts.requiresAuthentication, ++ isAuthenticated: false, ++ }, ++ requestHeaders: this.request.headers, ++ requestParameters: getParameters(this.request), ++ socketId: this.socketId, ++ context: {}, ++ } ++ ++ this.hookPayloads[documentName] = hookPayload ++ } ++ this.handleQueueingMessage(data) ++ ++ if (isFirst) { ++ const hookPayload = this.hookPayloads[documentName] ++ // if this is the first message, trigger onConnect & check if we can start the connection (only if no auth is required) ++ try { ++ await this.hooks('onConnect', { ...hookPayload, documentName }, (contextAdditions: any) => { ++ // merge context from all hooks ++ hookPayload.context = { ...hookPayload.context, ...contextAdditions } ++ }) ++ ++ if (hookPayload.connection.requiresAuthentication || this.documentConnectionsEstablished.has(documentName)) { ++ // Authentication is required, we’ll need to wait for the Authentication message. ++ return ++ } ++ this.documentConnectionsEstablished.add(documentName) ++ ++ await this.setUpNewConnection(documentName) ++ } catch (err: any) { ++ // if a hook interrupts, close the websocket connection ++ const error = err || Forbidden ++ try { ++ this.websocket.close(error.code ?? Forbidden.code, error.reason ?? Forbidden.reason) ++ } catch (closeError) { ++ // catch is needed in case invalid error code is returned by hook (that would fail sending the close message) ++ console.error(closeError) ++ this.websocket.close(Unauthorized.code, Unauthorized.reason) ++ } ++ } ++ } ++ } catch (closeError) { ++ // catch is needed in case an invalid payload crashes the parsing of the Uint8Array ++ console.error(closeError) ++ this.websocket.close(Unauthorized.code, Unauthorized.reason) ++ } ++ } ++} +diff --git a/node_modules/@hocuspocus/server/src/Hocuspocus.ts b/node_modules/@hocuspocus/server/src/Hocuspocus.ts +index 56f3e3d..b746ca2 100644 +--- a/node_modules/@hocuspocus/server/src/Hocuspocus.ts ++++ b/node_modules/@hocuspocus/server/src/Hocuspocus.ts +@@ -1,37 +1,32 @@ +-import { createServer, IncomingMessage, Server as HTTPServer } from 'http' +-import { URLSearchParams } from 'url' ++import { Server as HTTPServer, IncomingMessage, createServer } from 'http' + import { ListenOptions } from 'net' +-import * as decoding from 'lib0/decoding' +-import WebSocket, { AddressInfo, WebSocketServer } from 'ws' +-import { Doc, encodeStateAsUpdate, applyUpdate } from 'yjs' +-import { v4 as uuid } from 'uuid' +-import kleur from 'kleur' + import { +- ResetConnection, +- Unauthorized, +- Forbidden, +- awarenessStatesToArray, +- WsReadyStates, ++ ResetConnection, awarenessStatesToArray, + } from '@hocuspocus/common' +-import meta from '../package.json' assert {type: 'json'} +-import { IncomingMessage as SocketIncomingMessage } from './IncomingMessage.js' ++import kleur from 'kleur' ++import { v4 as uuid } from 'uuid' ++import WebSocket, { AddressInfo, WebSocketServer } from 'ws' ++import { Doc, applyUpdate, encodeStateAsUpdate } from 'yjs' ++import meta from '../package.json' assert { type: 'json' } ++import { ClientConnection } from './ClientConnection' ++// TODO: would be nice to only have a dependency on ClientConnection, and not on Connection ++import Connection from './Connection.js' ++import { Debugger } from './Debugger.js' ++import { DirectConnection } from './DirectConnection.js' ++import Document from './Document.js' + import { +- MessageType, ++ AwarenessUpdate, + Configuration, + ConnectionConfiguration, + HookName, +- AwarenessUpdate, + HookPayload, +- beforeHandleMessagePayload, + beforeBroadcastStatelessPayload, ++ onChangePayload, ++ onDisconnectPayload, + onListenPayload, + onStoreDocumentPayload, + } from './types.js' +-import Document from './Document.js' +-import Connection from './Connection.js' +-import { OutgoingMessage } from './OutgoingMessage.js' +-import { Debugger } from './Debugger.js' +-import { DirectConnection } from './DirectConnection.js' ++import { getParameters } from './util/getParameters' + + export const defaultConfiguration = { + name: null, +@@ -186,47 +181,49 @@ export class Hocuspocus { + this.handleConnection(incoming, request) + }) + +- const server = createServer((request, response) => { +- this.hooks('onRequest', { request, response, instance: this }) +- .then(() => { +- // default response if all prior hooks don't interfere +- response.writeHead(200, { 'Content-Type': 'text/plain' }) +- response.end('OK') +- }) +- .catch(error => { +- // if a hook rejects and the error is empty, do nothing +- // this is only meant to prevent later hooks and the +- // default handler to do something. if a error is present +- // just rethrow it +- if (error) { +- throw error +- } +- }) ++ const server = createServer(async (request, response) => { ++ try { ++ await this.hooks('onRequest', { request, response, instance: this }) ++ ++ // default response if all prior hooks don't interfere ++ response.writeHead(200, { 'Content-Type': 'text/plain' }) ++ response.end('OK') ++ } catch (error) { ++ // if a hook rejects and the error is empty, do nothing ++ // this is only meant to prevent later hooks and the ++ // default handler to do something. if a error is present ++ // just rethrow it ++ if (error) { ++ throw error ++ } ++ } + }) + +- server.on('upgrade', (request, socket, head) => { +- this.hooks('onUpgrade', { +- request, +- socket, +- head, +- instance: this, +- }) +- .then(() => { +- // let the default websocket server handle the connection if +- // prior hooks don't interfere +- webSocketServer.handleUpgrade(request, socket, head, ws => { +- webSocketServer.emit('connection', ws, request) +- }) ++ server.on('upgrade', async (request, socket, head) => { ++ try { ++ await this.hooks('onUpgrade', { ++ request, ++ socket, ++ head, ++ instance: this, + }) +- .catch(error => { +- // if a hook rejects and the error is empty, do nothing +- // this is only meant to prevent later hooks and the +- // default handler to do something. if a error is present +- // just rethrow it +- if (error) { +- throw error +- } ++ ++ // let the default websocket server handle the connection if ++ // prior hooks don't interfere ++ webSocketServer.handleUpgrade(request, socket, head, ws => { ++ webSocketServer.emit('connection', ws, request) + }) ++ } catch (error) { ++ // if a hook rejects and the error is empty, do nothing ++ // this is only meant to prevent later hooks and the ++ // default handler to do something. if a error is present ++ // just rethrow it ++ ++ // TODO: why? ++ if (error) { ++ throw error ++ } ++ } + }) + + this.httpServer = server +@@ -236,7 +233,7 @@ export class Hocuspocus { + server.listen({ + port: this.configuration.port, + host: this.configuration.address, +- } as ListenOptions, () => { ++ } as ListenOptions, async () => { + if (!this.configuration.quiet && process.env.NODE_ENV !== 'testing') { + this.showStartScreen() + } +@@ -247,9 +244,12 @@ export class Hocuspocus { + port: this.address.port, + } + +- this.hooks('onListen', onListenPayload) +- .then(() => resolve(this)) +- .catch(error => reject(error)) ++ try { ++ await this.hooks('onListen', onListenPayload) ++ resolve(this) ++ } catch (e) { ++ reject(e) ++ } + }) + }) + } +@@ -373,233 +373,55 @@ export class Hocuspocus { + * … and if nothings fails it’ll fully establish the connection and + * load the Document then. + */ +- handleConnection(incoming: WebSocket, request: IncomingMessage, context: any = null): void { +- // Make sure to close an idle connection after a while. +- const closeIdleConnection = setTimeout(() => { +- incoming.close(Unauthorized.code, Unauthorized.reason) +- }, this.configuration.timeout) +- +- // Every new connection gets a unique identifier. +- const socketId = uuid() +- +- // To override settings for specific connections, we’ll +- // keep track of a few things in the `ConnectionConfiguration`. +- const connection: ConnectionConfiguration = { +- readOnly: false, ++ handleConnection(incoming: WebSocket, request: IncomingMessage): void { ++ const clientConnection = new ClientConnection(incoming, request, this, this.hooks.bind(this), this.debugger, { + requiresAuthentication: this.requiresAuthentication, +- isAuthenticated: false, +- } +- +- // The `onConnect` and `onAuthenticate` hooks need some context +- // to decide who’s connecting, so let’s put it together: +- const hookPayload = { +- instance: this, +- request, +- requestHeaders: request.headers, +- requestParameters: Hocuspocus.getParameters(request), +- socketId, +- connection, +- } +- +- // this map indicates whether a `Connection` instance has already taken over for incoming message for the key (i.e. documentName) +- const documentConnections: Record = {} +- +- // While the connection will be establishing messages will +- // be queued and handled later. +- const incomingMessageQueue: Record = {} +- +- // While the connection is establishing +- const connectionEstablishing: Record = {} +- +- // Once all hooks are run, we’ll fully establish the connection: +- const setUpNewConnection = async (documentName: string) => { +- // Not an idle connection anymore, no need to close it then. +- clearTimeout(closeIdleConnection) +- +- // If no hook interrupts, create a document and connection +- const document = await this.createDocument(documentName, request, socketId, connection, context) +- const instance = this.createConnection(incoming, request, document, socketId, connection.readOnly, context) +- +- instance.onClose((document, event) => { +- delete documentConnections[documentName] +- delete incomingMessageQueue[documentName] +- delete connectionEstablishing[documentName] +- +- if (Object.keys(documentConnections).length === 0) { +- instance.webSocket.close(event?.code, event?.reason) // TODO: Move this to Hocuspocus connection handler +- } +- }) +- +- documentConnections[documentName] = true +- +- // There’s no need to queue messages anymore. +- // Let’s work through queued messages. +- incomingMessageQueue[documentName].forEach(input => { +- incoming.emit('message', input) +- }) +- +- this.hooks('connected', { +- ...hookPayload, +- documentName, +- context, +- connectionInstance: instance, +- }) +- } +- +- // This listener handles authentication messages and queues everything else. +- const handleQueueingMessage = (data: Uint8Array) => { +- try { +- const tmpMsg = new SocketIncomingMessage(data) +- +- const documentName = decoding.readVarString(tmpMsg.decoder) +- const type = decoding.readVarUint(tmpMsg.decoder) +- +- // Okay, we’ve got the authentication message we’re waiting for: +- if (type === MessageType.Auth && !connectionEstablishing[documentName]) { +- connectionEstablishing[documentName] = true +- +- // The 2nd integer contains the submessage type +- // which will always be authentication when sent from client -> server +- decoding.readVarUint(tmpMsg.decoder) +- const token = decoding.readVarString(tmpMsg.decoder) +- +- this.debugger.log({ +- direction: 'in', +- type, +- category: 'Token', +- }) +- +- this.hooks('onAuthenticate', { +- token, +- ...hookPayload, +- documentName, +- }, (contextAdditions: any) => { +- // Hooks are allowed to give us even more context and we’ll merge everything together. +- // We’ll pass the context to other hooks then. +- context = { ...context, ...contextAdditions } +- }) +- .then(() => { +- // All `onAuthenticate` hooks passed. +- connection.isAuthenticated = true +- +- // Let the client know that authentication was successful. +- const message = new OutgoingMessage(documentName).writeAuthenticated(connection.readOnly) +- +- this.debugger.log({ +- direction: 'out', +- type: message.type, +- category: message.category, +- }) +- +- incoming.send(message.toUint8Array()) +- }) +- .then(() => { +- // Time to actually establish the connection. +- return setUpNewConnection(documentName) +- }) +- .catch((error = Forbidden) => { +- const message = new OutgoingMessage(documentName).writePermissionDenied(error.reason ?? 'permission-denied') +- +- this.debugger.log({ +- direction: 'out', +- type: message.type, +- category: message.category, +- }) +- +- // Ensure that the permission denied message is sent before the +- // connection is closed +- incoming.send(message.toUint8Array(), () => { +- if (Object.keys(documentConnections).length === 0) { +- try { +- incoming.close(error.code ?? Forbidden.code, error.reason ?? Forbidden.reason) +- } catch (closeError) { +- // catch is needed in case invalid error code is returned by hook (that would fail sending the close message) +- console.error(closeError) +- incoming.close(Forbidden.code, Forbidden.reason) +- } +- } +- }) +- }) +- } else { +- incomingMessageQueue[documentName].push(data) +- } +- +- // Catch errors due to failed decoding of data +- } catch (error) { +- console.error(error) +- incoming.close(Unauthorized.code, Unauthorized.reason) ++ timeout: this.configuration.timeout, ++ }) ++ clientConnection.onClose((document: Document, hookPayload: onDisconnectPayload) => { ++ // Check if there are still no connections to the document, as these hooks ++ // may take some time to resolve (e.g. database queries). If a ++ // new connection were to come in during that time it would rely on the ++ // document in the map that we remove now. ++ if (document.getConnectionsCount() > 0) { ++ return + } +- } +- +- const messageHandler = (data: Uint8Array) => { +- try { +- const tmpMsg = new SocketIncomingMessage(data) +- +- const documentName = decoding.readVarString(tmpMsg.decoder) +- +- if (documentConnections[documentName] === true) { +- // we already have a `Connection` set up for this document +- return +- } +- +- // if this is the first message, trigger onConnect & check if we can start the connection (only if no auth is required) +- if (incomingMessageQueue[documentName] === undefined) { +- incomingMessageQueue[documentName] = [] + +- this.hooks('onConnect', { ...hookPayload, documentName }, (contextAdditions: any) => { +- // merge context from all hooks +- context = { ...context, ...contextAdditions } +- }) +- .then(() => { +- // Authentication is required, we’ll need to wait for the Authentication message. +- if (connection.requiresAuthentication || connectionEstablishing[documentName]) { +- return +- } +- connectionEstablishing[documentName] = true +- +- return setUpNewConnection(documentName) +- }) +- .catch((error = Forbidden) => { +- // if a hook interrupts, close the websocket connection +- try { +- incoming.close(error.code ?? Forbidden.code, error.reason ?? Forbidden.reason) +- } catch (closeError) { +- // catch is needed in case invalid error code is returned by hook (that would fail sending the close message) +- console.error(closeError) +- incoming.close(Unauthorized.code, Unauthorized.reason) +- } +- }) +- } +- +- handleQueueingMessage(data) +- } catch (closeError) { +- // catch is needed in case an invalid payload crashes the parsing of the Uint8Array +- console.error(closeError) +- incoming.close(Unauthorized.code, Unauthorized.reason) ++ // If it’s the last connection, we need to make sure to store the ++ // document. Use the debounce helper, to clear running timers, ++ // but make it run immediately (`true`). ++ // Only run this if the document has finished loading earlier (i.e. not to persist the empty ++ // ydoc if the onLoadDocument hook returned an error) ++ if (!document.isLoading) { ++ this.debounce(`onStoreDocument-${document.name}`, () => { ++ this.storeDocumentHooks(document, hookPayload) ++ }, true) ++ } else { ++ // Remove document from memory immediately ++ this.documents.delete(document.name) ++ document.destroy() + } +- +- } +- +- incoming.on('message', messageHandler) ++ }) + } + + /** + * Handle update of the given document + */ + private handleDocumentUpdate(document: Document, connection: Connection | undefined, update: Uint8Array, request?: IncomingMessage): void { +- const hookPayload = { ++ const hookPayload: onChangePayload | onStoreDocumentPayload = { + instance: this, + clientsCount: document.getConnectionsCount(), + context: connection?.context || {}, + document, + documentName: document.name, + requestHeaders: request?.headers ?? {}, +- requestParameters: Hocuspocus.getParameters(request), ++ requestParameters: getParameters(request), + socketId: connection?.socketId ?? '', + update, + } + + this.hooks('onChange', hookPayload).catch(error => { ++ // TODO: what's the intention of this catch -> throw? + throw error + }) + +@@ -653,7 +475,7 @@ export class Hocuspocus { + /** + * Create a new document by the given request + */ +- private async createDocument(documentName: string, request: Partial>, socketId: string, connection: ConnectionConfiguration, context?: any): Promise { ++ public async createDocument(documentName: string, request: Partial>, socketId: string, connection: ConnectionConfiguration, context?: any): Promise { + if (this.documents.has(documentName)) { + const document = this.documents.get(documentName) + +@@ -673,7 +495,7 @@ export class Hocuspocus { + documentName, + socketId, + requestHeaders: request.headers, +- requestParameters: Hocuspocus.getParameters(request), ++ requestParameters: getParameters(request), + } + + try { +@@ -723,99 +545,6 @@ export class Hocuspocus { + return document + } + +- /** +- * Create a new connection by the given request and document +- */ +- private createConnection(connection: WebSocket, request: IncomingMessage, document: Document, socketId: string, readOnly = false, context?: any): Connection { +- const instance = new Connection( +- connection, +- request, +- document, +- this.configuration.timeout, +- socketId, +- context, +- readOnly, +- this.debugger, +- ) +- +- instance.onClose(document => { +- const hookPayload = { +- instance: this, +- clientsCount: document.getConnectionsCount(), +- context, +- document, +- socketId, +- documentName: document.name, +- requestHeaders: request.headers, +- requestParameters: Hocuspocus.getParameters(request), +- } +- +- this.hooks('onDisconnect', hookPayload).then(() => { +- // Check if there are still no connections to the document, as these hooks +- // may take some time to resolve (e.g. database queries). If a +- // new connection were to come in during that time it would rely on the +- // document in the map that we remove now. +- if (document.getConnectionsCount() > 0) { +- return +- } +- +- // If it’s the last connection, we need to make sure to store the +- // document. Use the debounce helper, to clear running timers, +- // but make it run immediately (`true`). +- // Only run this if the document has finished loading earlier (i.e. not to persist the empty +- // ydoc if the onLoadDocument hook returned an error) +- if (!document.isLoading) { +- this.debounce(`onStoreDocument-${document.name}`, () => { +- this.storeDocumentHooks(document, hookPayload) +- }, true) +- +- } else { +- // Remove document from memory immediately +- this.documents.delete(document.name) +- document.destroy() +- } +- }) +- +- }) +- +- instance.onStatelessCallback(payload => { +- return this.hooks('onStateless', payload) +- .catch(error => { +- if (error?.message) { +- throw error +- } +- }) +- }) +- +- instance.beforeHandleMessage((connection, update) => { +- const hookPayload: beforeHandleMessagePayload = { +- instance: this, +- clientsCount: document.getConnectionsCount(), +- context, +- document, +- socketId, +- connection, +- documentName: document.name, +- requestHeaders: request.headers, +- requestParameters: Hocuspocus.getParameters(request), +- update, +- } +- +- return this.hooks('beforeHandleMessage', hookPayload) +- }) +- +- // If the WebSocket has already disconnected (wow, that was fast) – then +- // immediately call close to cleanup the connection and document in memory. +- if ( +- connection.readyState === WsReadyStates.Closing +- || connection.readyState === WsReadyStates.Closed +- ) { +- instance.close() +- } +- +- return instance +- } +- + storeDocumentHooks(document: Document, hookPayload: onStoreDocumentPayload) { + this.hooks('onStoreDocument', hookPayload) + .catch(error => { +@@ -872,14 +601,6 @@ export class Hocuspocus { + return chain + } + +- /** +- * Get parameters by the given request +- */ +- private static getParameters(request?: Pick): URLSearchParams { +- const query = request?.url?.split('?') || [] +- return new URLSearchParams(query[1] ? query[1] : '') +- } +- + enableDebugging() { + this.debugger.enable() + } +diff --git a/node_modules/@hocuspocus/server/src/MessageReceiver.ts b/node_modules/@hocuspocus/server/src/MessageReceiver.ts +index 3590f92..d090ae1 100644 +--- a/node_modules/@hocuspocus/server/src/MessageReceiver.ts ++++ b/node_modules/@hocuspocus/server/src/MessageReceiver.ts +@@ -1,3 +1,6 @@ ++import * as decoding from 'lib0/decoding' ++import { readVarString } from 'lib0/decoding' ++import { applyAwarenessUpdate } from 'y-protocols/awareness' + import { + messageYjsSyncStep1, + messageYjsSyncStep2, +@@ -6,14 +9,13 @@ import { + readSyncStep2, + readUpdate, + } from 'y-protocols/sync' +-import { applyAwarenessUpdate } from 'y-protocols/awareness' +-import { readVarString } from 'lib0/decoding' +-import { MessageType } from './types.js' ++import * as Y from 'yjs' + import Connection from './Connection.js' +-import { IncomingMessage } from './IncomingMessage.js' +-import { OutgoingMessage } from './OutgoingMessage.js' + import { Debugger } from './Debugger.js' + import Document from './Document.js' ++import { IncomingMessage } from './IncomingMessage.js' ++import { OutgoingMessage } from './OutgoingMessage.js' ++import { MessageType } from './types.js' + + export class MessageReceiver { + +@@ -156,10 +158,35 @@ export class MessageReceiver { + }) + + if (connection?.readOnly) { ++ // We're in read-only mode, so we can't apply the update. ++ // Let's use snapshotContainsUpdate to see if the update actually contains changes. ++ // If not, we can still ack the update ++ const snapshot = Y.snapshot(document) ++ const update = decoding.readVarUint8Array(message.decoder) ++ if (Y.snapshotContainsUpdate(snapshot, update)) { ++ // no new changes in update ++ const ackMessage = new OutgoingMessage(document.name) ++ .writeSyncStatus(true) ++ ++ connection.send(ackMessage.toUint8Array()) ++ } else { ++ // new changes in update that we can't apply, because readOnly ++ const ackMessage = new OutgoingMessage(document.name) ++ .writeSyncStatus(false) ++ ++ connection.send(ackMessage.toUint8Array()) ++ } + break + } + + readSyncStep2(message.decoder, document, connection) ++ ++ if (connection) { ++ // TODO: how should this work if connection is not set? should we use reply? ++ // reply is used by redis, but I'm unsure how that code path works ++ connection.send(new OutgoingMessage(document.name) ++ .writeSyncStatus(true).toUint8Array()) ++ } + break + case messageYjsUpdate: + this.logger.log({ +@@ -169,10 +196,18 @@ export class MessageReceiver { + }) + + if (connection?.readOnly) { ++ connection.send(new OutgoingMessage(document.name) ++ .writeSyncStatus(false).toUint8Array()) + break + } + + readUpdate(message.decoder, document, connection) ++ if (connection) { ++ // TODO: how should this work if connection is not set? should we use reply? ++ // reply is used by redis, but I'm unsure how that code path works ++ connection.send(new OutgoingMessage(document.name) ++ .writeSyncStatus(true).toUint8Array()) ++ } + break + default: + throw new Error(`Received a message with an unknown type: ${type}`) +diff --git a/node_modules/@hocuspocus/server/src/OutgoingMessage.ts b/node_modules/@hocuspocus/server/src/OutgoingMessage.ts +index 17db7cf..650b9a4 100644 +--- a/node_modules/@hocuspocus/server/src/OutgoingMessage.ts ++++ b/node_modules/@hocuspocus/server/src/OutgoingMessage.ts +@@ -6,12 +6,12 @@ import { + writeVarUint, + writeVarUint8Array, + } from 'lib0/encoding' +-import { writeSyncStep1, writeUpdate } from 'y-protocols/sync' + import { Awareness, encodeAwarenessUpdate } from 'y-protocols/awareness' ++import { writeSyncStep1, writeUpdate } from 'y-protocols/sync' + + import { writeAuthenticated, writePermissionDenied } from '@hocuspocus/common' +-import { MessageType } from './types.js' + import Document from './Document.js' ++import { MessageType } from './types.js' + + export class OutgoingMessage { + +@@ -121,6 +121,16 @@ export class OutgoingMessage { + return this + } + ++ // TODO: should this be write* or create* as method name? ++ writeSyncStatus(updateSaved: boolean): OutgoingMessage { ++ this.category = 'SyncStatus' ++ ++ writeVarUint(this.encoder, MessageType.SyncStatus) ++ writeVarUint(this.encoder, updateSaved ? 1 : 0) ++ ++ return this ++ } ++ + toUint8Array(): Uint8Array { + return toUint8Array(this.encoder) + } +diff --git a/node_modules/@hocuspocus/server/src/types.ts b/node_modules/@hocuspocus/server/src/types.ts +index d5fff8e..924ea18 100644 +--- a/node_modules/@hocuspocus/server/src/types.ts ++++ b/node_modules/@hocuspocus/server/src/types.ts +@@ -3,9 +3,9 @@ import { + } from 'http' + import { URLSearchParams } from 'url' + import { Awareness } from 'y-protocols/awareness' ++import Connection from './Connection.js' + import Document from './Document.js' + import { Hocuspocus } from './Hocuspocus.js' +-import Connection from './Connection.js' + + export enum MessageType { + Unknown = -1, +@@ -16,8 +16,8 @@ export enum MessageType { + SyncReply = 4, // same as Sync, but won't trigger another 'SyncStep1' + Stateless = 5, + BroadcastStateless = 6, +- + CLOSE = 7, ++ SyncStatus = 8, // TODO: should this be 8? + } + + export interface AwarenessUpdate { +diff --git a/node_modules/@hocuspocus/server/src/util/getParameters.ts b/node_modules/@hocuspocus/server/src/util/getParameters.ts +new file mode 100644 +index 0000000..7eb556b +--- /dev/null ++++ b/node_modules/@hocuspocus/server/src/util/getParameters.ts +@@ -0,0 +1,10 @@ ++import { IncomingMessage } from 'http' ++import { URLSearchParams } from 'url' ++ ++/** ++ * Get parameters by the given request ++ */ ++export function getParameters(request?: Pick): URLSearchParams { ++ const query = request?.url?.split('?') || [] ++ return new URLSearchParams(query[1] ? query[1] : '') ++} diff --git a/patches/react-router+6.2.2.patch b/patches/react-router+6.2.2.patch deleted file mode 100644 index 184a871c0..000000000 --- a/patches/react-router+6.2.2.patch +++ /dev/null @@ -1,61 +0,0 @@ -diff --git a/node_modules/react-router/index.js b/node_modules/react-router/index.js -index 46d36fc..b893999 100644 ---- a/node_modules/react-router/index.js -+++ b/node_modules/react-router/index.js -@@ -839,7 +839,7 @@ function compilePath(path, caseSensitive, end) { - // Additionally, allow paths starting with `.`, `-`, `~`, and url-encoded entities, - // but do not consume the character in the matched path so they can match against - // nested paths. -- "(?:(?=[.~-]|%[0-9A-F]{2})|\\b|\\/|$)"; -+ "(?:(?=[@.~-]|%[0-9A-F]{2})|\\b|\\/|$)"; - } - - let matcher = new RegExp(regexpSource, caseSensitive ? undefined : "i"); -diff --git a/node_modules/react-router/react-router.development.js b/node_modules/react-router/react-router.development.js -index 4697b64..43daa29 100644 ---- a/node_modules/react-router/react-router.development.js -+++ b/node_modules/react-router/react-router.development.js -@@ -797,7 +797,7 @@ function compilePath(path, caseSensitive = false, end = true) { - // Additionally, allow paths starting with `.`, `-`, `~`, and url-encoded entities, - // but do not consume the character in the matched path so they can match against - // nested paths. -- "(?:(?=[.~-]|%[0-9A-F]{2})|\\b|\\/|$)"; -+ "(?:(?=[@.~-]|%[0-9A-F]{2})|\\b|\\/|$)"; - } - - let matcher = new RegExp(regexpSource, caseSensitive ? undefined : "i"); -diff --git a/node_modules/react-router/react-router.production.min.js b/node_modules/react-router/react-router.production.min.js -index e4bd5d6..a3621c7 100644 ---- a/node_modules/react-router/react-router.production.min.js -+++ b/node_modules/react-router/react-router.production.min.js -@@ -8,5 +8,5 @@ - * - * @license MIT - */ --import{createContext as e,useRef as t,useState as n,useLayoutEffect as a,createElement as r,useContext as l,useEffect as i,useMemo as s,useCallback as o,Children as h,isValidElement as c,Fragment as u}from"react";import{createMemoryHistory as p,Action as m,parsePath as f}from"history";export{Action as NavigationType,createPath,parsePath}from"history";function g(e,t){if(!e)throw new Error(t)}const d=e(null),v=e(null),y=e({outlet:null,matches:[]});function x({basename:e,children:l,initialEntries:i,initialIndex:s}){let o=t();null==o.current&&(o.current=p({initialEntries:i,initialIndex:s}));let h=o.current,[c,u]=n({action:h.action,location:h.location});return a((()=>h.listen(u)),[h]),r(W,{basename:e,children:l,location:c.location,navigationType:c.action,navigator:h})}function S({to:e,replace:t,state:n}){E()||g(!1);let a=j();return i((()=>{a(e,{replace:t,state:n})})),null}function $(e){return I(e.context)}function P(e){g(!1)}function W({basename:e="/",children:t=null,location:n,navigationType:a=m.Pop,navigator:l,static:i=!1}){E()&&g(!1);let o=Y(e),h=s((()=>({basename:o,navigator:l,static:i})),[o,l,i]);"string"==typeof n&&(n=f(n));let{pathname:c="/",search:u="",hash:p="",state:y=null,key:x="default"}=n,S=s((()=>{let e=V(c,o);return null==e?null:{pathname:e,search:u,hash:p,state:y,key:x}}),[o,c,u,p,y,x]);return null==S?null:r(d.Provider,{value:h},r(v.Provider,{children:t,value:{location:S,navigationType:a}}))}function b({children:e,location:t}){return J(M(e),t)}function B(e){E()||g(!1);let{basename:t,navigator:n}=l(d),{hash:a,pathname:r,search:i}=F(e),s=r;if("/"!==t){let n=function(e){return""===e||""===e.pathname?"/":"string"==typeof e?f(e).pathname:e.pathname}(e),a=null!=n&&n.endsWith("/");s="/"===r?t+(a?"/":""):X([t,r])}return n.createHref({pathname:s,search:i,hash:a})}function E(){return null!=l(v)}function N(){return E()||g(!1),l(v).location}function w(){return l(v).navigationType}function O(e){E()||g(!1);let{pathname:t}=N();return s((()=>G(e,t)),[t,e])}function j(){E()||g(!1);let{basename:e,navigator:n}=l(d),{matches:a}=l(y),{pathname:r}=N(),s=JSON.stringify(a.map((e=>e.pathnameBase))),h=t(!1);return i((()=>{h.current=!0})),o(((t,a={})=>{if(!h.current)return;if("number"==typeof t)return void n.go(t);let l=Q(t,JSON.parse(s),r);"/"!==e&&(l.pathname=X([e,l.pathname])),(a.replace?n.replace:n.push)(l,a.state)}),[e,n,s,r])}const A=e(null);function C(){return l(A)}function I(e){let t=l(y).outlet;return t?r(A.Provider,{value:e},t):t}function T(){let{matches:e}=l(y),t=e[e.length-1];return t?t.params:{}}function F(e){let{matches:t}=l(y),{pathname:n}=N(),a=JSON.stringify(t.map((e=>e.pathnameBase)));return s((()=>Q(e,JSON.parse(a),n)),[e,a,n])}function J(e,t){E()||g(!1);let n,{matches:a}=l(y),r=a[a.length-1],i=r?r.params:{},s=(r&&r.pathname,r?r.pathnameBase:"/"),o=(r&&r.route,N());if(t){let e="string"==typeof t?f(t):t;"/"===s||e.pathname?.startsWith(s)||g(!1),n=e}else n=o;let h=n.pathname||"/",c=U(e,{pathname:"/"===s?h:h.slice(s.length)||"/"});return D(c&&c.map((e=>Object.assign({},e,{params:Object.assign({},i,e.params),pathname:X([s,e.pathname]),pathnameBase:"/"===e.pathnameBase?s:X([s,e.pathnameBase])}))),a)}function M(e){let t=[];return h.forEach(e,(e=>{if(!c(e))return;if(e.type===u)return void t.push.apply(t,M(e.props.children));e.type!==P&&g(!1);let n={caseSensitive:e.props.caseSensitive,element:e.props.element,index:e.props.index,path:e.props.path};e.props.children&&(n.children=M(e.props.children)),t.push(n)})),t}function R(e,t={}){return e.replace(/:(\w+)/g,((e,n)=>(null==t[n]&&g(!1),t[n]))).replace(/\/*\*$/,(e=>null==t["*"]?"":t["*"].replace(/^\/*/,"/")))}function U(e,t,n="/"){let a=V(("string"==typeof t?f(t):t).pathname||"/",n);if(null==a)return null;let r=L(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){return e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]))?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(r);let l=null;for(let i=0;null==l&&i{let l={relativePath:e.path||"",caseSensitive:!0===e.caseSensitive,childrenIndex:r,route:e};l.relativePath.startsWith("/")&&(l.relativePath.startsWith(a)||g(!1),l.relativePath=l.relativePath.slice(a.length));let i=X([a,l.relativePath]),s=n.concat(l);e.children&&e.children.length>0&&(!0===e.index&&g(!1),L(e.children,t,s,i)),(null!=e.path||e.index)&&t.push({path:i,score:H(i,e.index),routesMeta:s})})),t}const _=/^:\w+$/,k=e=>"*"===e;function H(e,t){let n=e.split("/"),a=n.length;return n.some(k)&&(a+=-2),t&&(a+=2),n.filter((e=>!k(e))).reduce(((e,t)=>e+(_.test(t)?3:""===t?1:10)),a)}function q(e,t){let{routesMeta:n}=e,a={},r="/",l=[];for(let i=0;ir(y.Provider,{children:void 0!==a.route.element?a.route.element:n,value:{outlet:n,matches:t.concat(e.slice(0,l+1))}})),null)}function G(e,t){"string"==typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[n,a]=function(e,t=!1,n=!0){let a=[],r="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/:(\w+)/g,((e,t)=>(a.push(t),"([^\\/]+)")));e.endsWith("*")?(a.push("*"),r+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):r+=n?"\\/*$":"(?:(?=[.~-]|%[0-9A-F]{2})|\\b|\\/|$)";return[new RegExp(r,t?void 0:"i"),a]}(e.path,e.caseSensitive,e.end),r=t.match(n);if(!r)return null;let l=r[0],i=l.replace(/(.)\/+$/,"$1"),s=r.slice(1);return{params:a.reduce(((e,t,n)=>{if("*"===t){let e=s[n]||"";i=l.slice(0,l.length-e.length).replace(/(.)\/+$/,"$1")}return e[t]=function(e,t){try{return decodeURIComponent(e)}catch(n){return e}}(s[n]||""),e}),{}),pathname:l,pathnameBase:i,pattern:e}}function K(e,t="/"){let{pathname:n,search:a="",hash:r=""}="string"==typeof e?f(e):e,l=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:l,search:Z(a),hash:ee(r)}}function Q(e,t,n){let a,r="string"==typeof e?f(e):e,l=""===e||""===r.pathname?"/":r.pathname;if(null==l)a=n;else{let e=t.length-1;if(l.startsWith("..")){let t=l.split("/");for(;".."===t[0];)t.shift(),e-=1;r.pathname=t.join("/")}a=e>=0?t[e]:"/"}let i=K(r,a);return l&&"/"!==l&&l.endsWith("/")&&!i.pathname.endsWith("/")&&(i.pathname+="/"),i}function V(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=e.charAt(t.length);return n&&"/"!==n?null:e.slice(t.length)||"/"}const X=e=>e.join("/").replace(/\/\/+/g,"/"),Y=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Z=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",ee=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";export{x as MemoryRouter,S as Navigate,$ as Outlet,P as Route,W as Router,b as Routes,v as UNSAFE_LocationContext,d as UNSAFE_NavigationContext,y as UNSAFE_RouteContext,M as createRoutesFromChildren,R as generatePath,G as matchPath,U as matchRoutes,z as renderMatches,K as resolvePath,B as useHref,E as useInRouterContext,N as useLocation,O as useMatch,j as useNavigate,w as useNavigationType,I as useOutlet,C as useOutletContext,T as useParams,F as useResolvedPath,J as useRoutes}; -+import{createContext as e,useRef as t,useState as n,useLayoutEffect as a,createElement as r,useContext as l,useEffect as i,useMemo as s,useCallback as o,Children as h,isValidElement as c,Fragment as u}from"react";import{createMemoryHistory as p,Action as m,parsePath as f}from"history";export{Action as NavigationType,createPath,parsePath}from"history";function g(e,t){if(!e)throw new Error(t)}const d=e(null),v=e(null),y=e({outlet:null,matches:[]});function x({basename:e,children:l,initialEntries:i,initialIndex:s}){let o=t();null==o.current&&(o.current=p({initialEntries:i,initialIndex:s}));let h=o.current,[c,u]=n({action:h.action,location:h.location});return a((()=>h.listen(u)),[h]),r(W,{basename:e,children:l,location:c.location,navigationType:c.action,navigator:h})}function S({to:e,replace:t,state:n}){E()||g(!1);let a=j();return i((()=>{a(e,{replace:t,state:n})})),null}function $(e){return I(e.context)}function P(e){g(!1)}function W({basename:e="/",children:t=null,location:n,navigationType:a=m.Pop,navigator:l,static:i=!1}){E()&&g(!1);let o=Y(e),h=s((()=>({basename:o,navigator:l,static:i})),[o,l,i]);"string"==typeof n&&(n=f(n));let{pathname:c="/",search:u="",hash:p="",state:y=null,key:x="default"}=n,S=s((()=>{let e=V(c,o);return null==e?null:{pathname:e,search:u,hash:p,state:y,key:x}}),[o,c,u,p,y,x]);return null==S?null:r(d.Provider,{value:h},r(v.Provider,{children:t,value:{location:S,navigationType:a}}))}function b({children:e,location:t}){return J(M(e),t)}function B(e){E()||g(!1);let{basename:t,navigator:n}=l(d),{hash:a,pathname:r,search:i}=F(e),s=r;if("/"!==t){let n=function(e){return""===e||""===e.pathname?"/":"string"==typeof e?f(e).pathname:e.pathname}(e),a=null!=n&&n.endsWith("/");s="/"===r?t+(a?"/":""):X([t,r])}return n.createHref({pathname:s,search:i,hash:a})}function E(){return null!=l(v)}function N(){return E()||g(!1),l(v).location}function w(){return l(v).navigationType}function O(e){E()||g(!1);let{pathname:t}=N();return s((()=>G(e,t)),[t,e])}function j(){E()||g(!1);let{basename:e,navigator:n}=l(d),{matches:a}=l(y),{pathname:r}=N(),s=JSON.stringify(a.map((e=>e.pathnameBase))),h=t(!1);return i((()=>{h.current=!0})),o(((t,a={})=>{if(!h.current)return;if("number"==typeof t)return void n.go(t);let l=Q(t,JSON.parse(s),r);"/"!==e&&(l.pathname=X([e,l.pathname])),(a.replace?n.replace:n.push)(l,a.state)}),[e,n,s,r])}const A=e(null);function C(){return l(A)}function I(e){let t=l(y).outlet;return t?r(A.Provider,{value:e},t):t}function T(){let{matches:e}=l(y),t=e[e.length-1];return t?t.params:{}}function F(e){let{matches:t}=l(y),{pathname:n}=N(),a=JSON.stringify(t.map((e=>e.pathnameBase)));return s((()=>Q(e,JSON.parse(a),n)),[e,a,n])}function J(e,t){E()||g(!1);let n,{matches:a}=l(y),r=a[a.length-1],i=r?r.params:{},s=(r&&r.pathname,r?r.pathnameBase:"/"),o=(r&&r.route,N());if(t){let e="string"==typeof t?f(t):t;"/"===s||e.pathname?.startsWith(s)||g(!1),n=e}else n=o;let h=n.pathname||"/",c=U(e,{pathname:"/"===s?h:h.slice(s.length)||"/"});return D(c&&c.map((e=>Object.assign({},e,{params:Object.assign({},i,e.params),pathname:X([s,e.pathname]),pathnameBase:"/"===e.pathnameBase?s:X([s,e.pathnameBase])}))),a)}function M(e){let t=[];return h.forEach(e,(e=>{if(!c(e))return;if(e.type===u)return void t.push.apply(t,M(e.props.children));e.type!==P&&g(!1);let n={caseSensitive:e.props.caseSensitive,element:e.props.element,index:e.props.index,path:e.props.path};e.props.children&&(n.children=M(e.props.children)),t.push(n)})),t}function R(e,t={}){return e.replace(/:(\w+)/g,((e,n)=>(null==t[n]&&g(!1),t[n]))).replace(/\/*\*$/,(e=>null==t["*"]?"":t["*"].replace(/^\/*/,"/")))}function U(e,t,n="/"){let a=V(("string"==typeof t?f(t):t).pathname||"/",n);if(null==a)return null;let r=L(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){return e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]))?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(r);let l=null;for(let i=0;null==l&&i{let l={relativePath:e.path||"",caseSensitive:!0===e.caseSensitive,childrenIndex:r,route:e};l.relativePath.startsWith("/")&&(l.relativePath.startsWith(a)||g(!1),l.relativePath=l.relativePath.slice(a.length));let i=X([a,l.relativePath]),s=n.concat(l);e.children&&e.children.length>0&&(!0===e.index&&g(!1),L(e.children,t,s,i)),(null!=e.path||e.index)&&t.push({path:i,score:H(i,e.index),routesMeta:s})})),t}const _=/^:\w+$/,k=e=>"*"===e;function H(e,t){let n=e.split("/"),a=n.length;return n.some(k)&&(a+=-2),t&&(a+=2),n.filter((e=>!k(e))).reduce(((e,t)=>e+(_.test(t)?3:""===t?1:10)),a)}function q(e,t){let{routesMeta:n}=e,a={},r="/",l=[];for(let i=0;ir(y.Provider,{children:void 0!==a.route.element?a.route.element:n,value:{outlet:n,matches:t.concat(e.slice(0,l+1))}})),null)}function G(e,t){"string"==typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[n,a]=function(e,t=!1,n=!0){let a=[],r="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/:(\w+)/g,((e,t)=>(a.push(t),"([^\\/]+)")));e.endsWith("*")?(a.push("*"),r+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):r+=n?"\\/*$":"(?:(?=[@.~-]|%[0-9A-F]{2})|\\b|\\/|$)";return[new RegExp(r,t?void 0:"i"),a]}(e.path,e.caseSensitive,e.end),r=t.match(n);if(!r)return null;let l=r[0],i=l.replace(/(.)\/+$/,"$1"),s=r.slice(1);return{params:a.reduce(((e,t,n)=>{if("*"===t){let e=s[n]||"";i=l.slice(0,l.length-e.length).replace(/(.)\/+$/,"$1")}return e[t]=function(e,t){try{return decodeURIComponent(e)}catch(n){return e}}(s[n]||""),e}),{}),pathname:l,pathnameBase:i,pattern:e}}function K(e,t="/"){let{pathname:n,search:a="",hash:r=""}="string"==typeof e?f(e):e,l=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:l,search:Z(a),hash:ee(r)}}function Q(e,t,n){let a,r="string"==typeof e?f(e):e,l=""===e||""===r.pathname?"/":r.pathname;if(null==l)a=n;else{let e=t.length-1;if(l.startsWith("..")){let t=l.split("/");for(;".."===t[0];)t.shift(),e-=1;r.pathname=t.join("/")}a=e>=0?t[e]:"/"}let i=K(r,a);return l&&"/"!==l&&l.endsWith("/")&&!i.pathname.endsWith("/")&&(i.pathname+="/"),i}function V(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=e.charAt(t.length);return n&&"/"!==n?null:e.slice(t.length)||"/"}const X=e=>e.join("/").replace(/\/\/+/g,"/"),Y=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),Z=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",ee=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";export{x as MemoryRouter,S as Navigate,$ as Outlet,P as Route,W as Router,b as Routes,v as UNSAFE_LocationContext,d as UNSAFE_NavigationContext,y as UNSAFE_RouteContext,M as createRoutesFromChildren,R as generatePath,G as matchPath,U as matchRoutes,z as renderMatches,K as resolvePath,B as useHref,E as useInRouterContext,N as useLocation,O as useMatch,j as useNavigate,w as useNavigationType,I as useOutlet,C as useOutletContext,T as useParams,F as useResolvedPath,J as useRoutes}; - //# sourceMappingURL=react-router.production.min.js.map -diff --git a/node_modules/react-router/umd/react-router.development.js b/node_modules/react-router/umd/react-router.development.js -index b757e36..da96f69 100644 ---- a/node_modules/react-router/umd/react-router.development.js -+++ b/node_modules/react-router/umd/react-router.development.js -@@ -841,7 +841,7 @@ - // Additionally, allow paths starting with `.`, `-`, `~`, and url-encoded entities, - // but do not consume the character in the matched path so they can match against - // nested paths. -- "(?:(?=[.~-]|%[0-9A-F]{2})|\\b|\\/|$)"; -+ "(?:(?=[@.~-]|%[0-9A-F]{2})|\\b|\\/|$)"; - } - - let matcher = new RegExp(regexpSource, caseSensitive ? undefined : "i"); -diff --git a/node_modules/react-router/umd/react-router.production.min.js b/node_modules/react-router/umd/react-router.production.min.js -index bbc97ca..7fd31d9 100644 ---- a/node_modules/react-router/umd/react-router.production.min.js -+++ b/node_modules/react-router/umd/react-router.production.min.js -@@ -8,5 +8,5 @@ - * - * @license MIT - */ --!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("history")):"function"==typeof define&&define.amd?define(["exports","react","history"],t):t((e=e||self).ReactRouter={},e.React,e.HistoryLibrary)}(this,(function(e,t,n){"use strict";function a(e,t){if(!e)throw new Error(t)}const r=t.createContext(null),i=t.createContext(null),l=t.createContext({outlet:null,matches:[]});function o(e){a(!1)}function s(e){let{basename:l="/",children:o=null,location:s,navigationType:c=n.Action.Pop,navigator:h,static:p=!1}=e;u()&&a(!1);let f=N(l),m=t.useMemo((()=>({basename:f,navigator:h,static:p})),[f,h,p]);"string"==typeof s&&(s=n.parsePath(s));let{pathname:d="/",search:g="",hash:v="",state:y=null,key:x="default"}=s,P=t.useMemo((()=>{let e=O(d,f);return null==e?null:{pathname:e,search:g,hash:v,state:y,key:x}}),[f,d,g,v,y,x]);return null==P?null:t.createElement(r.Provider,{value:m},t.createElement(i.Provider,{children:o,value:{location:P,navigationType:c}}))}function u(){return null!=t.useContext(i)}function c(){return u()||a(!1),t.useContext(i).location}function h(){u()||a(!1);let{basename:e,navigator:n}=t.useContext(r),{matches:i}=t.useContext(l),{pathname:o}=c(),s=JSON.stringify(i.map((e=>e.pathnameBase))),h=t.useRef(!1);return t.useEffect((()=>{h.current=!0})),t.useCallback((function(t,a){if(void 0===a&&(a={}),!h.current)return;if("number"==typeof t)return void n.go(t);let r=$(t,JSON.parse(s),o);"/"!==e&&(r.pathname=M([e,r.pathname])),(a.replace?n.replace:n.push)(r,a.state)}),[e,n,s,o])}const p=t.createContext(null);function f(e){let n=t.useContext(l).outlet;return n?t.createElement(p.Provider,{value:e},n):n}function m(e){let{matches:n}=t.useContext(l),{pathname:a}=c(),r=JSON.stringify(n.map((e=>e.pathnameBase)));return t.useMemo((()=>$(e,JSON.parse(r),a)),[e,r,a])}function d(e,r){u()||a(!1);let i,{matches:o}=t.useContext(l),s=o[o.length-1],h=s?s.params:{},p=(s&&s.pathname,s?s.pathnameBase:"/"),f=(s&&s.route,c());if(r){var m;let e="string"==typeof r?n.parsePath(r):r;"/"===p||(null==(m=e.pathname)?void 0:m.startsWith(p))||a(!1),i=e}else i=f;let d=i.pathname||"/",g=v(e,{pathname:"/"===p?d:d.slice(p.length)||"/"});return E(g&&g.map((e=>Object.assign({},e,{params:Object.assign({},h,e.params),pathname:M([p,e.pathname]),pathnameBase:"/"===e.pathnameBase?p:M([p,e.pathnameBase])}))),o)}function g(e){let n=[];return t.Children.forEach(e,(e=>{if(!t.isValidElement(e))return;if(e.type===t.Fragment)return void n.push.apply(n,g(e.props.children));e.type!==o&&a(!1);let r={caseSensitive:e.props.caseSensitive,element:e.props.element,index:e.props.index,path:e.props.path};e.props.children&&(r.children=g(e.props.children)),n.push(r)})),n}function v(e,t,a){void 0===a&&(a="/");let r=O(("string"==typeof t?n.parsePath(t):t).pathname||"/",a);if(null==r)return null;let i=y(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){return e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]))?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(i);let l=null;for(let e=0;null==l&&e{let l={relativePath:e.path||"",caseSensitive:!0===e.caseSensitive,childrenIndex:i,route:e};l.relativePath.startsWith("/")&&(l.relativePath.startsWith(r)||a(!1),l.relativePath=l.relativePath.slice(r.length));let o=M([r,l.relativePath]),s=n.concat(l);e.children&&e.children.length>0&&(!0===e.index&&a(!1),y(e.children,t,s,o)),(null!=e.path||e.index)&&t.push({path:o,score:C(o,e.index),routesMeta:s})})),t}const x=/^:\w+$/,P=e=>"*"===e;function C(e,t){let n=e.split("/"),a=n.length;return n.some(P)&&(a+=-2),t&&(a+=2),n.filter((e=>!P(e))).reduce(((e,t)=>e+(x.test(t)?3:""===t?1:10)),a)}function b(e,t){let{routesMeta:n}=e,a={},r="/",i=[];for(let e=0;et.createElement(l.Provider,{children:void 0!==r.route.element?r.route.element:a,value:{outlet:a,matches:n.concat(e.slice(0,i+1))}})),null)}function R(e,t){"string"==typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[n,a]=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=!0);let a=[],r="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/:(\w+)/g,((e,t)=>(a.push(t),"([^\\/]+)")));e.endsWith("*")?(a.push("*"),r+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):r+=n?"\\/*$":"(?:(?=[.~-]|%[0-9A-F]{2})|\\b|\\/|$)";return[new RegExp(r,t?void 0:"i"),a]}(e.path,e.caseSensitive,e.end),r=t.match(n);if(!r)return null;let i=r[0],l=i.replace(/(.)\/+$/,"$1"),o=r.slice(1);return{params:a.reduce(((e,t,n)=>{if("*"===t){let e=o[n]||"";l=i.slice(0,i.length-e.length).replace(/(.)\/+$/,"$1")}return e[t]=function(e,t){try{return decodeURIComponent(e)}catch(t){return e}}(o[n]||""),e}),{}),pathname:i,pathnameBase:l,pattern:e}}function S(e,t){void 0===t&&(t="/");let{pathname:a,search:r="",hash:i=""}="string"==typeof e?n.parsePath(e):e,l=a?a.startsWith("/")?a:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(a,t):t;return{pathname:l,search:W(r),hash:j(i)}}function $(e,t,a){let r,i="string"==typeof e?n.parsePath(e):e,l=""===e||""===i.pathname?"/":i.pathname;if(null==l)r=a;else{let e=t.length-1;if(l.startsWith("..")){let t=l.split("/");for(;".."===t[0];)t.shift(),e-=1;i.pathname=t.join("/")}r=e>=0?t[e]:"/"}let o=S(i,r);return l&&"/"!==l&&l.endsWith("/")&&!o.pathname.endsWith("/")&&(o.pathname+="/"),o}function O(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=e.charAt(t.length);return n&&"/"!==n?null:e.slice(t.length)||"/"}const M=e=>e.join("/").replace(/\/\/+/g,"/"),N=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),W=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",j=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Object.defineProperty(e,"NavigationType",{enumerable:!0,get:function(){return n.Action}}),Object.defineProperty(e,"createPath",{enumerable:!0,get:function(){return n.createPath}}),Object.defineProperty(e,"parsePath",{enumerable:!0,get:function(){return n.parsePath}}),e.MemoryRouter=function(e){let{basename:a,children:r,initialEntries:i,initialIndex:l}=e,o=t.useRef();null==o.current&&(o.current=n.createMemoryHistory({initialEntries:i,initialIndex:l}));let u=o.current,[c,h]=t.useState({action:u.action,location:u.location});return t.useLayoutEffect((()=>u.listen(h)),[u]),t.createElement(s,{basename:a,children:r,location:c.location,navigationType:c.action,navigator:u})},e.Navigate=function(e){let{to:n,replace:r,state:i}=e;u()||a(!1);let l=h();return t.useEffect((()=>{l(n,{replace:r,state:i})})),null},e.Outlet=function(e){return f(e.context)},e.Route=o,e.Router=s,e.Routes=function(e){let{children:t,location:n}=e;return d(g(t),n)},e.UNSAFE_LocationContext=i,e.UNSAFE_NavigationContext=r,e.UNSAFE_RouteContext=l,e.createRoutesFromChildren=g,e.generatePath=function(e,t){return void 0===t&&(t={}),e.replace(/:(\w+)/g,((e,n)=>(null==t[n]&&a(!1),t[n]))).replace(/\/*\*$/,(e=>null==t["*"]?"":t["*"].replace(/^\/*/,"/")))},e.matchPath=R,e.matchRoutes=v,e.renderMatches=function(e){return E(e)},e.resolvePath=S,e.useHref=function(e){u()||a(!1);let{basename:i,navigator:l}=t.useContext(r),{hash:o,pathname:s,search:c}=m(e),h=s;if("/"!==i){let t=function(e){return""===e||""===e.pathname?"/":"string"==typeof e?n.parsePath(e).pathname:e.pathname}(e),a=null!=t&&t.endsWith("/");h="/"===s?i+(a?"/":""):M([i,s])}return l.createHref({pathname:h,search:c,hash:o})},e.useInRouterContext=u,e.useLocation=c,e.useMatch=function(e){u()||a(!1);let{pathname:n}=c();return t.useMemo((()=>R(e,n)),[n,e])},e.useNavigate=h,e.useNavigationType=function(){return t.useContext(i).navigationType},e.useOutlet=f,e.useOutletContext=function(){return t.useContext(p)},e.useParams=function(){let{matches:e}=t.useContext(l),n=e[e.length-1];return n?n.params:{}},e.useResolvedPath=m,e.useRoutes=d,Object.defineProperty(e,"__esModule",{value:!0})})); -+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("history")):"function"==typeof define&&define.amd?define(["exports","react","history"],t):t((e=e||self).ReactRouter={},e.React,e.HistoryLibrary)}(this,(function(e,t,n){"use strict";function a(e,t){if(!e)throw new Error(t)}const r=t.createContext(null),i=t.createContext(null),l=t.createContext({outlet:null,matches:[]});function o(e){a(!1)}function s(e){let{basename:l="/",children:o=null,location:s,navigationType:c=n.Action.Pop,navigator:h,static:p=!1}=e;u()&&a(!1);let f=N(l),m=t.useMemo((()=>({basename:f,navigator:h,static:p})),[f,h,p]);"string"==typeof s&&(s=n.parsePath(s));let{pathname:d="/",search:g="",hash:v="",state:y=null,key:x="default"}=s,P=t.useMemo((()=>{let e=O(d,f);return null==e?null:{pathname:e,search:g,hash:v,state:y,key:x}}),[f,d,g,v,y,x]);return null==P?null:t.createElement(r.Provider,{value:m},t.createElement(i.Provider,{children:o,value:{location:P,navigationType:c}}))}function u(){return null!=t.useContext(i)}function c(){return u()||a(!1),t.useContext(i).location}function h(){u()||a(!1);let{basename:e,navigator:n}=t.useContext(r),{matches:i}=t.useContext(l),{pathname:o}=c(),s=JSON.stringify(i.map((e=>e.pathnameBase))),h=t.useRef(!1);return t.useEffect((()=>{h.current=!0})),t.useCallback((function(t,a){if(void 0===a&&(a={}),!h.current)return;if("number"==typeof t)return void n.go(t);let r=$(t,JSON.parse(s),o);"/"!==e&&(r.pathname=M([e,r.pathname])),(a.replace?n.replace:n.push)(r,a.state)}),[e,n,s,o])}const p=t.createContext(null);function f(e){let n=t.useContext(l).outlet;return n?t.createElement(p.Provider,{value:e},n):n}function m(e){let{matches:n}=t.useContext(l),{pathname:a}=c(),r=JSON.stringify(n.map((e=>e.pathnameBase)));return t.useMemo((()=>$(e,JSON.parse(r),a)),[e,r,a])}function d(e,r){u()||a(!1);let i,{matches:o}=t.useContext(l),s=o[o.length-1],h=s?s.params:{},p=(s&&s.pathname,s?s.pathnameBase:"/"),f=(s&&s.route,c());if(r){var m;let e="string"==typeof r?n.parsePath(r):r;"/"===p||(null==(m=e.pathname)?void 0:m.startsWith(p))||a(!1),i=e}else i=f;let d=i.pathname||"/",g=v(e,{pathname:"/"===p?d:d.slice(p.length)||"/"});return E(g&&g.map((e=>Object.assign({},e,{params:Object.assign({},h,e.params),pathname:M([p,e.pathname]),pathnameBase:"/"===e.pathnameBase?p:M([p,e.pathnameBase])}))),o)}function g(e){let n=[];return t.Children.forEach(e,(e=>{if(!t.isValidElement(e))return;if(e.type===t.Fragment)return void n.push.apply(n,g(e.props.children));e.type!==o&&a(!1);let r={caseSensitive:e.props.caseSensitive,element:e.props.element,index:e.props.index,path:e.props.path};e.props.children&&(r.children=g(e.props.children)),n.push(r)})),n}function v(e,t,a){void 0===a&&(a="/");let r=O(("string"==typeof t?n.parsePath(t):t).pathname||"/",a);if(null==r)return null;let i=y(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){return e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]))?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(i);let l=null;for(let e=0;null==l&&e{let l={relativePath:e.path||"",caseSensitive:!0===e.caseSensitive,childrenIndex:i,route:e};l.relativePath.startsWith("/")&&(l.relativePath.startsWith(r)||a(!1),l.relativePath=l.relativePath.slice(r.length));let o=M([r,l.relativePath]),s=n.concat(l);e.children&&e.children.length>0&&(!0===e.index&&a(!1),y(e.children,t,s,o)),(null!=e.path||e.index)&&t.push({path:o,score:C(o,e.index),routesMeta:s})})),t}const x=/^:\w+$/,P=e=>"*"===e;function C(e,t){let n=e.split("/"),a=n.length;return n.some(P)&&(a+=-2),t&&(a+=2),n.filter((e=>!P(e))).reduce(((e,t)=>e+(x.test(t)?3:""===t?1:10)),a)}function b(e,t){let{routesMeta:n}=e,a={},r="/",i=[];for(let e=0;et.createElement(l.Provider,{children:void 0!==r.route.element?r.route.element:a,value:{outlet:a,matches:n.concat(e.slice(0,i+1))}})),null)}function R(e,t){"string"==typeof e&&(e={path:e,caseSensitive:!1,end:!0});let[n,a]=function(e,t,n){void 0===t&&(t=!1);void 0===n&&(n=!0);let a=[],r="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/:(\w+)/g,((e,t)=>(a.push(t),"([^\\/]+)")));e.endsWith("*")?(a.push("*"),r+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):r+=n?"\\/*$":"(?:(?=[@.~-]|%[0-9A-F]{2})|\\b|\\/|$)";return[new RegExp(r,t?void 0:"i"),a]}(e.path,e.caseSensitive,e.end),r=t.match(n);if(!r)return null;let i=r[0],l=i.replace(/(.)\/+$/,"$1"),o=r.slice(1);return{params:a.reduce(((e,t,n)=>{if("*"===t){let e=o[n]||"";l=i.slice(0,i.length-e.length).replace(/(.)\/+$/,"$1")}return e[t]=function(e,t){try{return decodeURIComponent(e)}catch(t){return e}}(o[n]||""),e}),{}),pathname:i,pathnameBase:l,pattern:e}}function S(e,t){void 0===t&&(t="/");let{pathname:a,search:r="",hash:i=""}="string"==typeof e?n.parsePath(e):e,l=a?a.startsWith("/")?a:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(a,t):t;return{pathname:l,search:W(r),hash:j(i)}}function $(e,t,a){let r,i="string"==typeof e?n.parsePath(e):e,l=""===e||""===i.pathname?"/":i.pathname;if(null==l)r=a;else{let e=t.length-1;if(l.startsWith("..")){let t=l.split("/");for(;".."===t[0];)t.shift(),e-=1;i.pathname=t.join("/")}r=e>=0?t[e]:"/"}let o=S(i,r);return l&&"/"!==l&&l.endsWith("/")&&!o.pathname.endsWith("/")&&(o.pathname+="/"),o}function O(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=e.charAt(t.length);return n&&"/"!==n?null:e.slice(t.length)||"/"}const M=e=>e.join("/").replace(/\/\/+/g,"/"),N=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),W=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",j=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";Object.defineProperty(e,"NavigationType",{enumerable:!0,get:function(){return n.Action}}),Object.defineProperty(e,"createPath",{enumerable:!0,get:function(){return n.createPath}}),Object.defineProperty(e,"parsePath",{enumerable:!0,get:function(){return n.parsePath}}),e.MemoryRouter=function(e){let{basename:a,children:r,initialEntries:i,initialIndex:l}=e,o=t.useRef();null==o.current&&(o.current=n.createMemoryHistory({initialEntries:i,initialIndex:l}));let u=o.current,[c,h]=t.useState({action:u.action,location:u.location});return t.useLayoutEffect((()=>u.listen(h)),[u]),t.createElement(s,{basename:a,children:r,location:c.location,navigationType:c.action,navigator:u})},e.Navigate=function(e){let{to:n,replace:r,state:i}=e;u()||a(!1);let l=h();return t.useEffect((()=>{l(n,{replace:r,state:i})})),null},e.Outlet=function(e){return f(e.context)},e.Route=o,e.Router=s,e.Routes=function(e){let{children:t,location:n}=e;return d(g(t),n)},e.UNSAFE_LocationContext=i,e.UNSAFE_NavigationContext=r,e.UNSAFE_RouteContext=l,e.createRoutesFromChildren=g,e.generatePath=function(e,t){return void 0===t&&(t={}),e.replace(/:(\w+)/g,((e,n)=>(null==t[n]&&a(!1),t[n]))).replace(/\/*\*$/,(e=>null==t["*"]?"":t["*"].replace(/^\/*/,"/")))},e.matchPath=R,e.matchRoutes=v,e.renderMatches=function(e){return E(e)},e.resolvePath=S,e.useHref=function(e){u()||a(!1);let{basename:i,navigator:l}=t.useContext(r),{hash:o,pathname:s,search:c}=m(e),h=s;if("/"!==i){let t=function(e){return""===e||""===e.pathname?"/":"string"==typeof e?n.parsePath(e).pathname:e.pathname}(e),a=null!=t&&t.endsWith("/");h="/"===s?i+(a?"/":""):M([i,s])}return l.createHref({pathname:h,search:c,hash:o})},e.useInRouterContext=u,e.useLocation=c,e.useMatch=function(e){u()||a(!1);let{pathname:n}=c();return t.useMemo((()=>R(e,n)),[n,e])},e.useNavigate=h,e.useNavigationType=function(){return t.useContext(i).navigationType},e.useOutlet=f,e.useOutletContext=function(){return t.useContext(p)},e.useParams=function(){let{matches:e}=t.useContext(l),n=e[e.length-1];return n?n.params:{}},e.useResolvedPath=m,e.useRoutes=d,Object.defineProperty(e,"__esModule",{value:!0})})); - //# sourceMappingURL=react-router.production.min.js.map diff --git a/patches/readable-stream+3.6.0.patch b/patches/readable-stream+3.6.0.patch.bak similarity index 100% rename from patches/readable-stream+3.6.0.patch rename to patches/readable-stream+3.6.0.patch.bak diff --git a/patches/y-prosemirror+1.0.20.patch b/patches/y-prosemirror+1.0.20.patch new file mode 100644 index 000000000..3031e4bdb --- /dev/null +++ b/patches/y-prosemirror+1.0.20.patch @@ -0,0 +1,71 @@ +diff --git a/node_modules/y-prosemirror/dist/y-prosemirror.cjs b/node_modules/y-prosemirror/dist/y-prosemirror.cjs +index 7459f68..55fa980 100644 +--- a/node_modules/y-prosemirror/dist/y-prosemirror.cjs ++++ b/node_modules/y-prosemirror/dist/y-prosemirror.cjs +@@ -1345,10 +1345,10 @@ const createDecorations = (state, awareness, createCursor, createSelection) => { + const maxsize = math__namespace.max(state.doc.content.size - 1, 0); + anchor = math__namespace.min(anchor, maxsize); + head = math__namespace.min(head, maxsize); +- decorations.push(prosemirrorView.Decoration.widget(head, () => createCursor(user), { key: clientId + '', side: 10 })); ++ decorations.push(prosemirrorView.Decoration.widget(head, () => createCursor(user), { type: "cursor", key: clientId + '', side: 10, clientId: clientId + '' })); + const from = math__namespace.min(anchor, head); + const to = math__namespace.max(anchor, head); +- decorations.push(prosemirrorView.Decoration.inline(from, to, createSelection(user), { inclusiveEnd: true, inclusiveStart: false })); ++ decorations.push(prosemirrorView.Decoration.inline(from, to, createSelection(user), { type: "selection", inclusiveEnd: true, inclusiveStart: false, clientId: clientId + '' })); + } + } + }); +@@ -1396,13 +1396,14 @@ const yCursorPlugin = (awareness, { cursorBuilder = defaultCursorBuilder, select + } + }; + const updateCursorInfo = () => { ++ + const ystate = ySyncPluginKey.getState(view.state); + // @note We make implicit checks when checking for the cursor property + const current = awareness.getLocalState() || {}; + if (ystate.binding == null) { + return + } +- if (view.hasFocus()) { ++ if (view.hasFocus() || view.dom.contains(document.activeElement)) { + const selection = getSelection(view.state); + /** + * @type {Y.RelativePosition} +diff --git a/node_modules/y-prosemirror/src/plugins/cursor-plugin.js b/node_modules/y-prosemirror/src/plugins/cursor-plugin.js +index 91a920f..682c04d 100644 +--- a/node_modules/y-prosemirror/src/plugins/cursor-plugin.js ++++ b/node_modules/y-prosemirror/src/plugins/cursor-plugin.js +@@ -1,8 +1,8 @@ + ++import { Plugin } from 'prosemirror-state'; // eslint-disable-line ++import { Decoration, DecorationSet } from 'prosemirror-view'; // eslint-disable-line ++import { Awareness } from 'y-protocols/awareness'; // eslint-disable-line + import * as Y from 'yjs' +-import { Decoration, DecorationSet } from 'prosemirror-view' // eslint-disable-line +-import { Plugin } from 'prosemirror-state' // eslint-disable-line +-import { Awareness } from 'y-protocols/awareness' // eslint-disable-line + import { absolutePositionToRelativePosition, relativePositionToAbsolutePosition, setMeta } from '../lib.js' + import { yCursorPluginKey, ySyncPluginKey } from './keys.js' + +@@ -78,10 +78,10 @@ export const createDecorations = (state, awareness, createCursor, createSelectio + const maxsize = math.max(state.doc.content.size - 1, 0) + anchor = math.min(anchor, maxsize) + head = math.min(head, maxsize) +- decorations.push(Decoration.widget(head, () => createCursor(user), { key: clientId + '', side: 10 })) ++ decorations.push(Decoration.widget(head, () => createCursor(user), { type: "cursor", key: clientId + '', side: 10, clientId: clientId + '' })); + const from = math.min(anchor, head) + const to = math.max(anchor, head) +- decorations.push(Decoration.inline(from, to, createSelection(user), { inclusiveEnd: true, inclusiveStart: false })) ++ decorations.push(Decoration.inline(from, to, createSelection(user), { type: "selection", inclusiveEnd: true, inclusiveStart: false, clientId: clientId + '' })); + } + } + }) +@@ -135,7 +135,7 @@ export const yCursorPlugin = (awareness, { cursorBuilder = defaultCursorBuilder, + if (ystate.binding == null) { + return + } +- if (view.hasFocus()) { ++ if (view.hasFocus() || view.dom.contains(document.activeElement)) { + const selection = getSelection(view.state) + /** + * @type {Y.RelativePosition} \ No newline at end of file