diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml.disabled similarity index 100% rename from .github/workflows/e2e.yml rename to .github/workflows/e2e.yml.disabled diff --git a/.github/workflows/release_github.yml b/.github/workflows/release_github.yml deleted file mode 100644 index c9c4dc2d..00000000 --- a/.github/workflows/release_github.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: "Make github release" - -on: - workflow_dispatch: - -jobs: - release-github: - runs-on: ubuntu-latest - defaults: - run: - shell: bash - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: "Get the version of fluence-js package" - id: package-version - uses: martinbeentjes/npm-get-version-action@v1.2.3 - with: - path: packages/fluence-js - - - name: Set env - run: echo "RELEASE_VERSION=v${{ steps.package-version.outputs.current-version }}" >> $GITHUB_ENV - - - name: "Create tag for release" - uses: rickstaa/action-create-tag@v1 - with: - tag: ${{ env.RELEASE_VERSION }} - message: "" - github_token: ${{ secrets.GITHUB_TOKEN }} - - ### Create a release - - name: Build Changelog - id: changelog - uses: mikepenz/release-changelog-builder-action@v3 - with: - configuration: ".github/workflows/changelog_config.json" - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Release - id: release - uses: softprops/action-gh-release@v1 - with: - name: Fluence JS ${{ env.RELEASE_VERSION }} - tag_name: ${{ env.RELEASE_VERSION }} - body: ${{steps.changelog.outputs.changelog}} - draft: false - prerelease: false - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/release_packages.yml b/.github/workflows/release_packages.yml deleted file mode 100644 index 3d7aaeca..00000000 --- a/.github/workflows/release_packages.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: "Release packages" - -on: - workflow_dispatch: - -jobs: - release-packages: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - uses: pnpm/action-setup@v2.2.4 - with: - version: 7 - - - name: "Setup node" - uses: actions/setup-node@v3 - with: - node-version: "16" - registry-url: 'https://registry.npmjs.org' - - - name: "Build packages" - run: | - pnpm i - pnpm -r build - - - name: "Publish to npmjs.com" - run: | - result=$(pnpm --no-git-checks -r publish -filter '@fluencelabs/*' --access public) - if [[ $result == "There are no new packages that should be published" ]] - then - echo ERROR: no packages have been published. Did you forget to bump version? - exit 1 - fi - env: - CI: true - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index efbb1155..79acb62e 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -14,7 +14,7 @@ on: ref: description: "git ref to checkout to" type: string - default: "master" + default: "v0.28.0" outputs: fluence-js-version: description: "@fluencelabs/fluence version" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index eb82fec9..320d78a4 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -18,7 +18,7 @@ on: ref: description: "git ref to checkout to" type: string - default: "master" + default: "v0.28.0" env: RUST_PEER_IMAGE: "${{ inputs.rust-peer-image }}" @@ -29,7 +29,6 @@ jobs: fluence-js: name: "Run tests" runs-on: ubuntu-latest - timeout-minutes: 30 permissions: contents: read diff --git a/.npmrc b/.npmrc index 3e775efb..16dde58b 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ auto-install-peers=true +save-exact=true \ No newline at end of file diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 00000000..36f36b84 --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + trailingComma: 'all', + singleQuote: true, + printWidth: 120, + tabWidth: 4, + useTabs: false, +}; diff --git a/README.md b/README.md index ed33792b..447b9077 100644 --- a/README.md +++ b/README.md @@ -28,15 +28,6 @@ Build all packages pnpm -r build ``` -### Repository structure - -| Folder | Package | Description | -| --------------------------- | ----------------------- | --------------------------------------------- | -| packages/fluence-js | @fluencelabs/fluence-js | TypeScript implementation of the Fluence Peer | -| packages/fluence-interfaces | @fluencelabs/interfaces | Common interfaces used in Fluence Peer | -| packages/fluence-connection | @fluencelabs/connection | Connectivity layer used in Fluence Peer | -| packages/fluence-keypair | @fluencelabs/keypair | Key Pair implementation | - ### Running tests Tests are split into unit and integration categories. By default integration tests require a locally running Fluence node with 4310 port open for ws connections. The dependency can be started with docker diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e2ac6616..00000000 --- a/docs/.nojekyll +++ /dev/null @@ -1 +0,0 @@ -TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/docs/assets/highlight.css b/docs/assets/highlight.css deleted file mode 100644 index 6dd4eef7..00000000 --- a/docs/assets/highlight.css +++ /dev/null @@ -1,22 +0,0 @@ -:root { - --light-code-background: #F5F5F5; - --dark-code-background: #1E1E1E; -} - -@media (prefers-color-scheme: light) { :root { - --code-background: var(--light-code-background); -} } - -@media (prefers-color-scheme: dark) { :root { - --code-background: var(--dark-code-background); -} } - -body.light { - --code-background: var(--light-code-background); -} - -body.dark { - --code-background: var(--dark-code-background); -} - -pre, code { background: var(--code-background); } diff --git a/docs/assets/icons.css b/docs/assets/icons.css deleted file mode 100644 index 776a3562..00000000 --- a/docs/assets/icons.css +++ /dev/null @@ -1,1043 +0,0 @@ -.tsd-kind-icon { - display: block; - position: relative; - padding-left: 20px; - text-indent: -20px; -} -.tsd-kind-icon:before { - content: ""; - display: inline-block; - vertical-align: middle; - width: 17px; - height: 17px; - margin: 0 3px 2px 0; - background-image: url(./icons.png); -} -@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { - .tsd-kind-icon:before { - background-image: url(./icons@2x.png); - background-size: 238px 204px; - } -} - -.tsd-signature.tsd-kind-icon:before { - background-position: 0 -153px; -} - -.tsd-kind-object-literal > .tsd-kind-icon:before { - background-position: 0px -17px; -} -.tsd-kind-object-literal.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -17px; -} -.tsd-kind-object-literal.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -17px; -} - -.tsd-kind-class > .tsd-kind-icon:before { - background-position: 0px -34px; -} -.tsd-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -34px; -} -.tsd-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -34px; -} - -.tsd-kind-class.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: 0px -51px; -} -.tsd-kind-class.tsd-has-type-parameter.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -17px -51px; -} -.tsd-kind-class.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -51px; -} - -.tsd-kind-interface > .tsd-kind-icon:before { - background-position: 0px -68px; -} -.tsd-kind-interface.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -68px; -} -.tsd-kind-interface.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -68px; -} - -.tsd-kind-interface.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: 0px -85px; -} -.tsd-kind-interface.tsd-has-type-parameter.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -17px -85px; -} -.tsd-kind-interface.tsd-has-type-parameter.tsd-is-private - > .tsd-kind-icon:before { - background-position: -34px -85px; -} - -.tsd-kind-namespace > .tsd-kind-icon:before { - background-position: 0px -102px; -} -.tsd-kind-namespace.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -102px; -} -.tsd-kind-namespace.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -102px; -} - -.tsd-kind-module > .tsd-kind-icon:before { - background-position: 0px -102px; -} -.tsd-kind-module.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -102px; -} -.tsd-kind-module.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -102px; -} - -.tsd-kind-enum > .tsd-kind-icon:before { - background-position: 0px -119px; -} -.tsd-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -119px; -} -.tsd-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -119px; -} - -.tsd-kind-enum-member > .tsd-kind-icon:before { - background-position: 0px -136px; -} -.tsd-kind-enum-member.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -136px; -} -.tsd-kind-enum-member.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -136px; -} - -.tsd-kind-signature > .tsd-kind-icon:before { - background-position: 0px -153px; -} -.tsd-kind-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -153px; -} -.tsd-kind-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -153px; -} - -.tsd-kind-type-alias > .tsd-kind-icon:before { - background-position: 0px -170px; -} -.tsd-kind-type-alias.tsd-is-protected > .tsd-kind-icon:before { - background-position: -17px -170px; -} -.tsd-kind-type-alias.tsd-is-private > .tsd-kind-icon:before { - background-position: -34px -170px; -} - -.tsd-kind-type-alias.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: 0px -187px; -} -.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -17px -187px; -} -.tsd-kind-type-alias.tsd-has-type-parameter.tsd-is-private - > .tsd-kind-icon:before { - background-position: -34px -187px; -} - -.tsd-kind-variable > .tsd-kind-icon:before { - background-position: -136px -0px; -} -.tsd-kind-variable.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -0px; -} -.tsd-kind-variable.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -0px; -} -.tsd-kind-variable.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-variable.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -0px; -} -.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -0px; -} -.tsd-kind-variable.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-variable.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -0px; -} -.tsd-kind-variable.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -0px; -} - -.tsd-kind-property > .tsd-kind-icon:before { - background-position: -136px -0px; -} -.tsd-kind-property.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -0px; -} -.tsd-kind-property.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-property.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -0px; -} -.tsd-kind-property.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -0px; -} -.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -0px; -} -.tsd-kind-property.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -0px; -} -.tsd-kind-property.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-property.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -0px; -} -.tsd-kind-property.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -0px; -} -.tsd-kind-property.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -0px; -} -.tsd-kind-property.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -0px; -} -.tsd-kind-property.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -0px; -} - -.tsd-kind-get-signature > .tsd-kind-icon:before { - background-position: -136px -17px; -} -.tsd-kind-get-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -17px; -} -.tsd-kind-get-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -17px; -} -.tsd-kind-get-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -17px; -} - -.tsd-kind-set-signature > .tsd-kind-icon:before { - background-position: -136px -34px; -} -.tsd-kind-set-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -34px; -} -.tsd-kind-set-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -34px; -} -.tsd-kind-set-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -34px; -} - -.tsd-kind-accessor > .tsd-kind-icon:before { - background-position: -136px -51px; -} -.tsd-kind-accessor.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -51px; -} -.tsd-kind-accessor.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -51px; -} -.tsd-kind-accessor.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -51px; -} - -.tsd-kind-function > .tsd-kind-icon:before { - background-position: -136px -68px; -} -.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -68px; -} -.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -68px; -} -.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -68px; -} -.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -68px; -} -.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -68px; -} -.tsd-kind-function.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -68px; -} -.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -68px; -} -.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-function.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -68px; -} -.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -68px; -} - -.tsd-kind-method > .tsd-kind-icon:before { - background-position: -136px -68px; -} -.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -68px; -} -.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -68px; -} -.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -68px; -} -.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -68px; -} -.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -68px; -} -.tsd-kind-method.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -68px; -} -.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -68px; -} -.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-method.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -68px; -} -.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -68px; -} - -.tsd-kind-call-signature > .tsd-kind-icon:before { - background-position: -136px -68px; -} -.tsd-kind-call-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -68px; -} -.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -68px; -} -.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -68px; -} - -.tsd-kind-function.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: -136px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -153px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class - > .tsd-kind-icon:before { - background-position: -51px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum - > .tsd-kind-icon:before { - background-position: -170px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -85px; -} -.tsd-kind-function.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -85px; -} - -.tsd-kind-method.tsd-has-type-parameter > .tsd-kind-icon:before { - background-position: -136px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -153px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class - > .tsd-kind-icon:before { - background-position: -51px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum - > .tsd-kind-icon:before { - background-position: -170px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -85px; -} -.tsd-kind-method.tsd-has-type-parameter.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -85px; -} - -.tsd-kind-constructor > .tsd-kind-icon:before { - background-position: -136px -102px; -} -.tsd-kind-constructor.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -102px; -} -.tsd-kind-constructor.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -102px; -} -.tsd-kind-constructor.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -102px; -} - -.tsd-kind-constructor-signature > .tsd-kind-icon:before { - background-position: -136px -102px; -} -.tsd-kind-constructor-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -102px; -} -.tsd-kind-constructor-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -102px; -} -.tsd-kind-constructor-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -102px; -} - -.tsd-kind-index-signature > .tsd-kind-icon:before { - background-position: -136px -119px; -} -.tsd-kind-index-signature.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -119px; -} -.tsd-kind-index-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -119px; -} -.tsd-kind-index-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -119px; -} - -.tsd-kind-event > .tsd-kind-icon:before { - background-position: -136px -136px; -} -.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -136px; -} -.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -136px; -} -.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -136px; -} -.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -136px; -} -.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -136px; -} -.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -136px; -} -.tsd-kind-event.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -136px; -} -.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -136px; -} -.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -136px; -} -.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -136px; -} -.tsd-kind-event.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -136px; -} -.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -136px; -} - -.tsd-is-static > .tsd-kind-icon:before { - background-position: -136px -153px; -} -.tsd-is-static.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -153px; -} -.tsd-is-static.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -153px; -} -.tsd-is-static.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -153px; -} -.tsd-is-static.tsd-parent-kind-class.tsd-is-inherited > .tsd-kind-icon:before { - background-position: -68px -153px; -} -.tsd-is-static.tsd-parent-kind-class.tsd-is-protected > .tsd-kind-icon:before { - background-position: -85px -153px; -} -.tsd-is-static.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -153px; -} -.tsd-is-static.tsd-parent-kind-class.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -153px; -} -.tsd-is-static.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -153px; -} -.tsd-is-static.tsd-parent-kind-enum.tsd-is-protected > .tsd-kind-icon:before { - background-position: -187px -153px; -} -.tsd-is-static.tsd-parent-kind-enum.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -153px; -} -.tsd-is-static.tsd-parent-kind-interface > .tsd-kind-icon:before { - background-position: -204px -153px; -} -.tsd-is-static.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -153px; -} - -.tsd-is-static.tsd-kind-function > .tsd-kind-icon:before { - background-position: -136px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -170px; -} -.tsd-is-static.tsd-kind-function.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -170px; -} - -.tsd-is-static.tsd-kind-method > .tsd-kind-icon:before { - background-position: -136px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -170px; -} -.tsd-is-static.tsd-kind-method.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -170px; -} - -.tsd-is-static.tsd-kind-call-signature > .tsd-kind-icon:before { - background-position: -136px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -153px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class - > .tsd-kind-icon:before { - background-position: -51px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum - > .tsd-kind-icon:before { - background-position: -170px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -170px; -} -.tsd-is-static.tsd-kind-call-signature.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -170px; -} - -.tsd-is-static.tsd-kind-event > .tsd-kind-icon:before { - background-position: -136px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-is-protected > .tsd-kind-icon:before { - background-position: -153px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-is-private > .tsd-kind-icon:before { - background-position: -119px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class > .tsd-kind-icon:before { - background-position: -51px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -68px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -85px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-protected.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -102px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-class.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum > .tsd-kind-icon:before { - background-position: -170px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-protected - > .tsd-kind-icon:before { - background-position: -187px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-enum.tsd-is-private - > .tsd-kind-icon:before { - background-position: -119px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface - > .tsd-kind-icon:before { - background-position: -204px -187px; -} -.tsd-is-static.tsd-kind-event.tsd-parent-kind-interface.tsd-is-inherited - > .tsd-kind-icon:before { - background-position: -221px -187px; -} diff --git a/docs/assets/icons.png b/docs/assets/icons.png deleted file mode 100644 index 3836d5fe..00000000 Binary files a/docs/assets/icons.png and /dev/null differ diff --git a/docs/assets/icons@2x.png b/docs/assets/icons@2x.png deleted file mode 100644 index 5a209e2f..00000000 Binary files a/docs/assets/icons@2x.png and /dev/null differ diff --git a/docs/assets/main.js b/docs/assets/main.js deleted file mode 100644 index b13205a3..00000000 --- a/docs/assets/main.js +++ /dev/null @@ -1,52 +0,0 @@ -(()=>{var Ce=Object.create;var ue=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,_e=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var De=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!_e.call(t,i)&&i!==r&&ue(t,i,{get:()=>e[i],enumerable:!(n=Pe(e,i))||n.enumerable});return t};var Fe=(t,e,r)=>(r=t!=null?Ce(Re(t)):{},De(e||!t||!t.__esModule?ue(r,"default",{value:t,enumerable:!0}):r,t));var pe=Me((de,fe)=>{(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i0){var h=t.utils.clone(r)||{};h.position=[a,l],h.index=s.length,s.push(new t.Token(n.slice(a,o),h))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error("Cannot load unregistered function: "+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n1&&(oe&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ou?h+=2:a==u&&(r+=n[l+1]*i[h+1],l+=2,h+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}if(s.str.length==0&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}s.str.length==1&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),p=s.str.charAt(1),v;p in s.node.edges?v=s.node.edges[p]:(v=new t.TokenSet,s.node.edges[p]=v),s.str.length==1&&(v.final=!0),i.push({node:v,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),u=0;u1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n="expecting term or field, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define=="function"&&define.amd?define(r):typeof de=="object"?fe.exports=r():e.lunr=r()}(this,function(){return t})})()});var ce=[];function N(t,e){ce.push({selector:e,constructor:t})}var Y=class{constructor(){this.createComponents(document.body)}createComponents(e){ce.forEach(r=>{e.querySelectorAll(r.selector).forEach(n=>{n.dataset.hasInstance||(new r.constructor({el:n}),n.dataset.hasInstance=String(!0))})})}};var k=class{constructor(e){this.el=e.el}};var J=class{constructor(){this.listeners={}}addEventListener(e,r){e in this.listeners||(this.listeners[e]=[]),this.listeners[e].push(r)}removeEventListener(e,r){if(!(e in this.listeners))return;let n=this.listeners[e];for(let i=0,s=n.length;i{let r=Date.now();return(...n)=>{r+e-Date.now()<0&&(t(...n),r=Date.now())}};var ie=class extends J{constructor(){super();this.scrollTop=0;this.lastY=0;this.width=0;this.height=0;this.showToolbar=!0;this.toolbar=document.querySelector(".tsd-page-toolbar"),this.secondaryNav=document.querySelector(".tsd-navigation.secondary"),window.addEventListener("scroll",ne(()=>this.onScroll(),10)),window.addEventListener("resize",ne(()=>this.onResize(),10)),this.onResize(),this.onScroll()}triggerResize(){let r=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(r)}onResize(){this.width=window.innerWidth||0,this.height=window.innerHeight||0;let r=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(r)}onScroll(){this.scrollTop=window.scrollY||0;let r=new CustomEvent("scroll",{detail:{scrollTop:this.scrollTop}});this.dispatchEvent(r),this.hideShowToolbar()}hideShowToolbar(){var n;let r=this.showToolbar;this.showToolbar=this.lastY>=this.scrollTop||this.scrollTop<=0,r!==this.showToolbar&&(this.toolbar.classList.toggle("tsd-page-toolbar--hide"),(n=this.secondaryNav)==null||n.classList.toggle("tsd-navigation--toolbar-hide")),this.lastY=this.scrollTop}},Q=ie;Q.instance=new ie;var X=class extends k{constructor(r){super(r);this.anchors=[];this.index=-1;Q.instance.addEventListener("resize",()=>this.onResize()),Q.instance.addEventListener("scroll",n=>this.onScroll(n)),this.createAnchors()}createAnchors(){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substr(0,r.indexOf("#"))),this.el.querySelectorAll("a").forEach(n=>{let i=n.href;if(i.indexOf("#")==-1||i.substr(0,r.length)!=r)return;let s=i.substr(i.indexOf("#")+1),o=document.querySelector("a.tsd-anchor[name="+s+"]"),a=n.parentNode;!o||!a||this.anchors.push({link:a,anchor:o,position:0})}),this.onResize()}onResize(){let r;for(let i=0,s=this.anchors.length;ii.position-s.position);let n=new CustomEvent("scroll",{detail:{scrollTop:Q.instance.scrollTop}});this.onScroll(n)}onScroll(r){let n=r.detail.scrollTop+5,i=this.anchors,s=i.length-1,o=this.index;for(;o>-1&&i[o].position>n;)o-=1;for(;o-1&&this.anchors[this.index].link.classList.remove("focus"),this.index=o,this.index>-1&&this.anchors[this.index].link.classList.add("focus"))}};var he=(t,e=100)=>{let r;return(...n)=>{clearTimeout(r),r=setTimeout(()=>t(n),e)}};var ge=Fe(pe());function ye(){let t=document.getElementById("tsd-search");if(!t)return;let e=document.getElementById("search-script");t.classList.add("loading"),e&&(e.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),e.addEventListener("load",()=>{t.classList.remove("loading"),t.classList.add("ready")}),window.searchData&&t.classList.remove("loading"));let r=document.querySelector("#tsd-search input"),n=document.querySelector("#tsd-search .results");if(!r||!n)throw new Error("The input field or the result list wrapper was not found");let i=!1;n.addEventListener("mousedown",()=>i=!0),n.addEventListener("mouseup",()=>{i=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{i||(i=!1,t.classList.remove("has-focus"))});let s={base:t.dataset.base+"/"};Ae(t,n,r,s)}function Ae(t,e,r,n){r.addEventListener("input",he(()=>{He(t,e,r,n)},200));let i=!1;r.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?ze(e,r):s.key=="Escape"?r.blur():s.key=="ArrowUp"?me(e,-1):s.key==="ArrowDown"?me(e,1):i=!1}),r.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!r.matches(":focus")&&s.key==="/"&&(r.focus(),s.preventDefault())})}function Ve(t,e){t.index||window.searchData&&(e.classList.remove("loading"),e.classList.add("ready"),t.data=window.searchData,t.index=ge.Index.load(window.searchData.index))}function He(t,e,r,n){if(Ve(n,t),!n.index||!n.data)return;e.textContent="";let i=r.value.trim(),s=i?n.index.search(`*${i}*`):[];for(let o=0,a=Math.min(10,s.length);o${ve(u.parent,i)}.${l}`);let h=document.createElement("li");h.classList.value=u.classes;let p=document.createElement("a");p.href=n.base+u.url,p.classList.add("tsd-kind-icon"),p.innerHTML=l,h.append(p),e.appendChild(h)}}function me(t,e){let r=t.querySelector(".current");if(!r)r=t.querySelector(e==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let n=r;if(e===1)do n=n.nextElementSibling;while(n instanceof HTMLElement&&n.offsetParent==null);else do n=n.previousElementSibling;while(n instanceof HTMLElement&&n.offsetParent==null);n&&(r.classList.remove("current"),n.classList.add("current"))}}function ze(t,e){let r=t.querySelector(".current");if(r||(r=t.querySelector("li:first-child")),r){let n=r.querySelector("a");n&&(window.location.href=n.href),e.blur()}}function ve(t,e){if(e==="")return t;let r=t.toLocaleLowerCase(),n=e.toLocaleLowerCase(),i=[],s=0,o=r.indexOf(n);for(;o!=-1;)i.push(se(t.substring(s,o)),`${se(t.substring(o,o+n.length))}`),s=o+n.length,o=r.indexOf(n,s);return i.push(se(t.substring(s))),i.join("")}var Ne={"&":"&","<":"<",">":">","'":"'",'"':"""};function se(t){return t.replace(/[&<>"'"]/g,e=>Ne[e])}var oe=class{constructor(e,r){this.signature=e,this.description=r}addClass(e){return this.signature.classList.add(e),this.description.classList.add(e),this}removeClass(e){return this.signature.classList.remove(e),this.description.classList.remove(e),this}},Z=class extends k{constructor(r){super(r);this.groups=[];this.index=-1;this.createGroups(),this.container&&(this.el.classList.add("active"),Array.from(this.el.children).forEach(n=>{n.addEventListener("touchstart",i=>this.onClick(i)),n.addEventListener("click",i=>this.onClick(i))}),this.container.classList.add("active"),this.setIndex(0))}setIndex(r){if(r<0&&(r=0),r>this.groups.length-1&&(r=this.groups.length-1),this.index==r)return;let n=this.groups[r];if(this.index>-1){let i=this.groups[this.index];i.removeClass("current").addClass("fade-out"),n.addClass("current"),n.addClass("fade-in"),Q.instance.triggerResize(),setTimeout(()=>{i.removeClass("fade-out"),n.removeClass("fade-in")},300)}else n.addClass("current"),Q.instance.triggerResize();this.index=r}createGroups(){let r=this.el.children;if(r.length<2)return;this.container=this.el.nextElementSibling;let n=this.container.children;this.groups=[];for(let i=0;i{n.signature===r.currentTarget&&this.setIndex(i)})}};var C="mousedown",Le="mousemove",_="mouseup",K={x:0,y:0},xe=!1,ae=!1,je=!1,A=!1,Ee=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(Ee?"is-mobile":"not-mobile");Ee&&"ontouchstart"in document.documentElement&&(je=!0,C="touchstart",Le="touchmove",_="touchend");document.addEventListener(C,t=>{ae=!0,A=!1;let e=C=="touchstart"?t.targetTouches[0]:t;K.y=e.pageY||0,K.x=e.pageX||0});document.addEventListener(Le,t=>{if(!!ae&&!A){let e=C=="touchstart"?t.targetTouches[0]:t,r=K.x-(e.pageX||0),n=K.y-(e.pageY||0);A=Math.sqrt(r*r+n*n)>10}});document.addEventListener(_,()=>{ae=!1});document.addEventListener("click",t=>{xe&&(t.preventDefault(),t.stopImmediatePropagation(),xe=!1)});var ee=class extends k{constructor(r){super(r);this.className=this.el.dataset.toggle||"",this.el.addEventListener(_,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(C,n=>this.onDocumentPointerDown(n)),document.addEventListener(_,n=>this.onDocumentPointerUp(n))}setActive(r){if(this.active==r)return;this.active=r,document.documentElement.classList.toggle("has-"+this.className,r),this.el.classList.toggle("active",r);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(r){A||(this.setActive(!0),r.preventDefault())}onDocumentPointerDown(r){if(this.active){if(r.target.closest(".col-menu, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(r){if(!A&&this.active&&r.target.closest(".col-menu")){let n=r.target.closest("a");if(n){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substr(0,i.indexOf("#"))),n.href.substr(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te=class{constructor(e,r){this.key=e,this.value=r,this.defaultValue=r,this.initialize(),window.localStorage[this.key]&&this.setValue(this.fromLocalStorage(window.localStorage[this.key]))}initialize(){}setValue(e){if(this.value==e)return;let r=this.value;this.value=e,window.localStorage[this.key]=this.toLocalStorage(e),this.handleValueChange(r,e)}},re=class extends te{initialize(){let r=document.querySelector("#tsd-filter-"+this.key);!r||(this.checkbox=r,this.checkbox.addEventListener("change",()=>{this.setValue(this.checkbox.checked)}))}handleValueChange(r,n){!this.checkbox||(this.checkbox.checked=this.value,document.documentElement.classList.toggle("toggle-"+this.key,this.value!=this.defaultValue))}fromLocalStorage(r){return r=="true"}toLocalStorage(r){return r?"true":"false"}},le=class extends te{initialize(){document.documentElement.classList.add("toggle-"+this.key+this.value);let r=document.querySelector("#tsd-filter-"+this.key);if(!r)return;this.select=r;let n=()=>{this.select.classList.add("active")},i=()=>{this.select.classList.remove("active")};this.select.addEventListener(C,n),this.select.addEventListener("mouseover",n),this.select.addEventListener("mouseleave",i),this.select.querySelectorAll("li").forEach(s=>{s.addEventListener(_,o=>{r.classList.remove("active"),this.setValue(o.target.dataset.value||"")})}),document.addEventListener(C,s=>{this.select.contains(s.target)||this.select.classList.remove("active")})}handleValueChange(r,n){this.select.querySelectorAll("li.selected").forEach(o=>{o.classList.remove("selected")});let i=this.select.querySelector('li[data-value="'+n+'"]'),s=this.select.querySelector(".tsd-select-label");i&&s&&(i.classList.add("selected"),s.textContent=i.textContent),document.documentElement.classList.remove("toggle-"+r),document.documentElement.classList.add("toggle-"+n)}fromLocalStorage(r){return r}toLocalStorage(r){return r}},j=class extends k{constructor(r){super(r);this.optionVisibility=new le("visibility","private"),this.optionInherited=new re("inherited",!0),this.optionExternals=new re("externals",!0)}static isSupported(){try{return typeof window.localStorage!="undefined"}catch{return!1}}};function we(t){let e=localStorage.getItem("tsd-theme")||"os";t.value=e,be(e),t.addEventListener("change",()=>{localStorage.setItem("tsd-theme",t.value),be(t.value)})}function be(t){switch(t){case"os":document.body.classList.remove("light","dark");break;case"light":document.body.classList.remove("dark"),document.body.classList.add("light");break;case"dark":document.body.classList.remove("light"),document.body.classList.add("dark");break}}ye();N(X,".menu-highlight");N(Z,".tsd-signatures");N(ee,"a[data-toggle]");j.isSupported()?N(j,"#tsd-filter"):document.documentElement.classList.add("no-filter");var Te=document.getElementById("theme");Te&&we(Te);var Be=new Y;Object.defineProperty(window,"app",{value:Be});})(); -/*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ -/*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - */ -/*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - */ -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - */ diff --git a/docs/assets/search.js b/docs/assets/search.js deleted file mode 100644 index 026068e7..00000000 --- a/docs/assets/search.js +++ /dev/null @@ -1 +0,0 @@ -window.searchData = JSON.parse("{\"kinds\":{\"32\":\"Variable\",\"64\":\"Function\",\"128\":\"Class\",\"256\":\"Interface\",\"512\":\"Constructor\",\"1024\":\"Property\",\"2048\":\"Method\",\"65536\":\"Type literal\",\"4194304\":\"Type alias\"},\"rows\":[{\"id\":0,\"kind\":64,\"name\":\"setLogLevel\",\"url\":\"modules.html#setLogLevel\",\"classes\":\"tsd-kind-function\"},{\"id\":1,\"kind\":32,\"name\":\"Fluence\",\"url\":\"modules.html#Fluence\",\"classes\":\"tsd-kind-variable\"},{\"id\":2,\"kind\":65536,\"name\":\"__type\",\"url\":\"modules.html#Fluence.__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-variable\",\"parent\":\"Fluence\"},{\"id\":3,\"kind\":1024,\"name\":\"start\",\"url\":\"modules.html#Fluence.__type.start\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Fluence.__type\"},{\"id\":4,\"kind\":65536,\"name\":\"__type\",\"url\":\"modules.html#Fluence.__type.__type-5\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-literal\",\"parent\":\"Fluence.__type\"},{\"id\":5,\"kind\":1024,\"name\":\"stop\",\"url\":\"modules.html#Fluence.__type.stop\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Fluence.__type\"},{\"id\":6,\"kind\":65536,\"name\":\"__type\",\"url\":\"modules.html#Fluence.__type.__type-6\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-literal\",\"parent\":\"Fluence.__type\"},{\"id\":7,\"kind\":1024,\"name\":\"getStatus\",\"url\":\"modules.html#Fluence.__type.getStatus\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Fluence.__type\"},{\"id\":8,\"kind\":65536,\"name\":\"__type\",\"url\":\"modules.html#Fluence.__type.__type-2\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-literal\",\"parent\":\"Fluence.__type\"},{\"id\":9,\"kind\":1024,\"name\":\"getPeer\",\"url\":\"modules.html#Fluence.__type.getPeer\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Fluence.__type\"},{\"id\":10,\"kind\":65536,\"name\":\"__type\",\"url\":\"modules.html#Fluence.__type.__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-literal\",\"parent\":\"Fluence.__type\"},{\"id\":11,\"kind\":1024,\"name\":\"registerMarineService\",\"url\":\"modules.html#Fluence.__type.registerMarineService\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Fluence.__type\"},{\"id\":12,\"kind\":65536,\"name\":\"__type\",\"url\":\"modules.html#Fluence.__type.__type-3\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-literal\",\"parent\":\"Fluence.__type\"},{\"id\":13,\"kind\":1024,\"name\":\"removeMarineService\",\"url\":\"modules.html#Fluence.__type.removeMarineService\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"Fluence.__type\"},{\"id\":14,\"kind\":65536,\"name\":\"__type\",\"url\":\"modules.html#Fluence.__type.__type-4\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-type-literal\",\"parent\":\"Fluence.__type\"},{\"id\":15,\"kind\":4194304,\"name\":\"PeerStatus\",\"url\":\"modules.html#PeerStatus\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":16,\"kind\":128,\"name\":\"KeyPair\",\"url\":\"classes/KeyPair.html\",\"classes\":\"tsd-kind-class\"},{\"id\":17,\"kind\":2048,\"name\":\"fromEd25519SK\",\"url\":\"classes/KeyPair.html#fromEd25519SK\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-static\",\"parent\":\"KeyPair\"},{\"id\":18,\"kind\":2048,\"name\":\"randomEd25519\",\"url\":\"classes/KeyPair.html#randomEd25519\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-static\",\"parent\":\"KeyPair\"},{\"id\":19,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/KeyPair.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"KeyPair\"},{\"id\":20,\"kind\":1024,\"name\":\"Libp2pPeerId\",\"url\":\"classes/KeyPair.html#Libp2pPeerId\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"KeyPair\"},{\"id\":21,\"kind\":2048,\"name\":\"toB58String\",\"url\":\"classes/KeyPair.html#toB58String\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"KeyPair\"},{\"id\":22,\"kind\":2048,\"name\":\"toEd25519PrivateKey\",\"url\":\"classes/KeyPair.html#toEd25519PrivateKey\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"KeyPair\"},{\"id\":23,\"kind\":2048,\"name\":\"signBytes\",\"url\":\"classes/KeyPair.html#signBytes\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"KeyPair\"},{\"id\":24,\"kind\":2048,\"name\":\"verify\",\"url\":\"classes/KeyPair.html#verify\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"KeyPair\"},{\"id\":25,\"kind\":128,\"name\":\"FluencePeer\",\"url\":\"classes/FluencePeer.html\",\"classes\":\"tsd-kind-class\"},{\"id\":26,\"kind\":2048,\"name\":\"isInstance\",\"url\":\"classes/FluencePeer.html#isInstance\",\"classes\":\"tsd-kind-method tsd-parent-kind-class tsd-is-static\",\"parent\":\"FluencePeer\"},{\"id\":27,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/FluencePeer.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":28,\"kind\":2048,\"name\":\"getStatus\",\"url\":\"classes/FluencePeer.html#getStatus\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":29,\"kind\":2048,\"name\":\"start\",\"url\":\"classes/FluencePeer.html#start\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":30,\"kind\":2048,\"name\":\"getServices\",\"url\":\"classes/FluencePeer.html#getServices\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":31,\"kind\":2048,\"name\":\"registerMarineService\",\"url\":\"classes/FluencePeer.html#registerMarineService\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":32,\"kind\":2048,\"name\":\"removeMarineService\",\"url\":\"classes/FluencePeer.html#removeMarineService\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":33,\"kind\":2048,\"name\":\"stop\",\"url\":\"classes/FluencePeer.html#stop\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"FluencePeer\"},{\"id\":34,\"kind\":256,\"name\":\"PeerConfig\",\"url\":\"interfaces/PeerConfig.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":35,\"kind\":1024,\"name\":\"connectTo\",\"url\":\"interfaces/PeerConfig.html#connectTo\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":36,\"kind\":1024,\"name\":\"avmLogLevel\",\"url\":\"interfaces/PeerConfig.html#avmLogLevel\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":37,\"kind\":1024,\"name\":\"KeyPair\",\"url\":\"interfaces/PeerConfig.html#KeyPair\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":38,\"kind\":1024,\"name\":\"checkConnectionTimeoutMs\",\"url\":\"interfaces/PeerConfig.html#checkConnectionTimeoutMs\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":39,\"kind\":1024,\"name\":\"skipCheckConnection\",\"url\":\"interfaces/PeerConfig.html#skipCheckConnection\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":40,\"kind\":1024,\"name\":\"dialTimeoutMs\",\"url\":\"interfaces/PeerConfig.html#dialTimeoutMs\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":41,\"kind\":1024,\"name\":\"defaultTtlMs\",\"url\":\"interfaces/PeerConfig.html#defaultTtlMs\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":42,\"kind\":1024,\"name\":\"avmRunner\",\"url\":\"interfaces/PeerConfig.html#avmRunner\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":43,\"kind\":1024,\"name\":\"marineJS\",\"url\":\"interfaces/PeerConfig.html#marineJS\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":44,\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/PeerConfig.html#__type-1\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":45,\"kind\":1024,\"name\":\"workerScriptPath\",\"url\":\"interfaces/PeerConfig.html#__type-1.workerScriptPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PeerConfig.__type\"},{\"id\":46,\"kind\":1024,\"name\":\"marineWasmPath\",\"url\":\"interfaces/PeerConfig.html#__type-1.marineWasmPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PeerConfig.__type\"},{\"id\":47,\"kind\":1024,\"name\":\"avmWasmPath\",\"url\":\"interfaces/PeerConfig.html#__type-1.avmWasmPath\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PeerConfig.__type\"},{\"id\":48,\"kind\":1024,\"name\":\"debug\",\"url\":\"interfaces/PeerConfig.html#debug\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":49,\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/PeerConfig.html#__type\",\"classes\":\"tsd-kind-type-literal tsd-parent-kind-interface\",\"parent\":\"PeerConfig\"},{\"id\":50,\"kind\":1024,\"name\":\"printParticleId\",\"url\":\"interfaces/PeerConfig.html#__type.printParticleId\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PeerConfig.__type\"},{\"id\":51,\"kind\":1024,\"name\":\"marineLogLevel\",\"url\":\"interfaces/PeerConfig.html#__type.marineLogLevel\",\"classes\":\"tsd-kind-property tsd-parent-kind-type-literal\",\"parent\":\"PeerConfig.__type\"},{\"id\":52,\"kind\":4194304,\"name\":\"AvmLoglevel\",\"url\":\"modules.html#AvmLoglevel\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":53,\"kind\":4194304,\"name\":\"PeerIdB58\",\"url\":\"modules.html#PeerIdB58\",\"classes\":\"tsd-kind-type-alias\"},{\"id\":54,\"kind\":256,\"name\":\"CallParams\",\"url\":\"interfaces/CallParams.html\",\"classes\":\"tsd-kind-interface tsd-has-type-parameter\"},{\"id\":55,\"kind\":1024,\"name\":\"particleId\",\"url\":\"interfaces/CallParams.html#particleId\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CallParams\"},{\"id\":56,\"kind\":1024,\"name\":\"initPeerId\",\"url\":\"interfaces/CallParams.html#initPeerId\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CallParams\"},{\"id\":57,\"kind\":1024,\"name\":\"timestamp\",\"url\":\"interfaces/CallParams.html#timestamp\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CallParams\"},{\"id\":58,\"kind\":1024,\"name\":\"ttl\",\"url\":\"interfaces/CallParams.html#ttl\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CallParams\"},{\"id\":59,\"kind\":1024,\"name\":\"signature\",\"url\":\"interfaces/CallParams.html#signature\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CallParams\"},{\"id\":60,\"kind\":1024,\"name\":\"tetraplets\",\"url\":\"interfaces/CallParams.html#tetraplets\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CallParams\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"parent\"],\"fieldVectors\":[[\"name/0\",[0,37.217]],[\"parent/0\",[]],[\"name/1\",[1,32.108]],[\"parent/1\",[]],[\"name/2\",[2,18.758]],[\"parent/2\",[1,2.999]],[\"name/3\",[3,32.108]],[\"parent/3\",[4,1.496]],[\"name/4\",[2,18.758]],[\"parent/4\",[4,1.496]],[\"name/5\",[5,32.108]],[\"parent/5\",[4,1.496]],[\"name/6\",[2,18.758]],[\"parent/6\",[4,1.496]],[\"name/7\",[6,32.108]],[\"parent/7\",[4,1.496]],[\"name/8\",[2,18.758]],[\"parent/8\",[4,1.496]],[\"name/9\",[7,37.217]],[\"parent/9\",[4,1.496]],[\"name/10\",[2,18.758]],[\"parent/10\",[4,1.496]],[\"name/11\",[8,32.108]],[\"parent/11\",[4,1.496]],[\"name/12\",[2,18.758]],[\"parent/12\",[4,1.496]],[\"name/13\",[9,32.108]],[\"parent/13\",[4,1.496]],[\"name/14\",[2,18.758]],[\"parent/14\",[4,1.496]],[\"name/15\",[10,37.217]],[\"parent/15\",[]],[\"name/16\",[11,17.758]],[\"parent/16\",[]],[\"name/17\",[12,37.217]],[\"parent/17\",[11,1.658]],[\"name/18\",[13,37.217]],[\"parent/18\",[11,1.658]],[\"name/19\",[14,32.108]],[\"parent/19\",[11,1.658]],[\"name/20\",[15,37.217]],[\"parent/20\",[11,1.658]],[\"name/21\",[16,37.217]],[\"parent/21\",[11,1.658]],[\"name/22\",[17,37.217]],[\"parent/22\",[11,1.658]],[\"name/23\",[18,37.217]],[\"parent/23\",[11,1.658]],[\"name/24\",[19,37.217]],[\"parent/24\",[11,1.658]],[\"name/25\",[20,18.758]],[\"parent/25\",[]],[\"name/26\",[21,37.217]],[\"parent/26\",[20,1.752]],[\"name/27\",[14,32.108]],[\"parent/27\",[20,1.752]],[\"name/28\",[6,32.108]],[\"parent/28\",[20,1.752]],[\"name/29\",[3,32.108]],[\"parent/29\",[20,1.752]],[\"name/30\",[22,37.217]],[\"parent/30\",[20,1.752]],[\"name/31\",[8,32.108]],[\"parent/31\",[20,1.752]],[\"name/32\",[9,32.108]],[\"parent/32\",[20,1.752]],[\"name/33\",[5,32.108]],[\"parent/33\",[20,1.752]],[\"name/34\",[23,15.244]],[\"parent/34\",[]],[\"name/35\",[24,37.217]],[\"parent/35\",[23,1.424]],[\"name/36\",[25,32.108]],[\"parent/36\",[23,1.424]],[\"name/37\",[11,17.758]],[\"parent/37\",[23,1.424]],[\"name/38\",[26,37.217]],[\"parent/38\",[23,1.424]],[\"name/39\",[27,37.217]],[\"parent/39\",[23,1.424]],[\"name/40\",[28,37.217]],[\"parent/40\",[23,1.424]],[\"name/41\",[29,37.217]],[\"parent/41\",[23,1.424]],[\"name/42\",[30,37.217]],[\"parent/42\",[23,1.424]],[\"name/43\",[31,37.217]],[\"parent/43\",[23,1.424]],[\"name/44\",[2,18.758]],[\"parent/44\",[23,1.424]],[\"name/45\",[32,37.217]],[\"parent/45\",[33,2.262]],[\"name/46\",[34,37.217]],[\"parent/46\",[33,2.262]],[\"name/47\",[35,37.217]],[\"parent/47\",[33,2.262]],[\"name/48\",[36,37.217]],[\"parent/48\",[23,1.424]],[\"name/49\",[2,18.758]],[\"parent/49\",[23,1.424]],[\"name/50\",[37,37.217]],[\"parent/50\",[33,2.262]],[\"name/51\",[38,37.217]],[\"parent/51\",[33,2.262]],[\"name/52\",[25,32.108]],[\"parent/52\",[]],[\"name/53\",[39,37.217]],[\"parent/53\",[]],[\"name/54\",[40,21.122]],[\"parent/54\",[]],[\"name/55\",[41,37.217]],[\"parent/55\",[40,1.973]],[\"name/56\",[42,37.217]],[\"parent/56\",[40,1.973]],[\"name/57\",[43,37.217]],[\"parent/57\",[40,1.973]],[\"name/58\",[44,37.217]],[\"parent/58\",[40,1.973]],[\"name/59\",[45,37.217]],[\"parent/59\",[40,1.973]],[\"name/60\",[46,37.217]],[\"parent/60\",[40,1.973]]],\"invertedIndex\":[[\"__type\",{\"_index\":2,\"name\":{\"2\":{},\"4\":{},\"6\":{},\"8\":{},\"10\":{},\"12\":{},\"14\":{},\"44\":{},\"49\":{}},\"parent\":{}}],[\"avmloglevel\",{\"_index\":25,\"name\":{\"36\":{},\"52\":{}},\"parent\":{}}],[\"avmrunner\",{\"_index\":30,\"name\":{\"42\":{}},\"parent\":{}}],[\"avmwasmpath\",{\"_index\":35,\"name\":{\"47\":{}},\"parent\":{}}],[\"callparams\",{\"_index\":40,\"name\":{\"54\":{}},\"parent\":{\"55\":{},\"56\":{},\"57\":{},\"58\":{},\"59\":{},\"60\":{}}}],[\"checkconnectiontimeoutms\",{\"_index\":26,\"name\":{\"38\":{}},\"parent\":{}}],[\"connectto\",{\"_index\":24,\"name\":{\"35\":{}},\"parent\":{}}],[\"constructor\",{\"_index\":14,\"name\":{\"19\":{},\"27\":{}},\"parent\":{}}],[\"debug\",{\"_index\":36,\"name\":{\"48\":{}},\"parent\":{}}],[\"defaultttlms\",{\"_index\":29,\"name\":{\"41\":{}},\"parent\":{}}],[\"dialtimeoutms\",{\"_index\":28,\"name\":{\"40\":{}},\"parent\":{}}],[\"fluence\",{\"_index\":1,\"name\":{\"1\":{}},\"parent\":{\"2\":{}}}],[\"fluence.__type\",{\"_index\":4,\"name\":{},\"parent\":{\"3\":{},\"4\":{},\"5\":{},\"6\":{},\"7\":{},\"8\":{},\"9\":{},\"10\":{},\"11\":{},\"12\":{},\"13\":{},\"14\":{}}}],[\"fluencepeer\",{\"_index\":20,\"name\":{\"25\":{}},\"parent\":{\"26\":{},\"27\":{},\"28\":{},\"29\":{},\"30\":{},\"31\":{},\"32\":{},\"33\":{}}}],[\"fromed25519sk\",{\"_index\":12,\"name\":{\"17\":{}},\"parent\":{}}],[\"getpeer\",{\"_index\":7,\"name\":{\"9\":{}},\"parent\":{}}],[\"getservices\",{\"_index\":22,\"name\":{\"30\":{}},\"parent\":{}}],[\"getstatus\",{\"_index\":6,\"name\":{\"7\":{},\"28\":{}},\"parent\":{}}],[\"initpeerid\",{\"_index\":42,\"name\":{\"56\":{}},\"parent\":{}}],[\"isinstance\",{\"_index\":21,\"name\":{\"26\":{}},\"parent\":{}}],[\"keypair\",{\"_index\":11,\"name\":{\"16\":{},\"37\":{}},\"parent\":{\"17\":{},\"18\":{},\"19\":{},\"20\":{},\"21\":{},\"22\":{},\"23\":{},\"24\":{}}}],[\"libp2ppeerid\",{\"_index\":15,\"name\":{\"20\":{}},\"parent\":{}}],[\"marinejs\",{\"_index\":31,\"name\":{\"43\":{}},\"parent\":{}}],[\"marineloglevel\",{\"_index\":38,\"name\":{\"51\":{}},\"parent\":{}}],[\"marinewasmpath\",{\"_index\":34,\"name\":{\"46\":{}},\"parent\":{}}],[\"particleid\",{\"_index\":41,\"name\":{\"55\":{}},\"parent\":{}}],[\"peerconfig\",{\"_index\":23,\"name\":{\"34\":{}},\"parent\":{\"35\":{},\"36\":{},\"37\":{},\"38\":{},\"39\":{},\"40\":{},\"41\":{},\"42\":{},\"43\":{},\"44\":{},\"48\":{},\"49\":{}}}],[\"peerconfig.__type\",{\"_index\":33,\"name\":{},\"parent\":{\"45\":{},\"46\":{},\"47\":{},\"50\":{},\"51\":{}}}],[\"peeridb58\",{\"_index\":39,\"name\":{\"53\":{}},\"parent\":{}}],[\"peerstatus\",{\"_index\":10,\"name\":{\"15\":{}},\"parent\":{}}],[\"printparticleid\",{\"_index\":37,\"name\":{\"50\":{}},\"parent\":{}}],[\"randomed25519\",{\"_index\":13,\"name\":{\"18\":{}},\"parent\":{}}],[\"registermarineservice\",{\"_index\":8,\"name\":{\"11\":{},\"31\":{}},\"parent\":{}}],[\"removemarineservice\",{\"_index\":9,\"name\":{\"13\":{},\"32\":{}},\"parent\":{}}],[\"setloglevel\",{\"_index\":0,\"name\":{\"0\":{}},\"parent\":{}}],[\"signature\",{\"_index\":45,\"name\":{\"59\":{}},\"parent\":{}}],[\"signbytes\",{\"_index\":18,\"name\":{\"23\":{}},\"parent\":{}}],[\"skipcheckconnection\",{\"_index\":27,\"name\":{\"39\":{}},\"parent\":{}}],[\"start\",{\"_index\":3,\"name\":{\"3\":{},\"29\":{}},\"parent\":{}}],[\"stop\",{\"_index\":5,\"name\":{\"5\":{},\"33\":{}},\"parent\":{}}],[\"tetraplets\",{\"_index\":46,\"name\":{\"60\":{}},\"parent\":{}}],[\"timestamp\",{\"_index\":43,\"name\":{\"57\":{}},\"parent\":{}}],[\"tob58string\",{\"_index\":16,\"name\":{\"21\":{}},\"parent\":{}}],[\"toed25519privatekey\",{\"_index\":17,\"name\":{\"22\":{}},\"parent\":{}}],[\"ttl\",{\"_index\":44,\"name\":{\"58\":{}},\"parent\":{}}],[\"verify\",{\"_index\":19,\"name\":{\"24\":{}},\"parent\":{}}],[\"workerscriptpath\",{\"_index\":32,\"name\":{\"45\":{}},\"parent\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css deleted file mode 100644 index 6127b27c..00000000 --- a/docs/assets/style.css +++ /dev/null @@ -1,1414 +0,0 @@ -@import url("./icons.css"); - -:root { - /* Light */ - --light-color-background: #fcfcfc; - --light-color-secondary-background: #fff; - --light-color-text: #222; - --light-color-text-aside: #707070; - --light-color-link: #4da6ff; - --light-color-menu-divider: #eee; - --light-color-menu-divider-focus: #000; - --light-color-menu-label: #707070; - --light-color-panel: var(--light-color-secondary-background); - --light-color-panel-divider: #eee; - --light-color-comment-tag: #707070; - --light-color-comment-tag-text: #fff; - --light-color-ts: #9600ff; - --light-color-ts-interface: #647f1b; - --light-color-ts-enum: #937210; - --light-color-ts-class: #0672de; - --light-color-ts-private: #707070; - --light-color-toolbar: #fff; - --light-color-toolbar-text: #333; - --light-icon-filter: invert(0); - --light-external-icon: url("data:image/svg+xml;utf8,"); - - /* Dark */ - --dark-color-background: #36393f; - --dark-color-secondary-background: #2f3136; - --dark-color-text: #ffffff; - --dark-color-text-aside: #e6e4e4; - --dark-color-link: #00aff4; - --dark-color-menu-divider: #eee; - --dark-color-menu-divider-focus: #000; - --dark-color-menu-label: #707070; - --dark-color-panel: var(--dark-color-secondary-background); - --dark-color-panel-divider: #818181; - --dark-color-comment-tag: #dcddde; - --dark-color-comment-tag-text: #2f3136; - --dark-color-ts: #c97dff; - --dark-color-ts-interface: #9cbe3c; - --dark-color-ts-enum: #d6ab29; - --dark-color-ts-class: #3695f3; - --dark-color-ts-private: #e2e2e2; - --dark-color-toolbar: #34373c; - --dark-color-toolbar-text: #ffffff; - --dark-icon-filter: invert(1); - --dark-external-icon: url("data:image/svg+xml;utf8,"); -} - -@media (prefers-color-scheme: light) { - :root { - --color-background: var(--light-color-background); - --color-secondary-background: var(--light-color-secondary-background); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - --color-menu-divider: var(--light-color-menu-divider); - --color-menu-divider-focus: var(--light-color-menu-divider-focus); - --color-menu-label: var(--light-color-menu-label); - --color-panel: var(--light-color-panel); - --color-panel-divider: var(--light-color-panel-divider); - --color-comment-tag: var(--light-color-comment-tag); - --color-comment-tag-text: var(--light-color-comment-tag-text); - --color-ts: var(--light-color-ts); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-class: var(--light-color-ts-class); - --color-ts-private: var(--light-color-ts-private); - --color-toolbar: var(--light-color-toolbar); - --color-toolbar-text: var(--light-color-toolbar-text); - --icon-filter: var(--light-icon-filter); - --external-icon: var(--light-external-icon); - } -} - -@media (prefers-color-scheme: dark) { - :root { - --color-background: var(--dark-color-background); - --color-secondary-background: var(--dark-color-secondary-background); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - --color-menu-divider: var(--dark-color-menu-divider); - --color-menu-divider-focus: var(--dark-color-menu-divider-focus); - --color-menu-label: var(--dark-color-menu-label); - --color-panel: var(--dark-color-panel); - --color-panel-divider: var(--dark-color-panel-divider); - --color-comment-tag: var(--dark-color-comment-tag); - --color-comment-tag-text: var(--dark-color-comment-tag-text); - --color-ts: var(--dark-color-ts); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-private: var(--dark-color-ts-private); - --color-toolbar: var(--dark-color-toolbar); - --color-toolbar-text: var(--dark-color-toolbar-text); - --icon-filter: var(--dark-icon-filter); - --external-icon: var(--dark-external-icon); - } -} - -body { - margin: 0; -} - -body.light { - --color-background: var(--light-color-background); - --color-secondary-background: var(--light-color-secondary-background); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - --color-menu-divider: var(--light-color-menu-divider); - --color-menu-divider-focus: var(--light-color-menu-divider-focus); - --color-menu-label: var(--light-color-menu-label); - --color-panel: var(--light-color-panel); - --color-panel-divider: var(--light-color-panel-divider); - --color-comment-tag: var(--light-color-comment-tag); - --color-comment-tag-text: var(--light-color-comment-tag-text); - --color-ts: var(--light-color-ts); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-class: var(--light-color-ts-class); - --color-ts-private: var(--light-color-ts-private); - --color-toolbar: var(--light-color-toolbar); - --color-toolbar-text: var(--light-color-toolbar-text); - --icon-filter: var(--light-icon-filter); - --external-icon: var(--light-external-icon); -} - -body.dark { - --color-background: var(--dark-color-background); - --color-secondary-background: var(--dark-color-secondary-background); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - --color-menu-divider: var(--dark-color-menu-divider); - --color-menu-divider-focus: var(--dark-color-menu-divider-focus); - --color-menu-label: var(--dark-color-menu-label); - --color-panel: var(--dark-color-panel); - --color-panel-divider: var(--dark-color-panel-divider); - --color-comment-tag: var(--dark-color-comment-tag); - --color-comment-tag-text: var(--dark-color-comment-tag-text); - --color-ts: var(--dark-color-ts); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-private: var(--dark-color-ts-private); - --color-toolbar: var(--dark-color-toolbar); - --color-toolbar-text: var(--dark-color-toolbar-text); - --icon-filter: var(--dark-icon-filter); - --external-icon: var(--dark-external-icon); -} - -h1, -h2, -h3, -h4, -h5, -h6 { - line-height: 1.2; -} - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -h2 { - font-size: 1.5em; - margin: 0.83em 0; -} - -h3 { - font-size: 1.17em; - margin: 1em 0; -} - -h4, -.tsd-index-panel h3 { - font-size: 1em; - margin: 1.33em 0; -} - -h5 { - font-size: 0.83em; - margin: 1.67em 0; -} - -h6 { - font-size: 0.67em; - margin: 2.33em 0; -} - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - -dl, -menu, -ol, -ul { - margin: 1em 0; -} - -dd { - margin: 0 0 0 40px; -} - -.container { - max-width: 1200px; - margin: 0 auto; - padding: 0 40px; -} -@media (max-width: 640px) { - .container { - padding: 0 20px; - } -} - -.container-main { - padding-bottom: 200px; -} - -.row { - display: flex; - position: relative; - margin: 0 -10px; -} -.row:after { - visibility: hidden; - display: block; - content: ""; - clear: both; - height: 0; -} - -.col-4, -.col-8 { - box-sizing: border-box; - float: left; - padding: 0 10px; -} - -.col-4 { - width: 33.3333333333%; -} -.col-8 { - width: 66.6666666667%; -} - -ul.tsd-descriptions > li > :first-child, -.tsd-panel > :first-child, -.col-8 > :first-child, -.col-4 > :first-child, -ul.tsd-descriptions > li > :first-child > :first-child, -.tsd-panel > :first-child > :first-child, -.col-8 > :first-child > :first-child, -.col-4 > :first-child > :first-child, -ul.tsd-descriptions > li > :first-child > :first-child > :first-child, -.tsd-panel > :first-child > :first-child > :first-child, -.col-8 > :first-child > :first-child > :first-child, -.col-4 > :first-child > :first-child > :first-child { - margin-top: 0; -} -ul.tsd-descriptions > li > :last-child, -.tsd-panel > :last-child, -.col-8 > :last-child, -.col-4 > :last-child, -ul.tsd-descriptions > li > :last-child > :last-child, -.tsd-panel > :last-child > :last-child, -.col-8 > :last-child > :last-child, -.col-4 > :last-child > :last-child, -ul.tsd-descriptions > li > :last-child > :last-child > :last-child, -.tsd-panel > :last-child > :last-child > :last-child, -.col-8 > :last-child > :last-child > :last-child, -.col-4 > :last-child > :last-child > :last-child { - margin-bottom: 0; -} - -@keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -@keyframes fade-out { - from { - opacity: 1; - visibility: visible; - } - to { - opacity: 0; - } -} -@keyframes fade-in-delayed { - 0% { - opacity: 0; - } - 33% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -@keyframes fade-out-delayed { - 0% { - opacity: 1; - visibility: visible; - } - 66% { - opacity: 0; - } - 100% { - opacity: 0; - } -} -@keyframes shift-to-left { - from { - transform: translate(0, 0); - } - to { - transform: translate(-25%, 0); - } -} -@keyframes unshift-to-left { - from { - transform: translate(-25%, 0); - } - to { - transform: translate(0, 0); - } -} -@keyframes pop-in-from-right { - from { - transform: translate(100%, 0); - } - to { - transform: translate(0, 0); - } -} -@keyframes pop-out-to-right { - from { - transform: translate(0, 0); - visibility: visible; - } - to { - transform: translate(100%, 0); - } -} -body { - background: var(--color-background); - font-family: "Segoe UI", sans-serif; - font-size: 16px; - color: var(--color-text); -} - -a { - color: var(--color-link); - text-decoration: none; -} -a:hover { - text-decoration: underline; -} -a.external[target="_blank"] { - background-image: var(--external-icon); - background-position: top 3px right; - background-repeat: no-repeat; - padding-right: 13px; -} - -code, -pre { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - padding: 0.2em; - margin: 0; - font-size: 14px; -} - -pre { - padding: 10px; -} -pre code { - padding: 0; - font-size: 100%; -} - -blockquote { - margin: 1em 0; - padding-left: 1em; - border-left: 4px solid gray; -} - -.tsd-typography { - line-height: 1.333em; -} -.tsd-typography ul { - list-style: square; - padding: 0 0 0 20px; - margin: 0; -} -.tsd-typography h4, -.tsd-typography .tsd-index-panel h3, -.tsd-index-panel .tsd-typography h3, -.tsd-typography h5, -.tsd-typography h6 { - font-size: 1em; - margin: 0; -} -.tsd-typography h5, -.tsd-typography h6 { - font-weight: normal; -} -.tsd-typography p, -.tsd-typography ul, -.tsd-typography ol { - margin: 1em 0; -} - -@media (min-width: 901px) and (max-width: 1024px) { - html .col-content { - width: 72%; - } - html .col-menu { - width: 28%; - } - html .tsd-navigation { - padding-left: 10px; - } -} -@media (max-width: 900px) { - html .col-content { - float: none; - width: 100%; - } - html .col-menu { - position: fixed !important; - overflow: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - width: 100%; - padding: 20px 20px 0 0; - max-width: 450px; - visibility: hidden; - background-color: var(--color-panel); - transform: translate(100%, 0); - } - html .col-menu > *:last-child { - padding-bottom: 20px; - } - html .overlay { - content: ""; - display: block; - position: fixed; - z-index: 1023; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); - visibility: hidden; - } - - .to-has-menu .overlay { - animation: fade-in 0.4s; - } - - .to-has-menu :is(header, footer, .col-content) { - animation: shift-to-left 0.4s; - } - - .to-has-menu .col-menu { - animation: pop-in-from-right 0.4s; - } - - .from-has-menu .overlay { - animation: fade-out 0.4s; - } - - .from-has-menu :is(header, footer, .col-content) { - animation: unshift-to-left 0.4s; - } - - .from-has-menu .col-menu { - animation: pop-out-to-right 0.4s; - } - - .has-menu body { - overflow: hidden; - } - .has-menu .overlay { - visibility: visible; - } - .has-menu :is(header, footer, .col-content) { - transform: translate(-25%, 0); - } - .has-menu .col-menu { - visibility: visible; - transform: translate(0, 0); - display: grid; - grid-template-rows: auto 1fr; - max-height: 100vh; - } - .has-menu .tsd-navigation { - max-height: 100%; - } -} - -.tsd-page-title { - padding: 70px 0 20px 0; - margin: 0 0 40px 0; - background: var(--color-panel); - box-shadow: 0 0 5px rgba(0, 0, 0, 0.35); -} -.tsd-page-title h1 { - margin: 0; -} - -.tsd-breadcrumb { - margin: 0; - padding: 0; - color: var(--color-text-aside); -} -.tsd-breadcrumb a { - color: var(--color-text-aside); - text-decoration: none; -} -.tsd-breadcrumb a:hover { - text-decoration: underline; -} -.tsd-breadcrumb li { - display: inline; -} -.tsd-breadcrumb li:after { - content: " / "; -} - -dl.tsd-comment-tags { - overflow: hidden; -} -dl.tsd-comment-tags dt { - float: left; - padding: 1px 5px; - margin: 0 10px 0 0; - border-radius: 4px; - border: 1px solid var(--color-comment-tag); - color: var(--color-comment-tag); - font-size: 0.8em; - font-weight: normal; -} -dl.tsd-comment-tags dd { - margin: 0 0 10px 0; -} -dl.tsd-comment-tags dd:before, -dl.tsd-comment-tags dd:after { - display: table; - content: " "; -} -dl.tsd-comment-tags dd pre, -dl.tsd-comment-tags dd:after { - clear: both; -} -dl.tsd-comment-tags p { - margin: 0; -} - -.tsd-panel.tsd-comment .lead { - font-size: 1.1em; - line-height: 1.333em; - margin-bottom: 2em; -} -.tsd-panel.tsd-comment .lead:last-child { - margin-bottom: 0; -} - -.toggle-protected .tsd-is-private { - display: none; -} - -.toggle-public .tsd-is-private, -.toggle-public .tsd-is-protected, -.toggle-public .tsd-is-private-protected { - display: none; -} - -.toggle-inherited .tsd-is-inherited { - display: none; -} - -.toggle-externals .tsd-is-external { - display: none; -} - -#tsd-filter { - position: relative; - display: inline-block; - height: 40px; - vertical-align: bottom; -} -.no-filter #tsd-filter { - display: none; -} -#tsd-filter .tsd-filter-group { - display: inline-block; - height: 40px; - vertical-align: bottom; - white-space: nowrap; -} -#tsd-filter input { - display: none; -} -@media (max-width: 900px) { - #tsd-filter .tsd-filter-group { - display: block; - position: absolute; - top: 40px; - right: 20px; - height: auto; - background-color: var(--color-panel); - visibility: hidden; - transform: translate(50%, 0); - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); - } - .has-options #tsd-filter .tsd-filter-group { - visibility: visible; - } - .to-has-options #tsd-filter .tsd-filter-group { - animation: fade-in 0.2s; - } - .from-has-options #tsd-filter .tsd-filter-group { - animation: fade-out 0.2s; - } - #tsd-filter label, - #tsd-filter .tsd-select { - display: block; - padding-right: 20px; - } -} - -footer { - border-top: 1px solid var(--color-panel-divider); - background-color: var(--color-panel); -} -footer:after { - content: ""; - display: table; -} -footer.with-border-bottom { - border-bottom: 1px solid var(--color-panel-divider); -} -footer .tsd-legend-group { - font-size: 0; -} -footer .tsd-legend { - display: inline-block; - width: 25%; - padding: 0; - font-size: 16px; - list-style: none; - line-height: 1.333em; - vertical-align: top; -} -@media (max-width: 900px) { - footer .tsd-legend { - width: 50%; - } -} - -.tsd-hierarchy { - list-style: square; - padding: 0 0 0 20px; - margin: 0; -} -.tsd-hierarchy .target { - font-weight: bold; -} - -.tsd-index-panel .tsd-index-content { - margin-bottom: -30px !important; -} -.tsd-index-panel .tsd-index-section { - margin-bottom: 30px !important; -} -.tsd-index-panel h3 { - margin: 0 -20px 10px -20px; - padding: 0 20px 10px 20px; - border-bottom: 1px solid var(--color-panel-divider); -} -.tsd-index-panel ul.tsd-index-list { - -webkit-column-count: 3; - -moz-column-count: 3; - -ms-column-count: 3; - -o-column-count: 3; - column-count: 3; - -webkit-column-gap: 20px; - -moz-column-gap: 20px; - -ms-column-gap: 20px; - -o-column-gap: 20px; - column-gap: 20px; - padding: 0; - list-style: none; - line-height: 1.333em; -} -@media (max-width: 900px) { - .tsd-index-panel ul.tsd-index-list { - -webkit-column-count: 1; - -moz-column-count: 1; - -ms-column-count: 1; - -o-column-count: 1; - column-count: 1; - } -} -@media (min-width: 901px) and (max-width: 1024px) { - .tsd-index-panel ul.tsd-index-list { - -webkit-column-count: 2; - -moz-column-count: 2; - -ms-column-count: 2; - -o-column-count: 2; - column-count: 2; - } -} -.tsd-index-panel ul.tsd-index-list li { - -webkit-page-break-inside: avoid; - -moz-page-break-inside: avoid; - -ms-page-break-inside: avoid; - -o-page-break-inside: avoid; - page-break-inside: avoid; -} -.tsd-index-panel a, -.tsd-index-panel .tsd-parent-kind-module a { - color: var(--color-ts); -} -.tsd-index-panel .tsd-parent-kind-interface a { - color: var(--color-ts-interface); -} -.tsd-index-panel .tsd-parent-kind-enum a { - color: var(--color-ts-enum); -} -.tsd-index-panel .tsd-parent-kind-class a { - color: var(--color-ts-class); -} -.tsd-index-panel .tsd-kind-module a { - color: var(--color-ts); -} -.tsd-index-panel .tsd-kind-interface a { - color: var(--color-ts-interface); -} -.tsd-index-panel .tsd-kind-enum a { - color: var(--color-ts-enum); -} -.tsd-index-panel .tsd-kind-class a { - color: var(--color-ts-class); -} -.tsd-index-panel .tsd-is-private a { - color: var(--color-ts-private); -} - -.tsd-flag { - display: inline-block; - padding: 0.25em 0.4em; - border-radius: 4px; - color: var(--color-comment-tag-text); - background-color: var(--color-comment-tag); - text-indent: 0; - font-size: 75%; - line-height: 1; - font-weight: normal; -} - -.tsd-anchor { - position: absolute; - top: -100px; -} - -.tsd-member { - position: relative; -} -.tsd-member .tsd-anchor + h3 { - margin-top: 0; - margin-bottom: 0; - border-bottom: none; -} -.tsd-member [data-tsd-kind] { - color: var(--color-ts); -} -.tsd-member [data-tsd-kind="Interface"] { - color: var(--color-ts-interface); -} -.tsd-member [data-tsd-kind="Enum"] { - color: var(--color-ts-enum); -} -.tsd-member [data-tsd-kind="Class"] { - color: var(--color-ts-class); -} -.tsd-member [data-tsd-kind="Private"] { - color: var(--color-ts-private); -} - -.tsd-navigation { - margin: 0 0 0 40px; -} -.tsd-navigation a { - display: block; - padding-top: 2px; - padding-bottom: 2px; - border-left: 2px solid transparent; - color: var(--color-text); - text-decoration: none; - transition: border-left-color 0.1s; -} -.tsd-navigation a:hover { - text-decoration: underline; -} -.tsd-navigation ul { - margin: 0; - padding: 0; - list-style: none; -} -.tsd-navigation li { - padding: 0; -} - -.tsd-navigation.primary { - padding-bottom: 40px; -} -.tsd-navigation.primary a { - display: block; - padding-top: 6px; - padding-bottom: 6px; -} -.tsd-navigation.primary ul li a { - padding-left: 5px; -} -.tsd-navigation.primary ul li li a { - padding-left: 25px; -} -.tsd-navigation.primary ul li li li a { - padding-left: 45px; -} -.tsd-navigation.primary ul li li li li a { - padding-left: 65px; -} -.tsd-navigation.primary ul li li li li li a { - padding-left: 85px; -} -.tsd-navigation.primary ul li li li li li li a { - padding-left: 105px; -} -.tsd-navigation.primary > ul { - border-bottom: 1px solid var(--color-panel-divider); -} -.tsd-navigation.primary li { - border-top: 1px solid var(--color-panel-divider); -} -.tsd-navigation.primary li.current > a { - font-weight: bold; -} -.tsd-navigation.primary li.label span { - display: block; - padding: 20px 0 6px 5px; - color: var(--color-menu-label); -} -.tsd-navigation.primary li.globals + li > span, -.tsd-navigation.primary li.globals + li > a { - padding-top: 20px; -} - -.tsd-navigation.secondary { - max-height: calc(100vh - 1rem - 40px); - overflow: auto; - position: sticky; - top: calc(0.5rem + 40px); - transition: 0.3s; -} -.tsd-navigation.secondary.tsd-navigation--toolbar-hide { - max-height: calc(100vh - 1rem); - top: 0.5rem; -} -.tsd-navigation.secondary ul { - transition: opacity 0.2s; -} -.tsd-navigation.secondary ul li a { - padding-left: 25px; -} -.tsd-navigation.secondary ul li li a { - padding-left: 45px; -} -.tsd-navigation.secondary ul li li li a { - padding-left: 65px; -} -.tsd-navigation.secondary ul li li li li a { - padding-left: 85px; -} -.tsd-navigation.secondary ul li li li li li a { - padding-left: 105px; -} -.tsd-navigation.secondary ul li li li li li li a { - padding-left: 125px; -} -.tsd-navigation.secondary ul.current a { - border-left-color: var(--color-panel-divider); -} -.tsd-navigation.secondary li.focus > a, -.tsd-navigation.secondary ul.current li.focus > a { - border-left-color: var(--color-menu-divider-focus); -} -.tsd-navigation.secondary li.current { - margin-top: 20px; - margin-bottom: 20px; - border-left-color: var(--color-panel-divider); -} -.tsd-navigation.secondary li.current > a { - font-weight: bold; -} - -@media (min-width: 901px) { - .menu-sticky-wrap { - position: static; - } -} - -.tsd-panel { - margin: 20px 0; - padding: 20px; - background-color: var(--color-panel); - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -} -.tsd-panel:empty { - display: none; -} -.tsd-panel > h1, -.tsd-panel > h2, -.tsd-panel > h3 { - margin: 1.5em -20px 10px -20px; - padding: 0 20px 10px 20px; - border-bottom: 1px solid var(--color-panel-divider); -} -.tsd-panel > h1.tsd-before-signature, -.tsd-panel > h2.tsd-before-signature, -.tsd-panel > h3.tsd-before-signature { - margin-bottom: 0; - border-bottom: 0; -} -.tsd-panel table { - display: block; - width: 100%; - overflow: auto; - margin-top: 10px; - word-break: normal; - word-break: keep-all; - border-collapse: collapse; -} -.tsd-panel table th { - font-weight: bold; -} -.tsd-panel table th, -.tsd-panel table td { - padding: 6px 13px; - border: 1px solid var(--color-panel-divider); -} -.tsd-panel table tr { - background: var(--color-background); -} -.tsd-panel table tr:nth-child(even) { - background: var(--color-secondary-background); -} - -.tsd-panel-group { - margin: 60px 0; -} -.tsd-panel-group > h1, -.tsd-panel-group > h2, -.tsd-panel-group > h3 { - padding-left: 20px; - padding-right: 20px; -} - -#tsd-search { - transition: background-color 0.2s; -} -#tsd-search .title { - position: relative; - z-index: 2; -} -#tsd-search .field { - position: absolute; - left: 0; - top: 0; - right: 40px; - height: 40px; -} -#tsd-search .field input { - box-sizing: border-box; - position: relative; - top: -50px; - z-index: 1; - width: 100%; - padding: 0 10px; - opacity: 0; - outline: 0; - border: 0; - background: transparent; - color: var(--color-text); -} -#tsd-search .field label { - position: absolute; - overflow: hidden; - right: -40px; -} -#tsd-search .field input, -#tsd-search .title { - transition: opacity 0.2s; -} -#tsd-search .results { - position: absolute; - visibility: hidden; - top: 40px; - width: 100%; - margin: 0; - padding: 0; - list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -} -#tsd-search .results li { - padding: 0 10px; - background-color: var(--color-background); -} -#tsd-search .results li:nth-child(even) { - background-color: var(--color-panel); -} -#tsd-search .results li.state { - display: none; -} -#tsd-search .results li.current, -#tsd-search .results li:hover { - background-color: var(--color-panel-divider); -} -#tsd-search .results a { - display: block; -} -#tsd-search .results a:before { - top: 10px; -} -#tsd-search .results span.parent { - color: var(--color-text-aside); - font-weight: normal; -} -#tsd-search.has-focus { - background-color: var(--color-panel-divider); -} -#tsd-search.has-focus .field input { - top: 0; - opacity: 1; -} -#tsd-search.has-focus .title { - z-index: 0; - opacity: 0; -} -#tsd-search.has-focus .results { - visibility: visible; -} -#tsd-search.loading .results li.state.loading { - display: block; -} -#tsd-search.failure .results li.state.failure { - display: block; -} - -.tsd-signature { - margin: 0 0 1em 0; - padding: 10px; - border: 1px solid var(--color-panel-divider); - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - font-size: 14px; - overflow-x: auto; -} -.tsd-signature.tsd-kind-icon { - padding-left: 30px; -} -.tsd-signature.tsd-kind-icon:before { - top: 10px; - left: 10px; -} -.tsd-panel > .tsd-signature { - margin-left: -20px; - margin-right: -20px; - border-width: 1px 0; -} -.tsd-panel > .tsd-signature.tsd-kind-icon { - padding-left: 40px; -} -.tsd-panel > .tsd-signature.tsd-kind-icon:before { - left: 20px; -} - -.tsd-signature-symbol { - color: var(--color-text-aside); - font-weight: normal; -} - -.tsd-signature-type { - font-style: italic; - font-weight: normal; -} - -.tsd-signatures { - padding: 0; - margin: 0 0 1em 0; - border: 1px solid var(--color-panel-divider); -} -.tsd-signatures .tsd-signature { - margin: 0; - border-width: 1px 0 0 0; - transition: background-color 0.1s; -} -.tsd-signatures .tsd-signature:first-child { - border-top-width: 0; -} -.tsd-signatures .tsd-signature.current { - background-color: var(--color-panel-divider); -} -.tsd-signatures.active > .tsd-signature { - cursor: pointer; -} -.tsd-panel > .tsd-signatures { - margin-left: -20px; - margin-right: -20px; - border-width: 1px 0; -} -.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon { - padding-left: 40px; -} -.tsd-panel > .tsd-signatures .tsd-signature.tsd-kind-icon:before { - left: 20px; -} -.tsd-panel > a.anchor + .tsd-signatures { - border-top-width: 0; - margin-top: -20px; -} - -ul.tsd-descriptions { - position: relative; - overflow: hidden; - padding: 0; - list-style: none; -} -ul.tsd-descriptions.active > .tsd-description { - display: none; -} -ul.tsd-descriptions.active > .tsd-description.current { - display: block; -} -ul.tsd-descriptions.active > .tsd-description.fade-in { - animation: fade-in-delayed 0.3s; -} -ul.tsd-descriptions.active > .tsd-description.fade-out { - animation: fade-out-delayed 0.3s; - position: absolute; - display: block; - top: 0; - left: 0; - right: 0; - opacity: 0; - visibility: hidden; -} -ul.tsd-descriptions h4, -ul.tsd-descriptions .tsd-index-panel h3, -.tsd-index-panel ul.tsd-descriptions h3 { - font-size: 16px; - margin: 1em 0 0.5em 0; -} - -ul.tsd-parameters, -ul.tsd-type-parameters { - list-style: square; - margin: 0; - padding-left: 20px; -} -ul.tsd-parameters > li.tsd-parameter-signature, -ul.tsd-type-parameters > li.tsd-parameter-signature { - list-style: none; - margin-left: -20px; -} -ul.tsd-parameters h5, -ul.tsd-type-parameters h5 { - font-size: 16px; - margin: 1em 0 0.5em 0; -} -ul.tsd-parameters .tsd-comment, -ul.tsd-type-parameters .tsd-comment { - margin-top: -0.5em; -} - -.tsd-sources { - font-size: 14px; - color: var(--color-text-aside); - margin: 0 0 1em 0; -} -.tsd-sources a { - color: var(--color-text-aside); - text-decoration: underline; -} -.tsd-sources ul, -.tsd-sources p { - margin: 0 !important; -} -.tsd-sources ul { - list-style: none; - padding: 0; -} - -.tsd-page-toolbar { - position: fixed; - z-index: 1; - top: 0; - left: 0; - width: 100%; - height: 40px; - color: var(--color-toolbar-text); - background: var(--color-toolbar); - border-bottom: 1px solid var(--color-panel-divider); - transition: transform 0.3s linear; -} -.tsd-page-toolbar a { - color: var(--color-toolbar-text); - text-decoration: none; -} -.tsd-page-toolbar a.title { - font-weight: bold; -} -.tsd-page-toolbar a.title:hover { - text-decoration: underline; -} -.tsd-page-toolbar .table-wrap { - display: table; - width: 100%; - height: 40px; -} -.tsd-page-toolbar .table-cell { - display: table-cell; - position: relative; - white-space: nowrap; - line-height: 40px; -} -.tsd-page-toolbar .table-cell:first-child { - width: 100%; -} - -.tsd-page-toolbar--hide { - transform: translateY(-100%); -} - -.tsd-select .tsd-select-list li:before, -.tsd-select .tsd-select-label:before, -.tsd-widget:before { - content: ""; - display: inline-block; - width: 40px; - height: 40px; - margin: 0 -8px 0 0; - background-image: url(./widgets.png); - background-repeat: no-repeat; - text-indent: -1024px; - vertical-align: bottom; - filter: var(--icon-filter); -} -@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { - .tsd-select .tsd-select-list li:before, - .tsd-select .tsd-select-label:before, - .tsd-widget:before { - background-image: url(./widgets@2x.png); - background-size: 320px 40px; - } -} - -.tsd-widget { - display: inline-block; - overflow: hidden; - opacity: 0.8; - height: 40px; - transition: opacity 0.1s, background-color 0.2s; - vertical-align: bottom; - cursor: pointer; -} -.tsd-widget:hover { - opacity: 0.9; -} -.tsd-widget.active { - opacity: 1; - background-color: var(--color-panel-divider); -} -.tsd-widget.no-caption { - width: 40px; -} -.tsd-widget.no-caption:before { - margin: 0; -} -.tsd-widget.search:before { - background-position: 0 0; -} -.tsd-widget.menu:before { - background-position: -40px 0; -} -.tsd-widget.options:before { - background-position: -80px 0; -} -.tsd-widget.options, -.tsd-widget.menu { - display: none; -} -@media (max-width: 900px) { - .tsd-widget.options, - .tsd-widget.menu { - display: inline-block; - } -} -input[type="checkbox"] + .tsd-widget:before { - background-position: -120px 0; -} -input[type="checkbox"]:checked + .tsd-widget:before { - background-position: -160px 0; -} - -.tsd-select { - position: relative; - display: inline-block; - height: 40px; - transition: opacity 0.1s, background-color 0.2s; - vertical-align: bottom; - cursor: pointer; -} -.tsd-select .tsd-select-label { - opacity: 0.6; - transition: opacity 0.2s; -} -.tsd-select .tsd-select-label:before { - background-position: -240px 0; -} -.tsd-select.active .tsd-select-label { - opacity: 0.8; -} -.tsd-select.active .tsd-select-list { - visibility: visible; - opacity: 1; - transition-delay: 0s; -} -.tsd-select .tsd-select-list { - position: absolute; - visibility: hidden; - top: 40px; - left: 0; - margin: 0; - padding: 0; - opacity: 0; - list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); - transition: visibility 0s 0.2s, opacity 0.2s; -} -.tsd-select .tsd-select-list li { - padding: 0 20px 0 0; - background-color: var(--color-background); -} -.tsd-select .tsd-select-list li:before { - background-position: 40px 0; -} -.tsd-select .tsd-select-list li:nth-child(even) { - background-color: var(--color-panel); -} -.tsd-select .tsd-select-list li:hover { - background-color: var(--color-panel-divider); -} -.tsd-select .tsd-select-list li.selected:before { - background-position: -200px 0; -} -@media (max-width: 900px) { - .tsd-select .tsd-select-list { - top: 0; - left: auto; - right: 100%; - margin-right: -5px; - } - .tsd-select .tsd-select-label:before { - background-position: -280px 0; - } -} - -img { - max-width: 100%; -} - -.tsd-anchor-icon { - margin-left: 10px; - vertical-align: middle; - color: var(--color-text); -} - -.tsd-anchor-icon svg { - width: 1em; - height: 1em; - visibility: hidden; -} - -.tsd-anchor-link:hover > .tsd-anchor-icon svg { - visibility: visible; -} diff --git a/docs/assets/widgets.png b/docs/assets/widgets.png deleted file mode 100644 index c7380532..00000000 Binary files a/docs/assets/widgets.png and /dev/null differ diff --git a/docs/assets/widgets@2x.png b/docs/assets/widgets@2x.png deleted file mode 100644 index 4bbbd572..00000000 Binary files a/docs/assets/widgets@2x.png and /dev/null differ diff --git a/docs/classes/FluencePeer.html b/docs/classes/FluencePeer.html deleted file mode 100644 index b4d12c18..00000000 --- a/docs/classes/FluencePeer.html +++ /dev/null @@ -1,35 +0,0 @@ -FluencePeer | @fluencelabs/fluence
Options
All
  • Public
  • Public/Protected
  • All
Menu
-

This class implements the Fluence protocol for javascript-based environments. -It provides all the necessary features to communicate with Fluence network

-

Hierarchy

  • FluencePeer

Index

Constructors

Methods

  • getServices(): { sig: Sig }
  • registerMarineService(wasm: SharedArrayBuffer | Buffer, serviceId: string): Promise<void>
  • -

    Registers marine service within the Fluence peer from wasm file. -Following helper functions can be used to load wasm files:

    -
      -
    • loadWasmFromFileSystem
    • -
    • loadWasmFromNpmPackage
    • -
    • loadWasmFromServer
    • -
    -

    Parameters

    • wasm: SharedArrayBuffer | Buffer
      -

      buffer with the wasm file for service

      -
    • serviceId: string
      -

      the service id by which the service can be accessed in aqua

      -

    Returns Promise<void>

  • removeMarineService(serviceId: string): void
  • -

    Removes the specified marine service from the Fluence peer

    -

    Parameters

    • serviceId: string
      -

      the service id to remove

      -

    Returns void

  • -

    Initializes the peer: starts the Aqua VM, initializes the default call service handlers -and (optionally) connect to the Fluence network

    -

    Parameters

    • config: PeerConfig = {}
      -

      object specifying peer configuration

      -

    Returns Promise<void>

  • stop(): Promise<void>
  • -

    Un-initializes the peer: stops all the underlying workflows, stops the Aqua VM -and disconnects from the Fluence network

    -

    Returns Promise<void>

  • -

    Checks whether the object is instance of FluencePeer class

    -

    Parameters

    • obj: unknown
      -

      object to check if it is FluencePeer

      -

    Returns obj is FluencePeer

    true if the object is FluencePeer false otherwise

    -

Legend

  • Constructor
  • Property
  • Method
  • Property
  • Static method

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/KeyPair.html b/docs/classes/KeyPair.html deleted file mode 100644 index c1f7070f..00000000 --- a/docs/classes/KeyPair.html +++ /dev/null @@ -1,14 +0,0 @@ -KeyPair | @fluencelabs/fluence
Options
All
  • Public
  • Public/Protected
  • All
Menu

Hierarchy

  • KeyPair

Index

Constructors

  • new KeyPair(libp2pPeerId: PeerId): KeyPair

Properties

Libp2pPeerId: PeerId
-

Key pair in libp2p format. Used for backward compatibility with the current FluencePeer implementation

-

Methods

  • signBytes(data: Uint8Array): Promise<Uint8Array>
  • toB58String(): string
  • toEd25519PrivateKey(): Uint8Array
  • verify(data: Uint8Array, signature: Uint8Array): Promise<boolean>
  • fromEd25519SK(arr: Uint8Array): Promise<KeyPair>
  • -

    Generates new KeyPair from ed25519 private key represented as a 32 byte array

    -

    Parameters

    • arr: Uint8Array

    Returns Promise<KeyPair>

      -
    • Promise with the created KeyPair
    • -
    -

Legend

  • Constructor
  • Property
  • Method
  • Property
  • Static method

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index f585759a..00000000 --- a/docs/index.html +++ /dev/null @@ -1,16 +0,0 @@ -@fluencelabs/fluence
Options
All
  • Public
  • Public/Protected
  • All
Menu

@fluencelabs/fluence

- -

Fluence JS

-
-

To start developing applications with Fluence JS refer to the official documentation

-

Fluence JS is an implementation of the Fluence protocol for JavaScript-based environments. It can connect browsers, Node.js applications, and so on to the Fluence p2p network.

-

Similar to the Rust Fluence Peer implementation it includes:

- -

Fluence JS can call services and functions on the Fluence network, and expose new APIs to the p2p network directly from TypeScript and JavaScript. -Aqua language uses Fluence JS as a compilation target, and they are designed to work in tandem.

-

Fluence JS can be used with any framework of your choice (or even without frameworks).

-

Legend

  • Constructor
  • Property
  • Method
  • Property
  • Static method

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/CallParams.html b/docs/interfaces/CallParams.html deleted file mode 100644 index d49e51a6..00000000 --- a/docs/interfaces/CallParams.html +++ /dev/null @@ -1,16 +0,0 @@ -CallParams | @fluencelabs/fluence
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface CallParams<ArgName>

-

Additional information about a service call

-

Type parameters

  • ArgName: string | null

    -

Hierarchy

  • CallParams

Index

Properties

initPeerId: string
-

The peer id which created the particle

-
particleId: string
-

The identifier of particle which triggered the call

-
signature?: string
-

Particle's signature

-
tetraplets: ArgName extends string ? Record<ArgName, SecurityTetraplet[]> : Record<string, never>
-

Security tetraplets

-
timestamp: number
-

Particle's timestamp when it was created

-
ttl: number
-

Time to live in milliseconds. The time after the particle should be expired

-

Legend

  • Constructor
  • Property
  • Method
  • Property
  • Static method

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/PeerConfig.html b/docs/interfaces/PeerConfig.html deleted file mode 100644 index 21f1312f..00000000 --- a/docs/interfaces/PeerConfig.html +++ /dev/null @@ -1,52 +0,0 @@ -PeerConfig | @fluencelabs/fluence
Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface PeerConfig

-

Configuration used when initiating Fluence Peer

-

Hierarchy

  • PeerConfig

Index

Properties

KeyPair?: KeyPair
-

Specify the KeyPair to be used to identify the Fluence Peer. -Will be generated randomly if not specified

-
avmLogLevel?: LogLevel
deprecated.

AVM run through marine-js infrastructure.

-
see

debug.marineLogLevel option to configure logging level of AVM

-
avmRunner?: AvmRunner
deprecated.

AVM run through marine-js infrastructure.

-
see

marineJS option to configure AVM

-
checkConnectionTimeoutMs?: number
-

When the peer established the connection to the network it sends a ping-like message to check if it works correctly. -The options allows to specify the timeout for that message in milliseconds. -If not specified the default timeout will be used

-
connectTo?: ConnectionOption
-

Node in Fluence network to connect to. -Can be in the form of:

-
    -
  • string: multiaddr in string format
  • -
  • Multiaddr: multiaddr object, @see https://github.com/multiformats/js-multiaddr
  • -
  • Node: node structure, @see Node
  • -
  • Implementation of FluenceConnection class, @see FluenceConnection -If not specified the will work locally and would not be able to send or receive particles.
  • -
-
debug?: { marineLogLevel?: LogLevel; printParticleId?: boolean }
-

Enables\disabled various debugging features

-

Type declaration

  • Optional marineLogLevel?: LogLevel
    -

    Log level for marine services. By default logging is turned off.

    -
  • Optional printParticleId?: boolean
    -

    If set to true, newly initiated particle ids will be printed to console. -Useful to see what particle id is responsible for aqua function

    -
defaultTtlMs?: number
-

Sets the default TTL for all particles originating from the peer with no TTL specified. -If the originating particle's TTL is defined then that value will be used -If the option is not set default TTL will be 7000

-
dialTimeoutMs?: number
-

The dialing timeout in milliseconds

-
marineJS?: { avmWasmPath: string; marineWasmPath: string; workerScriptPath: string }
-

This option allows to specify the location of various dependencies needed for marine-js. -Each key specifies the location of the corresponding dependency. -If Fluence peer is started inside browser the location is treated as the path to the file relative to origin. -IF Fluence peer is started in nodejs the location is treated as the full path to file on the file system.

-

Type declaration

  • avmWasmPath: string
    -

    Configures the path to AVM wasm module

    -
  • marineWasmPath: string
    -

    Configures the path to marine-js control wasm module

    -
  • workerScriptPath: string
    -

    Configures path to the marine-js worker script.

    -
skipCheckConnection?: boolean
-

When the peer established the connection to the network it sends a ping-like message to check if it works correctly. -If set to true, the ping-like message will be skipped -Default: false

-

Legend

  • Constructor
  • Property
  • Method
  • Property
  • Static method

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules.html b/docs/modules.html deleted file mode 100644 index 1eeec127..00000000 --- a/docs/modules.html +++ /dev/null @@ -1,69 +0,0 @@ -@fluencelabs/fluence
Options
All
  • Public
  • Public/Protected
  • All
Menu

@fluencelabs/fluence

Index

Type aliases

AvmLoglevel: LogLevel
-

Enum representing the log level used in Aqua VM. -Possible values: 'info', 'trace', 'debug', 'info', 'warn', 'error', 'off';

-
PeerIdB58: string
-

Peer ID's id as a base58 string (multihash/CIDv0).

-
PeerStatus: { isConnected: false; isInitialized: false; peerId: null; relayPeerId: null } | { isConnected: false; isInitialized: true; peerId: PeerIdB58; relayPeerId: null } | { isConnected: true; isInitialized: true; peerId: PeerIdB58; relayPeerId: PeerIdB58 } | { isConnected: true; isDirect: true; isInitialized: true; peerId: PeerIdB58; relayPeerId: null }
-

Information about Fluence Peer connection. -Represented as object with the following keys:

-
    -
  • isInitialized: Is the peer initialized or not.
  • -
  • peerId: Peer Id of the peer. Null if the peer is not initialized
  • -
  • isConnected: Is the peer connected to network or not
  • -
  • relayPeerId: Peer Id of the relay the peer is connected to. If the connection is direct relayPeerId is null
  • -
  • isDirect: True if the peer is connected to the network directly (not through relay)
  • -
-

Variables

Fluence: { getPeer: () => FluencePeer; getStatus: () => PeerStatus; registerMarineService: (wasm: SharedArrayBuffer | Buffer, serviceId: string) => Promise<void>; removeMarineService: (serviceId: string) => void; start: (config?: PeerConfig) => Promise<void>; stop: () => Promise<void> } = ...
-

Public interface to Fluence JS

-

Type declaration

  • getPeer: () => FluencePeer
  • getStatus: () => PeerStatus
  • registerMarineService: (wasm: SharedArrayBuffer | Buffer, serviceId: string) => Promise<void>
      • (wasm: SharedArrayBuffer | Buffer, serviceId: string): Promise<void>
      • -

        Registers marine service within the default Fluence peer from wasm file. -Following helper functions can be used to load wasm files:

        -
          -
        • loadWasmFromFileSystem
        • -
        • loadWasmFromNpmPackage
        • -
        • loadWasmFromServer
        • -
        -

        Parameters

        • wasm: SharedArrayBuffer | Buffer
          -

          buffer with the wasm file for service

          -
        • serviceId: string
          -

          the service id by which the service can be accessed in aqua

          -

        Returns Promise<void>

  • removeMarineService: (serviceId: string) => void
      • (serviceId: string): void
      • -

        Removes the specified marine service from the default Fluence peer

        -

        Parameters

        • serviceId: string
          -

          the service id to remove

          -

        Returns void

  • start: (config?: PeerConfig) => Promise<void>
      • -

        Initializes the default peer: starts the Aqua VM, initializes the default call service handlers -and (optionally) connect to the Fluence network

        -

        Parameters

        • Optional config: PeerConfig
          -

          object specifying peer configuration

          -

        Returns Promise<void>

  • stop: () => Promise<void>
      • (): Promise<void>
      • -

        Un-initializes the default peer: stops all the underlying workflows, stops the Aqua VM -and disconnects from the Fluence network

        -

        Returns Promise<void>

Functions

  • loadWasmFromFileSystem(filePath: string): Promise<SharedArrayBuffer>
  • -

    Load wasm file from the file system. Only works in nodejs environment. -The functions returns SharedArrayBuffer compatible with FluenceAppService methods.

    -

    Parameters

    • filePath: string
      -

      path to the wasm file

      -

    Returns Promise<SharedArrayBuffer>

    SharedArrayBuffer with the wasm file

    -
  • loadWasmFromNpmPackage(source: { file: string; package: string }): Promise<SharedArrayBuffer>
  • -

    Load wasm file from npm package. Only works in nodejs environment. -The function returns SharedArrayBuffer compatible with FluenceAppService methods.

    -

    Parameters

    • source: { file: string; package: string }
      -

      object specifying the source of the file. Consist two fields: package name and file path.

      -
      • file: string
      • package: string

    Returns Promise<SharedArrayBuffer>

    SharedArrayBuffer with the wasm file

    -
  • loadWasmFromServer(filePath: string): Promise<SharedArrayBuffer | Buffer>
  • -

    Load wasm file from the server. Only works in browsers. -The function will try load file into SharedArrayBuffer if the site is cross-origin isolated. -Otherwise the return value fallbacks to Buffer which is less performant but is still compatible with FluenceAppService methods. -We strongly recommend to set-up cross-origin headers. For more details see: See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements -Filename is relative to current origin.

    -

    Parameters

    • filePath: string
      -

      path to the wasm file relative to current origin

      -

    Returns Promise<SharedArrayBuffer | Buffer>

    Either SharedArrayBuffer or Buffer with the wasm file

    -
  • setLogLevel(level: LogLevelDesc): void

Legend

  • Constructor
  • Property
  • Method
  • Property
  • Static method

Settings

Theme

Generated using TypeDoc

\ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 00000000..a77db658 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "common-dev-deps", + "version": "0.1.0", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "type": "module", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "simulate-cdn": "http-server -p 8765 ./packages/client/js-client.web.standalone/dist" + }, + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": {}, + "devDependencies": { + "http-server": "14.1.1", + "@types/node": "16.11.59", + "ts-node": "10.9.1", + "typescript": "4.7", + "@fluencelabs/aqua-lib": "0.6.0", + "@fluencelabs/aqua": "0.9.1-374" + } +} diff --git a/packages/@tests/smoke/.gitignore b/packages/@tests/aqua/.gitignore similarity index 100% rename from packages/@tests/smoke/.gitignore rename to packages/@tests/aqua/.gitignore diff --git a/packages/@tests/aqua/_aqua/smoke_test.aqua b/packages/@tests/aqua/_aqua/smoke_test.aqua new file mode 100644 index 00000000..9a2cf31b --- /dev/null +++ b/packages/@tests/aqua/_aqua/smoke_test.aqua @@ -0,0 +1,5 @@ +import "@fluencelabs/registry/resources-api.aqua" + +func smokeTest(label: string) -> ?string, *string: + res, errors <- createResource(label) + <- res, errors diff --git a/packages/@tests/aqua/package.json b/packages/@tests/aqua/package.json new file mode 100644 index 00000000..748ea1f2 --- /dev/null +++ b/packages/@tests/aqua/package.json @@ -0,0 +1,28 @@ +{ + "name": "@test/aqua_for_test", + "version": "0.1.0", + "description": "Shared aqua code for tests", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "type": "module", + "scripts": { + "build": "tsc", + "compile-aqua": "aqua -i ./_aqua -o ./src/_aqua" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "@fluencelabs/fluence": "workspace:0.60.0", + "@fluencelabs/fluence-network-environment": "1.0.13", + "base64-js": "1.5.1" + }, + "devDependencies": { + "@fluencelabs/aqua": "0.9.4", + "@fluencelabs/registry": "0.7.0" + } +} diff --git a/packages/@tests/aqua/src/_aqua/smoke_test.ts b/packages/@tests/aqua/src/_aqua/smoke_test.ts new file mode 100644 index 00000000..6a10d760 --- /dev/null +++ b/packages/@tests/aqua/src/_aqua/smoke_test.ts @@ -0,0 +1,284 @@ +/** + * + * This file is auto-generated. Do not edit manually: changes may be erased. + * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. + * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues + * Aqua version: 0.9.4 + * + */ +import { FluencePeer } from '@fluencelabs/fluence'; +import type { CallParams$$ } from '@fluencelabs/fluence/dist/internal/compilerSupport/v4'; +import { callFunction$$, registerService$$ } from '@fluencelabs/fluence/dist/internal/compilerSupport/v4'; + +// Services + +// Functions + +export type SmokeTestResult = [string | null, string[]]; +export function smokeTest(label: string, config?: { ttl?: number }): Promise; + +export function smokeTest(peer: FluencePeer, label: string, config?: { ttl?: number }): Promise; + +export function smokeTest(...args: any) { + let script = ` + (xor + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "label") [] label) + ) + (new $resource_id + (new $successful + (seq + (seq + (seq + (call %init_peer_id% ("peer" "timestamp_sec") [] t) + (xor + (seq + (seq + (call -relay- ("registry" "get_key_bytes") [label [] t [] ""] bytes) + (xor + (call %init_peer_id% ("sig" "sign") [bytes] result) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + (xor + (match result.$.success! false + (ap result.$.error.[0]! $error) + ) + (seq + (seq + (seq + (seq + (seq + (seq + (ap result.$.signature! result_flat) + (call -relay- ("registry" "get_key_id") [label %init_peer_id%] id) + ) + (call -relay- ("op" "string_to_b58") [id] k) + ) + (call -relay- ("kad" "neighborhood") [k [] []] nodes) + ) + (par + (fold nodes n-0 + (par + (seq + (xor + (xor + (seq + (seq + (seq + (call n-0 ("peer" "timestamp_sec") [] t-0) + (call n-0 ("trust-graph" "get_weight") [%init_peer_id% t-0] weight) + ) + (call n-0 ("registry" "register_key") [label [] t [] "" result_flat.$.[0]! weight t-0] result-0) + ) + (xor + (match result-0.$.success! true + (ap true $successful) + ) + (ap result-0.$.error! $error) + ) + ) + (call n-0 ("op" "noop") []) + ) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call -relay- ("op" "noop") []) + ) + (next n-0) + ) + (never) + ) + (null) + ) + ) + (new $status + (new $result-1 + (seq + (seq + (seq + (par + (seq + (seq + (seq + (call -relay- ("math" "sub") [1 1] sub) + (new $successful_test + (seq + (seq + (seq + (call -relay- ("math" "add") [sub 1] successful_incr) + (fold $successful s + (seq + (seq + (ap s $successful_test) + (canon -relay- $successful_test #successful_iter_canon) + ) + (xor + (match #successful_iter_canon.length successful_incr + (null) + ) + (next s) + ) + ) + (never) + ) + ) + (canon -relay- $successful_test #successful_result_canon) + ) + (ap #successful_result_canon successful_gate) + ) + ) + ) + (call -relay- ("math" "sub") [1 1] sub-0) + ) + (ap "ok" $status) + ) + (call -relay- ("peer" "timeout") [6000 "timeout"] $status) + ) + (new $status_test + (seq + (seq + (seq + (call -relay- ("math" "add") [0 1] status_incr) + (fold $status s + (seq + (seq + (ap s $status_test) + (canon -relay- $status_test #status_iter_canon) + ) + (xor + (match #status_iter_canon.length status_incr + (null) + ) + (next s) + ) + ) + (never) + ) + ) + (canon -relay- $status_test #status_result_canon) + ) + (ap #status_result_canon status_gate) + ) + ) + ) + (xor + (match status_gate.$.[0]! "ok" + (ap true $result-1) + ) + (ap false $result-1) + ) + ) + (new $result-1_test + (seq + (seq + (seq + (call -relay- ("math" "add") [0 1] result-1_incr) + (fold $result-1 s + (seq + (seq + (ap s $result-1_test) + (canon -relay- $result-1_test #result-1_iter_canon) + ) + (xor + (match #result-1_iter_canon.length result-1_incr + (null) + ) + (next s) + ) + ) + (never) + ) + ) + (canon -relay- $result-1_test #result-1_result_canon) + ) + (ap #result-1_result_canon result-1_gate) + ) + ) + ) + ) + ) + ) + (xor + (match result-1_gate.$.[0]! false + (ap "resource wasn't created: timeout exceeded" $error) + ) + (ap id $resource_id) + ) + ) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) + ) + ) + (canon %init_peer_id% $resource_id #-resource_id-fix-0) + ) + (ap #-resource_id-fix-0 -resource_id-flat-0) + ) + ) + ) + ) + (xor + (seq + (canon %init_peer_id% $error #error_canon) + (call %init_peer_id% ("callbackSrv" "response") [-resource_id-flat-0 #error_canon]) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5]) + ) + `; + return callFunction$$( + args, + { + functionName: 'smokeTest', + arrow: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + label: { + tag: 'scalar', + name: 'string', + }, + }, + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + { + tag: 'array', + type: { + tag: 'scalar', + name: 'string', + }, + }, + ], + }, + }, + names: { + relay: '-relay-', + getDataSrv: 'getDataSrv', + callbackSrv: 'callbackSrv', + responseSrv: 'callbackSrv', + responseFnName: 'response', + errorHandlingSrv: 'errorHandlingSrv', + errorFnName: 'error', + }, + }, + script, + ); +} diff --git a/packages/@tests/aqua/src/index.ts b/packages/@tests/aqua/src/index.ts new file mode 100644 index 00000000..857d4c7e --- /dev/null +++ b/packages/@tests/aqua/src/index.ts @@ -0,0 +1,55 @@ +import { fromByteArray } from 'base64-js'; +import { Fluence } from '@fluencelabs/fluence'; +import { krasnodar } from '@fluencelabs/fluence-network-environment'; +import { smokeTest } from './_aqua/smoke_test.js'; + +// const relay = { +// multiaddr: '/ip4/127.0.0.1/tcp/4310/ws/p2p/12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3', +// peerId: '12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3', +// }; + +const relay = krasnodar[4]; + +const rndSk = () => { + if (crypto.getRandomValues) { + return crypto.getRandomValues(new Uint8Array(32)); + } + + // @ts-ignore + return globalThis.crypto.webcrypto.getRandomValues(new Uint8Array(32)); +}; + +export const main = async () => { + console.log('starting fluence...'); + await Fluence.start({ + relay: relay, + keyPair: { + type: 'Ed25519', + source: rndSk(), + }, + }); + + console.log('started fluence'); + const p = await Fluence.getPeer(); + + console.log('my peer id: ', p.getStatus().peerId); + console.log('my sk id: ', fromByteArray(p.getSk())); + + console.log('running some aqua...'); + const [res, errors] = await smokeTest('my_resource'); + if (res === null) { + console.log('aqua failed, errors', errors); + } else { + console.log('aqua finished, result', res); + } + + console.log('stopping fluence...'); + await Fluence.stop(); + console.log('stopped fluence...'); +}; + +export const runMain = () => { + main() + .then(() => console.log('done!')) + .catch((err) => console.error('error: ', err)); +}; diff --git a/packages/@tests/aqua/tsconfig.json b/packages/@tests/aqua/tsconfig.json new file mode 100644 index 00000000..8c892f21 --- /dev/null +++ b/packages/@tests/aqua/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist" + }, + "exclude": ["node_modules", "dist"] +} diff --git a/packages/@tests/react_test/.gitignore b/packages/@tests/frameworks/cra-ts/.gitignore similarity index 92% rename from packages/@tests/react_test/.gitignore rename to packages/@tests/frameworks/cra-ts/.gitignore index 4d29575d..ca227a52 100644 --- a/packages/@tests/react_test/.gitignore +++ b/packages/@tests/frameworks/cra-ts/.gitignore @@ -21,3 +21,5 @@ npm-debug.log* yarn-debug.log* yarn-error.log* + +public/js-client.min.js \ No newline at end of file diff --git a/packages/@tests/react_test/README.md b/packages/@tests/frameworks/cra-ts/README.md similarity index 100% rename from packages/@tests/react_test/README.md rename to packages/@tests/frameworks/cra-ts/README.md diff --git a/packages/@tests/react_test/package.json.skip b/packages/@tests/frameworks/cra-ts/package.json similarity index 57% rename from packages/@tests/react_test/package.json.skip rename to packages/@tests/frameworks/cra-ts/package.json index e34ae2e3..6d4ea100 100644 --- a/packages/@tests/react_test/package.json.skip +++ b/packages/@tests/frameworks/cra-ts/package.json @@ -1,27 +1,28 @@ { - "name": "@test/react", + "name": "cra-ts", "version": "0.1.0", "private": true, "dependencies": { - "@fluencelabs/fluence": "workspace:*", - "@fluencelabs/fluence-network-environment": "^1.0.13", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "@types/jest": "^27.5.2", - "@types/node": "^16.11.56", - "@types/react": "^18.0.18", - "@types/react-dom": "^18.0.6", + "@fluencelabs/fluence": "workspace:0.60.0", + "@test/aqua_for_test": "workspace:*", + "@testing-library/jest-dom": "5.16.5", + "@testing-library/react": "13.4.0", + "@testing-library/user-event": "13.5.0", + "@types/jest": "27.5.2", + "@types/node": "16.18.12", + "@types/react": "18.0.27", + "@types/react-dom": "18.0.10", "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", - "typescript": "^4.8.2", - "web-vitals": "^2.1.4" + "typescript": "4.9.5", + "web-vitals": "2.1.4" }, + "devDependencies": {}, "scripts": { "start": "react-scripts start", "build": "react-scripts build", - "test": "react-scripts test", + "_test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { diff --git a/packages/@tests/react_test/public/favicon.ico b/packages/@tests/frameworks/cra-ts/public/favicon.ico similarity index 100% rename from packages/@tests/react_test/public/favicon.ico rename to packages/@tests/frameworks/cra-ts/public/favicon.ico diff --git a/packages/@tests/react_test/public/index.html b/packages/@tests/frameworks/cra-ts/public/index.html similarity index 88% rename from packages/@tests/react_test/public/index.html rename to packages/@tests/frameworks/cra-ts/public/index.html index aa069f27..726ab18d 100644 --- a/packages/@tests/react_test/public/index.html +++ b/packages/@tests/frameworks/cra-ts/public/index.html @@ -1,14 +1,13 @@ - + + - + + React App - - + + +
- - + + + \ No newline at end of file diff --git a/packages/@tests/react_test/public/logo192.png b/packages/@tests/frameworks/cra-ts/public/logo192.png similarity index 100% rename from packages/@tests/react_test/public/logo192.png rename to packages/@tests/frameworks/cra-ts/public/logo192.png diff --git a/packages/@tests/react_test/public/logo512.png b/packages/@tests/frameworks/cra-ts/public/logo512.png similarity index 100% rename from packages/@tests/react_test/public/logo512.png rename to packages/@tests/frameworks/cra-ts/public/logo512.png diff --git a/packages/@tests/react_test/public/manifest.json b/packages/@tests/frameworks/cra-ts/public/manifest.json similarity index 100% rename from packages/@tests/react_test/public/manifest.json rename to packages/@tests/frameworks/cra-ts/public/manifest.json diff --git a/packages/@tests/react_test/public/robots.txt b/packages/@tests/frameworks/cra-ts/public/robots.txt similarity index 100% rename from packages/@tests/react_test/public/robots.txt rename to packages/@tests/frameworks/cra-ts/public/robots.txt diff --git a/packages/@tests/react_test/src/App.css b/packages/@tests/frameworks/cra-ts/src/App.css similarity index 100% rename from packages/@tests/react_test/src/App.css rename to packages/@tests/frameworks/cra-ts/src/App.css diff --git a/packages/@tests/frameworks/cra-ts/src/App.test.tsx_ b/packages/@tests/frameworks/cra-ts/src/App.test.tsx_ new file mode 100644 index 00000000..414b21cf --- /dev/null +++ b/packages/@tests/frameworks/cra-ts/src/App.test.tsx_ @@ -0,0 +1,9 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/packages/@tests/frameworks/cra-ts/src/App.tsx b/packages/@tests/frameworks/cra-ts/src/App.tsx new file mode 100644 index 00000000..a53698aa --- /dev/null +++ b/packages/@tests/frameworks/cra-ts/src/App.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import logo from './logo.svg'; +import './App.css'; + +function App() { + return ( +
+
+ logo +

+ Edit src/App.tsx and save to reload. +

+ + Learn React + +
+
+ ); +} + +export default App; diff --git a/packages/@tests/react_test/src/index.css b/packages/@tests/frameworks/cra-ts/src/index.css similarity index 100% rename from packages/@tests/react_test/src/index.css rename to packages/@tests/frameworks/cra-ts/src/index.css diff --git a/packages/@tests/react_test/src/index.tsx b/packages/@tests/frameworks/cra-ts/src/index.tsx similarity index 66% rename from packages/@tests/react_test/src/index.tsx rename to packages/@tests/frameworks/cra-ts/src/index.tsx index 032464fb..84ed4ce1 100644 --- a/packages/@tests/react_test/src/index.tsx +++ b/packages/@tests/frameworks/cra-ts/src/index.tsx @@ -3,17 +3,18 @@ import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; +import { runMain } from '@test/aqua_for_test'; -const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement -); +const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement); root.render( - - - + + + , ); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals(); + +runMain(); diff --git a/packages/@tests/react_test/src/logo.svg b/packages/@tests/frameworks/cra-ts/src/logo.svg similarity index 100% rename from packages/@tests/react_test/src/logo.svg rename to packages/@tests/frameworks/cra-ts/src/logo.svg diff --git a/packages/@tests/react_test/src/react-app-env.d.ts b/packages/@tests/frameworks/cra-ts/src/react-app-env.d.ts similarity index 100% rename from packages/@tests/react_test/src/react-app-env.d.ts rename to packages/@tests/frameworks/cra-ts/src/react-app-env.d.ts diff --git a/packages/@tests/react_test/src/reportWebVitals.ts b/packages/@tests/frameworks/cra-ts/src/reportWebVitals.ts similarity index 100% rename from packages/@tests/react_test/src/reportWebVitals.ts rename to packages/@tests/frameworks/cra-ts/src/reportWebVitals.ts diff --git a/packages/@tests/react_test/src/setupTests.ts b/packages/@tests/frameworks/cra-ts/src/setupTests.ts similarity index 100% rename from packages/@tests/react_test/src/setupTests.ts rename to packages/@tests/frameworks/cra-ts/src/setupTests.ts diff --git a/packages/@tests/react_test/tsconfig.json b/packages/@tests/frameworks/cra-ts/tsconfig.json similarity index 100% rename from packages/@tests/react_test/tsconfig.json rename to packages/@tests/frameworks/cra-ts/tsconfig.json diff --git a/packages/@tests/marine/node/.gitignore b/packages/@tests/marine/node/.gitignore new file mode 100644 index 00000000..1436c502 --- /dev/null +++ b/packages/@tests/marine/node/.gitignore @@ -0,0 +1,19 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ +/dist/ +/worker/dist/ + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/fluence-js/jest.config.js b/packages/@tests/marine/node/jest.config.js similarity index 82% rename from packages/fluence-js/jest.config.js rename to packages/@tests/marine/node/jest.config.js index 05820877..64e531b4 100644 --- a/packages/fluence-js/jest.config.js +++ b/packages/@tests/marine/node/jest.config.js @@ -1,6 +1,5 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', - testTimeout: 10000, testPathIgnorePatterns: ['dist'], }; diff --git a/packages/@tests/marine/node/package.json.skip b/packages/@tests/marine/node/package.json.skip new file mode 100644 index 00000000..2f22d990 --- /dev/null +++ b/packages/@tests/marine/node/package.json.skip @@ -0,0 +1,19 @@ +{ + "name": "@test/marine_node", + "scripts": { + "build": "tsc", + "test": "jest" + }, + "devDependencies": { + "@types/node": "16.11.59", + "typescript": "^4.0.0", + "@types/jest": "28.1.0", + "jest": "28.1.0", + "ts-jest": "28.0.2" + }, + "dependencies": { + "@fluencelabs/avm": "0.32.1", + "@fluencelabs/marine.background-runner": "0.1.0", + "@fluencelabs/marine.deps-loader.node": "0.1.0" + } +} diff --git a/packages/@tests/marine/node/src/test.spec.ts b/packages/@tests/marine/node/src/test.spec.ts new file mode 100644 index 00000000..f8018a43 --- /dev/null +++ b/packages/@tests/marine/node/src/test.spec.ts @@ -0,0 +1,54 @@ +import { MarineBackgroundRunner } from '@fluencelabs/marine.background-runner'; +import { InlinedWorkerLoader, WasmNpmLoader } from '@fluencelabs/marine.deps-loader.node'; +import { callAvm, JSONArray, JSONObject } from '@fluencelabs/avm'; + +const vmPeerId = '12D3KooWNzutuy8WHXDKFqFsATvCR6j9cj2FijYbnd47geRKaQZS'; + +describe('Nodejs integration tests', () => { + it('Smoke test', async () => { + let runner: MarineBackgroundRunner | undefined = undefined; + try { + // arrange + const avm = new WasmNpmLoader('@fluencelabs/avm', 'avm.wasm'); + const control = new WasmNpmLoader('@fluencelabs/marine-js', 'marine-js.wasm'); + const worker = new InlinedWorkerLoader(); + runner = new MarineBackgroundRunner(worker, control, () => {}); + + await avm.start(); + + await runner.start(); + await runner.createService(avm.getValue(), 'avm'); + + const s = `(seq + (par + (call "${vmPeerId}" ("local_service_id" "local_fn_name") [] result_1) + (call "remote_peer_id" ("service_id" "fn_name") [] g) + ) + (call "${vmPeerId}" ("local_service_id" "local_fn_name") [] result_2) + )`; + + // act + const res = await callAvm( + (args: JSONArray | JSONObject) => runner!.callService('avm', 'invoke', args, undefined), + { + currentPeerId: vmPeerId, + initPeerId: vmPeerId, + timestamp: Date.now(), + ttl: 10000, + }, + s, + Buffer.from(''), + Buffer.from(''), + [], + ); + + // assert + expect(res).toMatchObject({ + retCode: 0, + errorMessage: '', + }); + } finally { + runner?.stop(); + } + }); +}); diff --git a/packages/@tests/marine/node/tsconfig.json b/packages/@tests/marine/node/tsconfig.json new file mode 100644 index 00000000..32d340ac --- /dev/null +++ b/packages/@tests/marine/node/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist" + }, + "exclude": ["node_modules", "dist"] +} diff --git a/packages/@tests/marine/web/.gitignore b/packages/@tests/marine/web/.gitignore new file mode 100644 index 00000000..8aadd61a --- /dev/null +++ b/packages/@tests/marine/web/.gitignore @@ -0,0 +1,22 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +build/ +public/*.* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ +/dist/ +/worker/dist/ + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/@tests/marine/web/index.html b/packages/@tests/marine/web/index.html new file mode 100644 index 00000000..e3df3163 --- /dev/null +++ b/packages/@tests/marine/web/index.html @@ -0,0 +1,12 @@ + + + + + Webpack App + + +

Hello world!

+

Tip: Check your console

+ + + diff --git a/packages/@tests/marine/web/jest.config.js b/packages/@tests/marine/web/jest.config.js new file mode 100644 index 00000000..22cf0c09 --- /dev/null +++ b/packages/@tests/marine/web/jest.config.js @@ -0,0 +1,9 @@ +module.exports = { + preset: 'jest-puppeteer', + testMatch: ['**/?(*.)+(spec|test).[t]s'], + testPathIgnorePatterns: ['/node_modules/', 'dist'], + testMatch: ['**/test/*.spec.ts'], + transform: { + '^.+\\.ts?$': 'ts-jest', + }, +}; diff --git a/packages/@tests/marine/web/package.json.skip b/packages/@tests/marine/web/package.json.skip new file mode 100644 index 00000000..de53af98 --- /dev/null +++ b/packages/@tests/marine/web/package.json.skip @@ -0,0 +1,37 @@ +{ + "name": "@test/marine_web", + "version": "0.1.0", + "scripts": { + "start": "webpack serve", + "test": "jest", + "build": "webpack --mode=production --node-env=production", + "build:dev": "webpack --mode=development", + "build:prod": "webpack --mode=production --node-env=production", + "watch": "webpack --watch", + "serve": "webpack serve" + }, + "devDependencies": { + "@webpack-cli/generators": "^2.4.1", + "css-loader": "^6.5.1", + "html-webpack-plugin": "^5.5.0", + "install-local": "^3.0.1", + "style-loader": "^3.3.1", + "ts-loader": "^8.3.0", + "typescript": "^4.5.4", + "util": "^0.12.4", + "webpack": "^5.65.0", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.6.0", + "@types/jest": "^27.0.3", + "@types/jest-environment-puppeteer": "^4.4.1", + "@types/puppeteer": "^5.4.4", + "jest": "28.1.0", + "jest-puppeteer": "^6.0.2", + "ts-jest": "28.0.2" + }, + "dependencies": { + "@fluencelabs/avm": "0.34.4", + "js-base64": "^3.7.2", + "buffer": "6.0.3" + } +} diff --git a/packages/@tests/marine/web/src/index.ts b/packages/@tests/marine/web/src/index.ts new file mode 100644 index 00000000..1a54defd --- /dev/null +++ b/packages/@tests/marine/web/src/index.ts @@ -0,0 +1,56 @@ +import { Buffer } from 'buffer'; + +// @ts-ignore +window.Buffer = Buffer; + +import { MarineBackgroundRunner } from '@fluencelabs/marine.background-runner'; +import { InlinedWorkerLoader, WasmWebLoader } from '@fluencelabs/marine.deps-loader.web'; +import { callAvm, JSONArray, JSONObject } from '@fluencelabs/avm'; +import { toUint8Array } from 'js-base64'; + +const vmPeerId = '12D3KooWNzutuy8WHXDKFqFsATvCR6j9cj2FijYbnd47geRKaQZS'; + +const b = (s: string) => { + return toUint8Array(s); +}; + +const main = async () => { + const avm = new WasmWebLoader('avm.wasm'); + const control = new WasmWebLoader('marine-js.wasm'); + const worker = new InlinedWorkerLoader(); + const runner = new MarineBackgroundRunner(worker, control, () => {}); + + await runner.start(); + await avm.start(); + const avmVal = await avm.getValue(); + await runner.createService(avmVal, 'avm'); + + const s = `(seq + (par + (call "${vmPeerId}" ("local_service_id" "local_fn_name") [] result_1) + (call "remote_peer_id" ("service_id" "fn_name") [] g) + ) + (call "${vmPeerId}" ("local_service_id" "local_fn_name") [] result_2) + )`; + + // act + const res = await callAvm( + (args: JSONArray | JSONObject) => runner.callService('avm', 'invoke', args, undefined), + { + currentPeerId: vmPeerId, + initPeerId: vmPeerId, + timestamp: Date.now(), + ttl: 10000, + }, + s, + b(''), + b(''), + [], + ); + await runner.stop(); + + return res; +}; + +// @ts-ignore +window.MAIN = main; diff --git a/packages/@tests/marine/web/test/test.spec.ts b/packages/@tests/marine/web/test/test.spec.ts new file mode 100644 index 00000000..23bc281e --- /dev/null +++ b/packages/@tests/marine/web/test/test.spec.ts @@ -0,0 +1,115 @@ +import Webpack from 'webpack'; +import WebpackDevServer from 'webpack-dev-server'; +import webpackConfig from '../webpack.config.js'; +import process from 'process'; +import path from 'path'; +import fs from 'fs'; + +// change directory to the location to the test-project. +// run all the subsequent Webpack scripts in that directory +process.chdir(path.join(__dirname, '..')); + +let server; +const port = 8080; + +jest.setTimeout(10000); + +const startServer = async (modifyConfig?) => { + const loadInBrowserToDebug = false; + // const loadInBrowserToDebug = true; // use this line to debug + + modifyConfig = modifyConfig || ((_) => {}); + + const config: any = webpackConfig(); + modifyConfig(config); + config.devServer.open = loadInBrowserToDebug; + server = await makeServer(config); +}; + +// https://stackoverflow.com/questions/42940550/wait-until-webpack-dev-server-is-ready +function makeServer(config) { + return new Promise((resolve, reject) => { + const compiler = Webpack(config); + + let compiled = false; + let listening = false; + + compiler.hooks.done.tap('tap_name', () => { + // console.log('compiled'); + + if (listening) resolve(server); + else compiled = true; + }); + + const server = new WebpackDevServer(compiler, config.devServer); + + server.listen(port, '0.0.0.0', (err) => { + if (err) return reject(err); + + // console.log('listening'); + + if (compiled) { + resolve(server); + } else { + listening = true; + } + }); + }); +} + +const stopServer = async () => { + console.log('test: stopping server'); + await server.stop(); +}; + +const publicDir = 'public'; + +const copyFile = async (packageName: string, fileName: string) => { + const modulePath = require.resolve(packageName); + const source = path.join(path.dirname(modulePath), fileName); + const dest = path.join(publicDir, fileName); + + return fs.promises.copyFile(source, dest); +}; + +const copyPublicDeps = async () => { + await fs.promises.mkdir(publicDir, { recursive: true }); + return Promise.all([ + copyFile('@fluencelabs/marine-js', 'marine-js.wasm'), + copyFile('@fluencelabs/avm', 'avm.wasm'), + ]); +}; + +const cleanPublicDeps = () => { + return fs.promises.rm(publicDir, { recursive: true, force: true }); +}; + +describe('Browser integration tests', () => { + beforeEach(async () => { + await copyPublicDeps(); + }); + + afterEach(async () => { + await stopServer(); + await cleanPublicDeps(); + }); + + it('Some test', async () => { + console.log('test: starting server...'); + await startServer(); + console.log('test: navigating to page...'); + await page.goto('http://localhost:8080/'); + + console.log('test: running script in browser...'); + const res = await page.evaluate(() => { + // @ts-ignore + return window.MAIN(); + }); + + console.log('test: checking expectations...'); + await expect(res).toMatchObject({ + retCode: 0, + errorMessage: '', + }); + }); +}); diff --git a/packages/@tests/marine/web/tsconfig.json b/packages/@tests/marine/web/tsconfig.json new file mode 100644 index 00000000..32d340ac --- /dev/null +++ b/packages/@tests/marine/web/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist" + }, + "exclude": ["node_modules", "dist"] +} diff --git a/packages/@tests/marine/web/webpack.config.js b/packages/@tests/marine/web/webpack.config.js new file mode 100644 index 00000000..c294c0f9 --- /dev/null +++ b/packages/@tests/marine/web/webpack.config.js @@ -0,0 +1,65 @@ +// Generated using webpack-cli https://github.com/webpack/webpack-cli + +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); + +const isProduction = process.env.NODE_ENV == 'production'; + +const stylesHandler = 'style-loader'; + +const config = { + entry: './src/index.ts', + output: { + path: path.resolve(__dirname, 'dist'), + }, + devServer: { + open: true, + host: 'localhost', + static: { + directory: path.join(__dirname, 'public'), + }, + }, + plugins: [ + new HtmlWebpackPlugin({ + template: 'index.html', + }), + + // Add your plugins here + // Learn more about plugins from https://webpack.js.org/configuration/plugins/ + ], + module: { + rules: [ + { + test: /\.(ts|tsx)$/i, + loader: 'ts-loader', + exclude: ['/node_modules/'], + }, + { + test: /\.css$/i, + use: [stylesHandler, 'css-loader'], + }, + { + test: /\.(eot|svg|ttf|woff|woff2|png|jpg|gif)$/i, + type: 'asset', + }, + + // Add your rules for custom modules here + // Learn more about loaders from https://webpack.js.org/loaders/ + ], + }, + resolve: { + extensions: ['.tsx', '.ts', '.js'], + fallback: { + buffer: require.resolve('buffer/'), + }, + }, +}; + +module.exports = () => { + if (isProduction) { + config.mode = 'production'; + } else { + config.mode = 'development'; + } + return config; +}; diff --git a/packages/@tests/react_test/src/App.tsx b/packages/@tests/react_test/src/App.tsx deleted file mode 100644 index 8c3c34ab..00000000 --- a/packages/@tests/react_test/src/App.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import React, { useEffect, useState } from "react"; -import logo from "./logo.svg"; -import "./App.css"; - -import { Fluence } from "@fluencelabs/fluence"; -import { krasnodar } from "@fluencelabs/fluence-network-environment"; - -const relayNode = krasnodar[4]; - -function App() { - const [connected, setConnected] = useState(false); - - useEffect(() => { - Fluence.start({ connectTo: relayNode }) - .then(() => { - setConnected(true); - }) - .catch((err) => { - console.log("Client initialization failed", err); - setConnected(false); - }); - }, []); - - return ( -
-
- logo -

Connected: ${connected}

-

- Edit src/App.tsx and save to reload. -

- - Learn React - -
-
- ); -} - -export default App; diff --git a/packages/@tests/smoke/src/index.ts b/packages/@tests/smoke/src/index.ts deleted file mode 100644 index 2ea67468..00000000 --- a/packages/@tests/smoke/src/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { FluencePeer } from "@fluencelabs/fluence"; - -const peer = new FluencePeer(); - -const main = async () => { - await peer.start({}); - const peerId = peer.getStatus().peerId; - if (!peerId) { - throw new Error("Peer id is null"); - } - console.log("peer id is: ", peerId); - await peer.stop(); -}; - -main() - .then(() => console.log("done")) - .catch((err) => console.error(err)) - .finally(() => { - if (peer) { - peer.stop(); - } - }); diff --git a/packages/@tests/smoke/tsconfig.json b/packages/@tests/smoke/tsconfig.json deleted file mode 100644 index 8ab4e60c..00000000 --- a/packages/@tests/smoke/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "outDir": "./dist/", - "module": "commonjs", - "moduleResolution": "node", - "sourceMap": true, - "declaration": true, - "skipDefaultLibCheck": true - }, - "exclude": ["node_modules", "dist"], - "include": ["src/**/*"] -} diff --git a/packages/fluence-connection/.gitignore b/packages/@tests/smoke_node/.gitignore similarity index 100% rename from packages/fluence-connection/.gitignore rename to packages/@tests/smoke_node/.gitignore diff --git a/packages/@tests/smoke/package.json b/packages/@tests/smoke_node/package.json similarity index 62% rename from packages/@tests/smoke/package.json rename to packages/@tests/smoke_node/package.json index e617efdb..5d432d81 100644 --- a/packages/@tests/smoke/package.json +++ b/packages/@tests/smoke_node/package.json @@ -8,19 +8,18 @@ "node": ">=10", "pnpm": ">=3" }, + "type": "module", "scripts": { "build": "tsc", - "test": "ts-node src/index.ts" + "_test": "node --loader ts-node/esm ./src/index.ts" }, "repository": "https://github.com/fluencelabs/fluence-js", "author": "Fluence Labs", "license": "Apache-2.0", "dependencies": { - "@fluencelabs/fluence": "workspace:*", - "ts-node": "^10.9.1" + "@fluencelabs/fluence": "workspace:0.60.0", + "@fluencelabs/js-client.node": "0.1.0", + "@test/aqua_for_test": "workspace:*" }, - "devDependencies": { - "@types/node": "^18.7.13", - "typescript": "^4.6.4" - } + "devDependencies": {} } diff --git a/packages/@tests/smoke_node/src/index.ts b/packages/@tests/smoke_node/src/index.ts new file mode 100644 index 00000000..2c3f150b --- /dev/null +++ b/packages/@tests/smoke_node/src/index.ts @@ -0,0 +1,4 @@ +import '@fluencelabs/js-client.node'; +import { runMain } from '@test/aqua_for_test'; + +runMain(); diff --git a/packages/@tests/smoke_node/tsconfig.json b/packages/@tests/smoke_node/tsconfig.json new file mode 100644 index 00000000..8c892f21 --- /dev/null +++ b/packages/@tests/smoke_node/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist" + }, + "exclude": ["node_modules", "dist"] +} diff --git a/packages/@tests/smoke_web/.gitignore b/packages/@tests/smoke_web/.gitignore new file mode 100644 index 00000000..f4ecde86 --- /dev/null +++ b/packages/@tests/smoke_web/.gitignore @@ -0,0 +1,21 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +dist + + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea + +public/js-client.min.js \ No newline at end of file diff --git a/packages/@tests/smoke_web/package.json b/packages/@tests/smoke_web/package.json new file mode 100644 index 00000000..fba2f4d8 --- /dev/null +++ b/packages/@tests/smoke_web/package.json @@ -0,0 +1,24 @@ +{ + "name": "@tests/smoke_web", + "version": "0.1.0", + "description": "Smoke test web", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "build": "pnpm copy-script", + "serve": "http-server public", + "copy-script": "cp ../../client/js-client.web.standalone/dist/js-client.min.js ./public" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": {}, + "devDependencies": { + "@fluencelabs/js-client.web.standalone": "workspace:*", + "http-server": "14.1.1" + } +} diff --git a/packages/@tests/smoke_web/public/index.html b/packages/@tests/smoke_web/public/index.html new file mode 100644 index 00000000..984425f7 --- /dev/null +++ b/packages/@tests/smoke_web/public/index.html @@ -0,0 +1,20 @@ + + + + + + + + Smoke test for web + + + + + + +
+

Open console f12

+
+ + + \ No newline at end of file diff --git a/packages/@tests/smoke_web/public/index.js b/packages/@tests/smoke_web/public/index.js new file mode 100644 index 00000000..8e0f9d4b --- /dev/null +++ b/packages/@tests/smoke_web/public/index.js @@ -0,0 +1,103 @@ +const peer = globalThis.defaultPeer; + +const relay = { + multiaddr: '/ip4/127.0.0.1/tcp/4310/ws/p2p/12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3', + peerId: '12D3KooWKEprYXUXqoV5xSBeyqrWLpQLLH4PXfvVkDJtmcqmh5V3', +}; + +const getRelayTime = (relayPeerId) => { + const script = ` + (xor + (seq + (seq + (seq + (seq + (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) + (call %init_peer_id% ("getDataSrv" "relayPeerId") [] relayPeerId) + ) + (call -relay- ("op" "noop") []) + ) + (xor + (seq + (call relayPeerId ("peer" "timestamp_ms") [] ts) + (call -relay- ("op" "noop") []) + ) + (seq + (call -relay- ("op" "noop") []) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) + ) + ) + ) + (xor + (call %init_peer_id% ("callbackSrv" "response") [ts]) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) + ) + ) + (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) + ) + `; + + const def = { + functionName: 'getRelayTime', + arrow: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + relayPeerId: { + tag: 'scalar', + name: 'string', + }, + }, + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'scalar', + name: 'u64', + }, + ], + }, + }, + names: { + relay: '-relay-', + getDataSrv: 'getDataSrv', + callbackSrv: 'callbackSrv', + responseSrv: 'callbackSrv', + responseFnName: 'response', + errorHandlingSrv: 'errorHandlingSrv', + errorFnName: 'error', + }, + }; + + const config = {}; + + const args = {}; + return peer.compilerSupport.callFunction({ + args, + def, + config, + script, + }); +}; + +const main = async () => { + console.log('starting fluence...'); + await peer.start({ + connectTo: relay, + }); + console.log('started fluence'); + + console.log('getting relay time...'); + const res = await getRelayTime(relay.peerId); + console.log('got relay time, ', res); + + console.log('stopping fluence...'); + await peer.stop(); + console.log('stopped fluence...'); +}; + +main() + .then(() => console.log('done!')) + .catch((err) => console.error('error: ', err)); diff --git a/packages/client/api/.gitignore b/packages/client/api/.gitignore new file mode 100644 index 00000000..3d117a64 --- /dev/null +++ b/packages/client/api/.gitignore @@ -0,0 +1,22 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ +tmp/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/fluence-keypair/README.md b/packages/client/api/README.md similarity index 96% rename from packages/fluence-keypair/README.md rename to packages/client/api/README.md index 59c265cd..b05a79df 100644 --- a/packages/fluence-keypair/README.md +++ b/packages/client/api/README.md @@ -1,4 +1,4 @@ -# FluenceJS Keypair +# JS Client web This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info diff --git a/packages/client/api/package.json b/packages/client/api/package.json new file mode 100644 index 00000000..b00db6a3 --- /dev/null +++ b/packages/client/api/package.json @@ -0,0 +1,42 @@ +{ + "_1": "This should actually be named @fluencelabs/js-client.api. Naming it fluence-js is needed for backward compat w/ aqua compiler", + "name": "@fluencelabs/fluence", + "version": "0.60.0", + "description": "JS Client API", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "type": "module", + "_2": "dist/internal/ export is needed for backward compat w/ aqua compiler", + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./compilerSupport/v5": { + "import": "./dist/compilerSupport/v5.js", + "types": "./dist/compilerSupport/v5.d.ts" + }, + "./dist/compilerSupport/v5": { + "import": "./dist/compilerSupport/v5.js", + "types": "./dist/compilerSupport/v5.d.ts" + }, + "./dist/internal/compilerSupport/v4": { + "import": "./dist/compilerSupport/v5.js", + "types": "./dist/compilerSupport/v5.d.ts" + } + }, + "scripts": { + "build": "tsc" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "@fluencelabs/interfaces": "0.5.0" + }, + "devDependencies": {} +} diff --git a/packages/client/api/src/compilerSupport/implementation.ts b/packages/client/api/src/compilerSupport/implementation.ts new file mode 100644 index 00000000..a6d4a25a --- /dev/null +++ b/packages/client/api/src/compilerSupport/implementation.ts @@ -0,0 +1,181 @@ +/* + * Copyright 2022 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { FnConfig, FunctionCallDef, ServiceDef } from '@fluencelabs/interfaces/compilerSupport'; +import type { IFluenceClient } from '@fluencelabs/interfaces/fluenceClient'; +import { getArgumentTypes } from '@fluencelabs/interfaces/compilerSupport'; +import { isFluencePeer } from '@fluencelabs/interfaces/fluenceClient'; + +import { getDefaultPeer } from '../index.js'; + +export type { IFluenceClient, CallParams } from '@fluencelabs/interfaces/fluenceClient'; + +export { + ArrayType, + ArrowType, + ArrowWithCallbacks, + ArrowWithoutCallbacks, + BottomType, + FnConfig, + FunctionCallConstants, + FunctionCallDef, + LabeledProductType, + NilType, + NonArrowType, + OptionType, + ProductType, + ScalarNames, + ScalarType, + ServiceDef, + StructType, + TopType, + UnlabeledProductType, +} from '@fluencelabs/interfaces/compilerSupport'; + +/** + * Convenience function to support Aqua `func` generation backend + * The compiler only need to generate a call the function and provide the corresponding definitions and the air script + * + * @param rawFnArgs - raw arguments passed by user to the generated function + * @param def - function definition generated by the Aqua compiler + * @param script - air script with function execution logic generated by the Aqua compiler + */ +export const callFunction = async (rawFnArgs: Array, def: FunctionCallDef, script: string): Promise => { + const { args, peer, config } = await extractFunctionArgs(rawFnArgs, def); + return peer.compilerSupport.callFunction({ + args, + def, + script, + config: config || {}, + }); +}; + +/** + * Convenience function to support Aqua `service` generation backend + * The compiler only need to generate a call the function and provide the corresponding definitions and the air script + * + * @param args - raw arguments passed by user to the generated function + * @param def - service definition generated by the Aqua compiler + */ +export const registerService = async (args: any[], def: ServiceDef): Promise => { + const { peer, service, serviceId } = await extractServiceArgs(args, def.defaultServiceId); + return peer.compilerSupport.registerService({ + def, + service, + serviceId, + }); +}; + +/** + * Arguments could be passed in one these configurations: + * [...actualArgs] + * [peer, ...actualArgs] + * [...actualArgs, config] + * [peer, ...actualArgs, config] + * + * This function select the appropriate configuration and returns + * arguments in a structured way of: { peer, config, args } + */ +const extractFunctionArgs = async ( + args: any[], + def: FunctionCallDef, +): Promise<{ + peer: IFluenceClient; + config?: FnConfig; + args: { [key: string]: any }; +}> => { + const argumentTypes = getArgumentTypes(def); + const argumentNames = Object.keys(argumentTypes); + const numberOfExpectedArgs = argumentNames.length; + + let peer: IFluenceClient; + let structuredArgs: any[]; + let config: FnConfig; + if (isFluencePeer(args[0])) { + peer = args[0]; + structuredArgs = args.slice(1, numberOfExpectedArgs + 1); + config = args[numberOfExpectedArgs + 1]; + } else { + peer = await getDefaultPeer(); + structuredArgs = args.slice(0, numberOfExpectedArgs); + config = args[numberOfExpectedArgs]; + } + + if (structuredArgs.length !== numberOfExpectedArgs) { + throw new Error(`Incorrect number of arguments. Expecting ${numberOfExpectedArgs}`); + } + + const argsRes = argumentNames.reduce((acc, name, index) => ({ ...acc, [name]: structuredArgs[index] }), {}); + + return { + peer: peer, + config: config, + args: argsRes, + }; +}; + +/** + * Arguments could be passed in one these configurations: + * [serviceObject] + * [peer, serviceObject] + * [defaultId, serviceObject] + * [peer, defaultId, serviceObject] + * + * Where serviceObject is the raw object with function definitions passed by user + * + * This function select the appropriate configuration and returns + * arguments in a structured way of: { peer, serviceId, service } + */ +const extractServiceArgs = async ( + args: any[], + defaultServiceId?: string, +): Promise<{ peer: IFluenceClient; serviceId: string; service: any }> => { + let peer: IFluenceClient; + let serviceId: any; + let service: any; + if (isFluencePeer(args[0])) { + peer = args[0]; + } else { + peer = await getDefaultPeer(); + } + + if (typeof args[0] === 'string') { + serviceId = args[0]; + } else if (typeof args[1] === 'string') { + serviceId = args[1]; + } else { + serviceId = defaultServiceId; + } + + // Figuring out which overload is the service. + // If the first argument is not Fluence Peer and it is an object, then it can only be the service def + // If the first argument is peer, we are checking further. The second argument might either be + // an object, that it must be the service object + // or a string, which is the service id. In that case the service is the third argument + if (!isFluencePeer(args[0]) && typeof args[0] === 'object') { + service = args[0]; + } else if (typeof args[1] === 'object') { + service = args[1]; + } else { + service = args[2]; + } + + return { + peer: peer, + serviceId: serviceId, + service: service, + }; +}; diff --git a/packages/fluence-js/src/internal/compilerSupport/v4.ts b/packages/client/api/src/compilerSupport/v5.ts similarity index 90% rename from packages/fluence-js/src/internal/compilerSupport/v4.ts rename to packages/client/api/src/compilerSupport/v5.ts index 6d747bf9..a9375af7 100644 --- a/packages/fluence-js/src/internal/compilerSupport/v4.ts +++ b/packages/client/api/src/compilerSupport/v5.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -export { FluencePeer } from '../FluencePeer'; -export { CallParams as CallParams$$ } from '../commonTypes'; +export { IFluenceClient } from './implementation.js'; +export { CallParams as CallParams$$ } from './implementation.js'; export { ArrayType as ArrayType$$, ArrowType as ArrowType$$, @@ -38,4 +38,4 @@ export { UnlabeledProductType as UnlabeledProductType$$, callFunction as callFunction$$, registerService as registerService$$, -} from './v3'; +} from './implementation.js'; diff --git a/packages/client/api/src/index.ts b/packages/client/api/src/index.ts new file mode 100644 index 00000000..ea123515 --- /dev/null +++ b/packages/client/api/src/index.ts @@ -0,0 +1,69 @@ +import type { IFluenceClient, ClientOptions } from '@fluencelabs/interfaces/fluenceClient'; + +export { IFluenceClient, ClientOptions, CallParams } from '@fluencelabs/interfaces/fluenceClient'; + +// TODO: hack needed to kinda have backward compat with compiler api +export type FluencePeer = IFluenceClient; + +const getPeerFromGlobalThis = (): IFluenceClient | undefined => { + // @ts-ignore + return globalThis.defaultPeer; +}; + +// TODO: DXJ-271 +const REJECT_MESSAGE = 'You probably forgot to add script tag. Read about it here: '; + +/** + * Wait until the js client script it loaded and return the default peer from globalThis + */ +export const getDefaultPeer = (): Promise => { + return new Promise((resolve, reject) => { + let interval: NodeJS.Timer | undefined; + let hits = 50; + interval = setInterval(() => { + if (hits === 0) { + clearInterval(interval); + reject(REJECT_MESSAGE); + } + + let res = getPeerFromGlobalThis(); + if (res) { + clearInterval(interval); + resolve(res); + } + hits--; + }, 100); + }); +}; + +/** + * Public interface to Fluence JS + */ +export const Fluence = { + /** + * Initializes the default peer: starts the Aqua VM, initializes the default call service handlers + * and (optionally) connect to the Fluence network + * @param options - object specifying peer configuration + */ + start: async (options?: ClientOptions): Promise => { + const peer = await getDefaultPeer(); + return peer.start(options); + }, + + /** + * Un-initializes the default peer: stops all the underlying workflows, stops the Aqua VM + * and disconnects from the Fluence network + */ + stop: async (): Promise => { + const peer = await getDefaultPeer(); + return peer.stop(); + }, + + /** + * Get the default peer instance + * @returns the default peer instance + */ + getPeer: async (): Promise => { + return getDefaultPeer(); + }, +}; diff --git a/packages/client/api/tsconfig.json b/packages/client/api/tsconfig.json new file mode 100644 index 00000000..8c892f21 --- /dev/null +++ b/packages/client/api/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist" + }, + "exclude": ["node_modules", "dist"] +} diff --git a/packages/fluence-interfaces/.gitignore b/packages/client/js-client.node/.gitignore similarity index 100% rename from packages/fluence-interfaces/.gitignore rename to packages/client/js-client.node/.gitignore diff --git a/packages/fluence-interfaces/README.md b/packages/client/js-client.node/README.md similarity index 96% rename from packages/fluence-interfaces/README.md rename to packages/client/js-client.node/README.md index 06acea1d..87bb724b 100644 --- a/packages/fluence-interfaces/README.md +++ b/packages/client/js-client.node/README.md @@ -1,4 +1,4 @@ -# FluenceJS interfaces +# JS Client node This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info diff --git a/packages/client/js-client.node/package.json b/packages/client/js-client.node/package.json new file mode 100644 index 00000000..81cb66ac --- /dev/null +++ b/packages/client/js-client.node/package.json @@ -0,0 +1,33 @@ +{ + "name": "@fluencelabs/js-client.node", + "version": "0.1.0", + "description": "TypeScript implementation of Fluence Peer", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "type": "module", + "scripts": { + "build": "tsc" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "@fluencelabs/js-peer": "0.5.0", + "@fluencelabs/avm": "0.35.3", + "@fluencelabs/marine-js": "0.3.42", + "platform": "1.3.6" + }, + "devDependencies": { + "@types/platform": "1.3.4" + } +} diff --git a/packages/client/js-client.node/src/index.ts b/packages/client/js-client.node/src/index.ts new file mode 100644 index 00000000..9782427f --- /dev/null +++ b/packages/client/js-client.node/src/index.ts @@ -0,0 +1,48 @@ +import * as platform from 'platform'; + +import { FluencePeer } from '@fluencelabs/js-peer/dist/js-peer/FluencePeer.js'; +import { MarineBasedAvmRunner } from '@fluencelabs/js-peer/dist/js-peer/avm.js'; +import { MarineBackgroundRunner } from '@fluencelabs/js-peer/dist/marine/worker'; +import { marineLogFunction } from '@fluencelabs/js-peer/dist/js-peer/utils.js'; +import { WasmLoaderFromNpm } from '@fluencelabs/js-peer/dist/marine/deps-loader/node.js'; +import { WorkerLoader } from '@fluencelabs/js-peer/dist/marine/worker-script/workerLoader.js'; + +throwIfNotSupported(); + +export const defaultNames = { + avm: { + file: 'avm.wasm', + package: '@fluencelabs/avm', + }, + marine: { + file: 'marine-js.wasm', + package: '@fluencelabs/marine-js', + }, +}; + +export const makeDefaultPeer = () => { + const workerLoader = new WorkerLoader(); + const controlModuleLoader = new WasmLoaderFromNpm(defaultNames.marine.package, defaultNames.marine.file); + const avmModuleLoader = new WasmLoaderFromNpm(defaultNames.avm.package, defaultNames.avm.file); + + const marine = new MarineBackgroundRunner(workerLoader, controlModuleLoader, marineLogFunction); + const avm = new MarineBasedAvmRunner(marine, avmModuleLoader, undefined); + return new FluencePeer(marine, avm); +}; + +// @ts-ignore +globalThis.defaultPeer = makeDefaultPeer(); + +function throwIfNotSupported() { + if (platform.name === 'Node.js' && platform.version) { + const version = platform.version.split('.').map(Number); + const major = version[0]; + if (major < 16) { + throw new Error( + 'FluenceJS requires node.js version >= "16.x"; Detected ' + + platform.description + + ' Please update node.js to version 16 or higher.\nYou can use https://nvm.sh utility to update node.js version: "nvm install 17 && nvm use 17 && nvm alias default 17"', + ); + } + } +} diff --git a/packages/client/js-client.node/tsconfig.json b/packages/client/js-client.node/tsconfig.json new file mode 100644 index 00000000..8c892f21 --- /dev/null +++ b/packages/client/js-client.node/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist" + }, + "exclude": ["node_modules", "dist"] +} diff --git a/packages/client/js-client.web.standalone/.gitignore b/packages/client/js-client.web.standalone/.gitignore new file mode 100644 index 00000000..3d117a64 --- /dev/null +++ b/packages/client/js-client.web.standalone/.gitignore @@ -0,0 +1,22 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ +tmp/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/fluence-js/.prettierignore b/packages/client/js-client.web.standalone/.prettierignore similarity index 100% rename from packages/fluence-js/.prettierignore rename to packages/client/js-client.web.standalone/.prettierignore diff --git a/packages/fluence-connection/README.md b/packages/client/js-client.web.standalone/README.md similarity index 96% rename from packages/fluence-connection/README.md rename to packages/client/js-client.web.standalone/README.md index 726acb9f..b05a79df 100644 --- a/packages/fluence-connection/README.md +++ b/packages/client/js-client.web.standalone/README.md @@ -1,4 +1,4 @@ -# FluenceJS connection +# JS Client web This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info diff --git a/packages/client/js-client.web.standalone/build.ts b/packages/client/js-client.web.standalone/build.ts new file mode 100644 index 00000000..cc398e5c --- /dev/null +++ b/packages/client/js-client.web.standalone/build.ts @@ -0,0 +1,126 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import { fromUint8Array } from 'js-base64'; +import { build } from 'vite'; +import { createRequire } from 'module'; +import type { InlineConfig } from 'vite'; +import tsconfigPaths from 'vite-tsconfig-paths'; +import * as inject from '@rollup/plugin-inject'; +import { replaceCodePlugin } from 'vite-plugin-replace'; + +const require = createRequire(import.meta.url); + +const getWorkerScriptPathOrDie = () => { + const scriptPath = path.resolve('../../core/js-peer/dist/marine/worker-script/index.js'); + if (!fs.existsSync(scriptPath)) { + console.error('Worker script not found, looking at: ' + scriptPath); + process.exit(1); + } + + return scriptPath; +}; + +const commonConfig = (opts: { + outDir: string; + name: string; + entry: string; +}): InlineConfig & Required> => { + return { + mode: 'production', + build: { + minify: 'esbuild', + lib: { + entry: opts.entry, + name: opts.name, + fileName: opts.name, + }, + outDir: opts.outDir, + }, + base: '', + plugins: [tsconfigPaths()], + optimizeDeps: { + esbuildOptions: { + define: { + global: 'globalThis', + }, + }, + }, + }; +}; + +const readAsBase64 = async (filePath: string): Promise => { + const scriptRaw = await fs.promises.readFile(filePath); + const b64 = fromUint8Array(scriptRaw); + return b64; +}; + +const readWasmFromNpmAsBase64 = (pkg: string, wasmFileName: string): Promise => { + const pkgPath = require.resolve(pkg); + const wasmFilePath = path.join(path.dirname(pkgPath), wasmFileName); + return readAsBase64(wasmFilePath); +}; + +const buildClient = async () => { + await fs.promises.mkdir('tmp', { recursive: true }); + + // build worker script + const workerConfig = commonConfig({ + outDir: './tmp', + entry: getWorkerScriptPathOrDie(), + name: 'worker-script', + }); + workerConfig.build!.rollupOptions = { + plugins: [ + inject.default({ + Buffer: ['buffer', 'Buffer'], + process: 'process', + }), + ], + }; + + await build(workerConfig); + + // build js-client + const jsClientConfig = commonConfig({ + outDir: './dist', + entry: './src/index.ts', + name: 'js-client', + }); + + const workerScriptB64 = await readAsBase64('./tmp/worker-script.umd.cjs'); + const avmBase64 = await readWasmFromNpmAsBase64('@fluencelabs/avm', 'avm.wasm'); + const marineBase64 = await readWasmFromNpmAsBase64('@fluencelabs/marine-js', 'marine-js.wasm'); + + jsClientConfig.plugins!.push( + replaceCodePlugin({ + replacements: [ + { + from: '___worker___', + to: workerScriptB64, + }, + { + from: '___avm___', + to: avmBase64, + }, + { + from: '___marine___', + to: marineBase64, + }, + ], + }), + ); + + await build(jsClientConfig); + + // We should exclude the script with type=module because + // - it might be confusing (i.e won't work in browsers that do not support ESM, or if you miss the `type` attribute) + // - there is a problem when using `self.crypto` in web workers + await fs.promises.rm('./dist/js-client.js'); + + // browsers don't understand `.cjs` extensions, just use `.js` + await fs.promises.rename('./dist/js-client.umd.cjs', './dist/js-client.min.js'); +}; + +buildClient() + .then(() => console.log('Built successfully')) + .catch((err) => console.error('failed', err)); diff --git a/packages/client/js-client.web.standalone/package.json b/packages/client/js-client.web.standalone/package.json new file mode 100644 index 00000000..987837f0 --- /dev/null +++ b/packages/client/js-client.web.standalone/package.json @@ -0,0 +1,36 @@ +{ + "name": "@fluencelabs/js-client.web.standalone", + "version": "0.1.0", + "description": "TypeScript implementation of Fluence Peer", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "type": "module", + "scripts": { + "build": "node --loader ts-node/esm ./build.ts" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "@fluencelabs/js-peer": "0.5.0", + "buffer": "6.0.3", + "process": "0.11.10" + }, + "devDependencies": { + "@fluencelabs/avm": "0.35.3", + "@fluencelabs/marine-js": "0.3.42", + "@types/node": "16.11.59", + "@types/jest": "28.1.0", + "jest": "28.1.0", + "ts-jest": "28.0.2", + "js-base64": "3.7.2", + "@rollup/plugin-inject": "5.0.3", + "vite-plugin-replace": "0.1.1", + "vite": "4.0.4", + "vite-tsconfig-paths": "4.0.3" + } +} diff --git a/packages/client/js-client.web.standalone/src/index.ts b/packages/client/js-client.web.standalone/src/index.ts new file mode 100644 index 00000000..6e4fd769 --- /dev/null +++ b/packages/client/js-client.web.standalone/src/index.ts @@ -0,0 +1,18 @@ +import { FluencePeer } from '@fluencelabs/js-peer/dist/js-peer/FluencePeer.js'; +import { MarineBasedAvmRunner } from '@fluencelabs/js-peer/dist/js-peer/avm.js'; +import { MarineBackgroundRunner } from '@fluencelabs/js-peer/dist/marine/worker'; +import { checkConnection, marineLogFunction } from '@fluencelabs/js-peer/dist/js-peer/utils.js'; +import { InlinedWorkerLoader, InlinedWasmLoader } from '@fluencelabs/js-peer/dist/marine/deps-loader/common.js'; + +export const makeDefaultPeer = () => { + const workerLoader = new InlinedWorkerLoader('___worker___'); + const controlModuleLoader = new InlinedWasmLoader('___marine___'); + const avmModuleLoader = new InlinedWasmLoader('___avm___'); + + const marine = new MarineBackgroundRunner(workerLoader, controlModuleLoader, marineLogFunction); + const avm = new MarineBasedAvmRunner(marine, avmModuleLoader, undefined); + return new FluencePeer(marine, avm); +}; + +// @ts-ignore +globalThis.defaultPeer = makeDefaultPeer(); diff --git a/packages/client/js-client.web.standalone/tsconfig.json b/packages/client/js-client.web.standalone/tsconfig.json new file mode 100644 index 00000000..0d267859 --- /dev/null +++ b/packages/client/js-client.web.standalone/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "moduleResolution": "node" + }, + "exclude": ["node_modules", "dist"] +} diff --git a/packages/fluence-js/.gitignore b/packages/client/js-client.web/.gitignore similarity index 100% rename from packages/fluence-js/.gitignore rename to packages/client/js-client.web/.gitignore diff --git a/packages/fluence-js/README.md b/packages/client/js-client.web/README.md similarity index 54% rename from packages/fluence-js/README.md rename to packages/client/js-client.web/README.md index c1052b60..b05a79df 100644 --- a/packages/fluence-js/README.md +++ b/packages/client/js-client.web/README.md @@ -1,12 +1,6 @@ -# Fluence JS +# JS Client web -[![npm](https://img.shields.io/npm/v/@fluencelabs/fluence)](https://www.npmjs.com/package/@fluencelabs/fluence) - -Official TypeScript implementation of the Fluence Peer. - -## Getting started - -To start developing applications with Fluence JS refer to the official [documentation](https://fluence.dev/docs/build/fluence-js/) +This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info ## Contributing diff --git a/packages/fluence-keypair/package.json b/packages/client/js-client.web/package.json.skip similarity index 54% rename from packages/fluence-keypair/package.json rename to packages/client/js-client.web/package.json.skip index 3dc06e4f..7ded9f63 100644 --- a/packages/fluence-keypair/package.json +++ b/packages/client/js-client.web/package.json.skip @@ -1,7 +1,7 @@ { - "name": "@fluencelabs/keypair", - "version": "0.2.0", - "description": "Keypair implementation for Fluence JS Peer", + "name": "@fluencelabs/js-client.web", + "version": "0.1.0", + "description": "TypeScript implementation of Fluence Peer", "main": "./dist/index.js", "typings": "./dist/index.d.ts", "engines": { @@ -15,11 +15,12 @@ "author": "Fluence Labs", "license": "Apache-2.0", "dependencies": { - "peer-id": "0.16.0", - "libp2p-crypto": "0.21.2", - "js-base64": "^3.7.2" + "@fluencelabs/js-peer": "workspace:0.60.0" }, "devDependencies": { - "typescript": "^4.6.4" + "@types/node": "16.11.59", + "@types/jest": "28.1.0", + "jest": "28.1.0", + "ts-jest": "28.0.2" } } diff --git a/packages/client/js-client.web/src/index.ts b/packages/client/js-client.web/src/index.ts new file mode 100644 index 00000000..1b74bdf5 --- /dev/null +++ b/packages/client/js-client.web/src/index.ts @@ -0,0 +1,23 @@ +import { MarineBackgroundRunner } from '@fluencelabs/marine.background-runner'; +import { MarineBasedAvmRunner } from '@fluencelabs/js-peer/dist/avm'; +import { marineLogFunction } from '@fluencelabs/js-peer/dist/utils'; +import { FluencePeer } from '@fluencelabs/js-peer/dist/FluencePeer'; +import { InlinedWorkerLoader, WasmWebLoader } from '@fluencelabs/marine.deps-loader.web'; + +export const defaultNames = { + avm: 'avm.wasm', + marine: 'marine-js.wasm', +}; + +export const makeDefaultPeer = () => { + const workerLoader = new InlinedWorkerLoader(); + const controlModuleLoader = new WasmWebLoader(defaultNames.marine); + const avmModuleLoader = new WasmWebLoader(defaultNames.avm); + + const marine = new MarineBackgroundRunner(workerLoader, controlModuleLoader, marineLogFunction); + const avm = new MarineBasedAvmRunner(marine, avmModuleLoader, undefined); + return new FluencePeer(marine, avm); +}; + +// @ts-ignore +globalThis.defaultPeer = makeDefaultPeer(); diff --git a/packages/client/js-client.web/tsconfig.json b/packages/client/js-client.web/tsconfig.json new file mode 100644 index 00000000..8c892f21 --- /dev/null +++ b/packages/client/js-client.web/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist" + }, + "exclude": ["node_modules", "dist"] +} diff --git a/packages/fluence-keypair/.gitignore b/packages/client/tools/.gitignore similarity index 100% rename from packages/fluence-keypair/.gitignore rename to packages/client/tools/.gitignore diff --git a/packages/fluence-connection/.npmignore b/packages/client/tools/.npmignore similarity index 100% rename from packages/fluence-connection/.npmignore rename to packages/client/tools/.npmignore diff --git a/packages/client/tools/.prettierignore b/packages/client/tools/.prettierignore new file mode 100644 index 00000000..178135c2 --- /dev/null +++ b/packages/client/tools/.prettierignore @@ -0,0 +1 @@ +/dist/ diff --git a/packages/fluence-connection/CONTRIBUTING.md b/packages/client/tools/CONTRIBUTING.md similarity index 100% rename from packages/fluence-connection/CONTRIBUTING.md rename to packages/client/tools/CONTRIBUTING.md diff --git a/packages/client/tools/README.md b/packages/client/tools/README.md new file mode 100644 index 00000000..b4c27fc0 --- /dev/null +++ b/packages/client/tools/README.md @@ -0,0 +1,11 @@ +# Fluence JS Client tools + +This package is a part of FluenceJS, the official implementation of the Fluence Peer in typescript. See the [FluenceJS repo](https://github.com/fluencelabs/fluence-js) for more info + +## Contributing + +While the project is still in the early stages of development, you are welcome to track progress and contribute. As the project is undergoing rapid changes, interested contributors should contact the team before embarking on larger pieces of work. All contributors should consult with and agree to our [basic contributing rules](CONTRIBUTING.md). + +## License + +[Apache 2.0](LICENSE) diff --git a/packages/fluence-interfaces/package.json b/packages/client/tools/package.json similarity index 68% rename from packages/fluence-interfaces/package.json rename to packages/client/tools/package.json index 36c6d2a0..76046db2 100644 --- a/packages/fluence-interfaces/package.json +++ b/packages/client/tools/package.json @@ -1,7 +1,7 @@ { - "name": "@fluencelabs/interfaces", + "name": "@fluencelabs/tools", "version": "0.1.0", - "description": "Fluence interfaces", + "description": "Fluence JS Client tools", "main": "./dist/index.js", "typings": "./dist/index.d.ts", "engines": { @@ -14,8 +14,11 @@ "repository": "https://github.com/fluencelabs/fluence-js", "author": "Fluence Labs", "license": "Apache-2.0", + "bin": { + "copy-marine": "dist/copyMarine.js" + }, "dependencies": {}, "devDependencies": { - "typescript": "^4.6.4" + "@types/node": "16.11.59" } } diff --git a/packages/fluence-js/src/tools/copyMarine.ts b/packages/client/tools/src/copyMarine.ts similarity index 89% rename from packages/fluence-js/src/tools/copyMarine.ts rename to packages/client/tools/src/copyMarine.ts index 7e3259b3..72b4c7af 100644 --- a/packages/fluence-js/src/tools/copyMarine.ts +++ b/packages/client/tools/src/copyMarine.ts @@ -1,7 +1,7 @@ #! /usr/bin/env node -import fs from 'fs'; -import path from 'path'; +import * as fs from 'fs'; +import * as path from 'path'; const firstArgument = process.argv[2]; @@ -31,7 +31,7 @@ async function main() { await fs.promises.mkdir(destPath, { recursive: true }); await Promise.all([ - copyFile('@fluencelabs/marine-js', 'marine-js.web.js'), + copyFile('@fluencelabs/marine.worker-script', 'marine-js.web.js'), copyFile('@fluencelabs/marine-js', 'marine-js.wasm'), copyFile('@fluencelabs/avm', 'avm.wasm'), ]); diff --git a/packages/client/tools/tsconfig.json b/packages/client/tools/tsconfig.json new file mode 100644 index 00000000..8c892f21 --- /dev/null +++ b/packages/client/tools/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist" + }, + "exclude": ["node_modules", "dist"] +} diff --git a/packages/core/interfaces/package.json b/packages/core/interfaces/package.json new file mode 100644 index 00000000..8b5fdeb5 --- /dev/null +++ b/packages/core/interfaces/package.json @@ -0,0 +1,48 @@ +{ + "name": "@fluencelabs/interfaces", + "type": "module", + "version": "0.5.0", + "description": "Interfaces", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "exports": { + ".": { + "import": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "./fluenceClient": { + "import": "./dist/fluenceClient.js", + "types": "./dist/fluenceClient.d.ts" + }, + "./compilerSupport": { + "import": "./dist/compilerSupport.js", + "types": "./dist/compilerSupport.d.ts" + } + }, + "typesVersions": { + "*": { + "fluenceClient.d.ts": [ + "./dist/fluenceClient.d.ts" + ], + "compilerSupport.d.ts": [ + "./dist/compilerSupport.d.ts" + ] + } + }, + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "scripts": { + "build": "tsc" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": {}, + "devDependencies": { + "@multiformats/multiaddr": "11.3.0", + "@fluencelabs/avm": "0.35.3", + "@fluencelabs/marine-js": "0.3.44" + } +} diff --git a/packages/fluence-js/src/internal/compilerSupport/v3impl/interface.ts b/packages/core/interfaces/src/compilerSupport.ts similarity index 91% rename from packages/fluence-js/src/internal/compilerSupport/v3impl/interface.ts rename to packages/core/interfaces/src/compilerSupport.ts index ce14fe71..01b8361a 100644 --- a/packages/fluence-js/src/internal/compilerSupport/v3impl/interface.ts +++ b/packages/core/interfaces/src/compilerSupport.ts @@ -236,3 +236,23 @@ export interface FnConfig { */ ttl?: number; } + +export const getArgumentTypes = ( + def: FunctionCallDef, +): { + [key: string]: NonArrowType | ArrowWithoutCallbacks; +} => { + if (def.arrow.domain.tag !== 'labeledProduct') { + throw new Error('Should be impossible'); + } + + return def.arrow.domain.fields; +}; + +export const isReturnTypeVoid = (def: FunctionCallDef): boolean => { + if (def.arrow.codomain.tag === 'nil') { + return true; + } + + return def.arrow.codomain.items.length == 0; +}; diff --git a/packages/core/interfaces/src/fluenceClient.ts b/packages/core/interfaces/src/fluenceClient.ts new file mode 100644 index 00000000..72942124 --- /dev/null +++ b/packages/core/interfaces/src/fluenceClient.ts @@ -0,0 +1,220 @@ +import { SecurityTetraplet } from '@fluencelabs/avm'; +import type { LogLevel } from '@fluencelabs/marine-js/dist/types'; +import type { MultiaddrInput } from '@multiformats/multiaddr'; +import { FnConfig, FunctionCallDef, ServiceDef } from './compilerSupport.js'; + +/** + * Peer ID's id as a base58 string (multihash/CIDv0). + */ +export type PeerIdB58 = string; + +/** + * Additional information about a service call + * @typeparam ArgName + */ +export interface CallParams { + /** + * The identifier of particle which triggered the call + */ + particleId: string; + + /** + * The peer id which created the particle + */ + initPeerId: PeerIdB58; + + /** + * Particle's timestamp when it was created + */ + timestamp: number; + + /** + * Time to live in milliseconds. The time after the particle should be expired + */ + ttl: number; + + /** + * Particle's signature + */ + signature?: string; + + /** + * Security tetraplets + */ + tetraplets: ArgName extends string ? Record : Record; +} + +/** + * Node of the Fluence network specified as a pair of node's multiaddr and it's peer id + */ +type Node = { + peerId: PeerIdB58; + multiaddr: string; +}; + +export type RelayOptions = string | MultiaddrInput | Node; + +export type KeyTypes = 'RSA' | 'Ed25519' | 'secp256k1'; + +export type KeyPairOptions = { + type: 'Ed25519'; + source: 'random' | Uint8Array; +}; + +/** + * Configuration used when initiating Fluence Client + */ +export interface ClientOptions { + /** + * Node in Fluence network to connect to. + * Can be in the form of: + * - string: multiaddr in string format + * - Multiaddr: multiaddr object, @see https://github.com/multiformats/js-multiaddr + * - Node: node structure, @see Node + * - Implementation of FluenceConnection class, @see FluenceConnection + * If not specified the will work locally and would not be able to send or receive particles. + */ + relay?: RelayOptions; + + /** + * Specify the KeyPair to be used to identify the Fluence Peer. + * Will be generated randomly if not specified + */ + keyPair?: KeyPairOptions; + + connectionOptions?: { + /** + * When the peer established the connection to the network it sends a ping-like message to check if it works correctly. + * The options allows to specify the timeout for that message in milliseconds. + * If not specified the default timeout will be used + CallParams, + */ + skipCheckConnection?: boolean; + + /** + * The dialing timeout in milliseconds + */ + dialTimeoutMs?: number; + }; + + /** + * Sets the default TTL for all particles originating from the peer with no TTL specified. + * If the originating particle's TTL is defined then that value will be used + * If the option is not set default TTL will be 7000 + */ + defaultTtlMs?: number; + + /** + * Enables\disabled various debugging features + */ + debug?: { + /** + * If set to true, newly initiated particle ids will be printed to console. + * Useful to see what particle id is responsible for aqua function + */ + printParticleId?: boolean; + /** + * Log level for marine services. By default logging is turned off. + */ + marineLogLevel?: LogLevel; + }; +} + +/** + * Information about Fluence Peer connection. + * Represented as object with the following keys: + * - `isInitialized`: Is the peer initialized or not. + * - `peerId`: Peer Id of the peer. Null if the peer is not initialized + * - `isConnected`: Is the peer connected to network or not + * - `relayPeerId`: Peer Id of the relay the peer is connected to. If the connection is direct relayPeerId is null + * - `isDirect`: True if the peer is connected to the network directly (not through relay) + */ +export type PeerStatus = + | { + isInitialized: false; + peerId: null; + isConnected: false; + relayPeerId: null; + } + | { + isInitialized: true; + peerId: PeerIdB58; + isConnected: false; + relayPeerId: null; + } + | { + isInitialized: true; + peerId: PeerIdB58; + isConnected: true; + relayPeerId: PeerIdB58; + } + | { + isInitialized: true; + peerId: PeerIdB58; + isConnected: true; + isDirect: true; + relayPeerId: null; + }; + +export interface IFluenceClient { + /** + * Get the peer's status + */ + start(config?: ClientOptions): Promise; + + /** + * Un-initializes the peer: stops all the underlying workflows, stops the Aqua VM and disconnects from the Fluence network + */ + stop(): Promise; + + /** + * Get the peer's status + */ + getStatus(): PeerStatus; + + /** + * Return peers SK + */ + getSk(): Uint8Array; + + // TODO: come up with a working interface for + // - particle creation + // - particle initialization + // - service registration + internals: any; + + // TODO: extract this out of Client interface + compilerSupport: { + callFunction: (args: CallFunctionArgs) => Promise; + registerService: (args: RegisterServiceArgs) => void; + }; +} + +export interface CallFunctionArgs { + def: FunctionCallDef; + script: string; + config: FnConfig; + args: { [key: string]: any }; +} + +export interface RegisterServiceArgs { + def: ServiceDef; + serviceId: string | undefined; + service: any; +} + +export const asFluencePeer = (fluencePeerCandidate: unknown): IFluenceClient => { + if (isFluencePeer(fluencePeerCandidate)) { + return fluencePeerCandidate; + } + + throw new Error(`Argument ${fluencePeerCandidate} is not a Fluence Peer`); +}; + +export const isFluencePeer = (fluencePeerCandidate: unknown): fluencePeerCandidate is IFluenceClient => { + if (fluencePeerCandidate && (fluencePeerCandidate as any).__isFluenceAwesome) { + return true; + } + + return false; +}; diff --git a/packages/core/interfaces/src/index.ts b/packages/core/interfaces/src/index.ts new file mode 100644 index 00000000..e4241e03 --- /dev/null +++ b/packages/core/interfaces/src/index.ts @@ -0,0 +1,2 @@ +export * from './compilerSupport.js' +export * from './fluenceClient.js' \ No newline at end of file diff --git a/packages/core/interfaces/tsconfig.json b/packages/core/interfaces/tsconfig.json new file mode 100644 index 00000000..aa5bb830 --- /dev/null +++ b/packages/core/interfaces/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/core/js-peer/.gitignore b/packages/core/js-peer/.gitignore new file mode 100644 index 00000000..1a59a95f --- /dev/null +++ b/packages/core/js-peer/.gitignore @@ -0,0 +1,21 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +bundle/ + +dist +esm +types + +# Dependency directories +node_modules/ +jspm_packages/ + +.idea diff --git a/packages/fluence-interfaces/.npmignore b/packages/core/js-peer/.npmignore similarity index 100% rename from packages/fluence-interfaces/.npmignore rename to packages/core/js-peer/.npmignore diff --git a/packages/core/js-peer/.prettierignore b/packages/core/js-peer/.prettierignore new file mode 100644 index 00000000..178135c2 --- /dev/null +++ b/packages/core/js-peer/.prettierignore @@ -0,0 +1 @@ +/dist/ diff --git a/packages/fluence-interfaces/CONTRIBUTING.md b/packages/core/js-peer/CONTRIBUTING.md similarity index 100% rename from packages/fluence-interfaces/CONTRIBUTING.md rename to packages/core/js-peer/CONTRIBUTING.md diff --git a/packages/core/js-peer/README.md b/packages/core/js-peer/README.md new file mode 100644 index 00000000..271a05d1 --- /dev/null +++ b/packages/core/js-peer/README.md @@ -0,0 +1,11 @@ +# JS Peer + +TDB + +## Contributing + +While the project is still in the early stages of development, you are welcome to track progress and contribute. As the project is undergoing rapid changes, interested contributors should contact the team before embarking on larger pieces of work. All contributors should consult with and agree to our [basic contributing rules](CONTRIBUTING.md). + +## License + +[Apache 2.0](LICENSE) diff --git a/packages/fluence-js/aqua/src/node-utils.aqua b/packages/core/js-peer/aqua/node-utils.aqua similarity index 100% rename from packages/fluence-js/aqua/src/node-utils.aqua rename to packages/core/js-peer/aqua/node-utils.aqua diff --git a/packages/fluence-js/aqua/src/services.aqua b/packages/core/js-peer/aqua/services.aqua similarity index 100% rename from packages/fluence-js/aqua/src/services.aqua rename to packages/core/js-peer/aqua/services.aqua diff --git a/packages/fluence-js/aqua/src/single-module-srv.aqua b/packages/core/js-peer/aqua/single-module-srv.aqua similarity index 100% rename from packages/fluence-js/aqua/src/single-module-srv.aqua rename to packages/core/js-peer/aqua/single-module-srv.aqua diff --git a/packages/core/js-peer/jest.config.cjs b/packages/core/js-peer/jest.config.cjs new file mode 100644 index 00000000..6ea1a606 --- /dev/null +++ b/packages/core/js-peer/jest.config.cjs @@ -0,0 +1,16 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +module.exports = { + extensionsToTreatAsEsm: ['.ts'], + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + testPathIgnorePatterns: ['dist'], + transform: { + '^.+\\.tsx?$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, +}; diff --git a/packages/core/js-peer/package.json b/packages/core/js-peer/package.json new file mode 100644 index 00000000..642d4a68 --- /dev/null +++ b/packages/core/js-peer/package.json @@ -0,0 +1,65 @@ +{ + "name": "@fluencelabs/js-peer", + "version": "0.5.0", + "description": "TypeScript implementation of Fluence Peer", + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "engines": { + "node": ">=10", + "pnpm": ">=3" + }, + "type": "module", + "scripts": { + "build": "tsc", + "compile-aqua": "aqua -i ./aqua/ -o ./src/internal/_aqua", + "test:smoke": "node ./dist/js-peer/__test__/integration/smokeTest.js", + "test": "NODE_OPTIONS=--experimental-vm-modules pnpm jest", + "test:unit": "NODE_OPTIONS=--experimental-vm-modules pnpm jest --testPathPattern=src/__test__/unit", + "test:integration": "NODE_OPTIONS=--experimental-vm-modules pnpm jest --testPathPattern=src/__test__/integration" + }, + "repository": "https://github.com/fluencelabs/fluence-js", + "author": "Fluence Labs", + "license": "Apache-2.0", + "dependencies": { + "@fluencelabs/interfaces": "0.5.0", + "@fluencelabs/avm": "0.31.10", + "@fluencelabs/marine-js": "0.3.44", + "multiformats": "11.0.1", + "async": "3.2.4", + "bs58": "5.0.0", + "buffer": "6.0.3", + "loglevel": "1.8.1", + "@libp2p/peer-id": "2.0.1", + "rxjs": "7.5.5", + "ts-pattern": "3.3.3", + "uuid": "8.3.2", + "threads": "1.7.0", + "@libp2p/crypto": "1.0.8", + "@libp2p/peer-id-factory": "2.0.1", + "@libp2p/interface-peer-id": "2.0.1", + "@libp2p/interface-keys": "1.0.7", + "js-base64": "3.7.2", + "it-length-prefixed": "8.0.4", + "it-pipe": "2.0.5", + "it-map": "2.0.0", + "uint8arrays": "4.0.3", + "@chainsafe/libp2p-noise": "11.0.0", + "libp2p": "0.42.2", + "@libp2p/interfaces": "3.3.1", + "@libp2p/interface-connection": "3.0.8", + "@libp2p/mplex": "7.1.1", + "@libp2p/websockets": "5.0.3", + "@multiformats/multiaddr": "11.3.0" + }, + "devDependencies": { + "@fluencelabs/aqua": "0.7.7-362", + "@fluencelabs/aqua-api": "0.9.1-373", + "@fluencelabs/aqua-lib": "0.6.0", + "@fluencelabs/fluence-network-environment": "1.0.13", + "@types/bs58": "4.0.1", + "@types/uuid": "8.3.2", + "@types/jest": "29.4.0", + "jest": "29.4.1", + "ts-jest": "29.0.5" + } +} diff --git a/packages/fluence-js/src/__test__/unit/compiler/v3.spec.ts b/packages/core/js-peer/src/compilerSupport/__test__/v3.spec.ts similarity index 70% rename from packages/fluence-js/src/__test__/unit/compiler/v3.spec.ts rename to packages/core/js-peer/src/compilerSupport/__test__/v3.spec.ts index 47c486fd..d13fb409 100644 --- a/packages/fluence-js/src/__test__/unit/compiler/v3.spec.ts +++ b/packages/core/js-peer/src/compilerSupport/__test__/v3.spec.ts @@ -1,5 +1,4 @@ -import each from 'jest-each'; -import { aqua2ts, ts2aqua } from '../../../internal/compilerSupport/v3impl/conversions'; +import { aqua2ts, ts2aqua } from '../conversions.js'; const i32 = { tag: 'scalar', name: 'i32' } as const; @@ -152,24 +151,24 @@ const nestedStructs = [ ]; describe('Conversion from aqua to typescript', () => { - each` - aqua | ts | type - ${1} | ${1} | ${i32} - ${[]} | ${null} | ${opt_i32} - ${[1]} | ${1} | ${opt_i32} - ${[1, 2, 3]} | ${[1, 2, 3]} | ${array_i32} - ${[]} | ${[]} | ${array_i32} - ${[[1]]} | ${[1]} | ${array_opt_i32} - ${[[]]} | ${[null]} | ${array_opt_i32} - ${[[1], [2]]} | ${[1, 2]} | ${array_opt_i32} - ${[[], [2]]} | ${[null, 2]} | ${array_opt_i32} - ${structs[0].aqua} | ${structs[0].ts} | ${labeledProduct} - ${structs[1].aqua} | ${structs[1].ts} | ${labeledProduct} - ${structs[0].aqua} | ${structs[0].ts} | ${struct} - ${structs[1].aqua} | ${structs[1].ts} | ${struct} - ${nestedStructs[0].aqua} | ${nestedStructs[0].ts} | ${nestedLabeledProductType} - ${nestedStructs[1].aqua} | ${nestedStructs[1].ts} | ${nestedLabeledProductType} -`.test( + test.each` + aqua | ts | type + ${1} | ${1} | ${i32} + ${[]} | ${null} | ${opt_i32} + ${[1]} | ${1} | ${opt_i32} + ${[1, 2, 3]} | ${[1, 2, 3]} | ${array_i32} + ${[]} | ${[]} | ${array_i32} + ${[[1]]} | ${[1]} | ${array_opt_i32} + ${[[]]} | ${[null]} | ${array_opt_i32} + ${[[1], [2]]} | ${[1, 2]} | ${array_opt_i32} + ${[[], [2]]} | ${[null, 2]} | ${array_opt_i32} + ${structs[0].aqua} | ${structs[0].ts} | ${labeledProduct} + ${structs[1].aqua} | ${structs[1].ts} | ${labeledProduct} + ${structs[0].aqua} | ${structs[0].ts} | ${struct} + ${structs[1].aqua} | ${structs[1].ts} | ${struct} + ${nestedStructs[0].aqua} | ${nestedStructs[0].ts} | ${nestedLabeledProductType} + ${nestedStructs[1].aqua} | ${nestedStructs[1].ts} | ${nestedLabeledProductType} + `( // 'aqua: $aqua. ts: $ts. type: $type', async ({ aqua, ts, type }) => { diff --git a/packages/fluence-js/src/internal/compilerSupport/v3impl/callFunction.ts b/packages/core/js-peer/src/compilerSupport/callFunction.ts similarity index 52% rename from packages/fluence-js/src/internal/compilerSupport/v3impl/callFunction.ts rename to packages/core/js-peer/src/compilerSupport/callFunction.ts index 95c117e6..4421d6ae 100644 --- a/packages/fluence-js/src/internal/compilerSupport/v3impl/callFunction.ts +++ b/packages/core/js-peer/src/compilerSupport/callFunction.ts @@ -1,6 +1,13 @@ -import { FnConfig, FunctionCallDef } from './interface'; -import { FluencePeer } from '../../FluencePeer'; -import { Fluence } from '../../../index'; +import { + ArrowWithoutCallbacks, + FnConfig, + FunctionCallDef, + NonArrowType, + getArgumentTypes, + isReturnTypeVoid, + IFluenceClient, +} from '@fluencelabs/interfaces'; + import { injectRelayService, registerParticleScopeService, @@ -9,21 +16,7 @@ import { ServiceDescription, userHandlerService, injectValueService, -} from './services'; - -/** - * Convenience function to support Aqua `func` generation backend - * The compiler only need to generate a call the function and provide the corresponding definitions and the air script - * - * @param rawFnArgs - raw arguments passed by user to the generated function - * @param def - function definition generated by the Aqua compiler - * @param script - air script with function execution logic generated by the Aqua compiler - */ -export function callFunction(rawFnArgs: Array, def: FunctionCallDef, script: string): Promise { - const { args, peer, config } = extractArgs(rawFnArgs, def); - - return callFunctionImpl(def, script, config || {}, peer, args); -} +} from './services.js'; /** * Convenience function which does all the internal work of creating particles @@ -40,7 +33,7 @@ export function callFunctionImpl( def: FunctionCallDef, script: string, config: FnConfig, - peer: FluencePeer, + peer: IFluenceClient, args: { [key: string]: any }, ): Promise { const argumentTypes = getArgumentTypes(def); @@ -69,7 +62,7 @@ export function callFunctionImpl( registerParticleScopeService(peer, particle, errorHandlingService(def, reject)); - peer.internals.initiateParticle(particle, (stage) => { + peer.internals.initiateParticle(particle, (stage: any) => { // If function is void, then it's completed when one of the two conditions is met: // 1. The particle is sent to the network (state 'sent') // 2. All CallRequests are executed, e.g., all variable loading and local function calls are completed (state 'localWorkDone') @@ -95,67 +88,3 @@ export function callFunctionImpl( return promise; } - -const isReturnTypeVoid = (def: FunctionCallDef) => { - if (def.arrow.codomain.tag === 'nil') { - return true; - } - - return def.arrow.codomain.items.length == 0; -}; - -/** - * Arguments could be passed in one these configurations: - * [...actualArgs] - * [peer, ...actualArgs] - * [...actualArgs, config] - * [peer, ...actualArgs, config] - * - * This function select the appropriate configuration and returns - * arguments in a structured way of: { peer, config, args } - */ -const extractArgs = ( - args: any[], - def: FunctionCallDef, -): { - peer: FluencePeer; - config?: FnConfig; - args: { [key: string]: any }; -} => { - const argumentTypes = getArgumentTypes(def); - const argumentNames = Object.keys(argumentTypes); - const numberOfExpectedArgs = argumentNames.length; - - let peer: FluencePeer; - let structuredArgs: any[]; - let config: FnConfig; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - structuredArgs = args.slice(1, numberOfExpectedArgs + 1); - config = args[numberOfExpectedArgs + 1]; - } else { - peer = Fluence.getPeer(); - structuredArgs = args.slice(0, numberOfExpectedArgs); - config = args[numberOfExpectedArgs]; - } - - if (structuredArgs.length !== numberOfExpectedArgs) { - throw new Error(`Incorrect number of arguments. Expecting ${numberOfExpectedArgs}`); - } - - const argsRes = argumentNames.reduce((acc, name, index) => ({ ...acc, [name]: structuredArgs[index] }), {}); - - return { - peer: peer, - config: config, - args: argsRes, - }; -}; - -const getArgumentTypes = (def: FunctionCallDef) => { - if (def.arrow.domain.tag !== 'labeledProduct') { - throw new Error('Should be impossible'); - } - - return def.arrow.domain.fields; -}; diff --git a/packages/fluence-js/src/internal/compilerSupport/v3impl/conversions.ts b/packages/core/js-peer/src/compilerSupport/conversions.ts similarity index 96% rename from packages/fluence-js/src/internal/compilerSupport/v3impl/conversions.ts rename to packages/core/js-peer/src/compilerSupport/conversions.ts index 578d491b..08af1ad9 100644 --- a/packages/fluence-js/src/internal/compilerSupport/v3impl/conversions.ts +++ b/packages/core/js-peer/src/compilerSupport/conversions.ts @@ -1,7 +1,7 @@ -import { jsonify } from '../../utils'; +import { jsonify } from '../js-peer/utils.js'; import { match } from 'ts-pattern'; -import { ArrowType, ArrowWithoutCallbacks, NonArrowType, UnlabeledProductType } from './interface'; -import { CallServiceData } from 'src/internal/commonTypes'; +import type { ArrowType, ArrowWithoutCallbacks, NonArrowType } from '@fluencelabs/interfaces'; +import { CallServiceData } from '../interfaces/commonTypes.js'; /** * Convert value from its representation in aqua language to representation in typescript @@ -21,6 +21,7 @@ export const aqua2ts = (value: any, type: NonArrowType): any => { return aqua2ts(value[0], opt.type); } }) + // @ts-ignore .with({ tag: 'scalar' }, { tag: 'bottomType' }, { tag: 'topType' }, () => { return value; }) @@ -102,6 +103,7 @@ export const ts2aqua = (value: any, type: NonArrowType): any => { return [ts2aqua(value, opt.type)]; } }) + // @ts-ignore .with({ tag: 'scalar' }, { tag: 'bottomType' }, { tag: 'topType' }, () => { return value; }) diff --git a/packages/core/js-peer/src/compilerSupport/registerService.ts b/packages/core/js-peer/src/compilerSupport/registerService.ts new file mode 100644 index 00000000..c478bf28 --- /dev/null +++ b/packages/core/js-peer/src/compilerSupport/registerService.ts @@ -0,0 +1,46 @@ +import type { IFluenceClient, ServiceDef } from '@fluencelabs/interfaces'; +import { registerGlobalService, userHandlerService } from './services.js'; + +export const registerServiceImpl = ( + peer: IFluenceClient, + def: ServiceDef, + serviceId: string | undefined, + service: any, +) => { + // TODO: TBH service registration is just putting some stuff into a hashmap + // there should not be such a check at all + if (!peer.getStatus().isInitialized) { + throw new Error( + 'Could not register the service because the peer is not initialized. Are you passing the wrong peer to the register function?', + ); + } + + // Checking for missing keys + const requiredKeys = def.functions.tag === 'nil' ? [] : Object.keys(def.functions.fields); + const incorrectServiceDefinitions = requiredKeys.filter((f) => !(f in service)); + if (!!incorrectServiceDefinitions.length) { + throw new Error( + `Error registering service ${serviceId}: missing functions: ` + + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(', '), + ); + } + + if (!serviceId) { + serviceId = def.defaultServiceId; + } + + if (!serviceId) { + throw new Error('Service ID must be specified'); + } + + const singleFunctions = def.functions.tag === 'nil' ? [] : Object.entries(def.functions.fields); + for (let singleFunction of singleFunctions) { + let [name, type] = singleFunction; + // The function has type of (arg1, arg2, arg3, ... , callParams) => CallServiceResultType | void + // Account for the fact that user service might be defined as a class - .bind(...) + const userDefinedHandler = service[name].bind(service); + + const serviceDescription = userHandlerService(serviceId, singleFunction, userDefinedHandler); + registerGlobalService(peer, serviceDescription); + } +}; diff --git a/packages/fluence-js/src/internal/compilerSupport/v3impl/services.ts b/packages/core/js-peer/src/compilerSupport/services.ts similarity index 87% rename from packages/fluence-js/src/internal/compilerSupport/v3impl/services.ts rename to packages/core/js-peer/src/compilerSupport/services.ts index b8e5ff40..32278999 100644 --- a/packages/fluence-js/src/internal/compilerSupport/v3impl/services.ts +++ b/packages/core/js-peer/src/compilerSupport/services.ts @@ -1,12 +1,18 @@ import { SecurityTetraplet } from '@fluencelabs/avm'; import { match } from 'ts-pattern'; -import { Particle } from '../../Particle'; -import { CallParams, CallServiceData, GenericCallServiceHandler, ResultCodes } from '../../commonTypes'; -import { FluencePeer } from '../../FluencePeer'; +import { Particle } from '../js-peer/Particle.js'; +import { CallServiceData, GenericCallServiceHandler, ResultCodes } from '../interfaces/commonTypes.js'; -import { aquaArgs2Ts, responseServiceValue2ts, returnType2Aqua, ts2aqua } from './conversions'; -import { ArrowWithoutCallbacks, FunctionCallConstants, FunctionCallDef, NonArrowType } from './interface'; +import { aquaArgs2Ts, responseServiceValue2ts, returnType2Aqua, ts2aqua } from './conversions.js'; +import { + IFluenceClient, + CallParams, + ArrowWithoutCallbacks, + FunctionCallConstants, + FunctionCallDef, + NonArrowType, +} from '@fluencelabs/interfaces'; export interface ServiceDescription { serviceId: string; @@ -17,7 +23,7 @@ export interface ServiceDescription { /** * Creates a service which injects relay's peer id into aqua space */ -export const injectRelayService = (def: FunctionCallDef, peer: FluencePeer) => { +export const injectRelayService = (def: FunctionCallDef, peer: IFluenceClient) => { return { serviceId: def.names.getDataSrv, fnName: def.names.relay, @@ -162,10 +168,10 @@ const extractCallParams = (req: CallServiceData, arrow: ArrowWithoutCallbacks): return callParams; }; -export const registerParticleScopeService = (peer: FluencePeer, particle: Particle, service: ServiceDescription) => { +export const registerParticleScopeService = (peer: IFluenceClient, particle: Particle, service: ServiceDescription) => { peer.internals.regHandler.forParticle(particle.id, service.serviceId, service.fnName, service.handler); }; -export const registerGlobalService = (peer: FluencePeer, service: ServiceDescription) => { +export const registerGlobalService = (peer: IFluenceClient, service: ServiceDescription) => { peer.internals.regHandler.common(service.serviceId, service.fnName, service.handler); }; diff --git a/packages/fluence-connection/src/index.ts b/packages/core/js-peer/src/connection/index.ts similarity index 71% rename from packages/fluence-connection/src/index.ts rename to packages/core/js-peer/src/connection/index.ts index 008db986..44d7dad7 100644 --- a/packages/fluence-connection/src/index.ts +++ b/packages/core/js-peer/src/connection/index.ts @@ -13,23 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { FluenceConnection, ParticleHandler, PeerIdB58 } from '@fluencelabs/interfaces'; -// @ts-ignore -import Websockets from 'libp2p-websockets'; -// @ts-ignore -import Mplex from 'libp2p-mplex'; -import Lib2p2Peer from 'libp2p'; -import { decode, encode } from 'it-length-prefixed'; +import { PeerIdB58 } from '@fluencelabs/interfaces'; +import { FluenceConnection, ParticleHandler } from '../interfaces/index.js'; import { pipe } from 'it-pipe'; -import * as log from 'loglevel'; -import { Noise } from '@chainsafe/libp2p-noise'; -import PeerId from 'peer-id'; -import type { MultiaddrInput } from 'multiaddr'; -import { Multiaddr } from 'multiaddr'; -// @ts-ignore -import { all as allow_all } from 'libp2p-websockets/src/filters'; -import { Connection } from 'libp2p-interfaces/src/topology'; -import Buffer from './Buffer'; +import { encode, decode } from 'it-length-prefixed'; +import type { PeerId } from '@libp2p/interface-peer-id'; +import { createLibp2p, Libp2p } from 'libp2p'; + +import { noise } from '@chainsafe/libp2p-noise'; +import { mplex } from '@libp2p/mplex'; +import { webSockets } from '@libp2p/websockets'; +import { all } from '@libp2p/websockets/filters'; +import { multiaddr } from '@multiformats/multiaddr'; +import type { MultiaddrInput, Multiaddr } from '@multiformats/multiaddr'; +import type { Connection } from '@libp2p/interface-connection'; + +import map from 'it-map'; +import { fromString } from 'uint8arrays/from-string'; +import { toString } from 'uint8arrays/to-string'; + +import log from 'loglevel'; export const PROTOCOL_NAME = '/fluence/particle/2.0.0'; @@ -59,7 +62,7 @@ export interface FluenceConnectionOptions { export class RelayConnection extends FluenceConnection { constructor( public peerId: PeerIdB58, - private _lib2p2Peer: Lib2p2Peer, + private _lib2p2Peer: Libp2p, private _relayAddress: Multiaddr, public readonly relayPeerId: PeerIdB58, ) { @@ -69,27 +72,18 @@ export class RelayConnection extends FluenceConnection { private _connection?: Connection; static async createConnection(options: FluenceConnectionOptions): Promise { - const transportKey = Websockets.prototype[Symbol.toStringTag]; - const lib2p2Peer = await Lib2p2Peer.create({ + const lib2p2Peer = await createLibp2p({ peerId: options.peerId, - modules: { - transport: [Websockets], - streamMuxer: [Mplex], - connEncryption: [new Noise()], - }, - config: { - transport: { - [transportKey]: { - filter: allow_all, - }, - }, - }, - dialer: { - dialTimeout: options?.dialTimeoutMs, - }, + transports: [ + webSockets({ + filter: all, + }), + ], + streamMuxers: [mplex()], + connectionEncryption: [noise()], }); - const relayMultiaddr = new Multiaddr(options.relayAddress); + const relayMultiaddr = multiaddr(options.relayAddress); const relayPeerId = relayMultiaddr.getPeerId(); if (relayPeerId === null) { throw new Error('Specified multiaddr is invalid or missing peer id: ' + options.relayAddress); @@ -97,7 +91,7 @@ export class RelayConnection extends FluenceConnection { return new RelayConnection( // force new line - options.peerId.toB58String(), + options.peerId.toString(), lib2p2Peer, relayMultiaddr, relayPeerId, @@ -127,12 +121,12 @@ export class RelayConnection extends FluenceConnection { const sink = this._connection.streams[0].sink; */ - const conn = await this._lib2p2Peer.dialProtocol(this._relayAddress, PROTOCOL_NAME); - const sink = conn.stream.sink; + const stream = await this._lib2p2Peer.dialProtocol(this._relayAddress, PROTOCOL_NAME); + const sink = stream.sink; pipe( - // force new line - [Buffer.from(particle, 'utf8')], + [fromString(particle)], + // @ts-ignore encode(), sink, ); @@ -146,7 +140,9 @@ export class RelayConnection extends FluenceConnection { stream.source, // @ts-ignore decode(), - async (source: AsyncIterable) => { + // @ts-ignore + (source) => map(source, (buf) => toString(buf.subarray())), + async (source) => { try { for await (const msg of source) { try { @@ -162,7 +158,7 @@ export class RelayConnection extends FluenceConnection { ); }); - log.debug(`dialing to the node with client's address: ` + this._lib2p2Peer.peerId.toB58String()); + log.debug(`dialing to the node with client's address: ` + this._lib2p2Peer.peerId.toString()); try { this._connection = await this._lib2p2Peer.dial(this._relayAddress); diff --git a/packages/fluence-js/src/internal/commonTypes.ts b/packages/core/js-peer/src/interfaces/commonTypes.ts similarity index 75% rename from packages/fluence-js/src/internal/commonTypes.ts rename to packages/core/js-peer/src/interfaces/commonTypes.ts index 7857b032..878337c6 100644 --- a/packages/fluence-js/src/internal/commonTypes.ts +++ b/packages/core/js-peer/src/interfaces/commonTypes.ts @@ -14,48 +14,8 @@ * limitations under the License. */ -import { SecurityTetraplet } from '@fluencelabs/avm'; - -/** - * Peer ID's id as a base58 string (multihash/CIDv0). - */ -export type PeerIdB58 = string; - -/** - * Additional information about a service call - * @typeparam ArgName - */ -export interface CallParams { - /** - * The identifier of particle which triggered the call - */ - particleId: string; - - /** - * The peer id which created the particle - */ - initPeerId: PeerIdB58; - - /** - * Particle's timestamp when it was created - */ - timestamp: number; - - /** - * Time to live in milliseconds. The time after the particle should be expired - */ - ttl: number; - - /** - * Particle's signature - */ - signature?: string; - - /** - * Security tetraplets - */ - tetraplets: ArgName extends string ? Record : Record; -} +import type { PeerIdB58 } from '@fluencelabs/interfaces'; +import type { SecurityTetraplet } from '@fluencelabs/avm'; export enum ResultCodes { success = 0, diff --git a/packages/core/js-peer/src/interfaces/index.ts b/packages/core/js-peer/src/interfaces/index.ts new file mode 100644 index 00000000..b93667c1 --- /dev/null +++ b/packages/core/js-peer/src/interfaces/index.ts @@ -0,0 +1,90 @@ +/* + * Copyright 2020 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { PeerIdB58 } from '@fluencelabs/interfaces'; +import type { JSONArray, JSONObject, LogLevel } from '@fluencelabs/marine-js/dist/types'; +import type { RunParameters, CallResultsArray, InterpreterResult } from '@fluencelabs/avm'; +import type { WorkerImplementation } from 'threads/dist/types/master'; + +export type ParticleHandler = (particle: string) => void; + +/** + * Base class for connectivity layer to Fluence Network + */ +export abstract class FluenceConnection { + abstract readonly relayPeerId: PeerIdB58 | null; + abstract connect(onIncomingParticle: ParticleHandler): Promise; + abstract disconnect(): Promise; + abstract sendParticle(nextPeerIds: PeerIdB58[], particle: string): Promise; +} + +export interface IMarine extends IModule { + createService(serviceModule: SharedArrayBuffer | Buffer, serviceId: string, logLevel?: LogLevel): Promise; + + callService( + serviceId: string, + functionName: string, + args: JSONArray | JSONObject, + callParams: any, + ): Promise; +} + +export interface IAvmRunner extends IModule { + run( + runParams: RunParameters, + air: string, + prevData: Uint8Array, + data: Uint8Array, + callResults: CallResultsArray, + ): Promise; +} + +export interface IModule { + start(): Promise; + stop(): Promise; +} + +export interface IValueLoader { + getValue(): T; +} + +export interface IWasmLoader extends IValueLoader, IModule {} + +export interface IWorkerLoader extends IValueLoader, IModule {} + +export class LazyLoader implements IModule, IValueLoader { + private value: T | null = null; + + constructor(private loadValue: () => Promise | T) {} + + getValue(): T { + if (this.value == null) { + throw new Error('Value has not been loaded. Call `start` method to load the value.'); + } + + return this.value; + } + + async start() { + if (this.value !== null) { + return; + } + + this.value = await this.loadValue(); + } + + async stop() {} +} diff --git a/packages/fluence-js/src/internal/FluencePeer.ts b/packages/core/js-peer/src/js-peer/FluencePeer.ts similarity index 68% rename from packages/fluence-js/src/internal/FluencePeer.ts rename to packages/core/js-peer/src/js-peer/FluencePeer.ts index d235e914..458495d7 100644 --- a/packages/fluence-js/src/internal/FluencePeer.ts +++ b/packages/core/js-peer/src/js-peer/FluencePeer.ts @@ -15,190 +15,61 @@ */ import 'buffer'; -import { RelayConnection } from '@fluencelabs/connection'; -import { FluenceConnection } from '@fluencelabs/interfaces'; -import { KeyPair } from '@fluencelabs/keypair'; -import { FluenceAppService, loadDefaults, loadWasmFromFileSystem, loadWasmFromServer } from '@fluencelabs/marine-js'; -import type { MultiaddrInput } from 'multiaddr'; -import { CallServiceData, CallServiceResult, GenericCallServiceHandler, ResultCodes } from './commonTypes'; -import { PeerIdB58 } from './commonTypes'; -import { Particle, ParticleExecutionStage, ParticleQueueItem } from './Particle'; +import { RelayConnection } from '../connection/index.js'; +import { FluenceConnection, IAvmRunner, IMarine } from '../interfaces/index.js'; +import { fromOpts, KeyPair } from '../keypair/index.js'; import { - throwIfNotSupported, - dataToString, - jsonify, - MarineLoglevel, - marineLogLevelToEnvs, - isString, - ServiceError, -} from './utils'; + CallServiceData, + CallServiceResult, + GenericCallServiceHandler, + ResultCodes, +} from '../interfaces/commonTypes.js'; +import type { + PeerIdB58, + IFluenceClient, + PeerStatus, + CallFunctionArgs, + RegisterServiceArgs, + ClientOptions, + KeyPairOptions, + RelayOptions, +} from '@fluencelabs/interfaces/dist/fluenceClient'; +import { Particle, ParticleExecutionStage, ParticleQueueItem } from './Particle.js'; +import { dataToString, jsonify, isString, ServiceError } from './utils.js'; import { concatMap, filter, pipe, Subject, tap } from 'rxjs'; import log from 'loglevel'; -import { builtInServices } from './builtins/common'; -import { defaultSigGuard, Sig } from './builtins/Sig'; -import { registerSig } from './_aqua/services'; -import { registerSrv } from './_aqua/single-module-srv'; -import Buffer from './Buffer'; +import { builtInServices } from './builtins/common.js'; +import { defaultSigGuard, Sig } from './builtins/Sig.js'; +import { registerSig } from './_aqua/services.js'; +import { registerSrv } from './_aqua/single-module-srv.js'; +import { Buffer } from 'buffer'; -import { isBrowser, isNode } from 'browser-or-node'; -import { deserializeAvmResult, InterpreterResult, JSONValue, LogLevel, serializeAvmArgs } from '@fluencelabs/avm'; -import { NodeUtils, Srv } from './builtins/SingleModuleSrv'; -import { registerNodeUtils } from './_aqua/node-utils'; - -/** - * Node of the Fluence network specified as a pair of node's multiaddr and it's peer id - */ -type Node = { - peerId: PeerIdB58; - multiaddr: string; -}; +import { JSONValue } from '@fluencelabs/avm'; +import { LogLevel } from '@fluencelabs/marine-js/dist/types'; +import { NodeUtils, Srv } from './builtins/SingleModuleSrv.js'; +import { registerNodeUtils } from './_aqua/node-utils.js'; +import type { MultiaddrInput } from '@multiformats/multiaddr'; +import { callFunctionImpl } from '../compilerSupport/callFunction.js'; +import { registerServiceImpl } from '../compilerSupport/registerService.js'; const DEFAULT_TTL = 7000; -export type ConnectionOption = string | MultiaddrInput | Node; - -/** - * Configuration used when initiating Fluence Peer - */ -export interface PeerConfig { - /** - * Node in Fluence network to connect to. - * Can be in the form of: - * - string: multiaddr in string format - * - Multiaddr: multiaddr object, @see https://github.com/multiformats/js-multiaddr - * - Node: node structure, @see Node - * - Implementation of FluenceConnection class, @see FluenceConnection - * If not specified the will work locally and would not be able to send or receive particles. - */ - connectTo?: ConnectionOption; - - /** - * @deprecated. AVM run through marine-js infrastructure. - * @see debug.marineLogLevel option to configure logging level of AVM - */ - avmLogLevel?: MarineLoglevel; - - /** - * Specify the KeyPair to be used to identify the Fluence Peer. - * Will be generated randomly if not specified - */ - KeyPair?: KeyPair; - - /** - * When the peer established the connection to the network it sends a ping-like message to check if it works correctly. - * The options allows to specify the timeout for that message in milliseconds. - * If not specified the default timeout will be used - */ - checkConnectionTimeoutMs?: number; - - /** - * When the peer established the connection to the network it sends a ping-like message to check if it works correctly. - * If set to true, the ping-like message will be skipped - * Default: false - */ - skipCheckConnection?: boolean; - - /** - * The dialing timeout in milliseconds - */ - dialTimeoutMs?: number; - - /** - * Sets the default TTL for all particles originating from the peer with no TTL specified. - * If the originating particle's TTL is defined then that value will be used - * If the option is not set default TTL will be 7000 - */ - defaultTtlMs?: number; - - /** - * This option allows to specify the location of various dependencies needed for marine-js. - * Each key specifies the location of the corresponding dependency. - * If Fluence peer is started inside browser the location is treated as the path to the file relative to origin. - * IF Fluence peer is started in nodejs the location is treated as the full path to file on the file system. - */ - marineJS?: { - /** - * Configures path to the marine-js worker script. - */ - workerScriptPath: string; - - /** - * Configures the path to marine-js control wasm module - */ - marineWasmPath: string; - - /** - * Configures the path to AVM wasm module - */ - avmWasmPath: string; - }; - - /** - * Enables\disabled various debugging features - */ - debug?: { - /** - * If set to true, newly initiated particle ids will be printed to console. - * Useful to see what particle id is responsible for aqua function - */ - printParticleId?: boolean; - - /** - * Log level for marine services. By default logging is turned off. - */ - marineLogLevel?: LogLevel; - }; -} - -/** - * Information about Fluence Peer connection. - * Represented as object with the following keys: - * - `isInitialized`: Is the peer initialized or not. - * - `peerId`: Peer Id of the peer. Null if the peer is not initialized - * - `isConnected`: Is the peer connected to network or not - * - `relayPeerId`: Peer Id of the relay the peer is connected to. If the connection is direct relayPeerId is null - * - `isDirect`: True if the peer is connected to the network directly (not through relay) - */ -export type PeerStatus = - | { - isInitialized: false; - peerId: null; - isConnected: false; - relayPeerId: null; - } - | { - isInitialized: true; - peerId: PeerIdB58; - isConnected: false; - relayPeerId: null; - } - | { - isInitialized: true; - peerId: PeerIdB58; - isConnected: true; - relayPeerId: PeerIdB58; - } - | { - isInitialized: true; - peerId: PeerIdB58; - isConnected: true; - isDirect: true; - relayPeerId: null; - }; +export type PeerConfig = ClientOptions; /** * This class implements the Fluence protocol for javascript-based environments. * It provides all the necessary features to communicate with Fluence network */ -export class FluencePeer { +export class FluencePeer implements IFluenceClient { + constructor(private marine: IMarine, private avmRunner: IAvmRunner) {} + /** - * Checks whether the object is instance of FluencePeer class - * @param obj - object to check if it is FluencePeer - * @returns true if the object is FluencePeer false otherwise + * Internal contract to cast unknown objects to IFluenceClient. + * If an unknown object has this property then we assume it is in fact a Peer and it implements IFluenceClient + * Check against this variable MUST NOT be coupled with any `FluencePeer` because otherwise it might get bundled + * brining a lot of unnecessary stuff alongside with it */ - static isInstance(obj: unknown): obj is FluencePeer { - return obj instanceof FluencePeer; - } + __isFluenceAwesome = true; /** * Get the peer's status @@ -214,19 +85,19 @@ export class FluencePeer { }; } - if (this._connection === undefined) { + if (this.connection === null) { return { isInitialized: true, - peerId: this._keyPair.Libp2pPeerId.toB58String(), + peerId: this._keyPair.getPeerId(), isConnected: false, relayPeerId: null, }; } - if (this._connection.relayPeerId === null) { + if (this.connection.relayPeerId === null) { return { isInitialized: true, - peerId: this._keyPair.Libp2pPeerId.toB58String(), + peerId: this._keyPair.getPeerId(), isConnected: true, isDirect: true, relayPeerId: null, @@ -235,25 +106,34 @@ export class FluencePeer { return { isInitialized: true, - peerId: this._keyPair.Libp2pPeerId.toB58String(), + peerId: this._keyPair.getPeerId(), isConnected: true, - relayPeerId: this._connection.relayPeerId, + relayPeerId: this.connection.relayPeerId, }; } + /** + * Return peers SK + */ + getSk(): Uint8Array { + if (!this._keyPair) { + throw new Error("Can't get key pair: peer is not initialized"); + } + + return this._keyPair.toEd25519PrivateKey(); + } + /** * Initializes the peer: starts the Aqua VM, initializes the default call service handlers * and (optionally) connect to the Fluence network * @param config - object specifying peer configuration */ async start(config: PeerConfig = {}): Promise { - throwIfNotSupported(); - const keyPair = config.KeyPair ?? (await KeyPair.randomEd25519()); - const newConfig = { ...config, KeyPair: keyPair }; + const keyPair = await makeKeyPair(config.keyPair); + await this.init(config, keyPair); - await this.init(newConfig); + const conn = await configToConnection(keyPair, config?.relay, config?.connectionOptions?.dialTimeoutMs); - const conn = await configToConnection(newConfig.KeyPair, config?.connectTo, config?.dialTimeoutMs); if (conn !== null) { await this.connect(conn); } @@ -278,19 +158,14 @@ export class FluencePeer { * @param serviceId - the service id by which the service can be accessed in aqua */ async registerMarineService(wasm: SharedArrayBuffer | Buffer, serviceId: string): Promise { - if (!this._fluenceAppService) { + if (!this.marine) { throw new Error("Can't register marine service: peer is not initialized"); } if (this._containsService(serviceId)) { throw new Error(`Service with '${serviceId}' id already exists`); } - await this._fluenceAppService.createService( - wasm, - serviceId, - undefined, - marineLogLevelToEnvs(this._marineLogLevel), - ); + await this.marine.createService(wasm, serviceId, this._marineLogLevel); this._marineServices.add(serviceId); } @@ -310,8 +185,8 @@ export class FluencePeer { this._keyPair = undefined; // This will set peer to non-initialized state and stop particle processing this._stopParticleProcessing(); await this.disconnect(); - await this._fluenceAppService?.terminate(); - this._fluenceAppService = undefined; + await this.marine.stop(); + await this.avmRunner.stop(); this._classServices = undefined; this._particleSpecificHandlers.clear(); @@ -320,6 +195,16 @@ export class FluencePeer { } // internal api + get compilerSupport() { + return { + callFunction: (args: CallFunctionArgs): Promise => { + return callFunctionImpl(args.def, args.script, args.config, this, args.args); + }, + registerService: (args: RegisterServiceArgs): void => { + return registerServiceImpl(this, args.def, args.serviceId, args.service); + }, + }; + } /** * @private Is not intended to be used manually. Subject to change @@ -333,7 +218,7 @@ export class FluencePeer { new Error("Can't use avm: peer is not initialized"); } - const res = await this._fluenceAppService!.callService('avm', 'ast', [air], undefined); + const res = await this.marine.callService('avm', 'ast', [air], undefined); if (!isString(res)) { throw new Error(`Call to avm:ast expected to return string. Actual return: ${res}`); } @@ -430,10 +315,10 @@ export class FluencePeer { /** * @private Subject to change. Do not use this method directly */ - async init(config: PeerConfig & Required>) { - this._keyPair = config.KeyPair; + async init(config: Omit, keyPair: KeyPair) { + this._keyPair = keyPair; - const peerId = this._keyPair.Libp2pPeerId.toB58String(); + const peerId = this._keyPair.getPeerId(); if (config?.debug?.printParticleId) { this._printParticleId = true; @@ -445,17 +330,8 @@ export class FluencePeer { this._marineLogLevel = config.debug.marineLogLevel; } - this._fluenceAppService = new FluenceAppService(config?.marineJS?.workerScriptPath); - const marineDeps = config?.marineJS - ? await loadMarineAndAvm(config.marineJS.marineWasmPath, config.marineJS.avmWasmPath) - : await loadDefaults(); - await this._fluenceAppService.init(marineDeps.marine); - await this._fluenceAppService.createService( - marineDeps.avm, - 'avm', - undefined, - marineLogLevelToEnvs(this._marineLogLevel), - ); + await this.marine.start(); + await this.avmRunner.start(); registerDefaultServices(this); @@ -464,11 +340,11 @@ export class FluencePeer { srv: new Srv(this), }; this._classServices.sig.securityGuard = defaultSigGuard(peerId); - registerSig(this, this._classServices.sig); + registerSig(this, 'sig', this._classServices.sig); registerSig(this, peerId, this._classServices.sig); - registerSrv(this, this._classServices.srv); - registerNodeUtils(this, new NodeUtils(this)); + registerSrv(this, 'single_module_srv', this._classServices.srv); + registerNodeUtils(this, 'node_utils', new NodeUtils(this)); this._startParticleProcessing(); } @@ -477,23 +353,19 @@ export class FluencePeer { * @private Subject to change. Do not use this method directly */ async connect(connection: FluenceConnection): Promise { - if (this._connection) { - await this._connection.disconnect(); + if (this.connection) { + await this.connection.disconnect(); } - this._connection = connection; - - await this._connection.connect(this._onIncomingParticle.bind(this)); + this.connection = connection; + await this.connection.connect(this._onIncomingParticle.bind(this)); } /** * @private Subject to change. Do not use this method directly */ async disconnect(): Promise { - if (this._connection) { - await this._connection.disconnect(); - this._connection = undefined; - } + await this.connection?.disconnect(); } // private @@ -506,7 +378,7 @@ export class FluencePeer { // Call service handler private _marineServices = new Set(); - private _marineLogLevel?: MarineLoglevel; + private _marineLogLevel?: LogLevel; private _particleSpecificHandlers = new Map>(); private _commonHandlers = new Map(); @@ -521,11 +393,10 @@ export class FluencePeer { // Internal peer state + private connection: FluenceConnection | null = null; private _printParticleId = false; private _defaultTTL: number = DEFAULT_TTL; private _keyPair: KeyPair | undefined; - private _connection?: FluenceConnection; - private _fluenceAppService?: FluenceAppService; private _timeouts: Array = []; private _particleQueues = new Map>(); @@ -566,13 +437,13 @@ export class FluencePeer { return; } - if (!this._connection) { + if (!this.connection) { item.particle.logTo('error', 'cannot send particle, peer is not connected'); item.onStageChange({ stage: 'sendingError' }); return; } item.particle.logTo('debug', 'sending particle:'); - this._connection.sendParticle(item.nextPeerIds, item.particle.toString()).then( + this.connection?.sendParticle(item.nextPeerIds, item.particle.toString()).then( () => { item.onStageChange({ stage: 'sent' }); }, @@ -605,7 +476,7 @@ export class FluencePeer { concatMap(async (item) => { const status = this.getStatus(); - if (!status.isInitialized || this._fluenceAppService === undefined) { + if (!status.isInitialized || this.marine === undefined) { // If `.stop()` was called return null to stop particle processing immediately return null; } @@ -615,7 +486,10 @@ export class FluencePeer { // MUST happen sequentially (in a critical section). // Otherwise the race between runner might occur corrupting the prevData - const args = serializeAvmArgs( + item.particle.logTo('debug', 'Sending particle to interpreter'); + log.debug('prevData: ', dataToString(prevData)); + + const avmCallResult = await this.avmRunner.run( { initPeerId: item.particle.initPeerId, currentPeerId: status.peerId, @@ -628,16 +502,6 @@ export class FluencePeer { item.particle.callResults, ); - item.particle.logTo('debug', 'Sending particle to interpreter'); - log.debug('prevData: ', dataToString(prevData)); - let avmCallResult: InterpreterResult | Error; - try { - const res = await this._fluenceAppService.callService('avm', 'invoke', args, undefined); - avmCallResult = deserializeAvmResult(res); - } catch (e) { - avmCallResult = e instanceof Error ? e : new Error((e as any).toString()); - } - if (!(avmCallResult instanceof Error) && avmCallResult.retCode === 0) { const newData = Buffer.from(avmCallResult.data); prevData = newData; @@ -749,8 +613,8 @@ export class FluencePeer { log.debug('executing call service handler', jsonify(req)); const particleId = req.particleContext.particleId; - if (this._fluenceAppService && this._marineServices.has(req.serviceId)) { - const result = await this._fluenceAppService.callService(req.serviceId, req.fnName, req.args, undefined); + if (this.marine && this._marineServices.has(req.serviceId)) { + const result = await this.marine.callService(req.serviceId, req.fnName, req.args, undefined); return { retCode: ResultCodes.success, @@ -806,7 +670,7 @@ export class FluencePeer { async function configToConnection( keyPair: KeyPair, - connection?: ConnectionOption, + connection?: RelayOptions, dialTimeoutMs?: number, ): Promise { if (!connection) { @@ -829,7 +693,7 @@ async function configToConnection( } const res = await RelayConnection.createConnection({ - peerId: keyPair.Libp2pPeerId, + peerId: keyPair.getLibp2pPeerId(), relayAddress: connectToMultiAddr, dialTimeoutMs: dialTimeoutMs, }); @@ -859,34 +723,7 @@ function filterExpiredParticles(onParticleExpiration: (item: ParticleQueueItem) ); } -async function loadMarineAndAvm( - marinePath: string, - avmPath: string, -): Promise<{ - marine: SharedArrayBuffer | Buffer; - avm: SharedArrayBuffer | Buffer; -}> { - let promises: [Promise, Promise]; - // check if we are running inside the browser and instantiate worker with the corresponding script - if (isBrowser) { - promises = [ - // force new line - loadWasmFromServer(marinePath), - loadWasmFromServer(avmPath), - ]; - } else if (isNode) { - promises = [ - // force new line - loadWasmFromFileSystem(marinePath), - loadWasmFromFileSystem(avmPath), - ]; - } else { - throw new Error('Unknown environment'); - } - - const [marine, avm] = await Promise.all(promises); - return { - marine, - avm, - }; +async function makeKeyPair(opts?: KeyPairOptions) { + opts = opts || { type: 'Ed25519', source: 'random' }; + return fromOpts(opts); } diff --git a/packages/fluence-js/src/internal/Particle.ts b/packages/core/js-peer/src/js-peer/Particle.ts similarity index 93% rename from packages/fluence-js/src/internal/Particle.ts rename to packages/core/js-peer/src/js-peer/Particle.ts index f93a8ab6..aed892fa 100644 --- a/packages/fluence-js/src/internal/Particle.ts +++ b/packages/core/js-peer/src/js-peer/Particle.ts @@ -13,15 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import 'buffer'; +import { fromUint8Array, toUint8Array } from 'js-base64'; import { CallResultsArray, LogLevel } from '@fluencelabs/avm'; import { v4 as uuidv4 } from 'uuid'; -import { fromByteArray, toByteArray } from 'base64-js'; import log from 'loglevel'; -import { ParticleContext } from './commonTypes'; -import { dataToString, jsonify } from './utils'; -import Buffer from './Buffer'; +import { ParticleContext } from '../interfaces/commonTypes.js'; +import { dataToString, jsonify } from './utils.js'; +import { Buffer } from 'buffer'; export class Particle { // TODO: make it not optional (should be added to the constructor) @@ -47,7 +46,7 @@ export class Particle { json.id, json.timestamp, json.script, - toByteArray(json.data), + toUint8Array(json.data), json.ttl, json.init_peer_id, ); @@ -93,7 +92,7 @@ export class Particle { script: this.script, // TODO: copy signature from a particle after signatures will be implemented on nodes signature: [], - data: this.data && fromByteArray(this.data), + data: this.data && fromUint8Array(this.data), }); } diff --git a/packages/fluence-js/src/__test__/connection.ts b/packages/core/js-peer/src/js-peer/__test__/connection.ts similarity index 100% rename from packages/fluence-js/src/__test__/connection.ts rename to packages/core/js-peer/src/js-peer/__test__/connection.ts diff --git a/packages/fluence-js/src/__test__/integration/greeting-record.wasm b/packages/core/js-peer/src/js-peer/__test__/data/greeting-record.wasm similarity index 100% rename from packages/fluence-js/src/__test__/integration/greeting-record.wasm rename to packages/core/js-peer/src/js-peer/__test__/data/greeting-record.wasm diff --git a/packages/fluence-js/src/__test__/integration/greeting.wasm b/packages/core/js-peer/src/js-peer/__test__/data/greeting.wasm similarity index 100% rename from packages/fluence-js/src/__test__/integration/greeting.wasm rename to packages/core/js-peer/src/js-peer/__test__/data/greeting.wasm diff --git a/packages/fluence-js/aqua/tests/marine-js.aqua b/packages/core/js-peer/src/js-peer/__test__/data/marine-js.aqua similarity index 56% rename from packages/fluence-js/aqua/tests/marine-js.aqua rename to packages/core/js-peer/src/js-peer/__test__/data/marine-js.aqua index c9f76222..2de7507f 100644 --- a/packages/fluence-js/aqua/tests/marine-js.aqua +++ b/packages/core/js-peer/src/js-peer/__test__/data/marine-js.aqua @@ -11,3 +11,16 @@ func call(arg: string) -> string: res2 <- Greeting.greeting(res1) res3 <- Greeting.greeting(res2) <- res3 + +service GreetingRecord: + greeting_record() -> GreetingRecord + log_debug() + log_error() + log_info() + log_trace() + log_warn() + void_fn() + +func call_info(srvId: string): + GreetingRecord srvId + GreetingRecord.log_info() diff --git a/packages/fluence-js/aqua/tests/sig-tests.aqua b/packages/core/js-peer/src/js-peer/__test__/data/sigService.aqua similarity index 81% rename from packages/fluence-js/aqua/tests/sig-tests.aqua rename to packages/core/js-peer/src/js-peer/__test__/data/sigService.aqua index a3ca9a66..409f6b6f 100644 --- a/packages/fluence-js/aqua/tests/sig-tests.aqua +++ b/packages/core/js-peer/src/js-peer/__test__/data/sigService.aqua @@ -1,6 +1,6 @@ module Export -import SignResult, Sig from "../src/services.aqua" +import SignResult, Sig from "../../../aqua/services.aqua" export Sig, DataProvider, callSig service DataProvider("data"): diff --git a/packages/fluence-js/aqua/tests/srv-tests.aqua b/packages/core/js-peer/src/js-peer/__test__/data/srv.aqua similarity index 84% rename from packages/fluence-js/aqua/tests/srv-tests.aqua rename to packages/core/js-peer/src/js-peer/__test__/data/srv.aqua index f390062e..c564b127 100644 --- a/packages/fluence-js/aqua/tests/srv-tests.aqua +++ b/packages/core/js-peer/src/js-peer/__test__/data/srv.aqua @@ -1,7 +1,7 @@ module Export -import Srv from "../src/single-module-srv.aqua" -import NodeUtils from "../src/node-utils.aqua" +import Srv from "../../../aqua/single-module-srv.aqua" +import NodeUtils from "../../../aqua/node-utils.aqua" export happy_path, list_services, file_not_found, service_removed, removing_non_exiting service Greeting("greeting"): @@ -25,14 +25,18 @@ func file_not_found() -> string: <- e.error! func service_removed(file_path: string) -> string: + result: *string + file <- NodeUtils.read_file(file_path) created_service <- Srv.create(file.content!) Greeting created_service.service_id! Srv.remove(created_service.service_id!) try: dontcare <- Greeting.greeting("test") + result <<- "ok" catch e: - <- e.message + result <<- e.message + <- result! func removing_non_exiting() -> string: e <- Srv.remove("random_id") diff --git a/packages/core/js-peer/src/js-peer/__test__/integration/avm.spec.ts.skip b/packages/core/js-peer/src/js-peer/__test__/integration/avm.spec.ts.skip new file mode 100644 index 00000000..85f3dc62 --- /dev/null +++ b/packages/core/js-peer/src/js-peer/__test__/integration/avm.spec.ts.skip @@ -0,0 +1,158 @@ +import { handleTimeout } from '../../utils.js'; +import { registerHandlersHelper, withPeer } from '../util.js'; + +describe('Avm spec', () => { + it('Simple call', async () => { + await withPeer(async (peer) => { + const res = await new Promise((resolve, reject) => { + const script = ` + (call %init_peer_id% ("print" "print") ["1"]) + `; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + print: { + print: (args: Array>) => { + const [res] = args; + resolve(res); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(res).toBe('1'); + }); + }); + + it('Par call', async () => { + await withPeer(async (peer) => { + const res = await new Promise((resolve, reject) => { + const res: any[] = []; + const script = ` + (seq + (par + (call %init_peer_id% ("print" "print") ["1"]) + (null) + ) + (call %init_peer_id% ("print" "print") ["2"]) + ) + `; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + print: { + print: (args: any) => { + res.push(args[0]); + if (res.length == 2) { + resolve(res); + } + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(res).toStrictEqual(['1', '2']); + }); + }); + + it('Timeout in par call: race', async () => { + await withPeer(async (peer) => { + const res = await new Promise((resolve, reject) => { + const script = ` + (seq + (call %init_peer_id% ("op" "identity") ["slow_result"] arg) + (seq + (par + (call %init_peer_id% ("peer" "timeout") [1000 arg] $result) + (call %init_peer_id% ("op" "identity") ["fast_result"] $result) + ) + (seq + (canon %init_peer_id% $result #result) + (call %init_peer_id% ("return" "return") [#result.$[0]]) + ) + ) + ) + `; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + return: { + return: (args: any) => { + resolve(args[0]); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(res).toBe('fast_result'); + }); + }); + + it('Timeout in par call: wait', async () => { + await withPeer(async (peer) => { + const res = await new Promise((resolve, reject) => { + const script = ` + (seq + (call %init_peer_id% ("op" "identity") ["timeout_msg"] arg) + (seq + (seq + (par + (call %init_peer_id% ("peer" "timeout") [1000 arg] $ok_or_err) + (call "invalid_peer" ("op" "identity") ["never"] $ok_or_err) + ) + (xor + (seq + (canon %init_peer_id% $ok_or_err #ok_or_err) + (match #ok_or_err.$[0] "timeout_msg" + (ap "failed_with_timeout" $result) + ) + ) + (ap "impossible happened" $result) + ) + ) + (seq + (canon %init_peer_id% $result #result) + (call %init_peer_id% ("return" "return") [#result.$[0]]) + ) + ) + ) + `; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + return: { + return: (args: any) => { + resolve(args[0]); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(res).toBe('failed_with_timeout'); + }); + }); +}); diff --git a/packages/fluence-js/src/__test__/integration/jsonBuiltin.spec.ts b/packages/core/js-peer/src/js-peer/__test__/integration/jsonBuiltin.spec.ts.skip similarity index 93% rename from packages/fluence-js/src/__test__/integration/jsonBuiltin.spec.ts rename to packages/core/js-peer/src/js-peer/__test__/integration/jsonBuiltin.spec.ts.skip index 3bfcfb9c..e1a32a6a 100644 --- a/packages/fluence-js/src/__test__/integration/jsonBuiltin.spec.ts +++ b/packages/core/js-peer/src/js-peer/__test__/integration/jsonBuiltin.spec.ts.skip @@ -1,6 +1,7 @@ -import { Particle } from '../../internal/Particle'; -import { doNothing } from '../../internal/utils'; -import { FluencePeer } from '../../index'; +import { Particle } from '../../Particle.js'; +import { doNothing } from '../../utils.js'; +import { FluencePeer } from '../../FluencePeer.js'; +import { mkTestPeer } from '../util.js'; let peer: FluencePeer; @@ -12,7 +13,7 @@ describe('Sig service test suite', () => { }); beforeEach(async () => { - peer = new FluencePeer(); + peer = mkTestPeer(); await peer.start(); }); diff --git a/packages/core/js-peer/src/js-peer/__test__/integration/marine-js.spec.ts.skip b/packages/core/js-peer/src/js-peer/__test__/integration/marine-js.spec.ts.skip new file mode 100644 index 00000000..0738dd8d --- /dev/null +++ b/packages/core/js-peer/src/js-peer/__test__/integration/marine-js.spec.ts.skip @@ -0,0 +1,53 @@ +import * as fs from 'fs'; +import * as url from 'url'; +import * as path from 'path'; +import { compileAqua, withPeer } from '../util.js'; + +let aqua: any; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); + +describe('Marine js tests', () => { + beforeAll(async () => { + const { services, functions } = await compileAqua(path.join(__dirname, '../data/marine-js.aqua')); + aqua = functions; + }); + + it('should call marine service correctly', async () => { + await withPeer(async (peer) => { + // arrange + const wasm = await fs.promises.readFile(path.join(__dirname, '../data/greeting.wasm')); + await peer.registerMarineService(wasm, 'greeting'); + + // act + const res = await aqua.call(peer, { arg: 'test' }); + + // assert + expect(res).toBe('Hi, Hi, Hi, test'); + }); + }); + + // TODO: console printouts are happening inside web-worker\worker threads. + // Find a way to mock functions in background thread + it.skip('logging should work', async () => { + await withPeer(async (peer) => { + // arrange + + jest.spyOn(global.console, 'info').mockImplementation(() => {}); + + await peer.start({ + debug: { + marineLogLevel: 'debug', + }, + }); + const wasm = await fs.promises.readFile(path.join(__dirname, '../data/greeting-record.wasm')); + await peer.registerMarineService(wasm, 'greeting'); + + // act + await aqua.call_info(peer, { arg: 'greeting' }); + + // assert + expect(console.info).toBeCalledTimes(1); + expect(console.info).toHaveBeenNthCalledWith(1, '[marine service "greeting"]: info'); + }); + }); +}); diff --git a/packages/core/js-peer/src/js-peer/__test__/integration/peer.spec.ts.skip b/packages/core/js-peer/src/js-peer/__test__/integration/peer.spec.ts.skip new file mode 100644 index 00000000..4cf7d2d0 --- /dev/null +++ b/packages/core/js-peer/src/js-peer/__test__/integration/peer.spec.ts.skip @@ -0,0 +1,425 @@ +import { nodes } from '../connection.js'; +import { checkConnection, doNothing, handleTimeout } from '../../utils.js'; +import { registerHandlersHelper, mkTestPeer, withPeer, withConnectedPeer } from '../util.js'; +import { FluencePeer } from '../../FluencePeer.js'; + +describe('Typescript usage suite', () => { + it('should perform test for FluencePeer class correctly', () => { + // arrange + const peer = mkTestPeer(); + const number = 1; + const object = { str: 'Hello!' }; + const undefinedVal = undefined; + + // act + const isPeerPeer = FluencePeer.isInstance(peer); + const isNumberPeer = FluencePeer.isInstance(number); + const isObjectPeer = FluencePeer.isInstance(object); + const isUndefinedPeer = FluencePeer.isInstance(undefinedVal); + + // act + expect(isPeerPeer).toBe(true); + expect(isNumberPeer).toBe(false); + expect(isObjectPeer).toBe(false); + expect(isUndefinedPeer).toBe(false); + }); + + describe('Should expose correct peer status', () => { + it('Should expose correct status for uninitialized peer', () => { + const peer = mkTestPeer(); + const status = peer.getStatus(); + + expect(status.isConnected).toBe(false); + expect(status.isInitialized).toBe(false); + expect(status.peerId).toBe(null); + expect(status.relayPeerId).toBe(null); + }); + + it('Should expose correct status for initialized but not connected peer', async () => { + await withPeer(async (peer) => { + // arrange + + // act + const status = peer.getStatus(); + + // assert + expect(status.isConnected).toBe(false); + expect(status.isInitialized).toBe(true); + expect(status.peerId).not.toBe(null); + expect(status.relayPeerId).toBe(null); + }); + }); + + it('Should expose correct status for connected peer', async () => { + await withConnectedPeer(async (peer) => { + // arrange + + // act + const status = peer.getStatus(); + + // assert + expect(status.isConnected).toBe(true); + expect(status.isInitialized).toBe(true); + expect(status.peerId).not.toBe(null); + expect(status.relayPeerId).not.toBe(null); + }); + }); + }); + + it('should make a call through network', async () => { + await withConnectedPeer(async (peer) => { + // arrange + + const result = await new Promise((resolve, reject) => { + const script = ` + (xor + (seq + (call %init_peer_id% ("load" "relay") [] init_relay) + (seq + (call init_relay ("op" "identity") ["hello world!"] result) + (call %init_peer_id% ("callback" "callback") [result]) + ) + ) + (seq + (call init_relay ("op" "identity") []) + (call %init_peer_id% ("callback" "error") [%last_error%]) + ) + )`; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + load: { + relay: () => { + return peer.getStatus().relayPeerId; + }, + }, + callback: { + callback: (args: any) => { + const [val] = args; + resolve(val); + }, + error: (args: any) => { + const [error] = args; + reject(error); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(result).toBe('hello world!'); + }); + }); + + it('check connection should work', async function () { + await withConnectedPeer(async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toEqual(true); + }); + }); + + it('check connection should work with ttl', async function () { + await withConnectedPeer(async (peer) => { + const isConnected = await checkConnection(peer, 10000); + + expect(isConnected).toEqual(true); + }); + }); + + it('two clients should work inside the same time browser', async () => { + await withConnectedPeer(async (peer1) => { + await withConnectedPeer(async (peer2) => { + const res = new Promise((resolve) => { + peer2.internals.regHandler.common('test', 'test', (req) => { + resolve(req.args[0]); + return { + result: {}, + retCode: 0, + }; + }); + }); + + const script = ` + (seq + (call "${peer1.getStatus().relayPeerId}" ("op" "identity") []) + (call "${peer2.getStatus().peerId}" ("test" "test") ["test"]) + ) + `; + const particle = peer1.internals.createNewParticle(script); + + if (particle instanceof Error) { + throw particle; + } + + peer1.internals.initiateParticle(particle, doNothing); + + expect(await res).toEqual('test'); + }); + }); + }); + + describe('should make connection to network', () => { + it('address as string', async () => { + await withConnectedPeer(async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeTruthy(); + }); + }); + + it('address as multiaddr', async () => { + await withConnectedPeer(async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeTruthy(); + }); + }); + + it('address as node', async () => { + await withConnectedPeer(async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeTruthy(); + }); + }); + + it('With connection options: dialTimeout', async () => { + await withPeer( + async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeTruthy(); + }, + { connectTo: nodes[0], dialTimeoutMs: 100000 }, + ); + }); + + it('With connection options: skipCheckConnection', async () => { + await withPeer( + async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeTruthy(); + }, + { connectTo: nodes[0], skipCheckConnection: true }, + ); + }); + + it('With connection options: checkConnectionTTL', async () => { + await withPeer( + async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeTruthy(); + }, + { connectTo: nodes[0], checkConnectionTimeoutMs: 1000 }, + ); + }); + + it('With connection options: defaultTTL', async () => { + await withPeer( + async (peer) => { + const isConnected = await checkConnection(peer); + + expect(isConnected).toBeFalsy(); + }, + { connectTo: nodes[0], defaultTtlMs: 1 }, + ); + }); + }); + + it('Should successfully call identity on local peer', async function () { + await withPeer(async (peer) => { + const res = await new Promise((resolve, reject) => { + const script = ` + (seq + (call %init_peer_id% ("op" "identity") ["test"] res) + (call %init_peer_id% ("callback" "callback") [res]) + ) + `; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + callback: { + callback: async (args: any) => { + const [res] = args; + resolve(res); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(res).toBe('test'); + }); + }); + + it('Should throw correct message when calling non existing local service', async function () { + await withConnectedPeer(async (peer) => { + const res = callIncorrectService(peer); + + await expect(res).rejects.toMatchObject({ + message: expect.stringContaining( + `No handler has been registered for serviceId='incorrect' fnName='incorrect' args='[]'\"'`, + ), + // instruction: 'call %init_peer_id% ("incorrect" "incorrect") [] res', + }); + }); + }); + + it('Should not crash if undefined is passed as a variable', async () => { + await withPeer(async (peer) => { + const res = await new Promise((resolve, reject) => { + const script = ` + (seq + (call %init_peer_id% ("load" "arg") [] arg) + (seq + (call %init_peer_id% ("op" "identity") [arg] res) + (call %init_peer_id% ("callback" "callback") [res]) + ) + )`; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + load: { + arg: () => undefined, + }, + callback: { + callback: (args: any) => { + const [val] = args; + resolve(val); + }, + error: (args: any) => { + const [error] = args; + reject(error); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + expect(res).toBe(null); + }); + }); + + it('Should not crash if an error ocurred in user-defined handler', async () => { + await withPeer(async (peer) => { + const promise = new Promise((_resolve, reject) => { + const script = ` + (xor + (call %init_peer_id% ("load" "arg") [] arg) + (call %init_peer_id% ("callback" "error") [%last_error%]) + )`; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + load: { + arg: () => { + throw new Error('my super custom error message'); + }, + }, + callback: { + error: (args: any) => { + const [error] = args; + reject(error); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + await expect(promise).rejects.toMatchObject({ + message: expect.stringContaining('my super custom error message'), + }); + }); + }); + + it('Should return error if particle is created on a stopped peer', async () => { + const peer = mkTestPeer(); + const particle = peer.internals.createNewParticle(`(null)`); + + expect(particle instanceof Error).toBe(true); + }); + + it.skip('Should throw correct error when the client tries to send a particle not to the relay', async () => { + await withConnectedPeer(async (peer) => { + const promise = new Promise((resolve, reject) => { + const script = ` + (xor + (call "incorrect_peer_id" ("any" "service") []) + (call %init_peer_id% ("callback" "error") [%last_error%]) + )`; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + callback: { + error: (args: any) => { + const [error] = args; + reject(error); + }, + }, + }); + + peer.internals.initiateParticle(particle, doNothing); + }); + + await expect(promise).rejects.toMatch( + 'Particle is expected to be sent to only the single peer (relay which client is connected to)', + ); + }); + }); +}); + +async function callIncorrectService(peer: FluencePeer): Promise { + return new Promise((resolve, reject) => { + const script = ` + (xor + (call %init_peer_id% ("incorrect" "incorrect") [] res) + (call %init_peer_id% ("callback" "error") [%last_error%]) + )`; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + callback: { + callback: (args: any) => { + resolve(args); + }, + error: (args: any) => { + const [error] = args; + reject(error); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); +} diff --git a/packages/core/js-peer/src/js-peer/__test__/integration/sigService.spec.ts.skip b/packages/core/js-peer/src/js-peer/__test__/integration/sigService.spec.ts.skip new file mode 100644 index 00000000..15556349 --- /dev/null +++ b/packages/core/js-peer/src/js-peer/__test__/integration/sigService.spec.ts.skip @@ -0,0 +1,99 @@ +import * as path from 'path'; +import * as url from 'url'; +import { KeyPair } from '../../../keypair/index.js'; +import { allowServiceFn } from '../../builtins/securityGuard.js'; +import { Sig } from '../../builtins/Sig.js'; +import { compileAqua, withPeer } from '../util.js'; +import { registerServiceImpl } from '../../compilerSupport/registerService.js'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); + +let aqua: any; +let sigDef: any; +let dataProviderDef: any; + +describe('Sig service test suite', () => { + beforeAll(async () => { + const { services, functions } = await compileAqua(path.join(__dirname, '../data/sigService.aqua')); + aqua = functions; + sigDef = services.Sig; + dataProviderDef = services.DataProvider; + }); + + it('Use custom sig service, success path', async () => { + await withPeer(async (peer) => { + const customKeyPair = await KeyPair.randomEd25519(); + const customSig = new Sig(customKeyPair); + const data = [1, 2, 3, 4, 5]; + + registerServiceImpl(peer, sigDef, 'CustomSig', customSig); + + registerServiceImpl(peer, dataProviderDef, 'data', { + provide_data: () => { + return data; + }, + }); + + customSig.securityGuard = allowServiceFn('data', 'provide_data'); + + const result = await aqua.callSig(peer, { sigId: 'CustomSig' }); + + expect(result.success).toBe(true); + const isSigCorrect = await customSig.verify(result.signature as number[], data); + expect(isSigCorrect).toBe(true); + }); + }); + + it('Use custom sig service, fail path', async () => { + await withPeer(async (peer) => { + const customKeyPair = await KeyPair.randomEd25519(); + const customSig = new Sig(customKeyPair); + const data = [1, 2, 3, 4, 5]; + + registerServiceImpl(peer, sigDef, 'CustomSig', customSig); + + registerServiceImpl(peer, dataProviderDef, 'data', { + provide_data: () => { + return data; + }, + }); + + customSig.securityGuard = allowServiceFn('wrong', 'wrong'); + + const result = await aqua.callSig(peer, { sigId: 'CustomSig' }); + }); + }); + + it('Default sig service should be resolvable by peer id', async () => { + await withPeer(async (peer) => { + const sig = peer.getServices().sig; + + const data = [1, 2, 3, 4, 5]; + registerServiceImpl(peer, dataProviderDef, 'data', { + provide_data: () => { + return data; + }, + }); + + const callAsSigRes = await aqua.callSig(peer, { sigId: 'sig' }); + const callAsPeerIdRes = await aqua.callSig(peer, { sigId: peer.getStatus().peerId }); + + expect(callAsSigRes.success).toBe(false); + expect(callAsPeerIdRes.success).toBe(false); + + sig.securityGuard = () => true; + + const callAsSigResAfterGuardChange = await aqua.callSig(peer, { sigId: 'sig' }); + const callAsPeerIdResAfterGuardChange = await aqua.callSig(peer, { + sigId: peer.getStatus().peerId, + }); + + expect(callAsSigResAfterGuardChange.success).toBe(true); + expect(callAsPeerIdResAfterGuardChange.success).toBe(true); + + const isValid = await sig.verify(callAsSigResAfterGuardChange.signature as number[], data); + + expect(isValid).toBe(true); + }); + }); +}); diff --git a/packages/core/js-peer/src/js-peer/__test__/integration/smokeTest.ts b/packages/core/js-peer/src/js-peer/__test__/integration/smokeTest.ts new file mode 100644 index 00000000..ba3d0c73 --- /dev/null +++ b/packages/core/js-peer/src/js-peer/__test__/integration/smokeTest.ts @@ -0,0 +1,67 @@ +import { handleTimeout } from '../../utils.js'; +import { nodes } from '../connection.js'; +import { mkTestPeer, registerHandlersHelper } from '../util.js'; + +const smokeTest = async () => { + // arrange + const peer = mkTestPeer(); + await peer.start({ + relay: nodes[0], + }); + + const result = await new Promise((resolve, reject) => { + const script = ` + (xor + (seq + (call %init_peer_id% ("load" "relay") [] init_relay) + (seq + (call init_relay ("op" "identity") ["hello world!"] result) + (call %init_peer_id% ("callback" "callback") [result]) + ) + ) + (seq + (call init_relay ("op" "identity") []) + (call %init_peer_id% ("callback" "error") [%last_error%]) + ) + )`; + const particle = peer.internals.createNewParticle(script); + + if (particle instanceof Error) { + return reject(particle.message); + } + + registerHandlersHelper(peer, particle, { + load: { + relay: () => { + return peer.getStatus().relayPeerId; + }, + }, + callback: { + callback: (args: any) => { + const [val] = args; + resolve(val); + }, + error: (args: any) => { + const [error] = args; + reject(error); + }, + }, + }); + + peer.internals.initiateParticle(particle, handleTimeout(reject)); + }); + + await peer.stop(); + + if (result[0] !== 'hello world!') { + throw new Error('Expecting "hello wrold!" got ' + result[0]); + } +}; + +smokeTest() + .then(() => { + console.log('Test passed'); + }) + .catch((err) => { + console.error('Test failed: ', err); + }); diff --git a/packages/core/js-peer/src/js-peer/__test__/integration/srv.spec.ts.skip b/packages/core/js-peer/src/js-peer/__test__/integration/srv.spec.ts.skip new file mode 100644 index 00000000..9612413c --- /dev/null +++ b/packages/core/js-peer/src/js-peer/__test__/integration/srv.spec.ts.skip @@ -0,0 +1,76 @@ +import * as path from 'path'; +import * as url from 'url'; +import { compileAqua, withPeer } from '../util.js'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +let aqua: any; + +describe('Srv service test suite', () => { + beforeAll(async () => { + const { services, functions } = await compileAqua(path.join(__dirname, '../data/srv.aqua')); + aqua = functions; + }); + + it('Use custom srv service, success path', async () => { + await withPeer(async (peer) => { + // arrange + const wasm = path.join(__dirname, '../data/greeting.wasm'); + + // act + const res = await aqua.happy_path(peer, { file_path: wasm }); + + // assert + expect(res).toBe('Hi, test'); + }); + }); + + it('List deployed services', async () => { + await withPeer(async (peer) => { + // arrange + const wasm = path.join(__dirname, '../data/greeting.wasm'); + + // act + const res = await aqua.list_services(peer, { file_path: wasm }); + + // assert + expect(res).toHaveLength(3); + }); + }); + + it('Correct error for removed services', async () => { + await withPeer(async (peer) => { + // arrange + const wasm = path.join(__dirname, '../data/greeting.wasm'); + + // act + const res = await aqua.service_removed(peer, { file_path: wasm }); + + // assert + expect(res).toMatch('No handler has been registered for serviceId'); + }); + }); + + it('Correct error for file not found', async () => { + await withPeer(async (peer) => { + // arrange + + // act + const res = await aqua.file_not_found(peer, {}); + + // assert + expect(res).toMatch("ENOENT: no such file or directory, open '/random/incorrect/file'"); + }); + }); + + it('Correct error for removing non existing service', async () => { + await withPeer(async (peer) => { + // arrange + + // act + const res = await aqua.removing_non_exiting(peer, {}); + + // assert + expect(res).toMatch('Service with id random_id not found'); + }); + }); +}); diff --git a/packages/fluence-js/src/__test__/unit/ast.spec.ts b/packages/core/js-peer/src/js-peer/__test__/unit/ast.spec.ts.skip similarity index 79% rename from packages/fluence-js/src/__test__/unit/ast.spec.ts rename to packages/core/js-peer/src/js-peer/__test__/unit/ast.spec.ts.skip index 4a7aa75a..0d4b1526 100644 --- a/packages/fluence-js/src/__test__/unit/ast.spec.ts +++ b/packages/core/js-peer/src/js-peer/__test__/unit/ast.spec.ts.skip @@ -1,16 +1,17 @@ -import { Fluence } from '../../index'; +import { mkTestPeer } from '../util.js'; + +const peer = mkTestPeer(); describe('Parse ast tests', () => { beforeAll(async () => { - await Fluence.start(); + await peer.start(); }); afterAll(async () => { - await Fluence.stop(); + await peer.stop(); }); it('Correct ast should be parsed correctly', async function () { - const peer = Fluence.getPeer(); const air = `(null)`; const res = await peer.internals.parseAst(air); @@ -21,7 +22,6 @@ describe('Parse ast tests', () => { }); it('Incorrect ast should result in corresponding error', async function () { - const peer = Fluence.getPeer(); const air = `(null`; const res = await peer.internals.parseAst(air); diff --git a/packages/core/js-peer/src/js-peer/__test__/unit/builtInHandler.spec.ts b/packages/core/js-peer/src/js-peer/__test__/unit/builtInHandler.spec.ts new file mode 100644 index 00000000..bbd6333b --- /dev/null +++ b/packages/core/js-peer/src/js-peer/__test__/unit/builtInHandler.spec.ts @@ -0,0 +1,305 @@ +import { CallParams } from '@fluencelabs/interfaces'; +import { toUint8Array } from 'js-base64'; +import { CallServiceData } from '../../../interfaces/commonTypes.js'; +import { builtInServices } from '../../builtins/common.js'; +import { KeyPair } from '../../../keypair/index.js'; +import { Sig, defaultSigGuard } from '../../builtins/Sig.js'; +import { allowServiceFn } from '../../builtins/securityGuard.js'; + +const a10b20 = `{ + "a": 10, + "b": 20 +}`; + +const oneTwoThreeFour = `[ + 1, + 2, + 3, + 4 +]`; + +describe('Tests for default handler', () => { + test.each` + serviceId | fnName | args | retCode | result + ${'op'} | ${'identity'} | ${[]} | ${0} | ${{}} + ${'op'} | ${'identity'} | ${[1]} | ${0} | ${1} + ${'op'} | ${'identity'} | ${[1, 2]} | ${1} | ${'identity accepts up to 1 arguments, received 2 arguments'} + ${'op'} | ${'noop'} | ${[1, 2]} | ${0} | ${{}} + ${'op'} | ${'array'} | ${[1, 2, 3]} | ${0} | ${[1, 2, 3]} + ${'op'} | ${'array_length'} | ${[[1, 2, 3]]} | ${0} | ${3} + ${'op'} | ${'array_length'} | ${[]} | ${1} | ${'array_length accepts exactly one argument, found: 0'} + ${'op'} | ${'concat'} | ${[[1, 2], [3, 4], [5, 6]]} | ${0} | ${[1, 2, 3, 4, 5, 6]} + ${'op'} | ${'concat'} | ${[[1, 2]]} | ${0} | ${[1, 2]} + ${'op'} | ${'concat'} | ${[]} | ${0} | ${[]} + ${'op'} | ${'concat'} | ${[1, [1, 2], 1]} | ${1} | ${"All arguments of 'concat' must be arrays: arguments 0, 2 are not"} + ${'op'} | ${'string_to_b58'} | ${['test']} | ${0} | ${'3yZe7d'} + ${'op'} | ${'string_to_b58'} | ${['test', 1]} | ${1} | ${'string_to_b58 accepts only one string argument'} + ${'op'} | ${'string_from_b58'} | ${['3yZe7d']} | ${0} | ${'test'} + ${'op'} | ${'string_from_b58'} | ${['3yZe7d', 1]} | ${1} | ${'string_from_b58 accepts only one string argument'} + ${'op'} | ${'bytes_to_b58'} | ${[[116, 101, 115, 116]]} | ${0} | ${'3yZe7d'} + ${'op'} | ${'bytes_to_b58'} | ${[[116, 101, 115, 116], 1]} | ${1} | ${'bytes_to_b58 accepts only single argument: array of numbers'} + ${'op'} | ${'bytes_from_b58'} | ${['3yZe7d']} | ${0} | ${[116, 101, 115, 116]} + ${'op'} | ${'bytes_from_b58'} | ${['3yZe7d', 1]} | ${1} | ${'bytes_from_b58 accepts only one string argument'} + ${'op'} | ${'sha256_string'} | ${['hello, world!']} | ${0} | ${'QmVQ8pg6L1tpoWYeq6dpoWqnzZoSLCh7E96fCFXKvfKD3u'} + ${'op'} | ${'sha256_string'} | ${['hello, world!', true]} | ${0} | ${'84V7ZxLW7qKsx1Qvbd63BdGaHxUc3TfT2MBPqAXM7Wyu'} + ${'op'} | ${'sha256_string'} | ${[]} | ${1} | ${'sha256_string accepts 1-3 arguments, found: 0'} + ${'op'} | ${'concat_strings'} | ${[]} | ${0} | ${''} + ${'op'} | ${'concat_strings'} | ${['a', 'b', 'c']} | ${0} | ${'abc'} + ${'peer'} | ${'timeout'} | ${[200, []]} | ${0} | ${[]} + ${'peer'} | ${'timeout'} | ${[200, ['test']]} | ${0} | ${['test']} + ${'peer'} | ${'timeout'} | ${[]} | ${1} | ${'timeout accepts exactly two arguments: timeout duration in ms and a message string'} + ${'peer'} | ${'timeout'} | ${[200, 'test', 1]} | ${1} | ${'timeout accepts exactly two arguments: timeout duration in ms and a message string'} + ${'debug'} | ${'stringify'} | ${[]} | ${0} | ${'""'} + ${'debug'} | ${'stringify'} | ${[{ a: 10, b: 20 }]} | ${0} | ${a10b20} + ${'debug'} | ${'stringify'} | ${[1, 2, 3, 4]} | ${0} | ${oneTwoThreeFour} + ${'math'} | ${'add'} | ${[2, 2]} | ${0} | ${4} + ${'math'} | ${'add'} | ${[2]} | ${1} | ${'Expected 2 argument(s). Got 1'} + ${'math'} | ${'sub'} | ${[2, 2]} | ${0} | ${0} + ${'math'} | ${'sub'} | ${[2, 3]} | ${0} | ${-1} + ${'math'} | ${'mul'} | ${[2, 2]} | ${0} | ${4} + ${'math'} | ${'mul'} | ${[2, 0]} | ${0} | ${0} + ${'math'} | ${'mul'} | ${[2, -1]} | ${0} | ${-2} + ${'math'} | ${'fmul'} | ${[10, 0.66]} | ${0} | ${6} + ${'math'} | ${'fmul'} | ${[0.5, 0.5]} | ${0} | ${0} + ${'math'} | ${'fmul'} | ${[100.5, 0.5]} | ${0} | ${50} + ${'math'} | ${'div'} | ${[2, 2]} | ${0} | ${1} + ${'math'} | ${'div'} | ${[2, 3]} | ${0} | ${0} + ${'math'} | ${'div'} | ${[10, 5]} | ${0} | ${2} + ${'math'} | ${'rem'} | ${[10, 3]} | ${0} | ${1} + ${'math'} | ${'pow'} | ${[2, 2]} | ${0} | ${4} + ${'math'} | ${'pow'} | ${[2, 0]} | ${0} | ${1} + ${'math'} | ${'log'} | ${[2, 2]} | ${0} | ${1} + ${'math'} | ${'log'} | ${[2, 4]} | ${0} | ${2} + ${'cmp'} | ${'gt'} | ${[2, 4]} | ${0} | ${false} + ${'cmp'} | ${'gte'} | ${[2, 4]} | ${0} | ${false} + ${'cmp'} | ${'gte'} | ${[4, 2]} | ${0} | ${true} + ${'cmp'} | ${'gte'} | ${[2, 2]} | ${0} | ${true} + ${'cmp'} | ${'lt'} | ${[2, 4]} | ${0} | ${true} + ${'cmp'} | ${'lte'} | ${[2, 4]} | ${0} | ${true} + ${'cmp'} | ${'lte'} | ${[4, 2]} | ${0} | ${false} + ${'cmp'} | ${'lte'} | ${[2, 2]} | ${0} | ${true} + ${'cmp'} | ${'cmp'} | ${[2, 4]} | ${0} | ${-1} + ${'cmp'} | ${'cmp'} | ${[2, -4]} | ${0} | ${1} + ${'cmp'} | ${'cmp'} | ${[2, 2]} | ${0} | ${0} + ${'array'} | ${'sum'} | ${[[1, 2, 3]]} | ${0} | ${6} + ${'array'} | ${'dedup'} | ${[['a', 'a', 'b', 'c', 'a', 'b', 'c']]} | ${0} | ${['a', 'b', 'c']} + ${'array'} | ${'intersect'} | ${[['a', 'b', 'c'], ['c', 'b', 'd']]} | ${0} | ${['b', 'c']} + ${'array'} | ${'diff'} | ${[['a', 'b', 'c'], ['c', 'b', 'd']]} | ${0} | ${['a']} + ${'array'} | ${'sdiff'} | ${[['a', 'b', 'c'], ['c', 'b', 'd']]} | ${0} | ${['a', 'd']} + ${'json'} | ${'obj'} | ${['a', 10, 'b', 'string', 'c', null]} | ${0} | ${{ a: 10, b: 'string', c: null }} + ${'json'} | ${'obj'} | ${['a', 10, 'b', 'string', 'c']} | ${1} | ${'Expected even number of argument(s). Got 5'} + ${'json'} | ${'obj'} | ${[]} | ${0} | ${{}} + ${'json'} | ${'put'} | ${[{}, 'a', 10]} | ${0} | ${{ a: 10 }} + ${'json'} | ${'put'} | ${[{ b: 11 }, 'a', 10]} | ${0} | ${{ a: 10, b: 11 }} + ${'json'} | ${'put'} | ${['a', 'a', 11]} | ${1} | ${'Argument 0 expected to be of type object, Got string'} + ${'json'} | ${'put'} | ${[{}, 'a', 10, 'b', 20]} | ${1} | ${'Expected 3 argument(s). Got 5'} + ${'json'} | ${'put'} | ${[{}]} | ${1} | ${'Expected 3 argument(s). Got 1'} + ${'json'} | ${'puts'} | ${[{}, 'a', 10]} | ${0} | ${{ a: 10 }} + ${'json'} | ${'puts'} | ${[{ b: 11 }, 'a', 10]} | ${0} | ${{ a: 10, b: 11 }} + ${'json'} | ${'puts'} | ${[{}, 'a', 10, 'b', 'string', 'c', null]} | ${0} | ${{ a: 10, b: 'string', c: null }} + ${'json'} | ${'puts'} | ${[{ x: 'text' }, 'a', 10, 'b', 'string']} | ${0} | ${{ a: 10, b: 'string', x: 'text' }} + ${'json'} | ${'puts'} | ${[{}]} | ${1} | ${'Expected more than 3 argument(s). Got 1'} + ${'json'} | ${'puts'} | ${['a', 'a', 11]} | ${1} | ${'Argument 0 expected to be of type object, Got string'} + ${'json'} | ${'stringify'} | ${[{ a: 10, b: 'string', c: null }]} | ${0} | ${'{"a":10,"b":"string","c":null}'} + ${'json'} | ${'stringify'} | ${[1]} | ${1} | ${'Argument 0 expected to be of type object, Got number'} + ${'json'} | ${'parse'} | ${['{"a":10,"b":"string","c":null}']} | ${0} | ${{ a: 10, b: 'string', c: null }} + ${'json'} | ${'parse'} | ${['incorrect']} | ${1} | ${'Unexpected token i in JSON at position 0'} + ${'json'} | ${'parse'} | ${[10]} | ${1} | ${'Argument 0 expected to be of type string, Got number'} + `( + // + '$fnName with $args expected retcode: $retCode and result: $result', + async ({ serviceId, fnName, args, retCode, result }) => { + // arrange + const req: CallServiceData = { + serviceId: serviceId, + fnName: fnName, + args: args, + tetraplets: [], + particleContext: { + particleId: 'some', + initPeerId: 'init peer id', + timestamp: 595951200, + ttl: 595961200, + signature: 'sig', + }, + }; + + // act + const fn = builtInServices[req.serviceId][req.fnName]; + const res = await fn(req); + + // assert + expect(res).toMatchObject({ + retCode: retCode, + result: result, + }); + }, + ); + + it('should return correct error message for identiy service', async () => { + // arrange + const req: CallServiceData = { + serviceId: 'peer', + fnName: 'identify', + args: [], + tetraplets: [], + particleContext: { + particleId: 'some', + initPeerId: 'init peer id', + timestamp: 595951200, + ttl: 595961200, + signature: 'sig', + }, + }; + + // act + const fn = builtInServices[req.serviceId][req.fnName]; + const res = await fn(req); + + // assert + expect(res).toMatchObject({ + retCode: 0, + result: { + external_addresses: [], + node_version: expect.stringContaining('js'), + air_version: expect.stringContaining('js'), + }, + }); + }); +}); + +const key = '+cmeYlZKj+MfSa9dpHV+BmLPm6wq4inGlsPlQ1GvtPk='; + +const context = (async () => { + const keyBytes = toUint8Array(key); + const kp = await KeyPair.fromEd25519SK(keyBytes); + const res = { + peerKeyPair: kp, + peerId: kp.getPeerId(), + }; + return res; +})(); + +const testData = [1, 2, 3, 4, 5, 6, 7, 9, 10]; + +// signature produced by KeyPair created from key above (`key` variable) +const testDataSig = [ + 224, 104, 245, 206, 140, 248, 27, 72, 68, 133, 111, 10, 164, 197, 242, 132, 107, 77, 224, 67, 99, 106, 76, 29, 144, + 121, 122, 169, 36, 173, 58, 80, 170, 102, 137, 253, 157, 247, 168, 87, 162, 223, 188, 214, 203, 220, 52, 246, 29, + 86, 77, 71, 224, 248, 16, 213, 254, 75, 78, 239, 243, 222, 241, 15, +]; + +// signature produced by KeyPair created from some random KeyPair +const testDataWrongSig = [ + 116, 247, 189, 118, 236, 53, 147, 123, 219, 75, 176, 105, 101, 108, 233, 137, 97, 14, 146, 132, 252, 70, 51, 153, + 237, 167, 156, 150, 36, 90, 229, 108, 166, 231, 255, 137, 8, 246, 125, 0, 213, 150, 83, 196, 237, 221, 131, 159, + 157, 159, 25, 109, 95, 160, 181, 65, 254, 238, 47, 156, 240, 151, 58, 14, +]; + +const makeTetraplet = (initPeerId: string, serviceId?: string, fnName?: string): CallParams<'data'> => { + return { + initPeerId: initPeerId, + tetraplets: { + data: [ + { + function_name: fnName, + service_id: serviceId, + }, + ], + }, + } as any; +}; + +describe('Sig service tests', () => { + it('sig.sign should create the correct signature', async () => { + const ctx = await context; + const sig = new Sig(ctx.peerKeyPair); + + const res = await sig.sign(testData, makeTetraplet(ctx.peerId)); + + expect(res.success).toBe(true); + expect(res.signature).toStrictEqual(testDataSig); + }); + + it('sig.verify should return true for the correct signature', async () => { + const ctx = await context; + const sig = new Sig(ctx.peerKeyPair); + + const res = await sig.verify(testDataSig, testData); + + expect(res).toBe(true); + }); + + it('sig.verify should return false for the incorrect signature', async () => { + const ctx = await context; + const sig = new Sig(ctx.peerKeyPair); + + const res = await sig.verify(testDataWrongSig, testData); + + expect(res).toBe(false); + }); + + it('sign-verify call chain should work', async () => { + const ctx = await context; + const sig = new Sig(ctx.peerKeyPair); + + const signature = await sig.sign(testData, makeTetraplet(ctx.peerId)); + const res = await sig.verify(signature.signature as number[], testData); + + expect(res).toBe(true); + }); + + it('sig.sign with defaultSigGuard should work for correct callParams', async () => { + const ctx = await context; + const sig = new Sig(ctx.peerKeyPair); + sig.securityGuard = defaultSigGuard(ctx.peerId); + + const signature = await sig.sign(testData, makeTetraplet(ctx.peerId, 'registry', 'get_route_bytes')); + + await expect(signature).toBeDefined(); + }); + + it('sig.sign with defaultSigGuard should not allow particles initiated from incorrect service', async () => { + const ctx = await context; + const sig = new Sig(ctx.peerKeyPair); + sig.securityGuard = defaultSigGuard(ctx.peerId); + + const res = await sig.sign(testData, makeTetraplet(ctx.peerId, 'other_service', 'other_fn')); + + await expect(res.success).toBe(false); + await expect(res.error).toBe('Security guard validation failed'); + }); + + it('sig.sign with defaultSigGuard should not allow particles initiated from other peers', async () => { + const ctx = await context; + const sig = new Sig(ctx.peerKeyPair); + sig.securityGuard = defaultSigGuard(ctx.peerId); + + const res = await sig.sign( + testData, + makeTetraplet((await KeyPair.randomEd25519()).getPeerId(), 'registry', 'get_key_bytes'), + ); + + await expect(res.success).toBe(false); + await expect(res.error).toBe('Security guard validation failed'); + }); + + it('changing securityGuard should work', async () => { + const ctx = await context; + const sig = new Sig(ctx.peerKeyPair); + sig.securityGuard = allowServiceFn('test', 'test'); + + const successful1 = await sig.sign(testData, makeTetraplet(ctx.peerId, 'test', 'test')); + const unSuccessful1 = await sig.sign(testData, makeTetraplet(ctx.peerId, 'wrong', 'wrong')); + + sig.securityGuard = allowServiceFn('wrong', 'wrong'); + + const successful2 = await sig.sign(testData, makeTetraplet(ctx.peerId, 'wrong', 'wrong')); + const unSuccessful2 = await sig.sign(testData, makeTetraplet(ctx.peerId, 'test', 'test')); + + expect(successful1.success).toBe(true); + expect(successful2.success).toBe(true); + expect(unSuccessful1.success).toBe(false); + expect(unSuccessful2.success).toBe(false); + }); +}); diff --git a/packages/fluence-js/src/__test__/unit/ephemeral.spec.ts b/packages/core/js-peer/src/js-peer/__test__/unit/ephemeral.spec.ts.skip similarity index 86% rename from packages/fluence-js/src/__test__/unit/ephemeral.spec.ts rename to packages/core/js-peer/src/js-peer/__test__/unit/ephemeral.spec.ts.skip index 89b16ef4..9005b6aa 100644 --- a/packages/fluence-js/src/__test__/unit/ephemeral.spec.ts +++ b/packages/core/js-peer/src/js-peer/__test__/unit/ephemeral.spec.ts.skip @@ -1,18 +1,20 @@ import { KeyPair } from '@fluencelabs/keypair'; -import { EphemeralNetwork, defaultConfig } from '../../internal/ephemeral'; -import { FluencePeer } from '../../index'; -import { ResultCodes } from '../../internal/commonTypes'; +import { EphemeralNetwork, defaultConfig } from '../../ephemeral'; +import { ResultCodes } from '../../commonTypes'; +import { FluencePeer } from '../../FluencePeer'; +import { mkTestPeer } from '../util'; let en: EphemeralNetwork; let peer: FluencePeer; -describe('Ephemeral networks tests', () => { +// TODO: jest tests hang when running this test. Fix it (DXJ-219) +describe.skip('Ephemeral networks tests', () => { beforeEach(async () => { en = new EphemeralNetwork(defaultConfig); await en.up(); const relay = defaultConfig.peers[0].peerId; - peer = new FluencePeer(); + peer = mkTestPeer(); await peer.init({ KeyPair: await KeyPair.randomEd25519(), }); diff --git a/packages/core/js-peer/src/js-peer/__test__/util.ts b/packages/core/js-peer/src/js-peer/__test__/util.ts new file mode 100644 index 00000000..09a8b2b6 --- /dev/null +++ b/packages/core/js-peer/src/js-peer/__test__/util.ts @@ -0,0 +1,74 @@ +import * as api from '@fluencelabs/aqua-api/aqua-api.js'; + +import { promises as fs } from 'fs'; +import { FluencePeer, PeerConfig } from '../FluencePeer.js'; +import { Particle } from '../Particle.js'; +import { MakeServiceCall } from '../utils.js'; +import { avmModuleLoader, controlModuleLoader } from '../utilsForNode.js'; +import { ServiceDef } from '@fluencelabs/interfaces'; +import { callFunctionImpl } from '../../compilerSupport/callFunction.js'; + +import { marineLogFunction } from '../utils.js'; +import { MarineBackgroundRunner } from '../../marine/worker/index.js'; +import { MarineBasedAvmRunner } from '../avm.js'; +import { nodes } from './connection.js'; +import { WorkerLoaderFromFs } from '../../marine/deps-loader/node.js'; + +export const registerHandlersHelper = ( + peer: FluencePeer, + particle: Particle, + handlers: Record>, +) => { + Object.entries(handlers).forEach(([serviceId, service]) => { + Object.entries(service).forEach(([fnName, fn]) => { + peer.internals.regHandler.forParticle(particle.id, serviceId, fnName, MakeServiceCall(fn)); + }); + }); +}; + +export type CompiledFnCall = (peer: FluencePeer, args: { [key: string]: any }) => Promise; +export type CompiledFile = { + functions: { [key: string]: CompiledFnCall }; + services: { [key: string]: ServiceDef }; +}; + +export const compileAqua = async (aquaFile: string): Promise => { + await fs.access(aquaFile); + + const compilationResult = await api.Aqua.compile(new api.Path(aquaFile), [], undefined); + + const functions = Object.entries(compilationResult.functions) + .map(([name, fnInfo]) => { + const callFn = (peer: FluencePeer, args: { [key: string]: any }) => { + return callFunctionImpl(fnInfo.funcDef, fnInfo.script, {}, peer, args); + }; + return { [name]: callFn }; + }) + .reduce((agg, obj) => { + return { ...agg, ...obj }; + }, {}); + + return { functions, services: compilationResult.services }; +}; + +export const mkTestPeer = () => { + const workerLoader = new WorkerLoaderFromFs('../../marine/worker-script'); + + const marine = new MarineBackgroundRunner(workerLoader, controlModuleLoader, marineLogFunction); + const avm = new MarineBasedAvmRunner(marine, avmModuleLoader, undefined); + return new FluencePeer(marine, avm); +}; + +export const withPeer = async (action: (p: FluencePeer) => Promise, config?: PeerConfig) => { + const p = mkTestPeer(); + try { + await p.start(config); + await action(p); + } finally { + await p!.stop(); + } +}; + +export const withConnectedPeer = async (action: (p: FluencePeer) => Promise, config?: PeerConfig) => { + return withPeer(action, { relay: nodes[0] }); +}; diff --git a/packages/core/js-peer/src/js-peer/_aqua/node-utils.ts b/packages/core/js-peer/src/js-peer/_aqua/node-utils.ts new file mode 100644 index 00000000..a0dfe971 --- /dev/null +++ b/packages/core/js-peer/src/js-peer/_aqua/node-utils.ts @@ -0,0 +1,81 @@ +/** + * + * This file is auto-generated. Do not edit manually: changes may be erased. + * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. + * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues + * Aqua version: 0.7.7-362 + * + */ +import { CallParams } from '@fluencelabs/interfaces'; +import { registerServiceImpl } from '../../compilerSupport/registerService.js'; +import { FluencePeer } from '../FluencePeer.js'; + +// Services + +export interface NodeUtilsDef { + read_file: ( + path: string, + callParams: CallParams<'path'>, + ) => + | { content: string | null; error: string | null; success: boolean } + | Promise<{ content: string | null; error: string | null; success: boolean }>; +} + +export function registerNodeUtils(peer: FluencePeer, serviceId: string, service: any) { + registerServiceImpl( + peer, + { + defaultServiceId: 'node_utils', + functions: { + tag: 'labeledProduct', + fields: { + read_file: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + path: { + tag: 'scalar', + name: 'string', + }, + }, + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'struct', + name: 'ReadFileResult', + fields: { + content: { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + error: { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + success: { + tag: 'scalar', + name: 'bool', + }, + }, + }, + ], + }, + }, + }, + }, + }, + serviceId, + service, + ); +} + +// Functions diff --git a/packages/core/js-peer/src/js-peer/_aqua/services.ts b/packages/core/js-peer/src/js-peer/_aqua/services.ts new file mode 100644 index 00000000..1f797cd9 --- /dev/null +++ b/packages/core/js-peer/src/js-peer/_aqua/services.ts @@ -0,0 +1,139 @@ +/** + * + * This file is auto-generated. Do not edit manually: changes may be erased. + * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. + * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues + * Aqua version: 0.7.7-362 + * + */ +import { CallParams } from '@fluencelabs/interfaces'; +import { registerServiceImpl } from '../../compilerSupport/registerService.js'; +import { FluencePeer } from '../FluencePeer.js'; + +// Services + +export interface SigDef { + get_peer_id: (callParams: CallParams) => string | Promise; + sign: ( + data: number[], + callParams: CallParams<'data'>, + ) => + | { error: string | null; signature: number[] | null; success: boolean } + | Promise<{ error: string | null; signature: number[] | null; success: boolean }>; + verify: ( + signature: number[], + data: number[], + callParams: CallParams<'signature' | 'data'>, + ) => boolean | Promise; +} + +export function registerSig(peer: FluencePeer, serviceId: string, service: any) { + registerServiceImpl( + peer, + { + defaultServiceId: 'sig', + functions: { + tag: 'labeledProduct', + fields: { + get_peer_id: { + tag: 'arrow', + domain: { + tag: 'nil', + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'scalar', + name: 'string', + }, + ], + }, + }, + sign: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + data: { + tag: 'array', + type: { + tag: 'scalar', + name: 'u8', + }, + }, + }, + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'struct', + name: 'SignResult', + fields: { + error: { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + signature: { + tag: 'option', + type: { + tag: 'array', + type: { + tag: 'scalar', + name: 'u8', + }, + }, + }, + success: { + tag: 'scalar', + name: 'bool', + }, + }, + }, + ], + }, + }, + verify: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + signature: { + tag: 'array', + type: { + tag: 'scalar', + name: 'u8', + }, + }, + data: { + tag: 'array', + type: { + tag: 'scalar', + name: 'u8', + }, + }, + }, + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'scalar', + name: 'bool', + }, + ], + }, + }, + }, + }, + }, + serviceId, + service, + ); +} + +// Functions diff --git a/packages/core/js-peer/src/js-peer/_aqua/single-module-srv.ts b/packages/core/js-peer/src/js-peer/_aqua/single-module-srv.ts new file mode 100644 index 00000000..e5eb6981 --- /dev/null +++ b/packages/core/js-peer/src/js-peer/_aqua/single-module-srv.ts @@ -0,0 +1,138 @@ +/** + * + * This file is auto-generated. Do not edit manually: changes may be erased. + * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. + * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues + * Aqua version: 0.7.7-362 + * + */ +import { CallParams } from '@fluencelabs/interfaces'; +import { registerServiceImpl } from '../../compilerSupport/registerService.js'; +import { FluencePeer } from '../FluencePeer.js'; + +// Services + +export interface SrvDef { + create: ( + wasm_b64_content: string, + callParams: CallParams<'wasm_b64_content'>, + ) => + | { error: string | null; service_id: string | null; success: boolean } + | Promise<{ error: string | null; service_id: string | null; success: boolean }>; + list: (callParams: CallParams) => string[] | Promise; + remove: ( + service_id: string, + callParams: CallParams<'service_id'>, + ) => { error: string | null; success: boolean } | Promise<{ error: string | null; success: boolean }>; +} + +export function registerSrv(peer: FluencePeer, serviceId: string, service: any) { + registerServiceImpl( + peer, + { + defaultServiceId: 'single_module_srv', + functions: { + tag: 'labeledProduct', + fields: { + create: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + wasm_b64_content: { + tag: 'scalar', + name: 'string', + }, + }, + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'struct', + name: 'ServiceCreationResult', + fields: { + error: { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + service_id: { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + success: { + tag: 'scalar', + name: 'bool', + }, + }, + }, + ], + }, + }, + list: { + tag: 'arrow', + domain: { + tag: 'nil', + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'array', + type: { + tag: 'scalar', + name: 'string', + }, + }, + ], + }, + }, + remove: { + tag: 'arrow', + domain: { + tag: 'labeledProduct', + fields: { + service_id: { + tag: 'scalar', + name: 'string', + }, + }, + }, + codomain: { + tag: 'unlabeledProduct', + items: [ + { + tag: 'struct', + name: 'RemoveResult', + fields: { + error: { + tag: 'option', + type: { + tag: 'scalar', + name: 'string', + }, + }, + success: { + tag: 'scalar', + name: 'bool', + }, + }, + }, + ], + }, + }, + }, + }, + }, + serviceId, + service, + ); +} + +// Functions diff --git a/packages/core/js-peer/src/js-peer/avm.ts b/packages/core/js-peer/src/js-peer/avm.ts new file mode 100644 index 00000000..1cc77282 --- /dev/null +++ b/packages/core/js-peer/src/js-peer/avm.ts @@ -0,0 +1,36 @@ +import type { CallResultsArray, InterpreterResult, RunParameters } from '@fluencelabs/avm'; +import { deserializeAvmResult, serializeAvmArgs } from '@fluencelabs/avm'; +import type { LogLevel } from '@fluencelabs/marine-js/dist/types'; +import type { IMarine, IAvmRunner, IWasmLoader } from '../interfaces/index.js'; + +export class MarineBasedAvmRunner implements IAvmRunner { + constructor(private marine: IMarine, private avmWasmLoader: IWasmLoader, private logLevel: LogLevel | undefined) {} + + async run( + runParams: RunParameters, + air: string, + prevData: Uint8Array, + data: Uint8Array, + callResults: CallResultsArray, + ): Promise { + const args = serializeAvmArgs(runParams, air, prevData, data, callResults); + + let avmCallResult: InterpreterResult | Error; + try { + const res = await this.marine.callService('avm', 'invoke', args, undefined); + avmCallResult = deserializeAvmResult(res); + } catch (e) { + avmCallResult = e instanceof Error ? e : new Error((e as any).toString()); + } + + return avmCallResult; + } + + async start(): Promise { + await this.marine.start(); + await this.avmWasmLoader.start(); + await this.marine.createService(this.avmWasmLoader.getValue(), 'avm', this.logLevel); + } + + async stop(): Promise {} +} diff --git a/packages/fluence-js/src/internal/builtins/Sig.ts b/packages/core/js-peer/src/js-peer/builtins/Sig.ts similarity index 90% rename from packages/fluence-js/src/internal/builtins/Sig.ts rename to packages/core/js-peer/src/js-peer/builtins/Sig.ts index dd2a99e8..b3a90c8b 100644 --- a/packages/fluence-js/src/internal/builtins/Sig.ts +++ b/packages/core/js-peer/src/js-peer/builtins/Sig.ts @@ -1,7 +1,7 @@ -import { CallParams, PeerIdB58 } from '../commonTypes'; -import { KeyPair } from '@fluencelabs/keypair'; -import { SigDef } from '../_aqua/services'; -import { allowOnlyParticleOriginatedAt, allowServiceFn, and, or, SecurityGuard } from './securityGuard'; +import { CallParams, PeerIdB58 } from '@fluencelabs/interfaces'; +import { KeyPair } from '../../keypair/index.js'; +import { SigDef } from '../_aqua/services.js'; +import { allowOnlyParticleOriginatedAt, allowServiceFn, and, or, SecurityGuard } from './securityGuard.js'; export const defaultSigGuard = (peerId: PeerIdB58) => { return and<'data'>( diff --git a/packages/fluence-js/src/internal/builtins/SingleModuleSrv.ts b/packages/core/js-peer/src/js-peer/builtins/SingleModuleSrv.ts similarity index 74% rename from packages/fluence-js/src/internal/builtins/SingleModuleSrv.ts rename to packages/core/js-peer/src/js-peer/builtins/SingleModuleSrv.ts index c817bfe0..1eccb7dc 100644 --- a/packages/fluence-js/src/internal/builtins/SingleModuleSrv.ts +++ b/packages/core/js-peer/src/js-peer/builtins/SingleModuleSrv.ts @@ -1,10 +1,10 @@ import { v4 as uuidv4 } from 'uuid'; -import { SrvDef } from '../_aqua/single-module-srv'; -import { NodeUtilsDef } from '../_aqua/node-utils'; -import { FluencePeer } from '../FluencePeer'; -import { isNode } from 'browser-or-node'; -import { CallParams } from '../commonTypes'; -import { allowOnlyParticleOriginatedAt, SecurityGuard } from './securityGuard'; +import { SrvDef } from '../_aqua/single-module-srv.js'; +import { NodeUtilsDef } from '../_aqua/node-utils.js'; +import { FluencePeer } from '../FluencePeer.js'; +import { CallParams } from '@fluencelabs/interfaces'; +import { Buffer } from 'buffer'; +import { allowOnlyParticleOriginatedAt, SecurityGuard } from './securityGuard.js'; export const defaultGuard = (peer: FluencePeer) => { return allowOnlyParticleOriginatedAt(peer.getStatus().peerId!); @@ -13,9 +13,12 @@ export const defaultGuard = (peer: FluencePeer) => { export class Srv implements SrvDef { private services: Set = new Set(); - constructor(private peer: FluencePeer) {} + constructor(private peer: FluencePeer) { + this.securityGuard_create = defaultGuard(this.peer); + this.securityGuard_remove = defaultGuard(this.peer); + } - securityGuard_create: SecurityGuard<'wasm_b64_content'> = defaultGuard(this.peer); + securityGuard_create: SecurityGuard<'wasm_b64_content'>; async create(wasm_b64_content: string, callParams: CallParams<'wasm_b64_content'>) { if (!this.securityGuard_create(callParams)) { @@ -49,7 +52,7 @@ export class Srv implements SrvDef { } } - securityGuard_remove: SecurityGuard<'service_id'> = defaultGuard(this.peer); + securityGuard_remove: SecurityGuard<'service_id'>; remove(service_id: string, callParams: CallParams<'service_id'>) { if (!this.securityGuard_remove(callParams)) { @@ -82,18 +85,21 @@ export class Srv implements SrvDef { } export class NodeUtils implements NodeUtilsDef { - constructor(private peer: FluencePeer) {} + constructor(private peer: FluencePeer) { + this.securityGuard_readFile = defaultGuard(this.peer); + } - securityGuard_readFile: SecurityGuard<'path'> = defaultGuard(this.peer); + securityGuard_readFile: SecurityGuard<'path'>; async read_file(path: string, callParams: CallParams<'path'>) { - if (!isNode) { - return { - success: false, - error: 'read_file is only supported in node.js', - content: null, - }; - } + // TODO: split node-only and universal services into different client packages + // if (!isNode) { + // return { + // success: false, + // error: 'read_file is only supported in node.js', + // content: null, + // }; + // } if (!this.securityGuard_readFile(callParams)) { return { diff --git a/packages/fluence-js/src/internal/builtins/common.ts b/packages/core/js-peer/src/js-peer/builtins/common.ts similarity index 96% rename from packages/fluence-js/src/internal/builtins/common.ts rename to packages/core/js-peer/src/js-peer/builtins/common.ts index 0a0cd8af..8be42d7e 100644 --- a/packages/fluence-js/src/internal/builtins/common.ts +++ b/packages/core/js-peer/src/js-peer/builtins/common.ts @@ -14,13 +14,17 @@ * limitations under the License. */ -import { encode, decode } from 'bs58'; +import * as bs58 from 'bs58'; + import { sha256 } from 'multiformats/hashes/sha2'; import { CallServiceResult } from '@fluencelabs/avm'; -import { CallServiceData, GenericCallServiceHandler, ResultCodes } from '../commonTypes'; -import { jsonify } from '../utils'; -import Buffer from '../Buffer'; +import { GenericCallServiceHandler, ResultCodes } from '../../interfaces/commonTypes.js'; +import { jsonify } from '../utils.js'; +import { Buffer } from 'buffer'; + +//@ts-ignore +const { encode, decode } = bs58.default; const success = (result: any): CallServiceResult => { return { @@ -501,7 +505,7 @@ export const builtInServices: Record { export const isObject = (unknown: unknown): unknown is object => { return unknown !== null && typeof unknown === 'object'; }; - diff --git a/packages/fluence-js/src/internal/builtins/securityGuard.ts b/packages/core/js-peer/src/js-peer/builtins/securityGuard.ts similarity index 96% rename from packages/fluence-js/src/internal/builtins/securityGuard.ts rename to packages/core/js-peer/src/js-peer/builtins/securityGuard.ts index a8d7c772..0bc7e762 100644 --- a/packages/fluence-js/src/internal/builtins/securityGuard.ts +++ b/packages/core/js-peer/src/js-peer/builtins/securityGuard.ts @@ -1,5 +1,5 @@ import { SecurityTetraplet } from '@fluencelabs/avm'; -import { CallParams, PeerIdB58 } from '../commonTypes'; +import { CallParams, PeerIdB58 } from '@fluencelabs/interfaces'; type ArgName = string | null; diff --git a/packages/fluence-js/src/internal/ephemeral.ts b/packages/core/js-peer/src/js-peer/ephemeral.ts similarity index 89% rename from packages/fluence-js/src/internal/ephemeral.ts rename to packages/core/js-peer/src/js-peer/ephemeral.ts index ed6a4d85..1488dbd9 100644 --- a/packages/fluence-js/src/internal/ephemeral.ts +++ b/packages/core/js-peer/src/js-peer/ephemeral.ts @@ -1,9 +1,14 @@ -import { FluenceConnection, ParticleHandler } from '@fluencelabs/interfaces'; -import { keyPairFromBase64Sk } from '@fluencelabs/keypair'; +import { PeerIdB58 } from '@fluencelabs/interfaces'; +import { FluenceConnection, ParticleHandler } from '../interfaces/index.js'; +import { fromBase64Sk } from '../keypair/index.js'; +import { FluencePeer } from './FluencePeer.js'; +import { MarineBackgroundRunner } from '../marine/worker/index.js'; +import { avmModuleLoader, controlModuleLoader } from './utilsForNode'; +import { marineLogFunction } from './utils'; +import { MarineBasedAvmRunner } from './avm'; -import { PeerIdB58 } from './commonTypes'; -import { FluencePeer } from '../index'; import log from 'loglevel'; +import { WorkerLoaderFromFs } from '../marine/deps-loader/node.js'; interface EphemeralConfig { peers: Array<{ @@ -120,19 +125,22 @@ export class EphemeralNetwork { async up(): Promise { log.debug('Starting ephemeral network up...'); const allPeerIds = this.config.peers.map((x) => x.peerId); + // shared worker for all the peers + const workerLoader = new WorkerLoaderFromFs('../../marine/worker-script'); + const promises = this.config.peers.map(async (x) => { - const peer = new FluencePeer(); + const logLevel = undefined; + const marine = new MarineBackgroundRunner(workerLoader, controlModuleLoader, marineLogFunction); + const avm = new MarineBasedAvmRunner(marine, avmModuleLoader, logLevel); + const peer = new FluencePeer(marine, avm); const sendParticle = async (nextPeerIds: string[], particle: string): Promise => { this._send(peer.getStatus().peerId!, nextPeerIds, particle); }; - const kp = await keyPairFromBase64Sk(x.sk); + const kp = await fromBase64Sk(x.sk); if (kp.getPeerId() !== x.peerId) { throw new Error(`Invalid config: peer id ${x.peerId} does not match the secret key ${x.sk}`); } - - await peer.init({ - KeyPair: kp, - }); + await peer.init({}, kp); let handler: ParticleHandler | null = null; const connectionCtor = class extends FluenceConnection { @@ -189,7 +197,6 @@ export class EphemeralNetwork { if (relayPeer === undefined) { throw new Error(`Relay with peer Id: ${relay} has not been found in ephemeral network`); } - const connectionCtor = class extends FluenceConnection { relayPeerId = relay; @@ -210,13 +217,11 @@ export class EphemeralNetwork { relayPeer.connections.delete(peerId); me._peers.delete(peerId); } - async sendParticle(nextPeerIds: string[], particle: string): Promise { const peerId = peer.getStatus().peerId!; me._send(peerId, nextPeerIds, particle); } }; - return new connectionCtor(); } diff --git a/packages/fluence-js/src/internal/utils.ts b/packages/core/js-peer/src/js-peer/utils.ts similarity index 79% rename from packages/fluence-js/src/internal/utils.ts rename to packages/core/js-peer/src/js-peer/utils.ts index e0adef2b..6e5bca50 100644 --- a/packages/fluence-js/src/internal/utils.ts +++ b/packages/core/js-peer/src/js-peer/utils.ts @@ -13,16 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import 'buffer'; import log from 'loglevel'; -import platform from 'platform'; -import { LogLevel } from '@fluencelabs/avm'; -import { CallServiceData, CallServiceResult, CallServiceResultType, ResultCodes } from './commonTypes'; -import { FluencePeer } from './FluencePeer'; -import { ParticleExecutionStage } from './Particle'; -import Buffer from './Buffer'; +import { Buffer } from 'buffer'; +import { CallServiceData, CallServiceResult, CallServiceResultType, ResultCodes } from '../interfaces/commonTypes.js'; +import { FluencePeer } from './FluencePeer.js'; +import { ParticleExecutionStage } from './Particle.js'; +import { LogFunction } from '@fluencelabs/marine-js/dist/types'; export const MakeServiceCall = (fn: (args: any[]) => CallServiceResultType) => @@ -151,29 +149,6 @@ export function jsonify(obj: unknown) { return JSON.stringify(obj, null, 4); } -export function throwIfNotSupported() { - if (platform.name === 'Node.js' && platform.version) { - const version = platform.version.split('.').map(Number); - const major = version[0]; - if (major < 16) { - throw new Error( - 'FluenceJS requires node.js version >= "16.x"; Detected ' + - platform.description + - ' Please update node.js to version 16 or higher.\nYou can use https://nvm.sh utility to update node.js version: "nvm install 17 && nvm use 17 && nvm alias default 17"', - ); - } - } -} - -/** - * Enum representing the log level used in Aqua VM. - * Possible values: 'info', 'trace', 'debug', 'info', 'warn', 'error', 'off'; - */ -export type MarineLoglevel = LogLevel; - -export const marineLogLevelToEnvs = (marineLogLevel: MarineLoglevel | undefined) => - marineLogLevel ? { WASM_LOG: marineLogLevel } : undefined; - export const isString = (x: unknown): x is string => { return x !== null && typeof x === 'string'; }; @@ -185,3 +160,29 @@ export class ServiceError extends Error { Object.setPrototypeOf(this, ServiceError.prototype); } } + +export const marineLogFunction: LogFunction = (message) => { + const str = `[marine service "${message.service}"]: ${message.message}`; + + const nodeProcess = (globalThis as any).process ? (globalThis as any).process : undefined; + if (nodeProcess && nodeProcess.stderr) { + nodeProcess.stderr.write(str); + return; + } + + switch (message.level) { + case 'warn': + console.warn(str); + break; + + case 'error': + console.error(str); + break; + + case 'debug': + case 'trace': + case 'info': + console.log(str); + break; + } +}; diff --git a/packages/core/js-peer/src/js-peer/utilsForNode.ts b/packages/core/js-peer/src/js-peer/utilsForNode.ts new file mode 100644 index 00000000..22b3018f --- /dev/null +++ b/packages/core/js-peer/src/js-peer/utilsForNode.ts @@ -0,0 +1,5 @@ +import { WorkerLoaderFromFs, WasmLoaderFromFs, WasmLoaderFromNpm } from '../marine/deps-loader/node.js'; + +// TODO!: after moving to ESM loaders stopped working. Should be fixed in scope of DXJ-194 +export const controlModuleLoader = new WasmLoaderFromNpm('@fluencelabs/marine-js', 'marine-js.wasm'); +export const avmModuleLoader = new WasmLoaderFromNpm('@fluencelabs/avm', 'avm.wasm'); diff --git a/packages/core/js-peer/src/keypair/__test__/KeyPair.spec.ts b/packages/core/js-peer/src/keypair/__test__/KeyPair.spec.ts new file mode 100644 index 00000000..d63aaeec --- /dev/null +++ b/packages/core/js-peer/src/keypair/__test__/KeyPair.spec.ts @@ -0,0 +1,94 @@ +import { toUint8Array } from 'js-base64'; +import * as bs58 from 'bs58'; +import { KeyPair } from '../index.js'; + +// @ts-ignore +const { decode } = bs58.default; + +const key = '+cmeYlZKj+MfSa9dpHV+BmLPm6wq4inGlsPlQ1GvtPk='; +const keyBytes = toUint8Array(key); + +const testData = Uint8Array.from([1, 2, 3, 4, 5, 6, 7, 9, 10]); + +const testDataSig = Uint8Array.from([ + 224, 104, 245, 206, 140, 248, 27, 72, 68, 133, 111, 10, 164, 197, 242, 132, 107, 77, 224, 67, 99, 106, 76, 29, 144, + 121, 122, 169, 36, 173, 58, 80, 170, 102, 137, 253, 157, 247, 168, 87, 162, 223, 188, 214, 203, 220, 52, 246, 29, + 86, 77, 71, 224, 248, 16, 213, 254, 75, 78, 239, 243, 222, 241, 15, +]); + +// signature produced by KeyPair created from some random KeyPair + +describe('KeyPair tests', () => { + it('generate keypair from seed', async function () { + // arrange + const random = await KeyPair.randomEd25519(); + const privateKey = random.toEd25519PrivateKey(); + + // act + const keyPair = await KeyPair.fromEd25519SK(privateKey); + const privateKey2 = keyPair.toEd25519PrivateKey(); + + // assert + expect(privateKey).toStrictEqual(privateKey2); + }); + + it('create keypair from ed25519 private key', async function () { + // arrange + const rustSK = 'jDaxLJzYtzgwTMrELJCAqavtmx85ktQNfB2rLcK7MhH'; + const sk = decode(rustSK); + + // act + const keyPair = await KeyPair.fromEd25519SK(sk); + + // assert + const expectedPeerId = '12D3KooWH1W3VznVZ87JH4FwABK4mkntcspTVWJDta6c2xg9Pzbp'; + expect(keyPair.getPeerId()).toStrictEqual(expectedPeerId); + }); + + it('create keypair from a seed phrase', async function () { + // arrange + const seedArray = new Uint8Array(32).fill(1); + + // act + const keyPair = await KeyPair.fromEd25519SK(seedArray); + + // assert + const expectedPeerId = '12D3KooWK99VoVxNE7XzyBwXEzW7xhK7Gpv85r9F3V3fyKSUKPH5'; + expect(keyPair.getPeerId()).toStrictEqual(expectedPeerId); + }); + + it('sign', async function () { + // arrange + const keyPair = await KeyPair.fromEd25519SK(keyBytes); + + // act + const res = await keyPair.signBytes(testData); + + // assert + expect(res).toStrictEqual(testDataSig); + }); + + it('verify', async function () { + // arrange + const keyPair = await KeyPair.fromEd25519SK(keyBytes); + + // act + const res = await keyPair.verify(testData, testDataSig); + + // assert + expect(res).toBe(true); + }); + + it('sign-verify', async function () { + // arrange + const keyPair = await KeyPair.fromEd25519SK(keyBytes); + + // act + const data = new Uint8Array(32).fill(1); + const sig = await keyPair.signBytes(data); + const res = await keyPair.verify(data, sig); + + // assert + expect(res).toBe(true); + }); +}); diff --git a/packages/core/js-peer/src/keypair/index.ts b/packages/core/js-peer/src/keypair/index.ts new file mode 100644 index 00000000..c29a37e5 --- /dev/null +++ b/packages/core/js-peer/src/keypair/index.ts @@ -0,0 +1,95 @@ +/* + * Copyright 2020 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { PeerId } from '@libp2p/interface-peer-id'; +import { generateKeyPairFromSeed, generateKeyPair } from '@libp2p/crypto/keys'; +import { createFromPrivKey } from '@libp2p/peer-id-factory'; +import type { PrivateKey } from '@libp2p/interface-keys'; +import { toUint8Array } from 'js-base64'; +import * as bs58 from 'bs58'; +import { KeyPairOptions } from '@fluencelabs/interfaces'; + +// @ts-ignore +const { decode } = bs58.default; + +export class KeyPair { + /** + * Key pair in libp2p format. Used for backward compatibility with the current FluencePeer implementation + */ + getLibp2pPeerId() { + return this.libp2pPeerId; + } + + constructor(private key: PrivateKey, private libp2pPeerId: PeerId) {} + + /** + * Generates new KeyPair from ed25519 private key represented as a 32 byte array + * @param seed - Any sequence of 32 bytes + * @returns - Promise with the created KeyPair + */ + static async fromEd25519SK(seed: Uint8Array): Promise { + const key = await generateKeyPairFromSeed('Ed25519', seed, 256); + const lib2p2Pid = await createFromPrivKey(key); + return new KeyPair(key, lib2p2Pid); + } + + /** + * Generates new KeyPair with a random secret key + * @returns - Promise with the created KeyPair + */ + static async randomEd25519(): Promise { + const key = await generateKeyPair('Ed25519'); + const lib2p2Pid = await createFromPrivKey(key); + return new KeyPair(key, lib2p2Pid); + } + + getPeerId(): string { + return this.libp2pPeerId.toString(); + } + + /** + * @returns 32 byte private key + */ + toEd25519PrivateKey(): Uint8Array { + return this.key.marshal().subarray(0, 32); + } + + signBytes(data: Uint8Array): Promise { + return this.key.sign(data); + } + + verify(data: Uint8Array, signature: Uint8Array): Promise { + return this.key.public.verify(data, signature); + } +} + +export const fromBase64Sk = (sk: string): Promise => { + const skArr = toUint8Array(sk); + return KeyPair.fromEd25519SK(skArr); +}; + +export const fromBase58Sk = (sk: string): Promise => { + const skArr = decode(sk); + return KeyPair.fromEd25519SK(skArr); +}; + +export const fromOpts = (opts: KeyPairOptions): Promise => { + if (opts.source === 'random') { + return KeyPair.randomEd25519(); + } + + return KeyPair.fromEd25519SK(opts.source); +}; diff --git a/packages/core/js-peer/src/marine/deps-loader/common.ts b/packages/core/js-peer/src/marine/deps-loader/common.ts new file mode 100644 index 00000000..4fa40b18 --- /dev/null +++ b/packages/core/js-peer/src/marine/deps-loader/common.ts @@ -0,0 +1,23 @@ +import { BlobWorker } from 'threads'; +import { fromBase64, toUint8Array } from 'js-base64'; +import type { WorkerImplementation } from 'threads/dist/types/master'; +import { LazyLoader } from '../../interfaces/index.js'; +import { Buffer } from 'buffer'; + +export class InlinedWorkerLoader extends LazyLoader { + constructor(b64script: string) { + super(() => { + const script = fromBase64(b64script); + return BlobWorker.fromText(script); + }); + } +} + +export class InlinedWasmLoader extends LazyLoader { + constructor(b64wasm: string) { + super(() => { + const wasm = toUint8Array(b64wasm); + return Buffer.from(wasm); + }); + } +} diff --git a/packages/core/js-peer/src/marine/deps-loader/node.ts b/packages/core/js-peer/src/marine/deps-loader/node.ts new file mode 100644 index 00000000..b71e9057 --- /dev/null +++ b/packages/core/js-peer/src/marine/deps-loader/node.ts @@ -0,0 +1,68 @@ +import { createRequire } from 'module'; +import { LazyLoader } from '../../interfaces/index.js'; + +import type { WorkerImplementation } from 'threads/dist/types/master'; +import { Worker } from 'threads'; +import { Buffer } from 'buffer'; +import * as fs from 'fs'; +import * as path from 'path'; + +const require = createRequire(import.meta.url); + +const bufferToSharedArrayBuffer = (buffer: Buffer): SharedArrayBuffer => { + const sab = new SharedArrayBuffer(buffer.length); + const tmp = new Uint8Array(sab); + tmp.set(buffer, 0); + return sab; +}; + +/** + * Load wasm file from npm package. Only works in nodejs environment. + * The function returns SharedArrayBuffer compatible with FluenceAppService methods. + * @param source - object specifying the source of the file. Consist two fields: package name and file path. + * @returns SharedArrayBuffer with the wasm file + */ +export const loadWasmFromNpmPackage = async (source: { package: string; file: string }): Promise => { + const packagePath = require.resolve(source.package); + const filePath = path.join(path.dirname(packagePath), source.file); + return loadWasmFromFileSystem(filePath); +}; + +/** + * Load wasm file from the file system. Only works in nodejs environment. + * The functions returns SharedArrayBuffer compatible with FluenceAppService methods. + * @param filePath - path to the wasm file + * @returns SharedArrayBuffer with the wasm fileWorker + */ +export const loadWasmFromFileSystem = async (filePath: string): Promise => { + const buffer = await fs.promises.readFile(filePath); + return bufferToSharedArrayBuffer(buffer); +}; + +export class WasmLoaderFromFs extends LazyLoader { + constructor(filePath: string) { + super(() => loadWasmFromFileSystem(filePath)); + } +} + +export class WasmLoaderFromNpm extends LazyLoader { + constructor(pkg: string, file: string) { + super(() => loadWasmFromNpmPackage({ package: pkg, file: file })); + } +} + +export class WorkerLoaderFromFs extends LazyLoader { + constructor(scriptPath: string) { + super(() => new Worker(scriptPath)); + } +} + +export class WorkerLoaderFromNpm extends LazyLoader { + constructor(pkg: string, file: string) { + super(() => { + const packagePath = require.resolve(pkg); + const scriptPath = path.join(path.dirname(packagePath), file); + return new Worker(scriptPath); + }); + } +} diff --git a/packages/core/js-peer/src/marine/deps-loader/web.ts b/packages/core/js-peer/src/marine/deps-loader/web.ts new file mode 100644 index 00000000..6beb6162 --- /dev/null +++ b/packages/core/js-peer/src/marine/deps-loader/web.ts @@ -0,0 +1,40 @@ +import { Buffer } from 'buffer'; +import { LazyLoader } from '../../interfaces/index.js'; + +const bufferToSharedArrayBuffer = (buffer: Buffer): SharedArrayBuffer => { + const sab = new SharedArrayBuffer(buffer.length); + const tmp = new Uint8Array(sab); + tmp.set(buffer, 0); + return sab; +}; + +/** + * Load wasm file from the server. Only works in browsers. + * The function will try load file into SharedArrayBuffer if the site is cross-origin isolated. + * Otherwise the return value fallbacks to Buffer which is less performant but is still compatible with FluenceAppService methods. + * We strongly recommend to set-up cross-origin headers. For more details see: See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements + * Filename is relative to current origin. + * @param filePath - path to the wasm file relative to current origin + * @returns Either SharedArrayBuffer or Buffer with the wasm file + */ +export const loadWasmFromServer = async (filePath: string): Promise => { + const fullUrl = window.location.origin + '/' + filePath; + const res = await fetch(fullUrl); + const ab = await res.arrayBuffer(); + new Uint8Array(ab); + const buffer = Buffer.from(ab); + + // only convert to shared buffers if necessary CORS headers have been set: + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements + if (crossOriginIsolated) { + return bufferToSharedArrayBuffer(buffer); + } + + return buffer; +}; + +export class WebLoaderFromUrl extends LazyLoader { + constructor(filePath: string) { + super(() => loadWasmFromServer(filePath)); + } +} diff --git a/packages/core/js-peer/src/marine/worker-script/index.ts b/packages/core/js-peer/src/marine/worker-script/index.ts new file mode 100644 index 00000000..43226595 --- /dev/null +++ b/packages/core/js-peer/src/marine/worker-script/index.ts @@ -0,0 +1,83 @@ +/* + * Copyright 2022 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { MarineService } from '@fluencelabs/marine-js/dist/MarineService'; +import type { Env, MarineServiceConfig } from '@fluencelabs/marine-js/dist/config'; +import type { JSONArray, JSONObject, LogMessage } from '@fluencelabs/marine-js/dist/types'; +import { Observable, Subject } from 'threads/observable'; +import { expose } from 'threads/worker'; + +let marineServices = new Map(); +let controlModule: WebAssembly.Module | undefined; + +const onLogMessage = new Subject(); + +const asArray = (buf: SharedArrayBuffer | Buffer) => { + return new Uint8Array(buf); +}; + +const toExpose = { + init: async (controlModuleWasm: SharedArrayBuffer | Buffer): Promise => { + controlModule = await WebAssembly.compile(asArray(controlModuleWasm)); + }, + + createService: async ( + wasm: SharedArrayBuffer | Buffer, + serviceId: string, + marineConfig?: MarineServiceConfig, + envs?: Env, + ): Promise => { + if (!controlModule) { + throw new Error('MarineJS is not initialized. To initialize call `init` function'); + } + + const service = await WebAssembly.compile(asArray(wasm)); + const srv = new MarineService( + controlModule, + service, + serviceId, + onLogMessage.next.bind(onLogMessage), + marineConfig, + envs, + ); + await srv.init(); + marineServices.set(serviceId, srv); + }, + + terminate: () => { + marineServices.forEach((val, key) => { + val.terminate(); + }); + onLogMessage.complete(); + }, + + callService: (serviceId: string, functionName: string, args: JSONArray | JSONObject, callParams: any): unknown => { + const srv = marineServices.get(serviceId); + if (!srv) { + throw new Error(`service with id=${serviceId} not found`); + } + + return srv.call(functionName, args, callParams); + }, + + onLogMessage(): Observable { + return Observable.from(onLogMessage); + }, +}; + +export type MarineBackgroundInterface = typeof toExpose; + +expose(toExpose); diff --git a/packages/core/js-peer/src/marine/worker-script/workerLoader.ts b/packages/core/js-peer/src/marine/worker-script/workerLoader.ts new file mode 100644 index 00000000..7a400e39 --- /dev/null +++ b/packages/core/js-peer/src/marine/worker-script/workerLoader.ts @@ -0,0 +1,10 @@ +import { LazyLoader } from '../../interfaces/index.js'; + +import type { WorkerImplementation } from 'threads/dist/types/master'; +import { Worker } from 'threads'; + +export class WorkerLoader extends LazyLoader { + constructor() { + super(() => new Worker('./')); + } +} diff --git a/packages/core/js-peer/src/marine/worker/index.ts b/packages/core/js-peer/src/marine/worker/index.ts new file mode 100644 index 00000000..f36d4c98 --- /dev/null +++ b/packages/core/js-peer/src/marine/worker/index.ts @@ -0,0 +1,77 @@ +/* + * Copyright 2022 Fluence Labs Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import type { JSONArray, JSONObject, LogLevel } from '@fluencelabs/marine-js/dist/types'; +import { LogFunction, logLevelToEnv } from '@fluencelabs/marine-js/dist/types'; +import type { IMarine, IWorkerLoader, IWasmLoader } from '../../interfaces/index.js'; +import type { MarineBackgroundInterface } from '../worker-script/index.js'; +import { spawn, Thread } from 'threads'; +import type { ModuleThread } from 'threads'; + +export class MarineBackgroundRunner implements IMarine { + private workerThread?: ModuleThread; + + constructor( + private workerLoader: IWorkerLoader, + private controlModuleLoader: IWasmLoader, + private logFunction: LogFunction, + ) {} + + async start(): Promise { + if (this.workerThread) { + return; + } + + await this.workerLoader.start(); + await this.controlModuleLoader.start(); + const worker = this.workerLoader.getValue(); + const wasm = this.controlModuleLoader.getValue(); + this.workerThread = await spawn(worker, { timeout: 99999999 }); + this.workerThread.onLogMessage().subscribe(this.logFunction); + await this.workerThread.init(wasm); + } + + createService(serviceModule: SharedArrayBuffer | Buffer, serviceId: string, logLevel?: LogLevel): Promise { + if (!this.workerThread) { + throw 'Worker is not initialized'; + } + + const env = logLevel ? logLevelToEnv(logLevel) : {}; + return this.workerThread.createService(serviceModule, serviceId, undefined, env); + } + + callService( + serviceId: string, + functionName: string, + args: JSONArray | JSONObject, + callParams: any, + ): Promise { + if (!this.workerThread) { + throw 'Worker is not initialized'; + } + + return this.workerThread.callService(serviceId, functionName, args, callParams); + } + + async stop(): Promise { + if (!this.workerThread) { + return; + } + + await this.workerThread.terminate(); + await Thread.terminate(this.workerThread); + } +} diff --git a/packages/core/js-peer/tsconfig.json b/packages/core/js-peer/tsconfig.json new file mode 100644 index 00000000..eb76f9fe --- /dev/null +++ b/packages/core/js-peer/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "moduleResolution": "node" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/fluence-connection/.prettierrc.js b/packages/fluence-connection/.prettierrc.js deleted file mode 100644 index 4e5ea887..00000000 --- a/packages/fluence-connection/.prettierrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - semi: true, - trailingComma: "all", - singleQuote: true, - printWidth: 120, - tabWidth: 4, - useTabs: false -}; diff --git a/packages/fluence-connection/package.json b/packages/fluence-connection/package.json deleted file mode 100644 index 7d8e0367..00000000 --- a/packages/fluence-connection/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@fluencelabs/connection", - "version": "0.2.0", - "description": "Fluence connection", - "main": "./dist/index.js", - "typings": "./dist/index.d.ts", - "engines": { - "node": ">=10", - "pnpm": ">=3" - }, - "scripts": { - "build": "tsc" - }, - "repository": "https://github.com/fluencelabs/fluence-js", - "author": "Fluence Labs", - "license": "Apache-2.0", - "dependencies": { - "@fluencelabs/interfaces": "workspace:0.1.0", - "peer-id": "0.16.0", - "it-length-prefixed": "5.0.3", - "it-pipe": "1.1.0", - "@chainsafe/libp2p-noise": "^4.1.1", - "libp2p": "0.36.2", - "libp2p-interfaces": "^4.0.6", - "libp2p-mplex": "0.10.7", - "libp2p-websockets": "0.16.2", - "loglevel": "1.8.1", - "multiaddr": "10.0.1", - "browser-or-node": "2.0.0", - "buffer": "^6.0.3" - }, - "devDependencies": { - "typescript": "^4.6.4" - } -} diff --git a/packages/fluence-connection/src/Buffer.ts b/packages/fluence-connection/src/Buffer.ts deleted file mode 100644 index 13528d81..00000000 --- a/packages/fluence-connection/src/Buffer.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2022 Fluence Labs Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { isBrowser } from 'browser-or-node'; -import { Buffer as BufferPolyfill } from 'buffer'; - -export default isBrowser ? BufferPolyfill : Buffer; diff --git a/packages/fluence-connection/tsconfig.json b/packages/fluence-connection/tsconfig.json deleted file mode 100644 index e0db254b..00000000 --- a/packages/fluence-connection/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "outDir": "./dist/", - "lib": ["ES2015"], - "target": "ES5", - "module": "commonjs", - "skipLibCheck": true, - "sourceMap": true, - "declaration": true, - "esModuleInterop": true, - }, - "exclude": ["node_modules", "dist"], - "include": ["src/**/*"] -} diff --git a/packages/fluence-interfaces/.prettierrc.js b/packages/fluence-interfaces/.prettierrc.js deleted file mode 100644 index 4e5ea887..00000000 --- a/packages/fluence-interfaces/.prettierrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - semi: true, - trailingComma: "all", - singleQuote: true, - printWidth: 120, - tabWidth: 4, - useTabs: false -}; diff --git a/packages/fluence-interfaces/src/index.ts b/packages/fluence-interfaces/src/index.ts deleted file mode 100644 index 846b75f2..00000000 --- a/packages/fluence-interfaces/src/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2020 Fluence Labs Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export type PeerIdB58 = string; - -export type ParticleHandler = (particle: string) => void; - -/** - * Base class for connectivity layer to Fluence Network - */ -export abstract class FluenceConnection { - abstract readonly relayPeerId: PeerIdB58 | null; - abstract connect(onIncomingParticle: ParticleHandler): Promise; - abstract disconnect(): Promise; - abstract sendParticle(nextPeerIds: PeerIdB58[], particle: string): Promise; -} diff --git a/packages/fluence-interfaces/tsconfig.json b/packages/fluence-interfaces/tsconfig.json deleted file mode 100644 index e0db254b..00000000 --- a/packages/fluence-interfaces/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "outDir": "./dist/", - "lib": ["ES2015"], - "target": "ES5", - "module": "commonjs", - "skipLibCheck": true, - "sourceMap": true, - "declaration": true, - "esModuleInterop": true, - }, - "exclude": ["node_modules", "dist"], - "include": ["src/**/*"] -} diff --git a/packages/fluence-js/.npmignore b/packages/fluence-js/.npmignore deleted file mode 100644 index 1354879a..00000000 --- a/packages/fluence-js/.npmignore +++ /dev/null @@ -1,12 +0,0 @@ -.idea -.gitignore -node_modules -types - -src/ - -tsconfig.json -webpack.config.js - -bundle -pkg \ No newline at end of file diff --git a/packages/fluence-js/.prettierrc.js b/packages/fluence-js/.prettierrc.js deleted file mode 100644 index 4e5ea887..00000000 --- a/packages/fluence-js/.prettierrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - semi: true, - trailingComma: "all", - singleQuote: true, - printWidth: 120, - tabWidth: 4, - useTabs: false -}; diff --git a/packages/fluence-js/CONTRIBUTING.md b/packages/fluence-js/CONTRIBUTING.md deleted file mode 100644 index 0e3b264d..00000000 --- a/packages/fluence-js/CONTRIBUTING.md +++ /dev/null @@ -1,13 +0,0 @@ -## Contribute Code - -You are welcome to contribute to Fluence. - -Things you need to know: - -1. You need to **agree to the Contributors License Agreement**. This is a common practice in all major Open Source projects. At the current moment we are unable to accept contributions made on behalf of a company. Only individual contributions will be accepted. -2. **Not all proposed contributions can be accepted**. Some features may e.g. just fit a third-party add-on better. The contribution must fit the overall direction of Fluence and really improve it. The more effort you invest, the better you should clarify in advance whether the contribution fits: the best way would be to just open an issue to discuss the contribution you plan to make. - -### Contributor License Agreement - -When you contribute, you have to be aware that your contribution is covered by **Apache License 2.0**, but might relicensed under few other software licenses mentioned in the **Contributor License Agreement**. -In particular you need to agree to the [Contributor License Agreement](https://gist.github.com/fluencelabs-org/3f4cbb3cc14c1c0fb9ad99d8f7316ed7). If you agree to its content, you simply have to click on the link posted by the CLA assistant as a comment to the pull request. Click it to check the CLA, then accept it on the following screen if you agree to it. CLA assistant will save this decision for upcoming contributions and will notify you if there is any change to the CLA in the meantime. diff --git a/packages/fluence-js/aqua/tests/marine-js-logging.aqua b/packages/fluence-js/aqua/tests/marine-js-logging.aqua deleted file mode 100644 index 9ca1ff92..00000000 --- a/packages/fluence-js/aqua/tests/marine-js-logging.aqua +++ /dev/null @@ -1,16 +0,0 @@ -data GreetingRecord: - str: string - num: i32 - -service GreetingRecord: - greeting_record() -> GreetingRecord - log_debug() - log_error() - log_info() - log_trace() - log_warn() - void_fn() - -func call_info(srvId: string): - GreetingRecord srvId - GreetingRecord.log_info() diff --git a/packages/fluence-js/package.json b/packages/fluence-js/package.json deleted file mode 100644 index 665de80e..00000000 --- a/packages/fluence-js/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "@fluencelabs/fluence", - "version": "0.28.0", - "description": "TypeScript implementation of Fluence Peer", - "main": "./dist/index.js", - "typings": "./dist/index.d.ts", - "engines": { - "node": ">=10", - "pnpm": ">=3" - }, - "scripts": { - "compile-aqua": "npm run compile-aqua:src && npm run compile-aqua:test", - "compile-aqua:src": "aqua -i ./aqua/src/ -o ./src/internal/_aqua", - "compile-aqua:test": "aqua -i ./aqua/tests/ -o ./src/__test__/_aqua", - "test": "jest", - "test:unit": "jest --testPathPattern=src/__test__/unit", - "test:integration": "jest --testPathPattern=src/__test__/integration", - "build": "tsc", - "build:docs": "typedoc" - }, - "repository": "https://github.com/fluencelabs/fluence-js", - "author": "Fluence Labs", - "license": "Apache-2.0", - "bin": { - "copy-marine": "dist/tools/copyMarine.js" - }, - "dependencies": { - "@fluencelabs/avm": "0.35.3", - "@fluencelabs/connection": "workspace:0.2.0", - "@fluencelabs/interfaces": "workspace:0.1.0", - "@fluencelabs/keypair": "workspace:0.2.0", - "@fluencelabs/marine-js": "0.3.37", - "async": "3.2.4", - "base64-js": "^1.5.1", - "browser-or-node": "2.0.0", - "bs58": "5.0.0", - "buffer": "^6.0.3", - "cids": "1.1.9", - "loglevel": "1.8.1", - "multiformats": "9.9.0", - "peer-id": "0.16.0", - "platform": "^1.3.6", - "rxjs": "^7.5.5", - "ts-pattern": "3.3.3", - "uuid": "8.3.2" - }, - "devDependencies": { - "@fluencelabs/aqua": "0.7.7-362", - "@fluencelabs/aqua-lib": "0.6.0", - "@fluencelabs/fluence-network-environment": "^1.0.13", - "@types/bs58": "^4.0.1", - "@types/jest": "^27.5.1", - "@types/platform": "^1.3.4", - "@types/uuid": "^8.3.4", - "jest": "^28.1.0", - "jest-each": "^28.1.3", - "js-base64": "^3.7.2", - "multiaddr": "10.0.1", - "ts-jest": "^28.0.2", - "typedoc": "^0.22.15", - "typescript": "^4.6.4" - } -} diff --git a/packages/fluence-js/src/__test__/_aqua/marine-js-logging.ts b/packages/fluence-js/src/__test__/_aqua/marine-js-logging.ts deleted file mode 100644 index 96690aa2..00000000 --- a/packages/fluence-js/src/__test__/_aqua/marine-js-logging.ts +++ /dev/null @@ -1,168 +0,0 @@ -/** - * - * This file is auto-generated. Do not edit manually: changes may be erased. - * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. - * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues - * Aqua version: 0.7.7-362 - * - */ -import { FluencePeer } from '../../index'; -import type { CallParams$$ } from '../../internal/compilerSupport/v4'; -import { callFunction$$, registerService$$ } from '../../internal/compilerSupport/v4'; - -// Services - -export interface GreetingRecordDef { - greeting_record: ( - callParams: CallParams$$, - ) => { num: number; str: string } | Promise<{ num: number; str: string }>; - log_debug: (callParams: CallParams$$) => void | Promise; - log_error: (callParams: CallParams$$) => void | Promise; - log_info: (callParams: CallParams$$) => void | Promise; - log_trace: (callParams: CallParams$$) => void | Promise; - log_warn: (callParams: CallParams$$) => void | Promise; - void_fn: (callParams: CallParams$$) => void | Promise; -} -export function registerGreetingRecord(serviceId: string, service: GreetingRecordDef): void; -export function registerGreetingRecord(peer: FluencePeer, serviceId: string, service: GreetingRecordDef): void; - -export function registerGreetingRecord(...args: any) { - registerService$$(args, { - functions: { - tag: 'labeledProduct', - fields: { - greeting_record: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'GreetingRecord', - fields: { - num: { - tag: 'scalar', - name: 'i32', - }, - str: { - tag: 'scalar', - name: 'string', - }, - }, - }, - ], - }, - }, - log_debug: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'nil', - }, - }, - log_error: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'nil', - }, - }, - log_info: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'nil', - }, - }, - log_trace: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'nil', - }, - }, - log_warn: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'nil', - }, - }, - void_fn: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'nil', - }, - }, - }, - }, - }); -} - -// Functions - -export function call_info(srvId: string, config?: { ttl?: number }): Promise; - -export function call_info(peer: FluencePeer, srvId: string, config?: { ttl?: number }): Promise; - -export function call_info(...args: any) { - let script = ` - (xor - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "srvId") [] srvId) - ) - (call %init_peer_id% (srvId "log_info") []) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - `; - return callFunction$$( - args, - { - functionName: 'call_info', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - srvId: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'nil', - }, - }, - names: { - relay: '-relay-', - getDataSrv: 'getDataSrv', - callbackSrv: 'callbackSrv', - responseSrv: 'callbackSrv', - responseFnName: 'response', - errorHandlingSrv: 'errorHandlingSrv', - errorFnName: 'error', - }, - }, - script, - ); -} diff --git a/packages/fluence-js/src/__test__/_aqua/marine-js.ts b/packages/fluence-js/src/__test__/_aqua/marine-js.ts deleted file mode 100644 index 19afb8c2..00000000 --- a/packages/fluence-js/src/__test__/_aqua/marine-js.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - * - * This file is auto-generated. Do not edit manually: changes may be erased. - * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. - * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues - * Aqua version: 0.7.7-362 - * - */ -import { FluencePeer } from '../../index'; -import type { CallParams$$ } from '../../internal/compilerSupport/v4'; -import { callFunction$$, registerService$$ } from '../../internal/compilerSupport/v4'; - -// Services - -export interface GreetingDef { - greeting: (name: string, callParams: CallParams$$<'name'>) => string | Promise; - greeting_record: ( - callParams: CallParams$$, - ) => { num: number; str: string } | Promise<{ num: number; str: string }>; -} -export function registerGreeting(service: GreetingDef): void; -export function registerGreeting(serviceId: string, service: GreetingDef): void; -export function registerGreeting(peer: FluencePeer, service: GreetingDef): void; -export function registerGreeting(peer: FluencePeer, serviceId: string, service: GreetingDef): void; - -export function registerGreeting(...args: any) { - registerService$$(args, { - defaultServiceId: 'greeting', - functions: { - tag: 'labeledProduct', - fields: { - greeting: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - name: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'string', - }, - ], - }, - }, - greeting_record: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'GreetingRecord', - fields: { - num: { - tag: 'scalar', - name: 'i32', - }, - str: { - tag: 'scalar', - name: 'string', - }, - }, - }, - ], - }, - }, - }, - }, - }); -} - -// Functions - -export function call(arg: string, config?: { ttl?: number }): Promise; - -export function call(peer: FluencePeer, arg: string, config?: { ttl?: number }): Promise; - -export function call(...args: any) { - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "arg") [] arg) - ) - (call %init_peer_id% ("greeting" "greeting") [arg] res1) - ) - (call %init_peer_id% ("greeting" "greeting") [res1] res2) - ) - (call %init_peer_id% ("greeting" "greeting") [res2] res3) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [res3]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'call', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - arg: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'string', - }, - ], - }, - }, - names: { - relay: '-relay-', - getDataSrv: 'getDataSrv', - callbackSrv: 'callbackSrv', - responseSrv: 'callbackSrv', - responseFnName: 'response', - errorHandlingSrv: 'errorHandlingSrv', - errorFnName: 'error', - }, - }, - script, - ); -} diff --git a/packages/fluence-js/src/__test__/_aqua/sig-tests.ts b/packages/fluence-js/src/__test__/_aqua/sig-tests.ts deleted file mode 100644 index 4beeb34a..00000000 --- a/packages/fluence-js/src/__test__/_aqua/sig-tests.ts +++ /dev/null @@ -1,264 +0,0 @@ -/** - * - * This file is auto-generated. Do not edit manually: changes may be erased. - * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. - * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues - * Aqua version: 0.7.7-362 - * - */ -import { FluencePeer } from '../../index'; -import type { CallParams$$ } from '../../internal/compilerSupport/v4'; -import { callFunction$$, registerService$$ } from '../../internal/compilerSupport/v4'; - -// Services - -export interface DataProviderDef { - provide_data: (callParams: CallParams$$) => number[] | Promise; -} -export function registerDataProvider(service: DataProviderDef): void; -export function registerDataProvider(serviceId: string, service: DataProviderDef): void; -export function registerDataProvider(peer: FluencePeer, service: DataProviderDef): void; -export function registerDataProvider(peer: FluencePeer, serviceId: string, service: DataProviderDef): void; - -export function registerDataProvider(...args: any) { - registerService$$(args, { - defaultServiceId: 'data', - functions: { - tag: 'labeledProduct', - fields: { - provide_data: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - ], - }, - }, - }, - }, - }); -} - -export interface SigDef { - get_peer_id: (callParams: CallParams$$) => string | Promise; - sign: ( - data: number[], - callParams: CallParams$$<'data'>, - ) => - | { error: string | null; signature: number[] | null; success: boolean } - | Promise<{ error: string | null; signature: number[] | null; success: boolean }>; - verify: ( - signature: number[], - data: number[], - callParams: CallParams$$<'signature' | 'data'>, - ) => boolean | Promise; -} -export function registerSig(service: SigDef): void; -export function registerSig(serviceId: string, service: SigDef): void; -export function registerSig(peer: FluencePeer, service: SigDef): void; -export function registerSig(peer: FluencePeer, serviceId: string, service: SigDef): void; - -export function registerSig(...args: any) { - registerService$$(args, { - defaultServiceId: 'sig', - functions: { - tag: 'labeledProduct', - fields: { - get_peer_id: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'string', - }, - ], - }, - }, - sign: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - data: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'SignResult', - fields: { - error: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - signature: { - tag: 'option', - type: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - success: { - tag: 'scalar', - name: 'bool', - }, - }, - }, - ], - }, - }, - verify: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - signature: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - data: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'bool', - }, - ], - }, - }, - }, - }, - }); -} - -// Functions - -export type CallSigResult = { error: string | null; signature: number[] | null; success: boolean }; -export function callSig(sigId: string, config?: { ttl?: number }): Promise; - -export function callSig(peer: FluencePeer, sigId: string, config?: { ttl?: number }): Promise; - -export function callSig(...args: any) { - let script = ` - (xor - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "sigId") [] sigId) - ) - (call %init_peer_id% ("data" "provide_data") [] data) - ) - (call %init_peer_id% (sigId "sign") [data] signature) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [signature]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'callSig', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - sigId: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'SignResult', - fields: { - error: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - signature: { - tag: 'option', - type: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - success: { - tag: 'scalar', - name: 'bool', - }, - }, - }, - ], - }, - }, - names: { - relay: '-relay-', - getDataSrv: 'getDataSrv', - callbackSrv: 'callbackSrv', - responseSrv: 'callbackSrv', - responseFnName: 'response', - errorHandlingSrv: 'errorHandlingSrv', - errorFnName: 'error', - }, - }, - script, - ); -} diff --git a/packages/fluence-js/src/__test__/_aqua/srv-tests.ts b/packages/fluence-js/src/__test__/_aqua/srv-tests.ts deleted file mode 100644 index e301b25c..00000000 --- a/packages/fluence-js/src/__test__/_aqua/srv-tests.ts +++ /dev/null @@ -1,341 +0,0 @@ -/** - * - * This file is auto-generated. Do not edit manually: changes may be erased. - * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. - * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues - * Aqua version: 0.7.7-362 - * - */ -import { FluencePeer } from '../../index'; -import { callFunction$$ } from '../../internal/compilerSupport/v4'; - -// Services - -// Functions - -export function happy_path(file_path: string, config?: { ttl?: number }): Promise; - -export function happy_path(peer: FluencePeer, file_path: string, config?: { ttl?: number }): Promise; - -export function happy_path(...args: any) { - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "file_path") [] file_path) - ) - (call %init_peer_id% ("node_utils" "read_file") [file_path] file) - ) - (call %init_peer_id% ("single_module_srv" "create") [file.$.content.[0]!] created_service) - ) - (call %init_peer_id% (created_service.$.service_id.[0]! "greeting") ["test"] greeting) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [greeting]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'happy_path', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - file_path: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'string', - }, - ], - }, - }, - names: { - relay: '-relay-', - getDataSrv: 'getDataSrv', - callbackSrv: 'callbackSrv', - responseSrv: 'callbackSrv', - responseFnName: 'response', - errorHandlingSrv: 'errorHandlingSrv', - errorFnName: 'error', - }, - }, - script, - ); -} - -export function removing_non_exiting(config?: { ttl?: number }): Promise; - -export function removing_non_exiting(peer: FluencePeer, config?: { ttl?: number }): Promise; - -export function removing_non_exiting(...args: any) { - let script = ` - (xor - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("single_module_srv" "remove") ["random_id"] e) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [e.$.error.[0]!]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'removing_non_exiting', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: {}, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'string', - }, - ], - }, - }, - names: { - relay: '-relay-', - getDataSrv: 'getDataSrv', - callbackSrv: 'callbackSrv', - responseSrv: 'callbackSrv', - responseFnName: 'response', - errorHandlingSrv: 'errorHandlingSrv', - errorFnName: 'error', - }, - }, - script, - ); -} - -export function file_not_found(config?: { ttl?: number }): Promise; - -export function file_not_found(peer: FluencePeer, config?: { ttl?: number }): Promise; - -export function file_not_found(...args: any) { - let script = ` - (xor - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("node_utils" "read_file") ["/random/incorrect/file"] e) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [e.$.error.[0]!]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'file_not_found', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: {}, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'string', - }, - ], - }, - }, - names: { - relay: '-relay-', - getDataSrv: 'getDataSrv', - callbackSrv: 'callbackSrv', - responseSrv: 'callbackSrv', - responseFnName: 'response', - errorHandlingSrv: 'errorHandlingSrv', - errorFnName: 'error', - }, - }, - script, - ); -} - -export function service_removed(file_path: string, config?: { ttl?: number }): Promise; - -export function service_removed(peer: FluencePeer, file_path: string, config?: { ttl?: number }): Promise; - -export function service_removed(...args: any) { - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "file_path") [] file_path) - ) - (call %init_peer_id% ("node_utils" "read_file") [file_path] file) - ) - (call %init_peer_id% ("single_module_srv" "create") [file.$.content.[0]!] created_service) - ) - (call %init_peer_id% ("single_module_srv" "remove") [created_service.$.service_id.[0]!]) - ) - (xor - (call %init_peer_id% (created_service.$.service_id.[0]! "greeting") ["test"] dontcare) - (null) - ) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [%last_error%.$.message!]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'service_removed', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - file_path: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'string', - }, - ], - }, - }, - names: { - relay: '-relay-', - getDataSrv: 'getDataSrv', - callbackSrv: 'callbackSrv', - responseSrv: 'callbackSrv', - responseFnName: 'response', - errorHandlingSrv: 'errorHandlingSrv', - errorFnName: 'error', - }, - }, - script, - ); -} - -export function list_services(file_path: string, config?: { ttl?: number }): Promise; - -export function list_services(peer: FluencePeer, file_path: string, config?: { ttl?: number }): Promise; - -export function list_services(...args: any) { - let script = ` - (xor - (seq - (seq - (seq - (seq - (seq - (seq - (seq - (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) - (call %init_peer_id% ("getDataSrv" "file_path") [] file_path) - ) - (call %init_peer_id% ("node_utils" "read_file") [file_path] file) - ) - (call %init_peer_id% ("single_module_srv" "create") [file.$.content.[0]!]) - ) - (call %init_peer_id% ("single_module_srv" "create") [file.$.content.[0]!]) - ) - (call %init_peer_id% ("single_module_srv" "create") [file.$.content.[0]!]) - ) - (call %init_peer_id% ("single_module_srv" "list") [] list) - ) - (xor - (call %init_peer_id% ("callbackSrv" "response") [list]) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) - ) - ) - (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) - ) - `; - return callFunction$$( - args, - { - functionName: 'list_services', - arrow: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - file_path: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'array', - type: { - tag: 'scalar', - name: 'string', - }, - }, - ], - }, - }, - names: { - relay: '-relay-', - getDataSrv: 'getDataSrv', - callbackSrv: 'callbackSrv', - responseSrv: 'callbackSrv', - responseFnName: 'response', - errorHandlingSrv: 'errorHandlingSrv', - errorFnName: 'error', - }, - }, - script, - ); -} diff --git a/packages/fluence-js/src/__test__/integration/avm.spec.ts b/packages/fluence-js/src/__test__/integration/avm.spec.ts deleted file mode 100644 index 4947e168..00000000 --- a/packages/fluence-js/src/__test__/integration/avm.spec.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { FluencePeer } from '../../index'; -import { handleTimeout } from '../../internal/utils'; -import { registerHandlersHelper } from '../util'; - -let peer: FluencePeer; - -describe('Avm spec', () => { - beforeEach(async () => { - peer = new FluencePeer(); - await peer.start(); - }); - - afterEach(async () => { - await peer.stop(); - }); - - it('Simple call', async () => { - const res = await new Promise((resolve, reject) => { - const script = ` - (call %init_peer_id% ("print" "print") ["1"]) - `; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - print: { - print: (args: Array>) => { - const [res] = args; - resolve(res); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(res).toBe('1'); - }); - - it('Par call', async () => { - const res = await new Promise((resolve, reject) => { - const res: any[] = []; - const script = ` - (seq - (par - (call %init_peer_id% ("print" "print") ["1"]) - (null) - ) - (call %init_peer_id% ("print" "print") ["2"]) - ) - `; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - print: { - print: (args: any) => { - res.push(args[0]); - if (res.length == 2) { - resolve(res); - } - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(res).toStrictEqual(['1', '2']); - }); - - it('Timeout in par call: race', async () => { - const res = await new Promise((resolve, reject) => { - const script = ` - (seq - (call %init_peer_id% ("op" "identity") ["slow_result"] arg) - (seq - (par - (call %init_peer_id% ("peer" "timeout") [1000 arg] $result) - (call %init_peer_id% ("op" "identity") ["fast_result"] $result) - ) - (seq - (canon %init_peer_id% $result #result) - (call %init_peer_id% ("return" "return") [#result.$[0]]) - ) - ) - ) - `; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - return: { - return: (args: any) => { - resolve(args[0]); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(res).toBe('fast_result'); - }); - - it('Timeout in par call: wait', async () => { - const res = await new Promise((resolve, reject) => { - const script = ` - (seq - (call %init_peer_id% ("op" "identity") ["timeout_msg"] arg) - (seq - (seq - (par - (call %init_peer_id% ("peer" "timeout") [1000 arg] $ok_or_err) - (call "invalid_peer" ("op" "identity") ["never"] $ok_or_err) - ) - (xor - (seq - (canon %init_peer_id% $ok_or_err #ok_or_err) - (match #ok_or_err.$[0] "timeout_msg" - (ap "failed_with_timeout" $result) - ) - ) - (ap "impossible happened" $result) - ) - ) - (seq - (canon %init_peer_id% $result #result) - (call %init_peer_id% ("return" "return") [#result.$[0]]) - ) - ) - ) - `; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - return: { - return: (args: any) => { - resolve(args[0]); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(res).toBe('failed_with_timeout'); - }); -}); diff --git a/packages/fluence-js/src/__test__/integration/marine-js.spec.ts b/packages/fluence-js/src/__test__/integration/marine-js.spec.ts deleted file mode 100644 index 9024ae1e..00000000 --- a/packages/fluence-js/src/__test__/integration/marine-js.spec.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Fluence, FluencePeer } from '../../index'; -import fs from 'fs'; -import { call } from '../_aqua/marine-js'; -import { call_info } from '../_aqua/marine-js-logging'; - -describe('Marine js tests', () => { - beforeEach(async () => { - await Fluence.start(); - }); - - afterEach(async () => { - await Fluence.stop(); - }); - - it('should call marine service correctly', async () => { - // arrange - const wasm = await fs.promises.readFile(__dirname + '/greeting.wasm'); - await Fluence.registerMarineService(wasm, 'greeting'); - - // act - const res = await call('test'); - - // assert - expect(res).toBe('Hi, Hi, Hi, test'); - }); - - // TODO: console printouts are happening inside web-worker\worker threads. - // Find a way to mock functions in background thread - it.skip('logging should work', async () => { - // arrange - const peer = new FluencePeer(); - try { - jest.spyOn(global.console, 'info').mockImplementation(() => {}); - - await peer.start({ - debug: { - marineLogLevel: 'debug', - }, - }); - const wasm = await fs.promises.readFile(__dirname + '/greeting-record.wasm'); - await peer.registerMarineService(wasm, 'greeting'); - - // act - await call_info(peer, 'greeting'); - - // assert - expect(console.info).toBeCalledTimes(1); - expect(console.info).toHaveBeenNthCalledWith(1, '[marine service "greeting"]: info'); - } finally { - await peer.stop(); - } - }); -}); diff --git a/packages/fluence-js/src/__test__/integration/peer.spec.ts b/packages/fluence-js/src/__test__/integration/peer.spec.ts deleted file mode 100644 index d1f45dc2..00000000 --- a/packages/fluence-js/src/__test__/integration/peer.spec.ts +++ /dev/null @@ -1,419 +0,0 @@ -import { Multiaddr } from 'multiaddr'; - -import { nodes } from '../connection'; -import { FluencePeer } from '../../index'; -import { checkConnection, doNothing, handleTimeout } from '../../internal/utils'; -import { registerHandlersHelper } from '../util'; - -let peer: FluencePeer; - -describe('Typescript usage suite', () => { - afterEach(async () => { - if (peer) { - await peer.stop(); - } - }); - - beforeEach(() => { - peer = new FluencePeer(); - }); - - it('should perform test for FluencePeer class correctly', () => { - // arrange - const number = 1; - const object = { str: 'Hello!' }; - const undefinedVal = undefined; - - // act - const isPeerPeer = FluencePeer.isInstance(peer); - const isNumberPeer = FluencePeer.isInstance(number); - const isObjectPeer = FluencePeer.isInstance(object); - const isUndefinedPeer = FluencePeer.isInstance(undefinedVal); - - // act - expect(isPeerPeer).toBe(true); - expect(isNumberPeer).toBe(false); - expect(isObjectPeer).toBe(false); - expect(isUndefinedPeer).toBe(false); - }); - - describe('Should expose correct peer status', () => { - it('Should expose correct status for uninitialized peer', () => { - const status = peer.getStatus(); - - expect(status.isConnected).toBe(false); - expect(status.isInitialized).toBe(false); - expect(status.peerId).toBe(null); - expect(status.relayPeerId).toBe(null); - }); - - it('Should expose correct status for initialized but not connected peer', async () => { - // arrange - await peer.start(); - - // act - const status = peer.getStatus(); - - // assert - expect(status.isConnected).toBe(false); - expect(status.isInitialized).toBe(true); - expect(status.peerId).not.toBe(null); - expect(status.relayPeerId).toBe(null); - }); - - it('Should expose correct status for connected peer', async () => { - // arrange - await peer.start({ connectTo: nodes[0] }); - - // act - const status = peer.getStatus(); - - // assert - expect(status.isConnected).toBe(true); - expect(status.isInitialized).toBe(true); - expect(status.peerId).not.toBe(null); - expect(status.relayPeerId).not.toBe(null); - }); - }); - - it('should make a call through network', async () => { - // arrange - await peer.start({ connectTo: nodes[0] }); - - const result = await new Promise((resolve, reject) => { - const script = ` - (xor - (seq - (call %init_peer_id% ("load" "relay") [] init_relay) - (seq - (call init_relay ("op" "identity") ["hello world!"] result) - (call %init_peer_id% ("callback" "callback") [result]) - ) - ) - (seq - (call init_relay ("op" "identity") []) - (call %init_peer_id% ("callback" "error") [%last_error%]) - ) - )`; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - load: { - relay: () => { - return peer.getStatus().relayPeerId; - }, - }, - callback: { - callback: (args: any) => { - const [val] = args; - resolve(val); - }, - error: (args: any) => { - const [error] = args; - reject(error); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(result).toBe('hello world!'); - }); - - it('check connection should work', async function () { - await peer.start({ connectTo: nodes[0] }); - - const isConnected = await checkConnection(peer); - - expect(isConnected).toEqual(true); - }); - - it('check connection should work with ttl', async function () { - await peer.start({ connectTo: nodes[0] }); - - const isConnected = await checkConnection(peer, 10000); - - expect(isConnected).toEqual(true); - }); - - it('two clients should work inside the same time browser', async () => { - const peer1 = new FluencePeer(); - await peer1.start({ connectTo: nodes[0] }); - const peer2 = new FluencePeer(); - await peer2.start({ connectTo: nodes[0] }); - - const res = new Promise((resolve) => { - peer2.internals.regHandler.common('test', 'test', (req) => { - resolve(req.args[0]); - return { - result: {}, - retCode: 0, - }; - }); - }); - - const script = ` - (seq - (call "${peer1.getStatus().relayPeerId}" ("op" "identity") []) - (call "${peer2.getStatus().peerId}" ("test" "test") ["test"]) - ) - `; - const particle = peer1.internals.createNewParticle(script); - - if (particle instanceof Error) { - throw particle; - } - - peer1.internals.initiateParticle(particle, doNothing); - - expect(await res).toEqual('test'); - - await peer1.stop(); - await peer2.stop(); - }); - - describe('should make connection to network', () => { - it('address as string', async () => { - await peer.start({ connectTo: nodes[0].multiaddr }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeTruthy(); - }); - - it('address as multiaddr', async () => { - await peer.start({ connectTo: new Multiaddr(nodes[0].multiaddr) }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeTruthy(); - }); - - it('address as node', async () => { - await peer.start({ connectTo: nodes[0] }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeTruthy(); - }); - - it('With connection options: dialTimeout', async () => { - await peer.start({ connectTo: nodes[0], dialTimeoutMs: 100000 }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeTruthy(); - }); - - it('With connection options: skipCheckConnection', async () => { - await peer.start({ connectTo: nodes[0], skipCheckConnection: true }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeTruthy(); - }); - - it('With connection options: checkConnectionTTL', async () => { - await peer.start({ connectTo: nodes[0], checkConnectionTimeoutMs: 1000 }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeTruthy(); - }); - - it('With connection options: defaultTTL', async () => { - await peer.start({ connectTo: nodes[0], defaultTtlMs: 1 }); - const isConnected = await checkConnection(peer); - - expect(isConnected).toBeFalsy(); - }); - }); - - it('Should successfully call identity on local peer', async function () { - await peer.start(); - - const res = await new Promise((resolve, reject) => { - const script = ` - (seq - (call %init_peer_id% ("op" "identity") ["test"] res) - (call %init_peer_id% ("callback" "callback") [res]) - ) - `; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - callback: { - callback: async (args: any) => { - const [res] = args; - resolve(res); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(res).toBe('test'); - }); - - it('Should throw correct message when calling non existing local service', async function () { - await peer.start({ connectTo: nodes[0] }); - - const res = callIncorrectService(peer); - - await expect(res).rejects.toMatchObject({ - message: expect.stringContaining( - `No handler has been registered for serviceId='incorrect' fnName='incorrect' args='[]'\"'`, - ), - // instruction: 'call %init_peer_id% ("incorrect" "incorrect") [] res', - }); - }); - - it('Should not crash if undefined is passed as a variable', async () => { - await peer.start(); - - const res = await new Promise((resolve, reject) => { - const script = ` - (seq - (call %init_peer_id% ("load" "arg") [] arg) - (seq - (call %init_peer_id% ("op" "identity") [arg] res) - (call %init_peer_id% ("callback" "callback") [res]) - ) - )`; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - load: { - arg: () => undefined, - }, - callback: { - callback: (args: any) => { - const [val] = args; - resolve(val); - }, - error: (args: any) => { - const [error] = args; - reject(error); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - expect(res).toBe(null); - }); - - it('Should not crash if an error ocurred in user-defined handler', async () => { - await peer.start(); - - const promise = new Promise((_resolve, reject) => { - const script = ` - (xor - (call %init_peer_id% ("load" "arg") [] arg) - (call %init_peer_id% ("callback" "error") [%last_error%]) - )`; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - load: { - arg: () => { - throw new Error('my super custom error message'); - }, - }, - callback: { - error: (args: any) => { - const [error] = args; - reject(error); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); - - await expect(promise).rejects.toMatchObject({ - message: expect.stringContaining('my super custom error message'), - }); - }); - - it('Should return error if particle is created on a stopped peer', async () => { - await peer.stop(); - const particle = peer.internals.createNewParticle(`(null)`); - - expect(particle instanceof Error).toBe(true); - }); - - it.skip('Should throw correct error when the client tries to send a particle not to the relay', async () => { - await peer.start({ connectTo: nodes[0] }); - - const promise = new Promise((resolve, reject) => { - const script = ` - (xor - (call "incorrect_peer_id" ("any" "service") []) - (call %init_peer_id% ("callback" "error") [%last_error%]) - )`; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - callback: { - error: (args: any) => { - const [error] = args; - reject(error); - }, - }, - }); - - peer.internals.initiateParticle(particle, doNothing); - }); - - await expect(promise).rejects.toMatch( - 'Particle is expected to be sent to only the single peer (relay which client is connected to)', - ); - }); -}); - -async function callIncorrectService(peer: FluencePeer): Promise { - return new Promise((resolve, reject) => { - const script = ` - (xor - (call %init_peer_id% ("incorrect" "incorrect") [] res) - (call %init_peer_id% ("callback" "error") [%last_error%]) - )`; - const particle = peer.internals.createNewParticle(script); - - if (particle instanceof Error) { - return reject(particle.message); - } - - registerHandlersHelper(peer, particle, { - callback: { - callback: (args: any) => { - resolve(args); - }, - error: (args: any) => { - const [error] = args; - reject(error); - }, - }, - }); - - peer.internals.initiateParticle(particle, handleTimeout(reject)); - }); -} diff --git a/packages/fluence-js/src/__test__/integration/sigService.spec.ts b/packages/fluence-js/src/__test__/integration/sigService.spec.ts deleted file mode 100644 index 3fa6c9cc..00000000 --- a/packages/fluence-js/src/__test__/integration/sigService.spec.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { allowServiceFn } from '../../internal/builtins/securityGuard'; -import { FluencePeer, KeyPair } from '../../index'; -import { Sig } from '../../services'; -import { registerSig, registerDataProvider, callSig } from '../_aqua/sig-tests'; - -let peer: FluencePeer; - -describe('Sig service test suite', () => { - afterEach(async () => { - if (peer) { - await peer.stop(); - } - }); - - beforeEach(async () => { - peer = new FluencePeer(); - await peer.start(); - }); - - it('Use custom sig service, success path', async () => { - const customKeyPair = await KeyPair.randomEd25519(); - const customSig = new Sig(customKeyPair); - const data = [1, 2, 3, 4, 5]; - - registerSig(peer, 'CustomSig', customSig); - - registerDataProvider(peer, { - provide_data: () => { - return data; - }, - }); - - customSig.securityGuard = allowServiceFn('data', 'provide_data'); - - const result = await callSig(peer, 'CustomSig'); - - expect(result.success).toBe(true); - const isSigCorrect = await customSig.verify(result.signature as number[], data); - expect(isSigCorrect).toBe(true); - }); - - it('Use custom sig service, fail path', async () => { - const customKeyPair = await KeyPair.randomEd25519(); - const customSig = new Sig(customKeyPair); - const data = [1, 2, 3, 4, 5]; - - registerSig(peer, 'CustomSig', customSig); - - registerDataProvider(peer, { - provide_data: () => { - return data; - }, - }); - - customSig.securityGuard = allowServiceFn('wrong', 'wrong'); - - const result = await callSig(peer, 'CustomSig'); - }); - - it('Default sig service should be resolvable by peer id', async () => { - const sig = peer.getServices().sig; - - const data = [1, 2, 3, 4, 5]; - registerDataProvider(peer, { - provide_data: () => { - return data; - }, - }); - - const callAsSigRes = await callSig(peer, 'sig'); - const callAsPeerIdRes = await callSig(peer, peer.getStatus().peerId as string); - - expect(callAsSigRes.success).toBe(false); - expect(callAsPeerIdRes.success).toBe(false); - - sig.securityGuard = () => true; - - const callAsSigResAfterGuardChange = await callSig(peer, 'sig'); - const callAsPeerIdResAfterGuardChange = await callSig(peer, peer.getStatus().peerId as string); - - expect(callAsSigResAfterGuardChange.success).toBe(true); - expect(callAsPeerIdResAfterGuardChange.success).toBe(true); - - const isValid = await sig.verify(callAsSigResAfterGuardChange.signature as number[], data); - - expect(isValid).toBe(true); - }); -}); diff --git a/packages/fluence-js/src/__test__/integration/srv.spec.ts b/packages/fluence-js/src/__test__/integration/srv.spec.ts deleted file mode 100644 index 03500513..00000000 --- a/packages/fluence-js/src/__test__/integration/srv.spec.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { Fluence, FluencePeer, KeyPair, setLogLevel } from '../../index'; - -import fs from 'fs/promises'; -import path from 'path'; -import { happy_path, service_removed, file_not_found, list_services, removing_non_exiting } from '../_aqua/srv-tests'; - -let peer: FluencePeer; - -describe('Srv service test suite', () => { - afterEach(async () => { - if (peer) { - await peer.stop(); - } - }); - - beforeEach(async () => { - peer = new FluencePeer(); - await peer.start(); - }); - - it('Use custom srv service, success path', async () => { - // arrange - const wasm = path.join(__dirname, './greeting.wasm'); - - // act - const res = await happy_path(peer, wasm); - - // assert - expect(res).toBe('Hi, test'); - }); - - it('List deployed services', async () => { - // arrange - const wasm = path.join(__dirname, './greeting.wasm'); - - // act - const res = await list_services(peer, wasm); - - // assert - expect(res).toHaveLength(3); - }); - - it('Correct error for removed services', async () => { - // arrange - const wasm = path.join(__dirname, './greeting.wasm'); - - // act - const res = await service_removed(peer, wasm); - - // assert - expect(res).toMatch('No handler has been registered for serviceId'); - }); - - it('Correct error for file not found', async () => { - // arrange - - // act - const res = await file_not_found(peer); - - // assert - expect(res).toMatch("ENOENT: no such file or directory, open '/random/incorrect/file'"); - }); - - it('4', async () => { - // arrange - - // act - const res = await removing_non_exiting(peer); - - // assert - expect(res).toMatch('Service with id random_id not found'); - }); -}); diff --git a/packages/fluence-js/src/__test__/unit/KeyPair.spec.ts b/packages/fluence-js/src/__test__/unit/KeyPair.spec.ts deleted file mode 100644 index 978f92ce..00000000 --- a/packages/fluence-js/src/__test__/unit/KeyPair.spec.ts +++ /dev/null @@ -1,43 +0,0 @@ -import * as bs58 from 'bs58'; -import * as base64 from 'base64-js'; -import { KeyPair } from '@fluencelabs/keypair'; - -describe('KeyPair tests', () => { - it('generate keypair from seed', async function () { - // arrange - const random = await KeyPair.randomEd25519(); - const privateKey = random.toEd25519PrivateKey(); - - // act - const keyPair = await KeyPair.fromEd25519SK(privateKey); - const privateKey2 = keyPair.toEd25519PrivateKey(); - - // assert - expect(privateKey).toStrictEqual(privateKey2); - }); - - it('create keypair from ed25519 private key', async function () { - // arrange - const rustSK = 'jDaxLJzYtzgwTMrELJCAqavtmx85ktQNfB2rLcK7MhH'; - const sk = bs58.decode(rustSK); - - // act - const keyPair = await KeyPair.fromEd25519SK(sk); - - // assert - const expectedPeerId = '12D3KooWH1W3VznVZ87JH4FwABK4mkntcspTVWJDta6c2xg9Pzbp'; - expect(keyPair.Libp2pPeerId.toB58String()).toStrictEqual(expectedPeerId); - }); - - it('create keypair from a seed phrase', async function () { - // arrange - const seedArray = new Uint8Array(32).fill(1); - - // act - const keyPair = await KeyPair.fromEd25519SK(seedArray); - - // assert - const expectedPeerId = '12D3KooWK99VoVxNE7XzyBwXEzW7xhK7Gpv85r9F3V3fyKSUKPH5'; - expect(keyPair.Libp2pPeerId.toB58String()).toStrictEqual(expectedPeerId); - }); -}); diff --git a/packages/fluence-js/src/__test__/unit/builtInHandler.spec.ts b/packages/fluence-js/src/__test__/unit/builtInHandler.spec.ts deleted file mode 100644 index d6722b3b..00000000 --- a/packages/fluence-js/src/__test__/unit/builtInHandler.spec.ts +++ /dev/null @@ -1,335 +0,0 @@ -import { CallParams, CallServiceData } from '../../internal/commonTypes'; -import each from 'jest-each'; -import { builtInServices } from '../../internal/builtins/common'; -import { KeyPair } from '@fluencelabs/keypair'; -import { Sig, defaultSigGuard } from '../../internal/builtins/Sig'; -import { toUint8Array } from 'js-base64'; -import { allowServiceFn } from '../../internal/builtins/securityGuard'; - -const a10b20 = `{ - "a": 10, - "b": 20 -}`; - -const oneTwoThreeFour = `[ - 1, - 2, - 3, - 4 -]`; - -describe('Tests for default handler', () => { - // prettier-ignore - each` - serviceId | fnName | args | retCode | result - ${'op'} | ${'identity'} | ${[]} | ${0} | ${{}} - ${'op'} | ${'identity'} | ${[1]} | ${0} | ${1} - ${'op'} | ${'identity'} | ${[1, 2]} | ${1} | ${'identity accepts up to 1 arguments, received 2 arguments'} - - ${'op'} | ${'noop'} | ${[1, 2]} | ${0} | ${{}} - - ${'op'} | ${'array'} | ${[1, 2, 3]} | ${0} | ${[1, 2, 3]} - - ${'op'} | ${'array_length'} | ${[[1, 2, 3]]} | ${0} | ${3} - ${'op'} | ${'array_length'} | ${[]} | ${1} | ${'array_length accepts exactly one argument, found: 0'} - - ${'op'} | ${'concat'} | ${[[1, 2], [3, 4], [5, 6]]} | ${0} | ${[1, 2, 3, 4, 5, 6]} - ${'op'} | ${'concat'} | ${[[1, 2]]} | ${0} | ${[1, 2]} - ${'op'} | ${'concat'} | ${[]} | ${0} | ${[]} - ${'op'} | ${'concat'} | ${[1, [1, 2], 1]} | ${1} | ${"All arguments of 'concat' must be arrays: arguments 0, 2 are not"} - - ${'op'} | ${'string_to_b58'} | ${["test"]} | ${0} | ${"3yZe7d"} - ${'op'} | ${'string_to_b58'} | ${["test", 1]} | ${1} | ${"string_to_b58 accepts only one string argument"} - - ${'op'} | ${'string_from_b58'} | ${["3yZe7d"]} | ${0} | ${"test"} - ${'op'} | ${'string_from_b58'} | ${["3yZe7d", 1]} | ${1} | ${"string_from_b58 accepts only one string argument"} - - ${'op'} | ${'bytes_to_b58'} | ${[[116, 101, 115, 116]]} | ${0} | ${"3yZe7d"} - ${'op'} | ${'bytes_to_b58'} | ${[[116, 101, 115, 116], 1]} | ${1} | ${"bytes_to_b58 accepts only single argument: array of numbers"} - - ${'op'} | ${'bytes_from_b58'} | ${["3yZe7d"]} | ${0} | ${[116, 101, 115, 116]} - ${'op'} | ${'bytes_from_b58'} | ${["3yZe7d", 1]} | ${1} | ${"bytes_from_b58 accepts only one string argument"} - - ${'op'} | ${'sha256_string'} | ${["hello, world!"]} | ${0} | ${"QmVQ8pg6L1tpoWYeq6dpoWqnzZoSLCh7E96fCFXKvfKD3u"} - ${'op'} | ${'sha256_string'} | ${["hello, world!", true]} | ${0} | ${"84V7ZxLW7qKsx1Qvbd63BdGaHxUc3TfT2MBPqAXM7Wyu"} - ${'op'} | ${'sha256_string'} | ${[]} | ${1} | ${"sha256_string accepts 1-3 arguments, found: 0"} - - ${'op'} | ${'concat_strings'} | ${[]} | ${0} | ${""} - ${'op'} | ${'concat_strings'} | ${["a", "b", "c"]} | ${0} | ${"abc"} - - ${'peer'} | ${'timeout'} | ${[200, []]} | ${0} | ${[]}} - ${'peer'} | ${'timeout'} | ${[200, ['test']]} | ${0} | ${['test']}} - ${'peer'} | ${'timeout'} | ${[]} | ${1} | ${'timeout accepts exactly two arguments: timeout duration in ms and a message string'}} - ${'peer'} | ${'timeout'} | ${[200, 'test', 1]} | ${1} | ${'timeout accepts exactly two arguments: timeout duration in ms and a message string'}} - - ${'debug'} | ${'stringify'} | ${[]} | ${0} | ${'""'}} - ${'debug'} | ${'stringify'} | ${[{a: 10, b: 20}]} | ${0} | ${a10b20}} - ${'debug'} | ${'stringify'} | ${[1, 2, 3, 4]} | ${0} | ${oneTwoThreeFour}} - - ${'math'} | ${'add'}" | ${[2, 2]} | ${0} | ${4} - ${'math'} | ${'add'}" | ${[2]} | ${1} | ${"Expected 2 argument(s). Got 1"} - - ${'math'} | ${'sub'}" | ${[2, 2]} | ${0} | ${0} - ${'math'} | ${'sub'}" | ${[2, 3]} | ${0} | ${-1} - - ${'math'} | ${'mul'}" | ${[2, 2]} | ${0} | ${4} - ${'math'} | ${'mul'}" | ${[2, 0]} | ${0} | ${0} - ${'math'} | ${'mul'}" | ${[2, -1]} | ${0} | ${-2} - - ${'math'} | ${'fmul'}" | ${[10, 0.66]} | ${0} | ${6} - ${'math'} | ${'fmul'}" | ${[0.5, 0.5]} | ${0} | ${0} - ${'math'} | ${'fmul'}" | ${[100.5, 0.5]} | ${0} | ${50} - - ${'math'} | ${'div'}" | ${[2, 2]} | ${0} | ${1} - ${'math'} | ${'div'}" | ${[2, 3]} | ${0} | ${0} - ${'math'} | ${'div'}" | ${[10, 5]} | ${0} | ${2} - - ${'math'} | ${'rem'}" | ${[10, 3]} | ${0} | ${1} - - ${'math'} | ${'pow'}" | ${[2, 2]} | ${0} | ${4} - ${'math'} | ${'pow'}" | ${[2, 0]} | ${0} | ${1} - - ${'math'} | ${'log'}" | ${[2, 2]} | ${0} | ${1} - ${'math'} | ${'log'}" | ${[2, 4]} | ${0} | ${2} - - ${'cmp'} | ${'gt'}" | ${[2, 4]} | ${0} | ${false} - ${'cmp'} | ${'gte'}" | ${[2, 4]} | ${0} | ${false} - ${'cmp'} | ${'gte'}" | ${[4, 2]} | ${0} | ${true} - ${'cmp'} | ${'gte'}" | ${[2, 2]} | ${0} | ${true} - - ${'cmp'} | ${'lt'}" | ${[2, 4]} | ${0} | ${true} - ${'cmp'} | ${'lte'}" | ${[2, 4]} | ${0} | ${true} - ${'cmp'} | ${'lte'}" | ${[4, 2]} | ${0} | ${false} - ${'cmp'} | ${'lte'}" | ${[2, 2]} | ${0} | ${true} - - ${'cmp'} | ${'cmp'}" | ${[2, 4]} | ${0} | ${-1} - ${'cmp'} | ${'cmp'}" | ${[2, -4]} | ${0} | ${1} - ${'cmp'} | ${'cmp'}" | ${[2, 2]} | ${0} | ${0} - - ${'array'} | ${'sum'}" | ${[[1, 2, 3]]} | ${0} | ${6} - ${'array'} | ${'dedup'}" | ${[["a", "a", "b", "c", "a", "b", "c"]]} | ${0} | ${["a", "b", "c"]} - ${'array'} | ${'intersect'}" | ${[["a", "b", "c"], ["c", "b", "d"]]} | ${0} | ${["b", "c"]} - ${'array'} | ${'diff'}" | ${[["a", "b", "c"], ["c", "b", "d"]]} | ${0} | ${["a"]} - ${'array'} | ${'sdiff'}" | ${[["a", "b", "c"], ["c", "b", "d"]]} | ${0} | ${["a", "d"]} - - ${'json'} | ${'obj'}" | ${["a", 10, "b", "string", "c", null]} | ${0} | ${{a: 10, b: "string", c: null}} - ${'json'} | ${'obj'}" | ${["a", 10, "b", "string", "c"]} | ${1} | ${"Expected even number of argument(s). Got 5"} - ${'json'} | ${'obj'}" | ${[]} | ${0} | ${{}} - - ${'json'} | ${'put'}" | ${[{}, "a", 10]} | ${0} | ${{a: 10}} - ${'json'} | ${'put'}" | ${[{b: 11}, "a", 10]} | ${0} | ${{a: 10, b: 11}} - ${'json'} | ${'put'}" | ${["a", "a", 11]} | ${1} | ${"Argument 0 expected to be of type object, Got string"} - ${'json'} | ${'put'}" | ${[{}, "a", 10, "b", 20]} | ${1} | ${"Expected 3 argument(s). Got 5"} - ${'json'} | ${'put'}" | ${[{}]} | ${1} | ${"Expected 3 argument(s). Got 1"} - - ${'json'} | ${'puts'}" | ${[{}, "a", 10]} | ${0} | ${{a: 10}} - ${'json'} | ${'puts'}" | ${[{b: 11}, "a", 10]} | ${0} | ${{a: 10, b: 11}} - ${'json'} | ${'puts'}" | ${[{}, "a", 10, "b", "string", "c", null]} | ${0} | ${{a: 10, b: "string", c: null}} - ${'json'} | ${'puts'}" | ${[{x: "text"}, "a", 10, "b", "string"]} | ${0} | ${{a: 10, b: "string", x: "text"}} - ${'json'} | ${'puts'}" | ${[{}]} | ${1} | ${"Expected more than 3 argument(s). Got 1"} - ${'json'} | ${'puts'}" | ${["a", "a", 11]} | ${1} | ${"Argument 0 expected to be of type object, Got string"} - - ${'json'} | ${'stringify'}" | ${[{a: 10, b: "string", c: null}]} | ${0} | ${"{\"a\":10,\"b\":\"string\",\"c\":null}"} - ${'json'} | ${'stringify'}" | ${[1]} | ${1} | ${"Argument 0 expected to be of type object, Got number"} - ${'json'} | ${'parse'}" | ${["{\"a\":10,\"b\":\"string\",\"c\":null}"]} | ${0} | ${{a: 10, b: "string", c: null}} - ${'json'} | ${'parse'}" | ${["incorrect"]} | ${1} | ${"Unexpected token i in JSON at position 0"} - ${'json'} | ${'parse'}" | ${[10]} | ${1} | ${"Argument 0 expected to be of type string, Got number"} - - `.test( - // - '$fnName with $args expected retcode: $retCode and result: $result', - async ({ serviceId, fnName, args, retCode, result }) => { - // arrange - const req: CallServiceData = { - serviceId: serviceId, - fnName: fnName, - args: args, - tetraplets: [], - particleContext: { - particleId: 'some', - initPeerId: 'init peer id', - timestamp: 595951200, - ttl: 595961200, - signature: 'sig', - }, - }; - - // act - const fn = builtInServices[req.serviceId][req.fnName]; - const res = await fn(req); - - // assert - expect(res).toMatchObject({ - retCode: retCode, - result: result, - }); - }, - ); - - it('should return correct error message for identiy service', async () => { - // arrange - const req: CallServiceData = { - serviceId: 'peer', - fnName: 'identify', - args: [], - tetraplets: [], - particleContext: { - particleId: 'some', - initPeerId: 'init peer id', - timestamp: 595951200, - ttl: 595961200, - signature: 'sig', - }, - }; - - // act - const fn = builtInServices[req.serviceId][req.fnName]; - const res = await fn(req); - - // assert - expect(res).toMatchObject({ - retCode: 0, - result: { - external_addresses: [], - node_version: expect.stringContaining('js'), - air_version: expect.stringContaining('js'), - }, - }); - }); -}); - -const key = '+cmeYlZKj+MfSa9dpHV+BmLPm6wq4inGlsPlQ1GvtPk='; - -const context = (async () => { - const keyBytes = toUint8Array(key); - const kp = await KeyPair.fromEd25519SK(keyBytes); - const res = { - peerKeyPair: kp, - peerId: kp.Libp2pPeerId.toB58String(), - }; - return res; -})(); - -const testData = [1, 2, 3, 4, 5, 6, 7, 9, 10]; - -// signature produced by KeyPair created from key above (`key` variable) -const testDataSig = [ - 224, 104, 245, 206, 140, 248, 27, 72, 68, 133, 111, 10, 164, 197, 242, 132, 107, 77, 224, 67, 99, 106, 76, 29, 144, - 121, 122, 169, 36, 173, 58, 80, 170, 102, 137, 253, 157, 247, 168, 87, 162, 223, 188, 214, 203, 220, 52, 246, 29, - 86, 77, 71, 224, 248, 16, 213, 254, 75, 78, 239, 243, 222, 241, 15, -]; - -// signature produced by KeyPair created from some random KeyPair -const testDataWrongSig = [ - 116, 247, 189, 118, 236, 53, 147, 123, 219, 75, 176, 105, 101, 108, 233, 137, 97, 14, 146, 132, 252, 70, 51, 153, - 237, 167, 156, 150, 36, 90, 229, 108, 166, 231, 255, 137, 8, 246, 125, 0, 213, 150, 83, 196, 237, 221, 131, 159, - 157, 159, 25, 109, 95, 160, 181, 65, 254, 238, 47, 156, 240, 151, 58, 14, -]; - -const makeTetraplet = (initPeerId: string, serviceId?: string, fnName?: string): CallParams<'data'> => { - return { - initPeerId: initPeerId, - tetraplets: { - data: [ - { - function_name: fnName, - service_id: serviceId, - }, - ], - }, - } as any; -}; - -describe('Sig service tests', () => { - it('sig.sign should create the correct signature', async () => { - const ctx = await context; - const sig = new Sig(ctx.peerKeyPair); - - const res = await sig.sign(testData, makeTetraplet(ctx.peerId)); - - expect(res.success).toBe(true); - expect(res.signature).toStrictEqual(testDataSig); - }); - - it('sig.verify should return true for the correct signature', async () => { - const ctx = await context; - const sig = new Sig(ctx.peerKeyPair); - - const res = await sig.verify(testDataSig, testData); - - expect(res).toBe(true); - }); - - it('sig.verify should return false for the incorrect signature', async () => { - const ctx = await context; - const sig = new Sig(ctx.peerKeyPair); - - const res = await sig.verify(testDataWrongSig, testData); - - expect(res).toBe(false); - }); - - it('sign-verify call chain should work', async () => { - const ctx = await context; - const sig = new Sig(ctx.peerKeyPair); - - const signature = await sig.sign(testData, makeTetraplet(ctx.peerId)); - const res = await sig.verify(signature.signature as number[], testData); - - expect(res).toBe(true); - }); - - it('sig.sign with defaultSigGuard should work for correct callParams', async () => { - const ctx = await context; - const sig = new Sig(ctx.peerKeyPair); - sig.securityGuard = defaultSigGuard(ctx.peerId); - - const signature = await sig.sign(testData, makeTetraplet(ctx.peerId, 'registry', 'get_route_bytes')); - - await expect(signature).toBeDefined(); - }); - - it('sig.sign with defaultSigGuard should not allow particles initiated from incorrect service', async () => { - const ctx = await context; - const sig = new Sig(ctx.peerKeyPair); - sig.securityGuard = defaultSigGuard(ctx.peerId); - - const res = await sig.sign(testData, makeTetraplet(ctx.peerId, 'other_service', 'other_fn')); - - await expect(res.success).toBe(false); - await expect(res.error).toBe('Security guard validation failed'); - }); - - it('sig.sign with defaultSigGuard should not allow particles initiated from other peers', async () => { - const ctx = await context; - const sig = new Sig(ctx.peerKeyPair); - sig.securityGuard = defaultSigGuard(ctx.peerId); - - const res = await sig.sign( - testData, - makeTetraplet((await KeyPair.randomEd25519()).getPeerId(), 'registry', 'get_key_bytes'), - ); - - await expect(res.success).toBe(false); - await expect(res.error).toBe('Security guard validation failed'); - }); - - it('changing securityGuard should work', async () => { - const ctx = await context; - const sig = new Sig(ctx.peerKeyPair); - sig.securityGuard = allowServiceFn('test', 'test'); - - const successful1 = await sig.sign(testData, makeTetraplet(ctx.peerId, 'test', 'test')); - const unSuccessful1 = await sig.sign(testData, makeTetraplet(ctx.peerId, 'wrong', 'wrong')); - - sig.securityGuard = allowServiceFn('wrong', 'wrong'); - - const successful2 = await sig.sign(testData, makeTetraplet(ctx.peerId, 'wrong', 'wrong')); - const unSuccessful2 = await sig.sign(testData, makeTetraplet(ctx.peerId, 'test', 'test')); - - expect(successful1.success).toBe(true); - expect(successful2.success).toBe(true); - expect(unSuccessful1.success).toBe(false); - expect(unSuccessful2.success).toBe(false); - }); -}); diff --git a/packages/fluence-js/src/__test__/unit/compiler/v2.spec.ts b/packages/fluence-js/src/__test__/unit/compiler/v2.spec.ts deleted file mode 100644 index 8fed0956..00000000 --- a/packages/fluence-js/src/__test__/unit/compiler/v2.spec.ts +++ /dev/null @@ -1,37 +0,0 @@ -import each from 'jest-each'; - -import { Fluence, FluencePeer } from '../../..'; -import { forTests } from '../../../internal/compilerSupport/v2'; - -const peer = new FluencePeer(); -const cfg = { ttl: 1000 }; - -describe('Compiler support tests', () => { - each` - rawArgs | numArgs | expectedArgs | expectedConfig | isExpectedPeerDefault - ${[]} | ${0} | ${[]} | ${undefined} | ${true} - ${[cfg]} | ${0} | ${[]} | ${cfg} | ${true} - ${[peer]} | ${0} | ${[]} | ${undefined} | ${false} - ${[peer, cfg]} | ${0} | ${[]} | ${cfg} | ${false} - ${['a']} | ${1} | ${['a']} | ${undefined} | ${true} - ${['a', cfg]} | ${1} | ${['a']} | ${cfg} | ${true} - ${[peer, 'a']} | ${1} | ${['a']} | ${undefined} | ${false} - ${[peer, 'a', cfg]} | ${1} | ${['a']} | ${cfg} | ${false} -`.test( - // - 'raw rawArgs: $rawArgs, numArgs: $numArgs. expected args: $expectedArgs, config: $expectedConfig, default peer?: $isExpectedPeerDefault', - ({ rawArgs, numArgs, expectedArgs, expectedConfig, isExpectedPeerDefault }) => { - // arrange - const testFn = forTests.extractFunctionArgs; - - // act - const { peer, config, args } = testFn(rawArgs, numArgs); - const isActualPeerDefault = Fluence.getPeer() === peer; - - // assert - expect(config).toStrictEqual(expectedConfig); - expect(args).toStrictEqual(expectedArgs); - expect(isActualPeerDefault).toStrictEqual(isExpectedPeerDefault); - }, - ); -}); diff --git a/packages/fluence-js/src/__test__/util.ts b/packages/fluence-js/src/__test__/util.ts deleted file mode 100644 index 1c22e6b9..00000000 --- a/packages/fluence-js/src/__test__/util.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { FluencePeer } from '../index'; -import { Particle } from '../internal/Particle'; -import { MakeServiceCall } from '../internal/utils'; - -export const registerHandlersHelper = ( - peer: FluencePeer, - particle: Particle, - handlers: Record>, -) => { - Object.entries(handlers).forEach(([serviceId, service]) => { - Object.entries(service).forEach(([fnName, fn]) => { - peer.internals.regHandler.forParticle(particle.id, serviceId, fnName, MakeServiceCall(fn)); - }); - }); -}; diff --git a/packages/fluence-js/src/index.ts b/packages/fluence-js/src/index.ts deleted file mode 100644 index ee68fe8e..00000000 --- a/packages/fluence-js/src/index.ts +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2020 Fluence Labs Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import log, { LogLevelDesc } from 'loglevel'; -export { KeyPair } from '@fluencelabs/keypair'; - -import { FluencePeer, PeerConfig } from './internal/FluencePeer'; - -export { PeerStatus } from './internal/FluencePeer'; -export { FluencePeer, PeerConfig } from './internal/FluencePeer'; -export { MarineLoglevel as AvmLoglevel } from './internal/utils'; -export { PeerIdB58, CallParams } from './internal/commonTypes'; -export { loadWasmFromFileSystem, loadWasmFromNpmPackage, loadWasmFromServer } from '@fluencelabs/marine-js'; - -export const setLogLevel = (level: LogLevelDesc) => { - log.setLevel(level); -}; - -log.setDefaultLevel('WARN'); - -const defaultPeer = new FluencePeer(); - -/** - * Public interface to Fluence JS - */ -export const Fluence = { - /** - * Initializes the default peer: starts the Aqua VM, initializes the default call service handlers - * and (optionally) connect to the Fluence network - * @param config - object specifying peer configuration - */ - start: (config?: PeerConfig): Promise => { - return defaultPeer.start(config); - }, - - /** - * Un-initializes the default peer: stops all the underlying workflows, stops the Aqua VM - * and disconnects from the Fluence network - */ - stop: (): Promise => { - return defaultPeer.stop(); - }, - - /** - * Get the default peer's status - * @returns Default peer's status - */ - getStatus: () => { - return defaultPeer.getStatus(); - }, - - /** - * Get the default peer instance - * @returns the default peer instance - */ - getPeer: (): FluencePeer => { - return defaultPeer; - }, - - /** - * Registers marine service within the default Fluence peer from wasm file. - * Following helper functions can be used to load wasm files: - * * loadWasmFromFileSystem - * * loadWasmFromNpmPackage - * * loadWasmFromServer - * @param wasm - buffer with the wasm file for service - * @param serviceId - the service id by which the service can be accessed in aqua - */ - registerMarineService: (wasm: SharedArrayBuffer | Buffer, serviceId: string): Promise => { - return defaultPeer.registerMarineService(wasm, serviceId); - }, - - /** - * Removes the specified marine service from the default Fluence peer - * @param serviceId - the service id to remove - */ - removeMarineService: (serviceId: string): void => { - defaultPeer.removeMarineService(serviceId); - }, -}; diff --git a/packages/fluence-js/src/internal/Buffer.ts b/packages/fluence-js/src/internal/Buffer.ts deleted file mode 100644 index 13528d81..00000000 --- a/packages/fluence-js/src/internal/Buffer.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2022 Fluence Labs Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { isBrowser } from 'browser-or-node'; -import { Buffer as BufferPolyfill } from 'buffer'; - -export default isBrowser ? BufferPolyfill : Buffer; diff --git a/packages/fluence-js/src/internal/_aqua/node-utils.ts b/packages/fluence-js/src/internal/_aqua/node-utils.ts deleted file mode 100644 index 0723e283..00000000 --- a/packages/fluence-js/src/internal/_aqua/node-utils.ts +++ /dev/null @@ -1,80 +0,0 @@ -/** - * - * This file is auto-generated. Do not edit manually: changes may be erased. - * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. - * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues - * Aqua version: 0.7.7-362 - * - */ -import { FluencePeer } from '../..'; -import type { CallParams$$ } from '../../internal/compilerSupport/v4'; -import { registerService$$ } from '../../internal/compilerSupport/v4'; - -// Services - -export interface NodeUtilsDef { - read_file: ( - path: string, - callParams: CallParams$$<'path'>, - ) => - | { content: string | null; error: string | null; success: boolean } - | Promise<{ content: string | null; error: string | null; success: boolean }>; -} -export function registerNodeUtils(service: NodeUtilsDef): void; -export function registerNodeUtils(serviceId: string, service: NodeUtilsDef): void; -export function registerNodeUtils(peer: FluencePeer, service: NodeUtilsDef): void; -export function registerNodeUtils(peer: FluencePeer, serviceId: string, service: NodeUtilsDef): void; - -export function registerNodeUtils(...args: any) { - registerService$$(args, { - defaultServiceId: 'node_utils', - functions: { - tag: 'labeledProduct', - fields: { - read_file: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - path: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'ReadFileResult', - fields: { - content: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - error: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - success: { - tag: 'scalar', - name: 'bool', - }, - }, - }, - ], - }, - }, - }, - }, - }); -} - -// Functions diff --git a/packages/fluence-js/src/internal/_aqua/services.ts b/packages/fluence-js/src/internal/_aqua/services.ts deleted file mode 100644 index 89309c4f..00000000 --- a/packages/fluence-js/src/internal/_aqua/services.ts +++ /dev/null @@ -1,138 +0,0 @@ -/** - * - * This file is auto-generated. Do not edit manually: changes may be erased. - * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. - * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues - * Aqua version: 0.7.7-362 - * - */ -import { FluencePeer } from '../..'; -import type { CallParams$$ } from '../../internal/compilerSupport/v4'; -import { registerService$$ } from '../../internal/compilerSupport/v4'; - -// Services - -export interface SigDef { - get_peer_id: (callParams: CallParams$$) => string | Promise; - sign: ( - data: number[], - callParams: CallParams$$<'data'>, - ) => - | { error: string | null; signature: number[] | null; success: boolean } - | Promise<{ error: string | null; signature: number[] | null; success: boolean }>; - verify: ( - signature: number[], - data: number[], - callParams: CallParams$$<'signature' | 'data'>, - ) => boolean | Promise; -} -export function registerSig(service: SigDef): void; -export function registerSig(serviceId: string, service: SigDef): void; -export function registerSig(peer: FluencePeer, service: SigDef): void; -export function registerSig(peer: FluencePeer, serviceId: string, service: SigDef): void; - -export function registerSig(...args: any) { - registerService$$(args, { - defaultServiceId: 'sig', - functions: { - tag: 'labeledProduct', - fields: { - get_peer_id: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'string', - }, - ], - }, - }, - sign: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - data: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'SignResult', - fields: { - error: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - signature: { - tag: 'option', - type: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - success: { - tag: 'scalar', - name: 'bool', - }, - }, - }, - ], - }, - }, - verify: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - signature: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - data: { - tag: 'array', - type: { - tag: 'scalar', - name: 'u8', - }, - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'scalar', - name: 'bool', - }, - ], - }, - }, - }, - }, - }); -} - -// Functions diff --git a/packages/fluence-js/src/internal/_aqua/single-module-srv.ts b/packages/fluence-js/src/internal/_aqua/single-module-srv.ts deleted file mode 100644 index 9788fc75..00000000 --- a/packages/fluence-js/src/internal/_aqua/single-module-srv.ts +++ /dev/null @@ -1,137 +0,0 @@ -/** - * - * This file is auto-generated. Do not edit manually: changes may be erased. - * Generated by Aqua compiler: https://github.com/fluencelabs/aqua/. - * If you find any bugs, please write an issue on GitHub: https://github.com/fluencelabs/aqua/issues - * Aqua version: 0.7.7-362 - * - */ -import { FluencePeer } from '../..'; -import type { CallParams$$ } from '../../internal/compilerSupport/v4'; -import { registerService$$ } from '../../internal/compilerSupport/v4'; - -// Services - -export interface SrvDef { - create: ( - wasm_b64_content: string, - callParams: CallParams$$<'wasm_b64_content'>, - ) => - | { error: string | null; service_id: string | null; success: boolean } - | Promise<{ error: string | null; service_id: string | null; success: boolean }>; - list: (callParams: CallParams$$) => string[] | Promise; - remove: ( - service_id: string, - callParams: CallParams$$<'service_id'>, - ) => { error: string | null; success: boolean } | Promise<{ error: string | null; success: boolean }>; -} -export function registerSrv(service: SrvDef): void; -export function registerSrv(serviceId: string, service: SrvDef): void; -export function registerSrv(peer: FluencePeer, service: SrvDef): void; -export function registerSrv(peer: FluencePeer, serviceId: string, service: SrvDef): void; - -export function registerSrv(...args: any) { - registerService$$(args, { - defaultServiceId: 'single_module_srv', - functions: { - tag: 'labeledProduct', - fields: { - create: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - wasm_b64_content: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'ServiceCreationResult', - fields: { - error: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - service_id: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - success: { - tag: 'scalar', - name: 'bool', - }, - }, - }, - ], - }, - }, - list: { - tag: 'arrow', - domain: { - tag: 'nil', - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'array', - type: { - tag: 'scalar', - name: 'string', - }, - }, - ], - }, - }, - remove: { - tag: 'arrow', - domain: { - tag: 'labeledProduct', - fields: { - service_id: { - tag: 'scalar', - name: 'string', - }, - }, - }, - codomain: { - tag: 'unlabeledProduct', - items: [ - { - tag: 'struct', - name: 'RemoveResult', - fields: { - error: { - tag: 'option', - type: { - tag: 'scalar', - name: 'string', - }, - }, - success: { - tag: 'scalar', - name: 'bool', - }, - }, - }, - ], - }, - }, - }, - }, - }); -} - -// Functions diff --git a/packages/fluence-js/src/internal/compilerSupport/v2.ts b/packages/fluence-js/src/internal/compilerSupport/v2.ts deleted file mode 100644 index 26a8b27e..00000000 --- a/packages/fluence-js/src/internal/compilerSupport/v2.ts +++ /dev/null @@ -1,553 +0,0 @@ -/* - * Copyright 2021 Fluence Labs Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { SecurityTetraplet } from '@fluencelabs/avm'; -import { match } from 'ts-pattern'; -import { CallParams, Fluence, FluencePeer } from '../../index'; -import { CallServiceData, GenericCallServiceHandler, CallServiceResult, ResultCodes } from '../commonTypes'; -import { Particle } from '../Particle'; - -export { FluencePeer } from '../FluencePeer'; -export { CallParams } from '../commonTypes'; - -/** - * Represents the Aqua Option type - */ -type OptionalType = { - /** - * Type descriptor. Used for pattern-matching - */ - tag: 'optional'; -}; - -/** - * Represents the void type for functions and callbacks with no return value - */ -type VoidType = { - /** - * Type descriptor. Used for pattern-matching - */ - tag: 'void'; -}; - -/** - * Represents all types other than Optional, Void, Callback and MultiReturn - */ -type PrimitiveType = { - /** - * Type descriptor. Used for pattern-matching - */ - tag: 'primitive'; -}; - -/** - * Represents callbacks used in Aqua function arguments (`func` instruction) - */ -type CallbackType = { - /** - * Type descriptor. Used for pattern-matching - */ - tag: 'callback'; - - /** - * Callback definition - */ - callback: CallbackDef; -}; - -/** - * Represents the return type for functions which return multiple values - */ -type MultiReturnType = { - /** - * Type descriptor. Used for pattern-matching - */ - tag: 'multiReturn'; - - /** - * The description of types of the return values: Array of either primitive or optional types - */ - returnItems: Array; -}; - -interface ArgDef { - /** - * The name of the argument in Aqua language - */ - name: string; - - /** - * The type of the argument - */ - argType: ArgType; -} - -interface CallbackDef { - /** - * Callback argument definitions: the list of ArgDefs - */ - argDefs: Array>; - - /** - * Definition of the return type of callback - */ - returnType: ReturnType; -} - -interface FunctionBodyDef - extends CallbackDef< - // force new line - OptionalType | PrimitiveType, - VoidType | OptionalType | PrimitiveType - > { - /** - * The name of the function in Aqua language - */ - functionName: string; -} - -/** - * Definition of function (`func` instruction) generated by the Aqua compiler - */ -interface FunctionCallDef - extends CallbackDef< - OptionalType | PrimitiveType | CallbackType, - VoidType | OptionalType | PrimitiveType | MultiReturnType - > { - /** - * The name of the function in Aqua language - */ - functionName: string; - - /** - * Names of the different entities used in generated air script - */ - names: { - /** - * The name of the relay variable - */ - relay: string; - - /** - * The name of the serviceId used load variables at the beginning of the script - */ - getDataSrv: string; - - /** - * The name of serviceId is used to execute callbacks for the current particle - */ - callbackSrv: string; - - /** - * The name of the serviceId which is called to propagate return value to the generated function caller - */ - responseSrv: string; - - /** - * The name of the functionName which is called to propagate return value to the generated function caller - */ - responseFnName: string; - - /** - * The name of the serviceId which is called to report errors to the generated function caller - */ - errorHandlingSrv: string; - - /** - * The name of the functionName which is called to report errors to the generated function caller - */ - errorFnName: string; - }; -} - -/** - * Definition of service registration function (`service` instruction) generated by the Aqua compiler - */ -interface ServiceDef { - /** - * Default service id. If the service has no default id the value should be undefined - */ - defaultServiceId?: string; - - /** - * List of functions which the service consists of - */ - functions: Array; -} - -/** - * Options to configure Aqua function execution - */ -export interface FnConfig { - /** - * Sets the TTL (time to live) for particle responsible for the function execution - * If the option is not set the default TTL from FluencePeer config is used - */ - ttl?: number; -} - -/** - * Convenience function to support Aqua `func` generation backend - * The compiler only need to generate a call the function and provide the corresponding definitions and the air script - * - * @param rawFnArgs - raw arguments passed by user to the generated function - * @param def - function definition generated by the Aqua compiler - * @param script - air script with function execution logic generated by the Aqua compiler - */ -export function callFunction(rawFnArgs: Array, def: FunctionCallDef, script: string) { - const { args, peer, config } = extractFunctionArgs(rawFnArgs, def.argDefs.length); - - if (args.length !== def.argDefs.length) { - throw new Error('Incorrect number of arguments. Expecting ${def.argDefs.length}'); - } - - const promise = new Promise((resolve, reject) => { - const particle = peer.internals.createNewParticle(script, config?.ttl); - - if (particle instanceof Error) { - return reject(particle.message); - } - - for (let i = 0; i < def.argDefs.length; i++) { - const argDef = def.argDefs[i]; - const arg = args[i]; - - const [serviceId, fnName, cb] = match(argDef.argType) - // for callback arguments we are registering particle-specific callback which executes the passed function - .with({ tag: 'callback' }, (callbackDef) => { - const fn = async (req: CallServiceData): Promise => { - const args = convertArgsFromReqToUserCall(req, callbackDef.callback.argDefs); - // arg is function at this point - const result = await arg.apply(null, args); - let res; - switch (callbackDef.callback.returnType.tag) { - case 'void': - res = {}; - break; - case 'primitive': - res = result; - break; - case 'optional': - res = tsToAquaOpt(result); - break; - } - return { - retCode: ResultCodes.success, - result: res, - }; - }; - return [def.names.callbackSrv, argDef.name, fn] as const; - }) - // for optional types we are converting value to array representation in air - .with({ tag: 'optional' }, () => { - const fn = (req: CallServiceData): CallServiceResult => { - // arg is optional at this point - const res = tsToAquaOpt(arg); - return { - retCode: ResultCodes.success, - result: res, - }; - }; - return [def.names.getDataSrv, argDef.name, fn] as const; - }) - // for primitive types wre are simply passing the value - .with({ tag: 'primitive' }, () => { - // arg is primitive at this point - const fn = (req: CallServiceData): CallServiceResult => ({ - retCode: ResultCodes.success, - result: arg, - }); - return [def.names.getDataSrv, argDef.name, fn] as const; - }) - .exhaustive(); - - // registering handlers for every argument of the function - peer.internals.regHandler.forParticle(particle.id, serviceId, fnName, cb); - } - - // registering handler for function response - peer.internals.regHandler.forParticle(particle.id, def.names.responseSrv, def.names.responseFnName, (req) => { - const userFunctionReturn = match(def.returnType) - .with({ tag: 'primitive' }, () => req.args[0]) - .with({ tag: 'optional' }, () => aquaOptToTs(req.args[0])) - .with({ tag: 'void' }, () => undefined) - .with({ tag: 'multiReturn' }, (mr) => { - return mr.returnItems.map((x, index) => { - return match(x) - .with({ tag: 'optional' }, () => aquaOptToTs(req.args[index])) - .with({ tag: 'primitive' }, () => req.args[index]) - .exhaustive(); - }); - }) - .exhaustive(); - - setTimeout(() => { - resolve(userFunctionReturn); - }, 0); - - return { - retCode: ResultCodes.success, - result: {}, - }; - }); - - // registering handler for injecting relay variable - peer.internals.regHandler.forParticle(particle.id, def.names.getDataSrv, def.names.relay, (req) => { - return { - retCode: ResultCodes.success, - result: peer.getStatus().relayPeerId, - }; - }); - - // registering handler for error reporting - peer.internals.regHandler.forParticle(particle.id, def.names.errorHandlingSrv, def.names.errorFnName, (req) => { - const [err, _] = req.args; - setTimeout(() => { - reject(err); - }, 0); - return { - retCode: ResultCodes.success, - result: {}, - }; - }); - - peer.internals.initiateParticle(particle, (stage) => { - // If function is void, then it's completed when one of the two conditions is met: - // 1. The particle is sent to the network (state 'sent') - // 2. All CallRequests are executed, e.g., all variable loading and local function calls are completed (state 'localWorkDone') - if (def.returnType.tag === 'void' && (stage.stage === 'sent' || stage.stage === 'localWorkDone')) { - resolve(undefined); - } - - if (stage.stage === 'sendingError') { - reject(`Could not send particle for ${def.functionName}: not connected (particle id: ${particle.id})`); - } - - if (stage.stage === 'expired') { - reject(`Request timed out after ${particle.ttl} for ${def.functionName} (particle id: ${particle.id})`); - } - - if (stage.stage === 'interpreterError') { - reject( - `Script interpretation failed for ${def.functionName}: ${stage.errorMessage} (particle id: ${particle.id})`, - ); - } - }); - }); - - return promise; -} - -/** - * Convenience function to support Aqua `service` generation backend - * The compiler only need to generate a call the function and provide the corresponding definitions and the air script - * - * @param args - raw arguments passed by user to the generated function - * @param def - service definition generated by the Aqua compiler - */ -export function registerService(args: any[], def: ServiceDef) { - const { peer, service, serviceId } = extractRegisterServiceArgs(args, def.defaultServiceId); - - if (!peer.getStatus().isInitialized) { - throw new Error( - 'Could not register the service because the peer is not initialized. Are you passing the wrong peer to the register function?', - ); - } - - // Checking for missing keys - const requiredKeys = def.functions.map((x) => x.functionName); - const incorrectServiceDefinitions = requiredKeys.filter((f) => !(f in service)); - if (!!incorrectServiceDefinitions.length) { - throw new Error( - `Error registering service ${serviceId}: missing functions: ` + - incorrectServiceDefinitions.map((d) => "'" + d + "'").join(', '), - ); - } - - for (let singleFunction of def.functions) { - // The function has type of (arg1, arg2, arg3, ... , callParams) => CallServiceResultType | void - // Account for the fact that user service might be defined as a class - .bind(...) - const userDefinedHandler = service[singleFunction.functionName].bind(service); - - peer.internals.regHandler.common(serviceId, singleFunction.functionName, async (req) => { - const args = convertArgsFromReqToUserCall(req, singleFunction.argDefs); - const rawResult = await userDefinedHandler.apply(null, args); - const result = match(singleFunction.returnType) - .with({ tag: 'primitive' }, () => rawResult) - .with({ tag: 'optional' }, () => tsToAquaOpt(rawResult)) - .with({ tag: 'void' }, () => ({})) - .exhaustive(); - - return { - retCode: ResultCodes.success, - result: result, - }; - }); - } -} - -/** - * Converts argument from ts representation (value | null) to air representation ([value] | []) - */ -const tsToAquaOpt = (arg: unknown | null): any => { - return arg === null || arg === undefined ? [] : [arg]; -}; - -/** - * Converts argument from air representation ([value] | []) to ts representation (value | null) - */ -const aquaOptToTs = (opt: Array) => { - return opt.length === 0 ? null : opt[0]; -}; - -/** - * Converts raw arguments which may contain optional types from air representation to ts representation - */ -const convertArgsFromReqToUserCall = (req: CallServiceData, argDefs: Array>) => { - if (req.args.length !== argDefs.length) { - throwForReq(req, `incorrect number of arguments, expected ${argDefs.length}`); - } - - const argsAccountedForOptional = req.args.map((x, index) => { - return match(argDefs[index].argType) - .with({ tag: 'optional' }, () => aquaOptToTs(x)) - .with({ tag: 'primitive' }, () => x) - .exhaustive(); - }); - - return [...argsAccountedForOptional, extractCallParams(req, argDefs)]; -}; - -/** - * Extracts Call Params from CallServiceData and forms tetraplets according to generated function definition - */ -const extractCallParams = ( - req: CallServiceData, - argDefs: Array>, -): CallParams => { - let tetraplets: { [key in string]: SecurityTetraplet[] } = {}; - for (let i = 0; i < req.args.length; i++) { - if (argDefs[i]) { - tetraplets[argDefs[i].name] = req.tetraplets[i]; - } - } - - const callParams = { - ...req.particleContext, - tetraplets, - }; - - return callParams; -}; - -/** - * Arguments could be passed in one these configurations: - * [...actualArgs] - * [peer, ...actualArgs] - * [...actualArgs, config] - * [peer, ...actualArgs, config] - * - * This function select the appropriate configuration and returns - * arguments in a structured way of: { peer, config, args } - */ -const extractFunctionArgs = ( - args: any[], - numberOfExpectedArgs: number, -): { - peer: FluencePeer; - config?: FnConfig; - args: any[]; -} => { - let peer: FluencePeer; - let structuredArgs: any[]; - let config: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - structuredArgs = args.slice(1, numberOfExpectedArgs + 1); - config = args[numberOfExpectedArgs + 1]; - } else { - peer = Fluence.getPeer(); - structuredArgs = args.slice(0, numberOfExpectedArgs); - config = args[numberOfExpectedArgs]; - } - - return { - peer: peer, - config: config, - args: structuredArgs, - }; -}; - -/** - * Arguments could be passed in one these configurations: - * [serviceObject] - * [peer, serviceObject] - * [defaultId, serviceObject] - * [peer, defaultId, serviceObject] - * - * Where serviceObject is the raw object with function definitions passed by user - * - * This function select the appropriate configuration and returns - * arguments in a structured way of: { peer, serviceId, service } - */ -const extractRegisterServiceArgs = ( - args: any[], - defaultServiceId?: string, -): { peer: FluencePeer; serviceId: string; service: any } => { - let peer: FluencePeer; - let serviceId: any; - let service: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - } else { - peer = Fluence.getPeer(); - } - - if (typeof args[0] === 'string') { - serviceId = args[0]; - } else if (typeof args[1] === 'string') { - serviceId = args[1]; - } else { - serviceId = defaultServiceId; - } - - // Figuring out which overload is the service. - // If the first argument is not Fluence Peer and it is an object, then it can only be the service def - // If the first argument is peer, we are checking further. The second argument might either be - // an object, that it must be the service object - // or a string, which is the service id. In that case the service is the third argument - if (!FluencePeer.isInstance(args[0]) && typeof args[0] === 'object') { - service = args[0]; - } else if (typeof args[1] === 'object') { - service = args[1]; - } else { - service = args[2]; - } - - return { - peer: peer, - serviceId: serviceId, - service: service, - }; -}; - -function throwForReq(req: CallServiceData, message: string) { - throw new Error(`${message}, serviceId='${req.serviceId}' fnName='${req.fnName}' args='${req.args}'`); -} - -export const forTests = { - extractFunctionArgs, -}; diff --git a/packages/fluence-js/src/internal/compilerSupport/v3.ts b/packages/fluence-js/src/internal/compilerSupport/v3.ts deleted file mode 100644 index e743584f..00000000 --- a/packages/fluence-js/src/internal/compilerSupport/v3.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2022 Fluence Labs Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export { FluencePeer } from '../FluencePeer'; -export { CallParams } from '../commonTypes'; -export * from './v3impl/interface'; -export * from './v3impl/callFunction'; -export * from './v3impl/registerService'; diff --git a/packages/fluence-js/src/internal/compilerSupport/v3impl/registerService.ts b/packages/fluence-js/src/internal/compilerSupport/v3impl/registerService.ts deleted file mode 100644 index 39deb88f..00000000 --- a/packages/fluence-js/src/internal/compilerSupport/v3impl/registerService.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { FluencePeer } from '../../FluencePeer'; -import { Fluence } from '../../../index'; -import { ServiceDef } from './interface'; -import { registerGlobalService, userHandlerService } from './services'; - -/** - * Convenience function to support Aqua `service` generation backend - * The compiler only need to generate a call the function and provide the corresponding definitions and the air script - * - * @param args - raw arguments passed by user to the generated function - * @param def - service definition generated by the Aqua compiler - */ -export function registerService(args: any[], def: ServiceDef) { - const { peer, service, serviceId } = extractArgs(args, def.defaultServiceId); - - if (!peer.getStatus().isInitialized) { - throw new Error( - 'Could not register the service because the peer is not initialized. Are you passing the wrong peer to the register function?', - ); - } - - // Checking for missing keys - const requiredKeys = def.functions.tag === 'nil' ? [] : Object.keys(def.functions.fields); - const incorrectServiceDefinitions = requiredKeys.filter((f) => !(f in service)); - if (!!incorrectServiceDefinitions.length) { - throw new Error( - `Error registering service ${serviceId}: missing functions: ` + - incorrectServiceDefinitions.map((d) => "'" + d + "'").join(', '), - ); - } - - const singleFunctions = def.functions.tag === 'nil' ? [] : Object.entries(def.functions.fields); - for (let singleFunction of singleFunctions) { - let [name, type] = singleFunction; - // The function has type of (arg1, arg2, arg3, ... , callParams) => CallServiceResultType | void - // Account for the fact that user service might be defined as a class - .bind(...) - const userDefinedHandler = service[name].bind(service); - - const serviceDescription = userHandlerService(serviceId, singleFunction, userDefinedHandler); - registerGlobalService(peer, serviceDescription); - } -} - -/** - * Arguments could be passed in one these configurations: - * [serviceObject] - * [peer, serviceObject] - * [defaultId, serviceObject] - * [peer, defaultId, serviceObject] - * - * Where serviceObject is the raw object with function definitions passed by user - * - * This function select the appropriate configuration and returns - * arguments in a structured way of: { peer, serviceId, service } - */ -const extractArgs = ( - args: any[], - defaultServiceId?: string, -): { peer: FluencePeer; serviceId: string; service: any } => { - let peer: FluencePeer; - let serviceId: any; - let service: any; - if (FluencePeer.isInstance(args[0])) { - peer = args[0]; - } else { - peer = Fluence.getPeer(); - } - - if (typeof args[0] === 'string') { - serviceId = args[0]; - } else if (typeof args[1] === 'string') { - serviceId = args[1]; - } else { - serviceId = defaultServiceId; - } - - // Figuring out which overload is the service. - // If the first argument is not Fluence Peer and it is an object, then it can only be the service def - // If the first argument is peer, we are checking further. The second argument might either be - // an object, that it must be the service object - // or a string, which is the service id. In that case the service is the third argument - if (!FluencePeer.isInstance(args[0]) && typeof args[0] === 'object') { - service = args[0]; - } else if (typeof args[1] === 'object') { - service = args[1]; - } else { - service = args[2]; - } - - return { - peer: peer, - serviceId: serviceId, - service: service, - }; -}; diff --git a/packages/fluence-js/src/services.ts b/packages/fluence-js/src/services.ts deleted file mode 100644 index 74101cd0..00000000 --- a/packages/fluence-js/src/services.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './internal/builtins/Sig'; -export { registerSig } from './internal/_aqua/services'; diff --git a/packages/fluence-js/tsconfig.json b/packages/fluence-js/tsconfig.json deleted file mode 100644 index 0d2020f2..00000000 --- a/packages/fluence-js/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "outDir": "./dist/", - "baseUrl": ".", - "downlevelIteration": true, - "sourceMap": true, - "inlineSources": true, - "allowSyntheticDefaultImports": true, - "resolveJsonModule": true, - "target": "ES5", - "module": "commonjs", - "moduleResolution": "node", - "declaration": true, - "esModuleInterop": true, - "declarationMap": true, - "strict": true, - "skipLibCheck": true - }, - "exclude": ["node_modules", "dist", "bundle"], - "include": ["src/**/*"] -} diff --git a/packages/fluence-keypair/.npmignore b/packages/fluence-keypair/.npmignore deleted file mode 100644 index 1354879a..00000000 --- a/packages/fluence-keypair/.npmignore +++ /dev/null @@ -1,12 +0,0 @@ -.idea -.gitignore -node_modules -types - -src/ - -tsconfig.json -webpack.config.js - -bundle -pkg \ No newline at end of file diff --git a/packages/fluence-keypair/.prettierrc.js b/packages/fluence-keypair/.prettierrc.js deleted file mode 100644 index 4e5ea887..00000000 --- a/packages/fluence-keypair/.prettierrc.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - semi: true, - trailingComma: "all", - singleQuote: true, - printWidth: 120, - tabWidth: 4, - useTabs: false -}; diff --git a/packages/fluence-keypair/CONTRIBUTING.md b/packages/fluence-keypair/CONTRIBUTING.md deleted file mode 100644 index 0e3b264d..00000000 --- a/packages/fluence-keypair/CONTRIBUTING.md +++ /dev/null @@ -1,13 +0,0 @@ -## Contribute Code - -You are welcome to contribute to Fluence. - -Things you need to know: - -1. You need to **agree to the Contributors License Agreement**. This is a common practice in all major Open Source projects. At the current moment we are unable to accept contributions made on behalf of a company. Only individual contributions will be accepted. -2. **Not all proposed contributions can be accepted**. Some features may e.g. just fit a third-party add-on better. The contribution must fit the overall direction of Fluence and really improve it. The more effort you invest, the better you should clarify in advance whether the contribution fits: the best way would be to just open an issue to discuss the contribution you plan to make. - -### Contributor License Agreement - -When you contribute, you have to be aware that your contribution is covered by **Apache License 2.0**, but might relicensed under few other software licenses mentioned in the **Contributor License Agreement**. -In particular you need to agree to the [Contributor License Agreement](https://gist.github.com/fluencelabs-org/3f4cbb3cc14c1c0fb9ad99d8f7316ed7). If you agree to its content, you simply have to click on the link posted by the CLA assistant as a comment to the pull request. Click it to check the CLA, then accept it on the following screen if you agree to it. CLA assistant will save this decision for upcoming contributions and will notify you if there is any change to the CLA in the meantime. diff --git a/packages/fluence-keypair/src/index.ts b/packages/fluence-keypair/src/index.ts deleted file mode 100644 index 0be07d51..00000000 --- a/packages/fluence-keypair/src/index.ts +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2020 Fluence Labs Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import * as PeerId from 'peer-id'; -import { keys } from 'libp2p-crypto'; -import { toUint8Array } from 'js-base64'; - -export class KeyPair { - /** - * Key pair in libp2p format. Used for backward compatibility with the current FluencePeer implementation - */ - public Libp2pPeerId: PeerId; - - constructor(libp2pPeerId: PeerId) { - this.Libp2pPeerId = libp2pPeerId; - } - - /** - * Generates new KeyPair from ed25519 private key represented as a 32 byte array - * @param key - Any sequence of 32 bytes - * @returns - Promise with the created KeyPair - */ - static async fromEd25519SK(arr: Uint8Array): Promise { - // generateKeyPairFromSeed takes seed and copies it to private key as is - const privateKey = await keys.generateKeyPairFromSeed('Ed25519', arr, 256); - const lib2p2Pid = await PeerId.createFromPrivKey(privateKey.bytes); - return new KeyPair(lib2p2Pid); - } - - /** - * Generates new KeyPair with a random secret key - * @returns - Promise with the created KeyPair - */ - static async randomEd25519(): Promise { - const lib2p2Pid = await PeerId.create({ keyType: 'Ed25519' }); - return new KeyPair(lib2p2Pid); - } - - getPeerId(): string { - return this.Libp2pPeerId.toB58String(); - } - - /** - * @returns 32 byte private key - */ - toEd25519PrivateKey(): Uint8Array { - return this.Libp2pPeerId.privKey.marshal().subarray(0, 32); - } - - signBytes(data: Uint8Array): Promise { - return this.Libp2pPeerId.privKey.sign(data); - } - - verify(data: Uint8Array, signature: Uint8Array): Promise { - return this.Libp2pPeerId.privKey.public.verify(data, signature); - } -} - -export const keyPairFromBase64Sk = (sk: string): Promise => { - const arr = toUint8Array(sk); - return KeyPair.fromEd25519SK(arr); -}; diff --git a/packages/fluence-keypair/tsconfig.json b/packages/fluence-keypair/tsconfig.json deleted file mode 100644 index e260f500..00000000 --- a/packages/fluence-keypair/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "outDir": "./dist/", - "lib": ["ES2015"], - "target": "ES5", - "sourceMap": true, - "declaration": true, - "module": "commonjs", - }, - "exclude": ["node_modules", "dist"], - "include": ["src/**/*"] -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8a96f96e..f4c8dd8b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2,152 +2,302 @@ lockfileVersion: 5.4 importers: - packages/@tests/smoke: + .: specifiers: - '@fluencelabs/fluence': workspace:* - '@types/node': ^18.7.13 - ts-node: ^10.9.1 - typescript: ^4.6.4 - dependencies: - '@fluencelabs/fluence': link:../../fluence-js - ts-node: 10.9.1_leegklmkepybzc4ng4qys4ftou - devDependencies: - '@types/node': 18.7.14 - typescript: 4.7.4 - - packages/fluence-connection: - specifiers: - '@chainsafe/libp2p-noise': ^4.1.1 - '@fluencelabs/interfaces': workspace:0.1.0 - browser-or-node: 2.0.0 - buffer: ^6.0.3 - it-length-prefixed: 5.0.3 - it-pipe: 1.1.0 - libp2p: 0.36.2 - libp2p-interfaces: ^4.0.6 - libp2p-mplex: 0.10.7 - libp2p-websockets: 0.16.2 - loglevel: 1.8.1 - multiaddr: 10.0.1 - peer-id: 0.16.0 - typescript: ^4.6.4 - dependencies: - '@chainsafe/libp2p-noise': 4.1.2 - '@fluencelabs/interfaces': link:../fluence-interfaces - browser-or-node: 2.0.0 - buffer: 6.0.3 - it-length-prefixed: 5.0.3 - it-pipe: 1.1.0 - libp2p: 0.36.2 - libp2p-interfaces: 4.0.6 - libp2p-mplex: 0.10.7 - libp2p-websockets: 0.16.2 - loglevel: 1.8.1 - multiaddr: 10.0.1 - peer-id: 0.16.0 - devDependencies: - typescript: 4.7.4 - - packages/fluence-interfaces: - specifiers: - typescript: ^4.6.4 - devDependencies: - typescript: 4.7.4 - - packages/fluence-js: - specifiers: - '@fluencelabs/aqua': 0.7.7-362 + '@fluencelabs/aqua': 0.9.1-374 '@fluencelabs/aqua-lib': 0.6.0 + '@types/node': 16.11.59 + http-server: 14.1.1 + ts-node: 10.9.1 + typescript: '4.7' + devDependencies: + '@fluencelabs/aqua': 0.9.1-374_jaxubti5gf66xc76fsqhxmuwn4 + '@fluencelabs/aqua-lib': 0.6.0 + '@types/node': 16.11.59 + http-server: 14.1.1 + ts-node: 10.9.1_hjximzan7wcxvjcbhhc47yzr2e + typescript: 4.7.4 + + packages/@tests/aqua: + specifiers: + '@fluencelabs/aqua': 0.9.4 + '@fluencelabs/fluence': workspace:0.60.0 + '@fluencelabs/fluence-network-environment': 1.0.13 + '@fluencelabs/registry': 0.7.0 + base64-js: 1.5.1 + dependencies: + '@fluencelabs/fluence': link:../../client/api + '@fluencelabs/fluence-network-environment': 1.0.13 + base64-js: 1.5.1 + devDependencies: + '@fluencelabs/aqua': 0.9.4_sxyfz5frysr7cnkewysdljfvwu + '@fluencelabs/registry': 0.7.0 + + packages/@tests/frameworks/cra-ts: + specifiers: + '@fluencelabs/fluence': workspace:0.60.0 + '@test/aqua_for_test': workspace:* + '@testing-library/jest-dom': 5.16.5 + '@testing-library/react': 13.4.0 + '@testing-library/user-event': 13.5.0 + '@types/jest': 27.5.2 + '@types/node': 16.18.12 + '@types/react': 18.0.27 + '@types/react-dom': 18.0.10 + react: ^18.2.0 + react-dom: ^18.2.0 + react-scripts: 5.0.1 + typescript: 4.9.5 + web-vitals: 2.1.4 + dependencies: + '@fluencelabs/fluence': link:../../../client/api + '@test/aqua_for_test': link:../../aqua + '@testing-library/jest-dom': 5.16.5 + '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y + '@testing-library/user-event': 13.5.0_yxlyej73nftwmh2fiao7paxmlm + '@types/jest': 27.5.2 + '@types/node': 16.18.12 + '@types/react': 18.0.27 + '@types/react-dom': 18.0.10 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-scripts: 5.0.1_72im5qx3m2npzev2b5222y6sne + typescript: 4.9.5 + web-vitals: 2.1.4 + + packages/@tests/smoke_node: + specifiers: + '@fluencelabs/fluence': workspace:0.60.0 + '@fluencelabs/js-client.node': 0.1.0 + '@test/aqua_for_test': workspace:* + dependencies: + '@fluencelabs/fluence': link:../../client/api + '@fluencelabs/js-client.node': link:../../client/js-client.node + '@test/aqua_for_test': link:../aqua + + packages/@tests/smoke_web: + specifiers: + '@fluencelabs/js-client.web.standalone': workspace:* + http-server: 14.1.1 + devDependencies: + '@fluencelabs/js-client.web.standalone': link:../../client/js-client.web.standalone + http-server: 14.1.1 + + packages/client/api: + specifiers: + '@fluencelabs/interfaces': 0.5.0 + dependencies: + '@fluencelabs/interfaces': link:../../core/interfaces + + packages/client/js-client.node: + specifiers: '@fluencelabs/avm': 0.35.3 - '@fluencelabs/connection': workspace:0.2.0 - '@fluencelabs/fluence-network-environment': ^1.0.13 - '@fluencelabs/interfaces': workspace:0.1.0 - '@fluencelabs/keypair': workspace:0.2.0 - '@fluencelabs/marine-js': 0.3.37 - '@types/bs58': ^4.0.1 - '@types/jest': ^27.5.1 - '@types/platform': ^1.3.4 - '@types/uuid': ^8.3.4 - async: 3.2.4 - base64-js: ^1.5.1 - browser-or-node: 2.0.0 - bs58: 5.0.0 - buffer: ^6.0.3 - cids: 1.1.9 - jest: ^28.1.0 - jest-each: ^28.1.3 - js-base64: ^3.7.2 - loglevel: 1.8.1 - multiaddr: 10.0.1 - multiformats: 9.9.0 - peer-id: 0.16.0 - platform: ^1.3.6 - rxjs: ^7.5.5 - ts-jest: ^28.0.2 - ts-pattern: 3.3.3 - typedoc: ^0.22.15 - typescript: ^4.6.4 - uuid: 8.3.2 + '@fluencelabs/js-peer': 0.5.0 + '@fluencelabs/marine-js': 0.3.42 + '@types/platform': 1.3.4 + platform: 1.3.6 dependencies: '@fluencelabs/avm': 0.35.3 - '@fluencelabs/connection': link:../fluence-connection - '@fluencelabs/interfaces': link:../fluence-interfaces - '@fluencelabs/keypair': link:../fluence-keypair - '@fluencelabs/marine-js': 0.3.37_rl5xm3oiydas7snsul2pa47p2m + '@fluencelabs/js-peer': link:../../core/js-peer + '@fluencelabs/marine-js': 0.3.42 + platform: 1.3.6 + devDependencies: + '@types/platform': 1.3.4 + + packages/client/js-client.web.standalone: + specifiers: + '@fluencelabs/avm': 0.35.3 + '@fluencelabs/js-peer': 0.5.0 + '@fluencelabs/marine-js': 0.3.42 + '@rollup/plugin-inject': 5.0.3 + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + buffer: 6.0.3 + jest: 28.1.0 + js-base64: 3.7.2 + process: 0.11.10 + ts-jest: 28.0.2 + vite: 4.0.4 + vite-plugin-replace: 0.1.1 + vite-tsconfig-paths: 4.0.3 + dependencies: + '@fluencelabs/js-peer': link:../../core/js-peer + buffer: 6.0.3 + process: 0.11.10 + devDependencies: + '@fluencelabs/avm': 0.35.3 + '@fluencelabs/marine-js': 0.3.42 + '@rollup/plugin-inject': 5.0.3 + '@types/jest': 28.1.0 + '@types/node': 16.11.59 + jest: 28.1.0_@types+node@16.11.59 + js-base64: 3.7.2 + ts-jest: 28.0.2_m4pn7vsromlf5ffrouypoapnnq + vite: 4.0.4_@types+node@16.11.59 + vite-plugin-replace: 0.1.1_vite@4.0.4 + vite-tsconfig-paths: 4.0.3_egung5nfepmolqa7uavvqho3gq + + packages/client/tools: + specifiers: + '@types/node': 16.11.59 + devDependencies: + '@types/node': 16.11.59 + + packages/core/interfaces: + specifiers: + '@fluencelabs/avm': 0.35.3 + '@fluencelabs/marine-js': 0.3.44 + '@multiformats/multiaddr': 11.3.0 + devDependencies: + '@fluencelabs/avm': 0.35.3 + '@fluencelabs/marine-js': 0.3.44 + '@multiformats/multiaddr': 11.3.0 + + packages/core/js-peer: + specifiers: + '@chainsafe/libp2p-noise': 11.0.0 + '@fluencelabs/aqua': 0.7.7-362 + '@fluencelabs/aqua-api': 0.9.1-373 + '@fluencelabs/aqua-lib': 0.6.0 + '@fluencelabs/avm': 0.31.10 + '@fluencelabs/fluence-network-environment': 1.0.13 + '@fluencelabs/interfaces': 0.5.0 + '@fluencelabs/marine-js': 0.3.44 + '@libp2p/crypto': 1.0.8 + '@libp2p/interface-connection': 3.0.8 + '@libp2p/interface-keys': 1.0.7 + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interfaces': 3.3.1 + '@libp2p/mplex': 7.1.1 + '@libp2p/peer-id': 2.0.1 + '@libp2p/peer-id-factory': 2.0.1 + '@libp2p/websockets': 5.0.3 + '@multiformats/multiaddr': 11.3.0 + '@types/bs58': 4.0.1 + '@types/jest': 29.4.0 + '@types/uuid': 8.3.2 async: 3.2.4 - base64-js: 1.5.1 - browser-or-node: 2.0.0 bs58: 5.0.0 buffer: 6.0.3 - cids: 1.1.9 + it-length-prefixed: 8.0.4 + it-map: 2.0.0 + it-pipe: 2.0.5 + jest: 29.4.1 + js-base64: 3.7.2 + libp2p: 0.42.2 loglevel: 1.8.1 - multiformats: 9.9.0 - peer-id: 0.16.0 - platform: 1.3.6 - rxjs: 7.5.6 + multiformats: 11.0.1 + rxjs: 7.5.5 + threads: 1.7.0 + ts-jest: 29.0.5 ts-pattern: 3.3.3 + uint8arrays: 4.0.3 + uuid: 8.3.2 + dependencies: + '@chainsafe/libp2p-noise': 11.0.0 + '@fluencelabs/avm': 0.31.10 + '@fluencelabs/interfaces': link:../interfaces + '@fluencelabs/marine-js': 0.3.44 + '@libp2p/crypto': 1.0.8_uint8arraylist@2.4.3 + '@libp2p/interface-connection': 3.0.8 + '@libp2p/interface-keys': 1.0.7 + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interfaces': 3.3.1 + '@libp2p/mplex': 7.1.1 + '@libp2p/peer-id': 2.0.1 + '@libp2p/peer-id-factory': 2.0.1 + '@libp2p/websockets': 5.0.3 + '@multiformats/multiaddr': 11.3.0 + async: 3.2.4 + bs58: 5.0.0 + buffer: 6.0.3 + it-length-prefixed: 8.0.4 + it-map: 2.0.0 + it-pipe: 2.0.5 + js-base64: 3.7.2 + libp2p: 0.42.2 + loglevel: 1.8.1 + multiformats: 11.0.1 + rxjs: 7.5.5 + threads: 1.7.0 + ts-pattern: 3.3.3 + uint8arrays: 4.0.3 uuid: 8.3.2 devDependencies: - '@fluencelabs/aqua': 0.7.7-362_rl5xm3oiydas7snsul2pa47p2m + '@fluencelabs/aqua': 0.7.7-362_4ybkoodcah37urerzfcwvnjsoe + '@fluencelabs/aqua-api': 0.9.1-373 '@fluencelabs/aqua-lib': 0.6.0 '@fluencelabs/fluence-network-environment': 1.0.13 '@types/bs58': 4.0.1 - '@types/jest': 27.5.2 - '@types/platform': 1.3.4 - '@types/uuid': 8.3.4 - jest: 28.1.3 - jest-each: 28.1.3 - js-base64: 3.7.2 - multiaddr: 10.0.1 - ts-jest: 28.0.8_wnrrwh7x4gcdskobbfqnvknnyi - typedoc: 0.22.18_typescript@4.7.4 - typescript: 4.7.4 - - packages/fluence-keypair: - specifiers: - js-base64: ^3.7.2 - libp2p-crypto: 0.21.2 - peer-id: 0.16.0 - typescript: ^4.6.4 - dependencies: - js-base64: 3.7.2 - libp2p-crypto: 0.21.2 - peer-id: 0.16.0 - devDependencies: - typescript: 4.7.4 + '@types/jest': 29.4.0 + '@types/uuid': 8.3.2 + jest: 29.4.1 + ts-jest: 29.0.5_ecv55cdbauq6znr7ci2lzguwra packages: + /@achingbrain/ip-address/8.1.0: + resolution: {integrity: sha512-Zus4vMKVRDm+R1o0QJNhD0PD/8qRGO3Zx8YPsFG5lANt5utVtGg3iHVGBSAF80TfQmhi8rP+Kg/OigdxY0BXHw==} + engines: {node: '>= 12'} + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.2 + dev: false + + /@achingbrain/nat-port-mapper/1.0.7: + resolution: {integrity: sha512-P8Z8iMZBQCsN7q3XoVoJAX3CGPUTbGTh1XBU8JytCW3hBmSk594l8YvdrtY5NVexVHSwLeiXnDsP4d10NJHaeg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@achingbrain/ssdp': 4.0.1 + '@libp2p/logger': 2.0.5 + default-gateway: 6.0.3 + err-code: 3.0.1 + it-first: 1.0.7 + p-defer: 4.0.0 + p-timeout: 5.1.0 + xml2js: 0.4.23 + transitivePeerDependencies: + - supports-color + dev: false + /@achingbrain/node-fetch/2.6.7: resolution: {integrity: sha512-iTASGs+HTFK5E4ZqcMsHmeJ4zodyq8L38lZV33jwqcBJYoUt3HjN4+ot+O9/0b+ke8ddE7UgOtVuZN/OkV19/g==} engines: {node: 4.x || >=6.0.0} + dev: true + + /@achingbrain/ssdp/4.0.1: + resolution: {integrity: sha512-z/CkfFI0Ksrpo8E+lu2rKahlE1KJHUn8X8ihQj2Jg6CEL+oHYGCNfttOES0+VnV7htuog70c8bYNHYhlmmqxBQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + event-iterator: 2.0.0 + freeport-promise: 2.0.0 + merge-options: 3.0.4 + uuid: 8.3.2 + xml2js: 0.4.23 + dev: false + + /@adobe/css-tools/4.1.0: + resolution: {integrity: sha512-mMVJ/j/GbZ/De4ZHWbQAQO1J6iVnjtZLc9WEdkUQb8S/Bu2cAF2bETXUgMAdvMG3/ngtKmcNBe+Zms9bg6jnQQ==} + dev: false /@ampproject/remapping/2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/trace-mapping': 0.3.17 + + /@apideck/better-ajv-errors/0.3.6_ajv@8.12.0: + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + dependencies: + ajv: 8.12.0 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + dev: false /@babel/code-frame/7.18.6: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} @@ -155,125 +305,270 @@ packages: dependencies: '@babel/highlight': 7.18.6 - /@babel/compat-data/7.18.13: - resolution: {integrity: sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==} + /@babel/compat-data/7.20.14: + resolution: {integrity: sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==} engines: {node: '>=6.9.0'} - /@babel/core/7.18.13: - resolution: {integrity: sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==} + /@babel/core/7.20.12: + resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.18.13 - '@babel/helper-compilation-targets': 7.18.9_@babel+core@7.18.13 - '@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.8.0 + '@babel/generator': 7.20.14 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-module-transforms': 7.20.11 + '@babel/helpers': 7.20.13 + '@babel/parser': 7.20.15 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 + convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 - json5: 2.2.1 + json5: 2.2.3 semver: 6.3.0 transitivePeerDependencies: - supports-color - /@babel/generator/7.18.13: - resolution: {integrity: sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==} + /@babel/eslint-parser/7.19.1_ydmbqfus77qykiqxhcwsorsqbq: + resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': '>=7.11.0' + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@babel/core': 7.20.12 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.34.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.0 + dev: false + + /@babel/generator/7.20.14: + resolution: {integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 - /@babel/helper-compilation-targets/7.18.9_@babel+core@7.18.13: - resolution: {integrity: sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==} + /@babel/helper-annotate-as-pure/7.18.6: + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.7 + dev: false + + /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: + resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-explode-assignable-expression': 7.18.6 + '@babel/types': 7.20.7 + dev: false + + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.18.13 - '@babel/core': 7.18.13 + '@babel/compat-data': 7.20.14 + '@babel/core': 7.20.12 '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.3 + browserslist: 4.21.5 + lru-cache: 5.1.1 semver: 6.3.0 + /@babel/helper-create-class-features-plugin/7.20.12_@babel+core@7.20.12: + resolution: {integrity: sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-member-expression-to-functions': 7.20.7 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.20.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-split-export-declaration': 7.18.6 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-create-regexp-features-plugin/7.20.5_@babel+core@7.20.12: + resolution: {integrity: sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.18.6 + regexpu-core: 5.3.0 + dev: false + + /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.12: + resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/helper-environment-visitor/7.18.9: resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} engines: {node: '>=6.9.0'} - /@babel/helper-function-name/7.18.9: - resolution: {integrity: sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==} + /@babel/helper-explode-assignable-expression/7.18.6: + resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 + dev: false + + /@babel/helper-function-name/7.19.0: + resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.20.7 + '@babel/types': 7.20.7 /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 + + /@babel/helper-member-expression-to-functions/7.20.7: + resolution: {integrity: sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.7 + dev: false /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 - /@babel/helper-module-transforms/7.18.9: - resolution: {integrity: sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==} + /@babel/helper-module-transforms/7.20.11: + resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.18.6 + '@babel/helper-simple-access': 7.20.2 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.18.6 - '@babel/template': 7.18.10 - '@babel/traverse': 7.18.13 - '@babel/types': 7.18.13 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color - /@babel/helper-plugin-utils/7.18.9: - resolution: {integrity: sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==} - engines: {node: '>=6.9.0'} - - /@babel/helper-simple-access/7.18.6: - resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==} + /@babel/helper-optimise-call-expression/7.18.6: + resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 + dev: false + + /@babel/helper-plugin-utils/7.20.2: + resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.12: + resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-wrap-function': 7.20.5 + '@babel/types': 7.20.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-replace-supers/7.20.7: + resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-member-expression-to-functions': 7.20.7 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-simple-access/7.20.2: + resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.7 + + /@babel/helper-skip-transparent-expression-wrappers/7.20.0: + resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.7 + dev: false /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 - /@babel/helper-string-parser/7.18.10: - resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier/7.18.6: - resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} + /@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} /@babel/helper-validator-option/7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} engines: {node: '>=6.9.0'} - /@babel/helpers/7.18.9: - resolution: {integrity: sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==} + /@babel/helper-wrap-function/7.20.5: + resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/traverse': 7.18.13 - '@babel/types': 7.18.13 + '@babel/helper-function-name': 7.19.0 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helpers/7.20.13: + resolution: {integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -281,158 +576,1085 @@ packages: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.18.13: - resolution: {integrity: sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==} + /@babel/parser/7.20.15: + resolution: {integrity: sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==} engines: {node: '>=6.0.0'} + hasBin: true dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.18.13: + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 + dev: false + + /@babel/plugin-proposal-async-generator-functions/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-class-static-block/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-decorators/7.20.13_@babel+core@7.20.12: + resolution: {integrity: sha512-7T6BKHa9Cpd7lCueHBBzP0nkXNina+h5giOZw+a8ZpMfPFY19VjJAjIxyFHuWkhCWgL6QMqRiY/wB1fLXzm6Mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-replace-supers': 7.20.7 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/plugin-syntax-decorators': 7.19.0_@babel+core@7.20.12 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 + dev: false + + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.12: + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 + dev: false + + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 + dev: false + + /@babel/plugin-proposal-logical-assignment-operators/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 + dev: false + + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 + dev: false + + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 + dev: false + + /@babel/plugin-proposal-object-rest-spread/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.20.14 + '@babel/core': 7.20.12 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.20.12 + dev: false + + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 + dev: false + + /@babel/plugin-proposal-optional-chaining/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 + dev: false + + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-private-property-in-object/7.20.5_@babel+core@7.20.12: + resolution: {integrity: sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.12: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.18.13: + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.18.13: + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.12: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.18.13: + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.12: + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-decorators/7.19.0_@babel+core@7.20.12: + resolution: {integrity: sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.12: + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.12: + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.12: + resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.12: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.18.13: + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.18.13: + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.12: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.18.13: + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.18.13: + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.12: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.18.13: + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.18.13: + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.18.13: + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.18.13: + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.12: + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.12: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/plugin-syntax-typescript/7.18.6_@babel+core@7.18.13: - resolution: {integrity: sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==} + /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.12: + resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.18.13 - '@babel/helper-plugin-utils': 7.18.9 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 - /@babel/template/7.18.10: - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + /@babel/plugin-transform-arrow-functions/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.18.13 - '@babel/types': 7.18.13 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false - /@babel/traverse/7.18.13: - resolution: {integrity: sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==} + /@babel/plugin-transform-async-to-generator/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.18.13 + '@babel/core': 7.20.12 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.12 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-block-scoping/7.20.15_@babel+core@7.20.12: + resolution: {integrity: sha512-Vv4DMZ6MiNOhu/LdaZsT/bsLRxgL94d269Mv4R/9sp6+Mp++X/JqypZYypJXLlM4mlL352/Egzbzr98iABH1CA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-classes/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-replace-supers': 7.20.7 + '@babel/helper-split-export-declaration': 7.18.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-computed-properties/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/template': 7.20.7 + dev: false + + /@babel/plugin-transform-destructuring/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.12: + resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-flow-strip-types/7.19.0_@babel+core@7.20.12: + resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.12 + dev: false + + /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.12: + resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.12: + resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.12: + resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-modules-amd/7.20.11_@babel+core@7.20.12: + resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-commonjs/7.20.11_@babel+core@7.20.12: + resolution: {integrity: sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-simple-access': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-systemjs/7.20.11_@babel+core@7.20.12: + resolution: {integrity: sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-identifier': 7.19.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-named-capturing-groups-regex/7.20.5_@babel+core@7.20.12: + resolution: {integrity: sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-replace-supers': 7.20.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-parameters/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-react-constant-elements/7.20.2_@babel+core@7.20.12: + resolution: {integrity: sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/plugin-transform-react-jsx': 7.20.13_@babel+core@7.20.12 + dev: false + + /@babel/plugin-transform-react-jsx/7.20.13_@babel+core@7.20.12: + resolution: {integrity: sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 + '@babel/types': 7.20.7 + dev: false + + /@babel/plugin-transform-react-pure-annotations/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-regenerator/7.20.5_@babel+core@7.20.12: + resolution: {integrity: sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + regenerator-transform: 0.15.1 + dev: false + + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-runtime/7.19.6_@babel+core@7.20.12: + resolution: {integrity: sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-spread/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + dev: false + + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.12: + resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.12: + resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-typescript/7.20.13_@babel+core@7.20.12: + resolution: {integrity: sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-class-features-plugin': 7.20.12_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.12: + resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-create-regexp-features-plugin': 7.20.5_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/preset-env/7.20.2_@babel+core@7.20.12: + resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.20.14 + '@babel/core': 7.20.12 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-option': 7.18.6 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-proposal-async-generator-functions': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-proposal-class-static-block': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.12 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-proposal-object-rest-spread': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-proposal-private-property-in-object': 7.20.5_@babel+core@7.20.12 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.12 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.12 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.12 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 + '@babel/plugin-transform-arrow-functions': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-transform-async-to-generator': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-block-scoping': 7.20.15_@babel+core@7.20.12 + '@babel/plugin-transform-classes': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-transform-computed-properties': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-transform-destructuring': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.12 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.20.12 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.12 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.12 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-modules-amd': 7.20.11_@babel+core@7.20.12 + '@babel/plugin-transform-modules-commonjs': 7.20.11_@babel+core@7.20.12 + '@babel/plugin-transform-modules-systemjs': 7.20.11_@babel+core@7.20.12 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-named-capturing-groups-regex': 7.20.5_@babel+core@7.20.12 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-parameters': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-regenerator': 7.20.5_@babel+core@7.20.12 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-spread': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.12 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.12 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.12 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.12 + '@babel/preset-modules': 0.1.5_@babel+core@7.20.12 + '@babel/types': 7.20.7 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.12 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.12 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.12 + core-js-compat: 3.27.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/preset-modules/0.1.5_@babel+core@7.20.12: + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.12 + '@babel/types': 7.20.7 + esutils: 2.0.3 + dev: false + + /@babel/preset-react/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-option': 7.18.6 + '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-react-jsx': 7.20.13_@babel+core@7.20.12 + '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-react-pure-annotations': 7.18.6_@babel+core@7.20.12 + dev: false + + /@babel/preset-typescript/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-option': 7.18.6 + '@babel/plugin-transform-typescript': 7.20.13_@babel+core@7.20.12 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/regjsgen/0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: false + + /@babel/runtime/7.20.13: + resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: false + + /@babel/template/7.20.7: + resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.20.15 + '@babel/types': 7.20.7 + + /@babel/traverse/7.20.13: + resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.14 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.18.13 - '@babel/types': 7.18.13 + '@babel/parser': 7.20.15 + '@babel/types': 7.20.7 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types/7.18.13: - resolution: {integrity: sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==} + /@babel/types/7.20.7: + resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.18.10 - '@babel/helper-validator-identifier': 7.18.6 + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + /@chainsafe/is-ip/2.0.1: + resolution: {integrity: sha512-nqSJ8u2a1Rv9FYbyI8qpDhTYujaKEyLknNrTejLYoSWmdeg+2WB7R6BZqPZYfrJzDxVi3rl6ZQuoaEvpKRZWgQ==} + + /@chainsafe/libp2p-noise/11.0.0: + resolution: {integrity: sha512-NEl5aIv6muz9OL+dsa3INEU89JX0NViBxOy7NwwG8eNRPUDHo5E3ZTMSHXQpVx1K/ofoNS4ANO9xwezY6ss5GA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/crypto': 1.0.8_uint8arraylist@2.4.3 + '@libp2p/interface-connection-encrypter': 3.0.6 + '@libp2p/interface-keys': 1.0.7 + '@libp2p/interface-metrics': 4.0.5 + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/logger': 2.0.5 + '@libp2p/peer-id': 2.0.1 + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/hkdf': 1.0.1 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + it-length-prefixed: 8.0.4 + it-pair: 2.0.3 + it-pb-stream: 2.0.3 + it-pipe: 2.0.5 + it-stream-types: 1.0.5 + protons-runtime: 4.0.2_uint8arraylist@2.4.3 + uint8arraylist: 2.4.3 + uint8arrays: 4.0.3 + transitivePeerDependencies: + - supports-color + dev: false + /@chainsafe/libp2p-noise/4.1.2: resolution: {integrity: sha512-UvZLWvIS7bAz6M8XfsnC/NhT1c/lg8NNsME1hTvo21kRwyxNFpB8gEhId03Cb5B23oIaHhMySAHBcpuMiSxQ2w==} dependencies: @@ -449,23 +1671,408 @@ packages: libp2p-crypto: 0.19.7 peer-id: 0.15.4 protobufjs: 6.11.3 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 transitivePeerDependencies: - supports-color + dev: true /@cspotcode/source-map-support/0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@csstools/normalize.css/12.0.0: + resolution: {integrity: sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==} dev: false + /@csstools/postcss-cascade-layers/1.1.1_postcss@8.4.21: + resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.1.1_wajs5nedgkikc5pcuwett7legi + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /@csstools/postcss-color-function/1.1.1_postcss@8.4.21: + resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-font-format-keywords/1.0.1_postcss@8.4.21: + resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-hwb-function/1.0.2_postcss@8.4.21: + resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-ic-unit/1.0.1_postcss@8.4.21: + resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-is-pseudo-class/2.0.7_postcss@8.4.21: + resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.1.1_wajs5nedgkikc5pcuwett7legi + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /@csstools/postcss-nested-calc/1.0.0_postcss@8.4.21: + resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-normalize-display-values/1.0.1_postcss@8.4.21: + resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-oklab-function/1.1.1_postcss@8.4.21: + resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-progressive-custom-properties/1.3.0_postcss@8.4.21: + resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-stepped-value-functions/1.0.1_postcss@8.4.21: + resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-text-decoration-shorthand/1.0.0_postcss@8.4.21: + resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-trigonometric-functions/1.0.2_postcss@8.4.21: + resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} + engines: {node: ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-unset-value/1.0.2_postcss@8.4.21: + resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + dev: false + + /@csstools/selector-specificity/2.1.1_wajs5nedgkikc5pcuwett7legi: + resolution: {integrity: sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + postcss-selector-parser: ^6.0.10 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /@esbuild/android-arm/0.16.17: + resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64/0.16.17: + resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64/0.16.17: + resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64/0.16.17: + resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64/0.16.17: + resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64/0.16.17: + resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64/0.16.17: + resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm/0.16.17: + resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64/0.16.17: + resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32/0.16.17: + resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.16.17: + resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el/0.16.17: + resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64/0.16.17: + resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64/0.16.17: + resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x/0.16.17: + resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64/0.16.17: + resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64/0.16.17: + resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64/0.16.17: + resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64/0.16.17: + resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64/0.16.17: + resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32/0.16.17: + resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64/0.16.17: + resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint/eslintrc/1.4.1: + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.4.1 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@fluencelabs/aqua-api/0.9.1-373: + resolution: {integrity: sha512-q0A2z/FXOlc9UKCQ/Kf00ig0VpgdJ9woITYSj1tnVo9X3kR71gSv4loCQmukJoqlVZXzfQ8r+spalwBerin89A==} + dev: true + /@fluencelabs/aqua-ipfs/0.5.5: resolution: {integrity: sha512-TBSClVs2r3FhgxVFSDPXzJNP0/EqHbIaVSY9U6LTzBDUdZDItu8Yt+Rsjj4LX5X4kOwo94ADkYG0UG8nKC1L5A==} dependencies: '@fluencelabs/aqua-lib': 0.5.2 dev: true + /@fluencelabs/aqua-ipfs/0.5.8: + resolution: {integrity: sha512-jKlyGBm8oJAIQ3Ags58oJ8QVTlCYSvZQVTnX2SnugGXWVwt4+9qtqtvNT5MvWKK3M9lCFDbJJy/qVTjzPJlaiw==} + dependencies: + '@fluencelabs/aqua-lib': 0.5.2 + dev: true + /@fluencelabs/aqua-lib/0.5.2: resolution: {integrity: sha512-fmoFFE8myhLH9d+YR0+0ZPL2YIQyR6M1woAGu5d1xXI02Sjzn4id6dE4PpxHb8cSBPRie8AwsKobHCNqGxI8oA==} dev: true @@ -474,35 +2081,86 @@ packages: resolution: {integrity: sha512-ifjtCM93KO3LhzPkMxqmXhwLmrg/scjOiyTihEVg7ns5N+BVzaK1eWzdOdqGdl9ZVoah43pdlQUepEo7VdRmsw==} dev: true - /@fluencelabs/aqua/0.7.7-362_rl5xm3oiydas7snsul2pa47p2m: + /@fluencelabs/aqua/0.7.7-362_4ybkoodcah37urerzfcwvnjsoe: resolution: {integrity: sha512-CwvBc3wKQdvnDM4Zxj6yFE5MR2oeh+EZ++m2hLvENt7OWl3cnZVR4cJQkRxMMLVT0MxRwLiy97UIBwGsPqlSCA==} + hasBin: true dependencies: '@fluencelabs/aqua-ipfs': 0.5.5 '@fluencelabs/aqua-lib': 0.5.2 - '@fluencelabs/fluence': 0.26.3-snapshot-4_rl5xm3oiydas7snsul2pa47p2m + '@fluencelabs/fluence': 0.26.3-snapshot-4_4ybkoodcah37urerzfcwvnjsoe '@fluencelabs/fluence-network-environment': 1.0.13 - ipfs-http-client: 50.1.2 + ipfs-http-client: 50.1.2_node-fetch@3.3.0 transitivePeerDependencies: - '@babel/core' - '@types/jest' - babel-jest - bufferutil + - encoding - esbuild - jest + - node-fetch - supports-color - typescript - utf-8-validate dev: true + /@fluencelabs/aqua/0.9.1-374_jaxubti5gf66xc76fsqhxmuwn4: + resolution: {integrity: sha512-jF6oVE4h7bP/dQArKEfsy4UxbQbzACfVIBY/TFUL5D3np4ssjxrh15Y3gl1PwSWjlaPcDeFvAuStmcqfYQmLqQ==} + hasBin: true + dependencies: + '@fluencelabs/aqua-ipfs': 0.5.8 + '@fluencelabs/aqua-lib': 0.6.0 + '@fluencelabs/fluence': 0.27.5_jaxubti5gf66xc76fsqhxmuwn4 + '@fluencelabs/fluence-network-environment': 1.0.13 + ipfs-http-client: 50.1.2_node-fetch@3.3.0 + transitivePeerDependencies: + - '@babel/core' + - '@types/jest' + - babel-jest + - bufferutil + - encoding + - esbuild + - jest + - node-fetch + - supports-color + - typescript + - utf-8-validate + dev: true + + /@fluencelabs/aqua/0.9.4_sxyfz5frysr7cnkewysdljfvwu: + resolution: {integrity: sha512-DAy2XT4E4oR4Imgsc9ns8jd14StwxktHcZe3MTaZT1PDo3KdbrXda5MBGWFiuqhZcB/Xr4EruCvH/LscrsKlQg==} + hasBin: true + dependencies: + '@fluencelabs/aqua-ipfs': 0.5.8 + '@fluencelabs/aqua-lib': 0.6.0 + '@fluencelabs/fluence': 0.28.0_sxyfz5frysr7cnkewysdljfvwu + '@fluencelabs/fluence-network-environment': 1.0.13 + ipfs-http-client: 50.1.2_node-fetch@3.3.0 + transitivePeerDependencies: + - '@babel/core' + - '@types/jest' + - babel-jest + - bufferutil + - encoding + - esbuild + - jest + - node-fetch + - supports-color + - typescript + - utf-8-validate + dev: true + + /@fluencelabs/avm/0.31.10: + resolution: {integrity: sha512-tkpjdHyRmsTwAEZCJt15//jXEgC2Nw2qFiD1NenvK127SlgKeuzQU9IMReUYY3dowb2IGeC578/uGMu96jHYKw==} + /@fluencelabs/avm/0.31.4: resolution: {integrity: sha512-rApXdqk0NUX+Fyq9BJ1jQ7X//EfVrAg9wrjdd4K/tvo54Lgij0tY/IT+imwr/Eb4qgHgi1QMW4zT0AOlgKIKmw==} dev: true /@fluencelabs/avm/0.35.3: resolution: {integrity: sha512-Y5mPPCmAUUKc5CDO12IL8mGEreWa7maVdX0MWCAH4+GvfLPFN1FxOMSKRYEtvkyVEL88pc9pd8cm5IRCBkFthg==} - dev: false - /@fluencelabs/connection/0.2.0: + /@fluencelabs/connection/0.2.0_node-fetch@3.3.0: resolution: {integrity: sha512-0jTRI1h/j/fR2VaLIlcIm6VoP3j2jL2lI6/OaYaOnwGXmI6CbZWHNeq9eaKWycT9B1vpN9wHu0Vi7vH3pFplhg==} engines: {node: '>=10', pnpm: '>=3'} dependencies: @@ -512,35 +2170,37 @@ packages: buffer: 6.0.3 it-length-prefixed: 5.0.3 it-pipe: 1.1.0 - libp2p: 0.36.2 - libp2p-interfaces: 4.0.6 + libp2p: 0.36.2_node-fetch@3.3.0 + libp2p-interfaces: 4.0.6_node-fetch@3.3.0 libp2p-mplex: 0.10.7 - libp2p-websockets: 0.16.2 + libp2p-websockets: 0.16.2_node-fetch@3.3.0 loglevel: 1.8.0 - multiaddr: 10.0.1 + multiaddr: 10.0.1_node-fetch@3.3.0 peer-id: 0.16.0 transitivePeerDependencies: - bufferutil + - encoding + - node-fetch - supports-color - utf-8-validate dev: true /@fluencelabs/fluence-network-environment/1.0.13: resolution: {integrity: sha512-2pci3T0sUHE08jwEs1r/vHKVT4XUh/A3j/QJ0eIhddsxyIjEksjdn05X7DF6STD14CF8GgBVOJEPgav8qaUMpA==} - dev: true - /@fluencelabs/fluence/0.26.3-snapshot-4_rl5xm3oiydas7snsul2pa47p2m: + /@fluencelabs/fluence/0.26.3-snapshot-4_4ybkoodcah37urerzfcwvnjsoe: resolution: {integrity: sha512-M/iQhnViXfMaATj3gFPQXrZe9zSVcyN9F9A9hfJBUn0VLamhmbfeIoSZeheK8VGBxYbRGcrtoqLPTy1vJQVgVw==} engines: {node: '>=10', pnpm: '>=3'} + hasBin: true dependencies: '@fluencelabs/avm': 0.31.4 - '@fluencelabs/connection': 0.2.0 + '@fluencelabs/connection': 0.2.0_node-fetch@3.3.0 '@fluencelabs/interfaces': 0.1.0 '@fluencelabs/keypair': 0.2.0 - '@fluencelabs/marine-js': 0.3.18_rl5xm3oiydas7snsul2pa47p2m + '@fluencelabs/marine-js': 0.3.18_ddylxr3wxksmlyjpihqkkowegi async: 3.2.3 base64-js: 1.5.1 - browser-or-node: 2.0.0 + browser-or-node: 2.1.1 bs58: 5.0.0 buffer: 6.0.3 cids: 1.1.9 @@ -548,7 +2208,7 @@ packages: multiformats: 9.6.5 peer-id: 0.16.0 platform: 1.3.6 - rxjs: 7.5.6 + rxjs: 7.5.5 ts-pattern: 3.3.3 uuid: 8.3.2 transitivePeerDependencies: @@ -556,8 +2216,84 @@ packages: - '@types/jest' - babel-jest - bufferutil + - encoding - esbuild - jest + - node-fetch + - supports-color + - typescript + - utf-8-validate + dev: true + + /@fluencelabs/fluence/0.27.5_jaxubti5gf66xc76fsqhxmuwn4: + resolution: {integrity: sha512-nMCzd/oHHk5/yWdg/+rPB+sc8X+fQ5YgwPhGVDoxFs8/CmIr1G5Na8Y6l8rrigasgQd+LV5GtAyh50Oq7/IXkg==} + engines: {node: '>=10', pnpm: '>=3'} + hasBin: true + dependencies: + '@fluencelabs/avm': 0.31.10 + '@fluencelabs/connection': 0.2.0_node-fetch@3.3.0 + '@fluencelabs/interfaces': 0.1.0 + '@fluencelabs/keypair': 0.2.0 + '@fluencelabs/marine-js': 0.3.37_g4n3hsjlbmz4ag5o32ytojordu + async: 3.2.4 + base64-js: 1.5.1 + browser-or-node: 2.0.0 + bs58: 5.0.0 + buffer: 6.0.3 + cids: 1.1.9 + loglevel: 1.8.1 + multiformats: 9.9.0 + peer-id: 0.16.0 + platform: 1.3.6 + rxjs: 7.8.0 + ts-pattern: 3.3.3 + uuid: 8.3.2 + transitivePeerDependencies: + - '@babel/core' + - '@types/jest' + - babel-jest + - bufferutil + - encoding + - esbuild + - jest + - node-fetch + - supports-color + - typescript + - utf-8-validate + dev: true + + /@fluencelabs/fluence/0.28.0_sxyfz5frysr7cnkewysdljfvwu: + resolution: {integrity: sha512-SXb2vjTj8m/nw4jEILV0tu9VIFprGo8mNb2nOB5btxdsOI8GzQZkpGzTLrSd/+UagIo2GdxAu0GhBP8dxZXaqg==} + engines: {node: '>=10', pnpm: '>=3'} + hasBin: true + dependencies: + '@fluencelabs/avm': 0.35.3 + '@fluencelabs/connection': 0.2.0_node-fetch@3.3.0 + '@fluencelabs/interfaces': 0.1.0 + '@fluencelabs/keypair': 0.2.0 + '@fluencelabs/marine-js': 0.3.37_cnngzrja2umb46xxazlucyx2qu + async: 3.2.4 + base64-js: 1.5.1 + browser-or-node: 2.0.0 + bs58: 5.0.0 + buffer: 6.0.3 + cids: 1.1.9 + loglevel: 1.8.1 + multiformats: 9.9.0 + peer-id: 0.16.0 + platform: 1.3.6 + rxjs: 7.8.0 + ts-pattern: 3.3.3 + uuid: 8.3.2 + transitivePeerDependencies: + - '@babel/core' + - '@types/jest' + - babel-jest + - bufferutil + - encoding + - esbuild + - jest + - node-fetch - supports-color - typescript - utf-8-validate @@ -572,20 +2308,20 @@ packages: resolution: {integrity: sha512-sNFvoeefSa0Xa/xzzLwWBXPMB4y/vHEFh3BaA6FCGNPwbtN0pje9rd8AOgSP9fjlTPpxy3TuBI+eAIzBk5b+SQ==} engines: {node: '>=10', pnpm: '>=3'} dependencies: - js-base64: 3.7.2 + js-base64: 3.7.5 libp2p-crypto: 0.21.2 peer-id: 0.16.0 dev: true - /@fluencelabs/marine-js/0.3.18_rl5xm3oiydas7snsul2pa47p2m: + /@fluencelabs/marine-js/0.3.18_ddylxr3wxksmlyjpihqkkowegi: resolution: {integrity: sha512-aNuGtyY910kJvtRwfqmZKjVs+1l3LVWShv5xvkY04faHm65nX3sZLe8UHwughdja/4ixV1IFKlaTUgw2u3Sf5A==} dependencies: '@wasmer/wasi': 0.12.0 '@wasmer/wasmfs': 0.12.0 - browser-or-node: 2.0.0 + browser-or-node: 2.1.1 buffer: 6.0.3 threads: 1.7.0 - ts-jest: 27.1.5_rl5xm3oiydas7snsul2pa47p2m + ts-jest: 27.1.5_ddylxr3wxksmlyjpihqkkowegi transitivePeerDependencies: - '@babel/core' - '@types/jest' @@ -596,7 +2332,7 @@ packages: - typescript dev: true - /@fluencelabs/marine-js/0.3.37_rl5xm3oiydas7snsul2pa47p2m: + /@fluencelabs/marine-js/0.3.37_cnngzrja2umb46xxazlucyx2qu: resolution: {integrity: sha512-/Kpu3S+aDOfrOpKBAK1VeWSHKCoD36/dxtHEWHbj3Lsro0GB9zkoaZPHlFFL7rorCB+hyjAJqLDuBGI8f3l/qg==} dependencies: '@wasmer/wasi': 0.12.0 @@ -604,7 +2340,7 @@ packages: browser-or-node: 2.0.0 buffer: 6.0.3 threads: 1.7.0 - ts-jest: 27.1.5_rl5xm3oiydas7snsul2pa47p2m + ts-jest: 27.1.5_cnngzrja2umb46xxazlucyx2qu transitivePeerDependencies: - '@babel/core' - '@types/jest' @@ -613,6 +2349,71 @@ packages: - jest - supports-color - typescript + dev: true + + /@fluencelabs/marine-js/0.3.37_g4n3hsjlbmz4ag5o32ytojordu: + resolution: {integrity: sha512-/Kpu3S+aDOfrOpKBAK1VeWSHKCoD36/dxtHEWHbj3Lsro0GB9zkoaZPHlFFL7rorCB+hyjAJqLDuBGI8f3l/qg==} + dependencies: + '@wasmer/wasi': 0.12.0 + '@wasmer/wasmfs': 0.12.0 + browser-or-node: 2.0.0 + buffer: 6.0.3 + threads: 1.7.0 + ts-jest: 27.1.5_g4n3hsjlbmz4ag5o32ytojordu + transitivePeerDependencies: + - '@babel/core' + - '@types/jest' + - babel-jest + - esbuild + - jest + - supports-color + - typescript + dev: true + + /@fluencelabs/marine-js/0.3.42: + resolution: {integrity: sha512-v8FuQ7CvImFjG4kZXnE7b1h2/J3/5JWiGMc64M2AtkI2ipdk3uGB+xaIzxpx4Zcvpp9gEr2EQonpaZCu7Qx2hg==} + dependencies: + '@wasmer/wasi': 0.12.0 + '@wasmer/wasmfs': 0.12.0 + + /@fluencelabs/marine-js/0.3.44: + resolution: {integrity: sha512-DbI/x0bRv44oqfMZJlIkVhzZByXhmnOoxpco/cglk5aAvslOSDdRssf3bZADqqUQggGdtISOZcYPM+a4tirYLQ==} + dependencies: + '@wasmer/wasi': 0.12.0 + '@wasmer/wasmfs': 0.12.0 + default-import: 1.1.5 + + /@fluencelabs/registry/0.7.0: + resolution: {integrity: sha512-9yL/CFqGgw6RvPSJZGYM7dCEVQUXrC+cHFAcNWLAcFkA3RaB4znqFYFQRFeo5VUvv1mda9l1BEdv1Q4uO17/hw==} + dependencies: + '@fluencelabs/aqua-lib': 0.5.2 + '@fluencelabs/trust-graph': 3.1.2 + dev: true + + /@fluencelabs/trust-graph/3.1.2: + resolution: {integrity: sha512-HpyHtiomh09wv6/83z+bhbkqVngIUdqNGEXRTIPg4sArVPMZ9UCXBrkQsHDRqdMUx0lBAcgB3IjlbdhkwHGaXA==} + dependencies: + '@fluencelabs/aqua-lib': 0.5.2 + dev: true + + /@humanwhocodes/config-array/0.11.8: + resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@humanwhocodes/module-importer/1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: false + + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: false /@istanbuljs/load-nyc-config/1.1.0: @@ -629,17 +2430,129 @@ packages: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} + /@jest/console/27.5.1: + resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 16.18.12 + chalk: 4.1.2 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + /@jest/console/28.1.3: resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 18.7.11 + '@types/node': 16.11.59 chalk: 4.1.2 jest-message-util: 28.1.3 jest-util: 28.1.3 slash: 3.0.0 + /@jest/console/29.4.2: + resolution: {integrity: sha512-0I/rEJwMpV9iwi9cDEnT71a5nNGK9lj8Z4+1pRAU2x/thVXCDnaTGrvxyK+cAqZTFVFCiR+hfVrP4l2m+dCmQg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@types/node': 18.13.0 + chalk: 4.1.2 + jest-message-util: 29.4.2 + jest-util: 29.4.2 + slash: 3.0.0 + dev: true + + /@jest/core/27.5.1: + resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 27.5.1 + '@jest/reporters': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.12 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.10 + jest-changed-files: 27.5.1 + jest-config: 27.5.1 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-resolve-dependencies: 27.5.1 + jest-runner: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + jest-watcher: 27.5.1 + micromatch: 4.0.5 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + + /@jest/core/27.5.1_ts-node@10.9.1: + resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 27.5.1 + '@jest/reporters': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.12 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.10 + jest-changed-files: 27.5.1 + jest-config: 27.5.1_ts-node@10.9.1 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-resolve-dependencies: 27.5.1 + jest-runner: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + jest-watcher: 27.5.1 + micromatch: 4.0.5 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + /@jest/core/28.1.3: resolution: {integrity: sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -654,14 +2567,14 @@ packages: '@jest/test-result': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.7.14 + '@types/node': 16.11.59 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.3.2 + ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 28.1.3 - jest-config: 28.1.3_@types+node@18.7.14 + jest-config: 28.1.3_@types+node@16.11.59 jest-haste-map: 28.1.3 jest-message-util: 28.1.3 jest-regex-util: 28.0.2 @@ -681,6 +2594,58 @@ packages: transitivePeerDependencies: - supports-color - ts-node + dev: true + + /@jest/core/29.4.2: + resolution: {integrity: sha512-KGuoQah0P3vGNlaS/l9/wQENZGNKGoWb+OPxh3gz+YzG7/XExvYu34MzikRndQCdM2S0tzExN4+FL37i6gZmCQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 29.4.2 + '@jest/reporters': 29.4.2 + '@jest/test-result': 29.4.2 + '@jest/transform': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.8.0 + exit: 0.1.2 + graceful-fs: 4.2.10 + jest-changed-files: 29.4.2 + jest-config: 29.4.2_@types+node@18.13.0 + jest-haste-map: 29.4.2 + jest-message-util: 29.4.2 + jest-regex-util: 29.4.2 + jest-resolve: 29.4.2 + jest-resolve-dependencies: 29.4.2 + jest-runner: 29.4.2 + jest-runtime: 29.4.2 + jest-snapshot: 29.4.2 + jest-util: 29.4.2 + jest-validate: 29.4.2 + jest-watcher: 29.4.2 + micromatch: 4.0.5 + pretty-format: 29.4.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + + /@jest/environment/27.5.1: + resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.12 + jest-mock: 27.5.1 /@jest/environment/28.1.3: resolution: {integrity: sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==} @@ -688,14 +2653,33 @@ packages: dependencies: '@jest/fake-timers': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.7.14 + '@types/node': 16.11.59 jest-mock: 28.1.3 + dev: true + + /@jest/environment/29.4.2: + resolution: {integrity: sha512-JKs3VUtse0vQfCaFGJRX1bir9yBdtasxziSyu+pIiEllAQOe4oQhdCYIf3+Lx+nGglFktSKToBnRJfD5QKp+NQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 + jest-mock: 29.4.2 + dev: true /@jest/expect-utils/28.1.3: resolution: {integrity: sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: jest-get-type: 28.0.2 + dev: true + + /@jest/expect-utils/29.4.2: + resolution: {integrity: sha512-Dd3ilDJpBnqa0GiPN7QrudVs0cczMMHtehSo2CSTjm3zdHx0RcpmhFNVEltuEFeqfLIyWKFI224FsMSQ/nsJQA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.4.2 + dev: true /@jest/expect/28.1.3: resolution: {integrity: sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==} @@ -705,6 +2689,28 @@ packages: jest-snapshot: 28.1.3 transitivePeerDependencies: - supports-color + dev: true + + /@jest/expect/29.4.2: + resolution: {integrity: sha512-NUAeZVApzyaeLjfWIV/64zXjA2SS+NuUPHpAlO7IwVMGd5Vf9szTl9KEDlxY3B4liwLO31os88tYNHl6cpjtKQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.4.2 + jest-snapshot: 29.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/fake-timers/27.5.1: + resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@sinonjs/fake-timers': 8.1.0 + '@types/node': 16.18.12 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-util: 27.5.1 /@jest/fake-timers/28.1.3: resolution: {integrity: sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==} @@ -712,10 +2718,31 @@ packages: dependencies: '@jest/types': 28.1.3 '@sinonjs/fake-timers': 9.1.2 - '@types/node': 18.7.14 + '@types/node': 16.11.59 jest-message-util: 28.1.3 jest-mock: 28.1.3 jest-util: 28.1.3 + dev: true + + /@jest/fake-timers/29.4.2: + resolution: {integrity: sha512-Ny1u0Wg6kCsHFWq7A/rW/tMhIedq2siiyHyLpHCmIhP7WmcAmd2cx95P+0xtTZlj5ZbJxIRQi4OPydZZUoiSQQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@sinonjs/fake-timers': 10.0.2 + '@types/node': 18.13.0 + jest-message-util: 29.4.2 + jest-mock: 29.4.2 + jest-util: 29.4.2 + dev: true + + /@jest/globals/27.5.1: + resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/types': 27.5.1 + expect: 27.5.1 /@jest/globals/28.1.3: resolution: {integrity: sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==} @@ -726,6 +2753,56 @@ packages: '@jest/types': 28.1.3 transitivePeerDependencies: - supports-color + dev: true + + /@jest/globals/29.4.2: + resolution: {integrity: sha512-zCk70YGPzKnz/I9BNFDPlK+EuJLk21ur/NozVh6JVM86/YYZtZHqxFFQ62O9MWq7uf3vIZnvNA0BzzrtxD9iyg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.4.2 + '@jest/expect': 29.4.2 + '@jest/types': 29.4.2 + jest-mock: 29.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/reporters/27.5.1: + resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.12 + chalk: 4.1.2 + collect-v8-coverage: 1.0.1 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.10 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.5 + jest-haste-map: 27.5.1 + jest-resolve: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + slash: 3.0.0 + source-map: 0.6.1 + string-length: 4.0.2 + terminal-link: 2.1.1 + v8-to-istanbul: 8.1.1 + transitivePeerDependencies: + - supports-color /@jest/reporters/28.1.3: resolution: {integrity: sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==} @@ -741,15 +2818,15 @@ packages: '@jest/test-result': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 - '@jridgewell/trace-mapping': 0.3.15 - '@types/node': 18.7.14 + '@jridgewell/trace-mapping': 0.3.17 + '@types/node': 16.11.59 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.10 istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 5.2.0 + istanbul-lib-instrument: 5.2.1 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 @@ -763,20 +2840,92 @@ packages: v8-to-istanbul: 9.0.1 transitivePeerDependencies: - supports-color + dev: true + + /@jest/reporters/29.4.2: + resolution: {integrity: sha512-10yw6YQe75zCgYcXgEND9kw3UZZH5tJeLzWv4vTk/2mrS1aY50A37F+XT2hPO5OqQFFnUWizXD8k1BMiATNfUw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.4.2 + '@jest/test-result': 29.4.2 + '@jest/transform': 29.4.2 + '@jest/types': 29.4.2 + '@jridgewell/trace-mapping': 0.3.17 + '@types/node': 18.13.0 + chalk: 4.1.2 + collect-v8-coverage: 1.0.1 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.10 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.5 + jest-message-util: 29.4.2 + jest-util: 29.4.2 + jest-worker: 29.4.2 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.0.1 + transitivePeerDependencies: + - supports-color + dev: true /@jest/schemas/28.1.3: resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@sinclair/typebox': 0.24.28 + '@sinclair/typebox': 0.24.51 + + /@jest/schemas/29.4.2: + resolution: {integrity: sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.25.21 + dev: true + + /@jest/source-map/27.5.1: + resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + callsites: 3.1.0 + graceful-fs: 4.2.10 + source-map: 0.6.1 /@jest/source-map/28.1.2: resolution: {integrity: sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/trace-mapping': 0.3.17 callsites: 3.1.0 graceful-fs: 4.2.10 + dev: true + + /@jest/source-map/29.4.2: + resolution: {integrity: sha512-tIoqV5ZNgYI9XCKXMqbYe5JbumcvyTgNN+V5QW4My033lanijvCD0D4PI9tBw4pRTqWOc00/7X3KVvUh+qnF4Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jridgewell/trace-mapping': 0.3.17 + callsites: 3.1.0 + graceful-fs: 4.2.10 + dev: true + + /@jest/test-result/27.5.1: + resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.5.1 + '@jest/types': 27.5.1 + '@types/istanbul-lib-coverage': 2.0.4 + collect-v8-coverage: 1.0.1 /@jest/test-result/28.1.3: resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} @@ -787,6 +2936,27 @@ packages: '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 + /@jest/test-result/29.4.2: + resolution: {integrity: sha512-HZsC3shhiHVvMtP+i55MGR5bPcc3obCFbA5bzIOb8pCjwBZf11cZliJncCgaVUbC5yoQNuGqCkC0Q3t6EItxZA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.4.2 + '@jest/types': 29.4.2 + '@types/istanbul-lib-coverage': 2.0.4 + collect-v8-coverage: 1.0.1 + dev: true + + /@jest/test-sequencer/27.5.1: + resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.5.1 + graceful-fs: 4.2.10 + jest-haste-map: 27.5.1 + jest-runtime: 27.5.1 + transitivePeerDependencies: + - supports-color + /@jest/test-sequencer/28.1.3: resolution: {integrity: sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -795,17 +2965,50 @@ packages: graceful-fs: 4.2.10 jest-haste-map: 28.1.3 slash: 3.0.0 + dev: true + + /@jest/test-sequencer/29.4.2: + resolution: {integrity: sha512-9Z2cVsD6CcObIVrWigHp2McRJhvCxL27xHtrZFgNC1RwnoSpDx6fZo8QYjJmziFlW9/hr78/3sxF54S8B6v8rg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.4.2 + graceful-fs: 4.2.10 + jest-haste-map: 29.4.2 + slash: 3.0.0 + dev: true + + /@jest/transform/27.5.1: + resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.20.12 + '@jest/types': 27.5.1 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.9.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.10 + jest-haste-map: 27.5.1 + jest-regex-util: 27.5.1 + jest-util: 27.5.1 + micromatch: 4.0.5 + pirates: 4.0.5 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + transitivePeerDependencies: + - supports-color /@jest/transform/28.1.3: resolution: {integrity: sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@babel/core': 7.18.13 + '@babel/core': 7.20.12 '@jest/types': 28.1.3 - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 - convert-source-map: 1.8.0 + convert-source-map: 1.9.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.10 jest-haste-map: 28.1.3 @@ -817,6 +3020,30 @@ packages: write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color + dev: true + + /@jest/transform/29.4.2: + resolution: {integrity: sha512-kf1v5iTJHn7p9RbOsBuc/lcwyPtJaZJt5885C98omWz79NIeD3PfoiiaPSu7JyCyFzNOIzKhmMhQLUhlTL9BvQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.20.12 + '@jest/types': 29.4.2 + '@jridgewell/trace-mapping': 0.3.17 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.10 + jest-haste-map: 29.4.2 + jest-regex-util: 29.4.2 + jest-util: 29.4.2 + micromatch: 4.0.5 + pirates: 4.0.5 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: true /@jest/types/27.5.1: resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} @@ -824,8 +3051,8 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.7.14 - '@types/yargs': 16.0.4 + '@types/node': 16.18.12 + '@types/yargs': 16.0.5 chalk: 4.1.2 /@jest/types/28.1.3: @@ -835,10 +3062,22 @@ packages: '@jest/schemas': 28.1.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.7.11 - '@types/yargs': 17.0.11 + '@types/node': 16.11.59 + '@types/yargs': 17.0.22 chalk: 4.1.2 + /@jest/types/29.4.2: + resolution: {integrity: sha512-CKlngyGP0fwlgC1BRUtPZSiWLBhyS9dKwKmyGxk8Z6M82LBEGB2aLQSg+U1MyLsU+M7UjnlLllBM2BLWKVm/Uw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.4.2 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 18.13.0 + '@types/yargs': 17.0.22 + chalk: 4.1.2 + dev: true + /@jridgewell/gen-mapping/0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} @@ -852,7 +3091,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/trace-mapping': 0.3.17 /@jridgewell/resolve-uri/3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} @@ -862,11 +3101,18 @@ packages: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} + /@jridgewell/source-map/0.3.2: + resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + dependencies: + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + dev: false + /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/trace-mapping/0.3.15: - resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==} + /@jridgewell/trace-mapping/0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 @@ -876,16 +3122,570 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@leichtgewicht/ip-codec/2.0.4: + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + dev: false + + /@libp2p/crypto/1.0.12_uint8arraylist@2.4.3: + resolution: {integrity: sha512-IvTKqI+7O9sTd7K9JSIRsOj/oruKj66qSopbSWkUd6KkcrYvm5vnreb39XPP+nitZcZFQyXj/ZDqTidAWWfYAg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-keys': 1.0.7 + '@libp2p/interfaces': 3.3.1 + '@noble/ed25519': 1.7.3 + '@noble/secp256k1': 1.7.1 + multiformats: 11.0.1 + node-forge: 1.3.1 + protons-runtime: 4.0.2_uint8arraylist@2.4.3 + uint8arrays: 4.0.3 + transitivePeerDependencies: + - uint8arraylist + dev: false + + /@libp2p/crypto/1.0.8_uint8arraylist@2.4.3: + resolution: {integrity: sha512-L0nOms1gJKwT5HRzDiEzTon+VOqilez6jIx+J27aSRJjgK+PpWGP2pmo5t0K60EGbIkDK0XDMjQkj0TUecDk5g==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-keys': 1.0.7 + '@noble/ed25519': 1.7.3 + '@noble/secp256k1': 1.7.1 + err-code: 3.0.1 + multiformats: 10.0.3 + node-forge: 1.3.1 + protons-runtime: 4.0.2_uint8arraylist@2.4.3 + uint8arrays: 4.0.3 + transitivePeerDependencies: + - uint8arraylist + dev: false + + /@libp2p/interface-address-manager/2.0.4: + resolution: {integrity: sha512-RcSi+z+xpVKJXq3BsfLf2rq8zb8VTAFown6uJBu02towMc0enYqqhwlV9DxcCaC573MgQ7gY2s/3XvxQdFraVA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interfaces': 3.3.1 + '@multiformats/multiaddr': 11.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-connection-encrypter/3.0.6: + resolution: {integrity: sha512-LwyYBN/aSa3IPCe7gBxffx/vaC0rFxAXlCbx4QGaWGtg6qK80Ouj89LEDWb3HkMbecNVWaV4TEqJIM5WnAAx1Q==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-id': 2.0.1 + it-stream-types: 1.0.5 + uint8arraylist: 2.4.3 + dev: false + + /@libp2p/interface-connection-manager/1.3.7: + resolution: {integrity: sha512-GyRa7FXtwjbch4ucFa/jj6vcaQT2RyhUbH3q0tIOTzjntABTMzQrhn3BWOGU5deRp2K7cVOB/OzrdhHdGUxYQA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-connection': 3.0.8 + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interfaces': 3.3.1 + '@multiformats/multiaddr': 11.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-connection/3.0.8: + resolution: {integrity: sha512-JiI9xVPkiSgW9hkvHWA4e599OLPNSACrpgtx6UffHG9N+Jpt0IOmM4iLic8bSIYkZJBOQFG1Sv/gVNB98Uq0Nw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interfaces': 3.3.1 + '@multiformats/multiaddr': 11.3.0 + it-stream-types: 1.0.5 + uint8arraylist: 2.4.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-content-routing/2.0.1: + resolution: {integrity: sha512-M3rYXMhH+102qyZzc0GzkKq10x100nWVXGns2qtN3O82Hy/6FxXdgLUGIGWMdCj/7ilaVAuTwx8V3+DGmDIiMw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-info': 1.0.8 + '@libp2p/interfaces': 3.3.1 + multiformats: 11.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-dht/2.0.1: + resolution: {integrity: sha512-+yEbt+1hMTR1bITzYyE771jEujimPXqDyFm8T1a8slMpeOD9z5wmLfuCWif8oGZJzXX5YqldWwSwytJQgWXL9g==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-discovery': 1.0.5 + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interface-peer-info': 1.0.8 + '@libp2p/interfaces': 3.3.1 + multiformats: 11.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-keychain/2.0.4: + resolution: {integrity: sha512-RCH0PL9um/ejsPiWIOzxFzjPzL2nT2tRUtCDo1aBQqoBi7eYp4I4ya1KbzgWDPTmNuuFtCReRMQsZ7/KVirKPA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-id': 2.0.1 + multiformats: 11.0.1 + dev: false + + /@libp2p/interface-keys/1.0.7: + resolution: {integrity: sha512-DRMPY9LfcnGJKrjaqIkY62U3fW2dya3VLy4x986ExtMrGn4kxIHeQ1IKk8/Vs9CJHTKmXEMID4of1Cjnw4aJpA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false + + /@libp2p/interface-libp2p/1.1.1: + resolution: {integrity: sha512-cELZZv/tzFxbUzL3Jvbk+AM2J6kDhIUNBIMMMLuR3LIHfmVJkh31G3ChLUZuKhBwB8wXJ1Ssev3fk1tfz/5DWA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-connection': 3.0.8 + '@libp2p/interface-content-routing': 2.0.1 + '@libp2p/interface-dht': 2.0.1 + '@libp2p/interface-keychain': 2.0.4 + '@libp2p/interface-metrics': 4.0.5 + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interface-peer-info': 1.0.8 + '@libp2p/interface-peer-routing': 1.0.7 + '@libp2p/interface-peer-store': 1.2.8 + '@libp2p/interface-pubsub': 3.0.6 + '@libp2p/interface-registrar': 2.0.8 + '@libp2p/interfaces': 3.3.1 + '@multiformats/multiaddr': 11.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-metrics/4.0.5: + resolution: {integrity: sha512-srBeky1ugu1Bzw9VHGg8ta15oLh+P2PEIsg0cI9qzDbtCJaWGq/IIetpfuaJNVOuBD1CGEEbITNmsk4tDwIE0w==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-connection': 3.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-peer-discovery/1.0.5: + resolution: {integrity: sha512-R0TN/vDaCJLvRhop0y4qoPqapHxX4AEQDEtqmpayAA1BuPgbBq4fS4mepR3FAMcNva/szeqVCDuI4gDejtCaVg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-info': 1.0.8 + '@libp2p/interfaces': 3.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-peer-id/2.0.1: + resolution: {integrity: sha512-k01hKHTAZWMOiBC+yyFsmBguEMvhPkXnQtqLtFqga2fVZu8Zve7zFAtQYLhQjeJ4/apeFtO6ddTS8mCE6hl4OA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + multiformats: 11.0.1 + dev: false + + /@libp2p/interface-peer-info/1.0.8: + resolution: {integrity: sha512-LRvZt/9bZFYW7seAwuSg2hZuPl+FRTAsij5HtyvVwmpfVxipm6yQrKjQ+LiK/SZhIDVsSJ+UjF0mluJj+jeAzQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-id': 2.0.1 + '@multiformats/multiaddr': 11.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-peer-routing/1.0.7: + resolution: {integrity: sha512-0zxOOmKD6nA3LaArcP9UdRO4vJzEyoRtE34vvQP41UxjcSTaj4em5Fl4Q0RuOMXYPtRp+LdXRYbjJgCSeQoxwA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interface-peer-info': 1.0.8 + '@libp2p/interfaces': 3.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-peer-store/1.2.8: + resolution: {integrity: sha512-FM9VLmpg9CUBKZ2RW+J7RrQfQVMksLiC8oqENqHgb/VkPJY3kafbn7HIi0NcK6H/H5VcwBIhL15SUJk66O1K6g==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interface-peer-info': 1.0.8 + '@libp2p/interface-record': 2.0.6 + '@libp2p/interfaces': 3.3.1 + '@multiformats/multiaddr': 11.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-pubsub/3.0.6: + resolution: {integrity: sha512-c1aVHAhxmEh9IpLBgJyCsMscVDl7YUeP1Iq6ILEQoWiPJhNpQqdfmqyk7ZfrzuBU19VFe1EqH0bLuLDbtfysTQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-connection': 3.0.8 + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interfaces': 3.3.1 + it-pushable: 3.1.2 + uint8arraylist: 2.4.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-record/2.0.6: + resolution: {integrity: sha512-4EtDkY3sbYapWM8++gVHlv31HZXoLmj9I7CRXUKXzFkVE0GLK/A8jYWl7K0lmf2juPjeYm2eHITeA9/wAtIS3w==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-id': 2.0.1 + uint8arraylist: 2.4.3 + dev: false + + /@libp2p/interface-registrar/2.0.8: + resolution: {integrity: sha512-WbnXB09QF41zZzNgDUAZrRMilqgB7wBMTsSvql8xdDcws+jbaX4wE0iEpRXg1hyd0pz4mooIcMRaH1NiEQ5D8w==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-connection': 3.0.8 + '@libp2p/interface-peer-id': 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-stream-muxer/3.0.5: + resolution: {integrity: sha512-815aJ+qVswNcTEOuOUTcB+7OLzAfROyjjqoWpK0bD0P/xqTHqOQcqdaDuK02zPuAZqYq9uR3+SoBasrCg6k3zw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-connection': 3.0.8 + '@libp2p/interfaces': 3.3.1 + it-stream-types: 1.0.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interface-transport/2.1.1: + resolution: {integrity: sha512-xDM/s8iPN/XfNqD9qNelibRMPKkhOLinXwQeNtoTZjarq+Cg6rtO6/5WBG/49hyI3+r+5jd2eykjPGQbb86NFQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-connection': 3.0.8 + '@libp2p/interface-stream-muxer': 3.0.5 + '@libp2p/interfaces': 3.3.1 + '@multiformats/multiaddr': 11.3.0 + it-stream-types: 1.0.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/interfaces/3.3.1: + resolution: {integrity: sha512-3N+goQt74SmaVOjwpwMPKLNgh1uDQGw8GD12c40Kc86WOq0qvpm3NfACW+H8Su2X6KmWjCSMzk9JWs9+8FtUfg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false + + /@libp2p/logger/2.0.5: + resolution: {integrity: sha512-WEhxsc7+gsfuTcljI4vSgW/H2f18aBaC+JiO01FcX841Wxe9szjzHdBLDh9eqygUlzoK0LEeIBfctN7ibzus5A==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-id': 2.0.1 + debug: 4.3.4 + interface-datastore: 7.0.4 + multiformats: 11.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/mplex/7.1.1: + resolution: {integrity: sha512-0owK1aWgXXtjiohXtjwLV7Ehjdj96eBtsapVt7AzlHA+W8uYnI+x058thq3MisyMDlHiiE3BTh6fEf+t2/0dUw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-connection': 3.0.8 + '@libp2p/interface-stream-muxer': 3.0.5 + '@libp2p/logger': 2.0.5 + abortable-iterator: 4.0.2 + any-signal: 3.0.1 + benchmark: 2.1.4 + err-code: 3.0.1 + it-batched-bytes: 1.0.0 + it-pushable: 3.1.2 + it-stream-types: 1.0.5 + rate-limiter-flexible: 2.4.1 + uint8arraylist: 2.4.3 + uint8arrays: 4.0.3 + varint: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/multistream-select/3.1.2: + resolution: {integrity: sha512-NfF0fwQM4sqiLuNGBVc9z2mfz3OigOfyLJ5zekRBGYHkbKWrBRFS3FligUPr9roCOzH6ojjDkKVd5aK9/llfJQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interfaces': 3.3.1 + '@libp2p/logger': 2.0.5 + abortable-iterator: 4.0.2 + err-code: 3.0.1 + it-first: 2.0.0 + it-handshake: 4.1.2 + it-length-prefixed: 8.0.4 + it-merge: 2.0.0 + it-pipe: 2.0.5 + it-pushable: 3.1.2 + it-reader: 6.0.2 + it-stream-types: 1.0.5 + p-defer: 4.0.0 + uint8arraylist: 2.4.3 + uint8arrays: 4.0.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/peer-collections/3.0.0: + resolution: {integrity: sha512-rVhfDmkVzfBVR4scAfaKb05htZENx01PYt2USi1EnODyoo2c2U2W5tfOfyaKI/4D+ayQDOjT27G0ZCyAgwkYGw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/peer-id': 2.0.1 + dev: false + + /@libp2p/peer-id-factory/2.0.1: + resolution: {integrity: sha512-CRJmqwNQhDC51sQ9lf6EqEY8HuywwymMVffL2kIYI5ts5k+6gvIXzoSxLf3V3o+OxcroXG4KG0uGxxAi5DUXSA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/crypto': 1.0.8_uint8arraylist@2.4.3 + '@libp2p/interface-keys': 1.0.7 + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/peer-id': 2.0.1 + multiformats: 11.0.1 + protons-runtime: 4.0.2_uint8arraylist@2.4.3 + uint8arraylist: 2.4.3 + uint8arrays: 4.0.3 + dev: false + + /@libp2p/peer-id/2.0.1: + resolution: {integrity: sha512-uGIR4rS+j+IzzIu0kih4MonZEfRmjGNfXaSPMIFOeMxZItZT6TIpxoVNYxHl4YtneSFKzlLnf9yx9EhRcyfy8Q==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interfaces': 3.3.1 + multiformats: 11.0.1 + uint8arrays: 4.0.3 + dev: false + + /@libp2p/peer-record/5.0.0: + resolution: {integrity: sha512-qGaqYQSRqI/vol1NEMR9Z3ncLjIkyIF0o/CQYXzXCDjA91i9+0iMjXGgIgBLn3bfA1b9pHuz4HvwjgYUKMYOkQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/crypto': 1.0.12_uint8arraylist@2.4.3 + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interface-record': 2.0.6 + '@libp2p/logger': 2.0.5 + '@libp2p/peer-id': 2.0.1 + '@libp2p/utils': 3.0.4 + '@multiformats/multiaddr': 11.3.0 + err-code: 3.0.1 + interface-datastore: 7.0.4 + it-all: 2.0.0 + it-filter: 2.0.0 + it-foreach: 1.0.0 + it-map: 2.0.0 + it-pipe: 2.0.5 + multiformats: 11.0.1 + protons-runtime: 4.0.2_uint8arraylist@2.4.3 + uint8-varint: 1.0.4 + uint8arraylist: 2.4.3 + uint8arrays: 4.0.3 + varint: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/peer-store/6.0.0: + resolution: {integrity: sha512-7GSqRYkJR3E0Vo96XH84X6KNPdwOE1t6jb7jegYzvzKDZMFaceJUZg9om3+ZHCUbethnYuqsY7j0c7OHCB40nA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interface-peer-info': 1.0.8 + '@libp2p/interface-peer-store': 1.2.8 + '@libp2p/interface-record': 2.0.6 + '@libp2p/interfaces': 3.3.1 + '@libp2p/logger': 2.0.5 + '@libp2p/peer-id': 2.0.1 + '@libp2p/peer-record': 5.0.0 + '@multiformats/multiaddr': 11.3.0 + err-code: 3.0.1 + interface-datastore: 7.0.4 + it-all: 2.0.0 + it-filter: 2.0.0 + it-foreach: 1.0.0 + it-map: 2.0.0 + it-pipe: 2.0.5 + mortice: 3.0.1 + multiformats: 11.0.1 + protons-runtime: 4.0.2_uint8arraylist@2.4.3 + uint8arraylist: 2.4.3 + uint8arrays: 4.0.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/tracked-map/3.0.2: + resolution: {integrity: sha512-mtsZWf2ntttuCrmEIro2p1ceCAaKde2TzT/99DZlkGdJN/Mo1jZgXq7ltZjWc8G3DAlgs+0ygjMzNKcZzAveuQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-metrics': 4.0.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/utils/3.0.4: + resolution: {integrity: sha512-EWJNJtlop2ylmGE1BNiMA0u4eTLKoY0LbZ/DOvSDs9VlGSLua9J+LUjp6XV8lazGv7l1rOLiU+1hP5fcmg1+eg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@achingbrain/ip-address': 8.1.0 + '@libp2p/interface-connection': 3.0.8 + '@libp2p/interface-peer-store': 1.2.8 + '@libp2p/logger': 2.0.5 + '@multiformats/multiaddr': 11.3.0 + abortable-iterator: 4.0.2 + err-code: 3.0.1 + is-loopback-addr: 2.0.1 + it-stream-types: 1.0.5 + private-ip: 3.0.0 + uint8arraylist: 2.4.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@libp2p/websockets/5.0.3: + resolution: {integrity: sha512-/0ie47LEKU5VVeaeE/T6UbvaZbUSmyWXu4KcojY+zl809oONFjagKuZB6T7jJQqAV7WCq7O+ulC2tFOwbID08w==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/interface-connection': 3.0.8 + '@libp2p/interface-transport': 2.1.1 + '@libp2p/interfaces': 3.3.1 + '@libp2p/logger': 2.0.5 + '@libp2p/utils': 3.0.4 + '@multiformats/mafmt': 11.0.3 + '@multiformats/multiaddr': 11.3.0 + '@multiformats/multiaddr-to-uri': 9.0.2 + abortable-iterator: 4.0.2 + it-ws: 5.0.6 + p-defer: 4.0.0 + p-timeout: 6.1.1 + wherearewe: 2.0.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate dev: false /@multiformats/base-x/4.0.1: resolution: {integrity: sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==} + dev: true - /@noble/ed25519/1.6.1: - resolution: {integrity: sha512-Gptpue6qPmg7p1E5LBO5GDtXw5WMc2DVtUmu4EQequOcoCvum1dT9sY6s9M8aSJWq9YopCN4jmTOAvqMdw3q7w==} + /@multiformats/mafmt/11.0.3: + resolution: {integrity: sha512-DvCQeZJgaC4kE3BLqMuW3gQkNAW14Z7I+yMt30Ze+wkfHkWSp+bICcHGihhtgfzYCumHA/vHlJ9n54mrCcmnvQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@multiformats/multiaddr': 11.3.0 + transitivePeerDependencies: + - supports-color + dev: false - /@noble/secp256k1/1.6.3: - resolution: {integrity: sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==} + /@multiformats/multiaddr-to-uri/9.0.2: + resolution: {integrity: sha512-vrWmfFadmix5Ab9l//oRQdQ7O3J5bGJpJRMSm21bHlQB0XV4xtNU6vMZBVXeu3Su79LgflEp37cjTFE3yKf3Hw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@multiformats/multiaddr': 11.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@multiformats/multiaddr/11.3.0: + resolution: {integrity: sha512-Inrmp986nHe92pgYyOWNVnB8QDmYe5EhR/7TStc46O4YEm87pbc1i4DWiTlEJ6tOpL8V6IBH5ol8BZsIaN+Tww==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@chainsafe/is-ip': 2.0.1 + dns-over-http-resolver: 2.1.1 + err-code: 3.0.1 + multiformats: 11.0.1 + uint8arrays: 4.0.3 + varint: 6.0.0 + transitivePeerDependencies: + - supports-color + + /@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1: + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + dependencies: + eslint-scope: 5.1.1 + dev: false + + /@noble/ed25519/1.7.3: + resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} + + /@noble/secp256k1/1.7.1: + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: false + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: false + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: false + + /@pmmmwh/react-refresh-webpack-plugin/0.5.10_unmakpayn7vcxadrrsbqlrpehy: + resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <4.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.27.2 + error-stack-parser: 2.1.4 + find-up: 5.0.0 + html-entities: 2.3.3 + loader-utils: 2.0.4 + react-refresh: 0.11.0 + schema-utils: 3.1.1 + source-map: 0.7.4 + webpack: 5.75.0 + webpack-dev-server: 4.11.1_webpack@5.75.0 + dev: false /@protobufjs/aspromise/1.1.2: resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} @@ -920,18 +3720,126 @@ packages: /@protobufjs/utf8/1.1.0: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - /@sinclair/typebox/0.24.28: - resolution: {integrity: sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow==} + /@rollup/plugin-babel/5.3.1_3dsfpkpoyvuuxyfgdbpn4j4uzm: + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-module-imports': 7.18.6 + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + rollup: 2.79.1 + dev: false - /@sinonjs/commons/1.8.3: - resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} + /@rollup/plugin-inject/5.0.3: + resolution: {integrity: sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.0.2 + estree-walker: 2.0.2 + magic-string: 0.27.0 + dev: true + + /@rollup/plugin-node-resolve/11.2.1_rollup@2.79.1: + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.0 + is-module: 1.0.0 + resolve: 1.22.1 + rollup: 2.79.1 + dev: false + + /@rollup/plugin-replace/2.4.2_rollup@2.79.1: + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + magic-string: 0.25.9 + rollup: 2.79.1 + dev: false + + /@rollup/pluginutils/3.1.0_rollup@2.79.1: + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: false + + /@rollup/pluginutils/5.0.2: + resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.0 + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + + /@rushstack/eslint-patch/1.2.0: + resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} + dev: false + + /@sinclair/typebox/0.24.51: + resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} + + /@sinclair/typebox/0.25.21: + resolution: {integrity: sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==} + dev: true + + /@sinonjs/commons/1.8.6: + resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} dependencies: type-detect: 4.0.8 + /@sinonjs/commons/2.0.0: + resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers/10.0.2: + resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} + dependencies: + '@sinonjs/commons': 2.0.0 + dev: true + + /@sinonjs/fake-timers/8.1.0: + resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + dependencies: + '@sinonjs/commons': 1.8.6 + /@sinonjs/fake-timers/9.1.2: resolution: {integrity: sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==} dependencies: - '@sinonjs/commons': 1.8.3 + '@sinonjs/commons': 1.8.6 + dev: true /@sovpro/delimited-stream/1.1.0: resolution: {integrity: sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw==} @@ -1022,46 +3930,243 @@ packages: '@stablelib/random': 1.0.2 '@stablelib/wipe': 1.0.1 + /@surma/rollup-plugin-off-main-thread/2.2.3: + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + dependencies: + ejs: 3.1.8 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.8 + dev: false + + /@svgr/babel-plugin-add-jsx-attribute/5.4.0: + resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-remove-jsx-attribute/5.4.0: + resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-remove-jsx-empty-expression/5.0.1: + resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-replace-jsx-attribute-value/5.0.1: + resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-svg-dynamic-title/5.4.0: + resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-svg-em-dimensions/5.4.0: + resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-transform-react-native-svg/5.4.0: + resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-transform-svg-component/5.5.0: + resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-preset/5.5.0: + resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} + engines: {node: '>=10'} + 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 + dev: false + + /@svgr/core/5.5.0: + resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} + engines: {node: '>=10'} + dependencies: + '@svgr/plugin-jsx': 5.5.0 + camelcase: 6.3.0 + cosmiconfig: 7.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@svgr/hast-util-to-babel-ast/5.5.0: + resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} + engines: {node: '>=10'} + dependencies: + '@babel/types': 7.20.7 + dev: false + + /@svgr/plugin-jsx/5.5.0: + resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.20.12 + '@svgr/babel-preset': 5.5.0 + '@svgr/hast-util-to-babel-ast': 5.5.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@svgr/plugin-svgo/5.5.0: + resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} + engines: {node: '>=10'} + dependencies: + cosmiconfig: 7.1.0 + deepmerge: 4.3.0 + svgo: 1.3.2 + dev: false + + /@svgr/webpack/5.5.0: + resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.20.12 + '@babel/plugin-transform-react-constant-elements': 7.20.2_@babel+core@7.20.12 + '@babel/preset-env': 7.20.2_@babel+core@7.20.12 + '@babel/preset-react': 7.18.6_@babel+core@7.20.12 + '@svgr/core': 5.5.0 + '@svgr/plugin-jsx': 5.5.0 + '@svgr/plugin-svgo': 5.5.0 + loader-utils: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@testing-library/dom/8.20.0: + resolution: {integrity: sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==} + engines: {node: '>=12'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/runtime': 7.20.13 + '@types/aria-query': 5.0.1 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.4.4 + pretty-format: 27.5.1 + dev: false + + /@testing-library/jest-dom/5.16.5: + resolution: {integrity: sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==} + engines: {node: '>=8', npm: '>=6', yarn: '>=1'} + dependencies: + '@adobe/css-tools': 4.1.0 + '@babel/runtime': 7.20.13 + '@types/testing-library__jest-dom': 5.14.5 + aria-query: 5.1.3 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.5.16 + lodash: 4.17.21 + redent: 3.0.0 + dev: false + + /@testing-library/react/13.4.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==} + engines: {node: '>=12'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@babel/runtime': 7.20.13 + '@testing-library/dom': 8.20.0 + '@types/react-dom': 18.0.10 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /@testing-library/user-event/13.5.0_yxlyej73nftwmh2fiao7paxmlm: + resolution: {integrity: sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==} + engines: {node: '>=10', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + dependencies: + '@babel/runtime': 7.20.13 + '@testing-library/dom': 8.20.0 + dev: false + + /@tootallnate/once/1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + + /@trysound/sax/0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: false + /@tsconfig/node10/1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: false + dev: true /@tsconfig/node12/1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: false + dev: true /@tsconfig/node14/1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: false + dev: true /@tsconfig/node16/1.0.3: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} + dev: true + + /@types/aria-query/5.0.1: + resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==} dev: false - /@types/babel__core/7.1.19: - resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==} + /@types/babel__core/7.20.0: + resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.18.13 - '@babel/types': 7.18.13 + '@babel/parser': 7.20.15 + '@babel/types': 7.20.7 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.18.0 + '@types/babel__traverse': 7.18.3 /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.18.13 - '@babel/types': 7.18.13 + '@babel/parser': 7.20.15 + '@babel/types': 7.20.7 - /@types/babel__traverse/7.18.0: - resolution: {integrity: sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw==} + /@types/babel__traverse/7.18.3: + resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.18.13 + '@babel/types': 7.20.7 + + /@types/body-parser/1.19.2: + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + dependencies: + '@types/connect': 3.4.35 + '@types/node': 16.18.12 + dev: false + + /@types/bonjour/3.5.10: + resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} + dependencies: + '@types/node': 16.18.12 + dev: false /@types/bs58/4.0.1: resolution: {integrity: sha512-yfAgiWgVLjFCmRv8zAcOIHywYATEwiTVccTLnRp6UxTNavT55M9d/uhK3T03St/+8/z/wW+CRjGKUNmEqoHHCA==} @@ -1069,10 +4174,75 @@ packages: base-x: 3.0.9 dev: true - /@types/graceful-fs/4.1.5: - resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} + /@types/connect-history-api-fallback/1.3.5: + resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} dependencies: - '@types/node': 18.7.14 + '@types/express-serve-static-core': 4.17.33 + '@types/node': 16.18.12 + dev: false + + /@types/connect/3.4.35: + resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + dependencies: + '@types/node': 16.18.12 + dev: false + + /@types/eslint-scope/3.7.4: + resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + dependencies: + '@types/eslint': 8.21.0 + '@types/estree': 0.0.51 + dev: false + + /@types/eslint/8.21.0: + resolution: {integrity: sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==} + dependencies: + '@types/estree': 1.0.0 + '@types/json-schema': 7.0.11 + dev: false + + /@types/estree/0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: false + + /@types/estree/0.0.51: + resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + dev: false + + /@types/estree/1.0.0: + resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + + /@types/express-serve-static-core/4.17.33: + resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} + dependencies: + '@types/node': 16.18.12 + '@types/qs': 6.9.7 + '@types/range-parser': 1.2.4 + dev: false + + /@types/express/4.17.17: + resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} + dependencies: + '@types/body-parser': 1.19.2 + '@types/express-serve-static-core': 4.17.33 + '@types/qs': 6.9.7 + '@types/serve-static': 1.15.0 + dev: false + + /@types/graceful-fs/4.1.6: + resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} + dependencies: + '@types/node': 16.18.12 + + /@types/html-minifier-terser/6.1.0: + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + dev: false + + /@types/http-proxy/1.17.9: + resolution: {integrity: sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==} + dependencies: + '@types/node': 16.18.12 + dev: false /@types/istanbul-lib-coverage/2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} @@ -1092,51 +4262,314 @@ packages: dependencies: jest-matcher-utils: 27.5.1 pretty-format: 27.5.1 + dev: false + + /@types/jest/28.1.0: + resolution: {integrity: sha512-ITfF6JJIl9zbEi2k6NmhNE/BiDqfsI/ceqfvdaWaPbcrCpYyyRq4KtDQIWh6vQUru6SqwppODiom/Zhid+np6A==} + dependencies: + jest-matcher-utils: 27.5.1 + pretty-format: 27.5.1 + dev: true + + /@types/jest/29.4.0: + resolution: {integrity: sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==} + dependencies: + expect: 29.4.2 + pretty-format: 29.4.2 + dev: true + + /@types/json-schema/7.0.11: + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: false + + /@types/json5/0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: false /@types/long/4.0.2: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + dev: true + + /@types/mime/3.0.1: + resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} + dev: false /@types/minimatch/3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + dev: true - /@types/node/18.7.11: - resolution: {integrity: sha512-KZhFpSLlmK/sdocfSAjqPETTMd0ug6HIMIAwkwUpU79olnZdQtMxpQP+G1wDzCH7na+FltSIhbaZuKdwZ8RDrw==} + /@types/node/16.11.59: + resolution: {integrity: sha512-6u+36Dj3aDzhfBVUf/mfmc92OEdzQ2kx2jcXGdigfl70E/neV21ZHE6UCz4MDzTRcVqGAM27fk+DLXvyDsn3Jw==} - /@types/node/18.7.14: - resolution: {integrity: sha512-6bbDaETVi8oyIARulOE9qF1/Qdi/23z6emrUh0fNJRUmjznqrixD4MpGDdgOFk5Xb0m2H6Xu42JGdvAxaJR/wA==} + /@types/node/16.18.12: + resolution: {integrity: sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==} + + /@types/node/18.13.0: + resolution: {integrity: sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==} + + /@types/parse-json/4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: false /@types/platform/1.3.4: resolution: {integrity: sha512-U0o4K+GNiK0PNxoDwd8xRnvLVe4kzei6opn3/FCjAriqaP+rfrDdSl1kP/hLL6Y3/Y3hhGnBwD4dCkkAqs1W/Q==} dev: true - /@types/prettier/2.7.0: - resolution: {integrity: sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A==} + /@types/prettier/2.7.2: + resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} + + /@types/prop-types/15.7.5: + resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + dev: false + + /@types/q/1.5.5: + resolution: {integrity: sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==} + dev: false + + /@types/qs/6.9.7: + resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} + dev: false + + /@types/range-parser/1.2.4: + resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + dev: false + + /@types/react-dom/18.0.10: + resolution: {integrity: sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==} + dependencies: + '@types/react': 18.0.27 + dev: false + + /@types/react/18.0.27: + resolution: {integrity: sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + dev: false + + /@types/resolve/1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 16.18.12 + dev: false /@types/retry/0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + /@types/retry/0.12.1: + resolution: {integrity: sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==} + dev: false + + /@types/scheduler/0.16.2: + resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} + dev: false + + /@types/semver/7.3.13: + resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + dev: false + + /@types/serve-index/1.9.1: + resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} + dependencies: + '@types/express': 4.17.17 + dev: false + + /@types/serve-static/1.15.0: + resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} + dependencies: + '@types/mime': 3.0.1 + '@types/node': 16.18.12 + dev: false + + /@types/sockjs/0.3.33: + resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} + dependencies: + '@types/node': 16.18.12 + dev: false + /@types/stack-utils/2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} - /@types/uuid/8.3.4: - resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + /@types/testing-library__jest-dom/5.14.5: + resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==} + dependencies: + '@types/jest': 27.5.2 + dev: false + + /@types/trusted-types/2.0.2: + resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} + dev: false + + /@types/uuid/8.3.2: + resolution: {integrity: sha512-u40ViizKDmdl5FhOXn9WQbulpigYCaiD5hD4KqR3xyQww6l3+0ND+A9TeFla8tFpqvR+UAkJdYb/8jdaQG4/nw==} dev: true + /@types/ws/8.5.4: + resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} + dependencies: + '@types/node': 16.18.12 + dev: false + /@types/yargs-parser/21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} - /@types/yargs/16.0.4: - resolution: {integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==} + /@types/yargs/16.0.5: + resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==} dependencies: '@types/yargs-parser': 21.0.0 - /@types/yargs/17.0.11: - resolution: {integrity: sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA==} + /@types/yargs/17.0.22: + resolution: {integrity: sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==} dependencies: '@types/yargs-parser': 21.0.0 + /@typescript-eslint/eslint-plugin/5.51.0_z4swst3wuuqk4hlme4ajzslgh4: + resolution: {integrity: sha512-wcAwhEWm1RgNd7dxD/o+nnLW8oH+6RK1OGnmbmkj/GGoDPV1WWMVP0FXYQBivKHdwM1pwii3bt//RC62EriIUQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/parser': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm + '@typescript-eslint/scope-manager': 5.51.0 + '@typescript-eslint/type-utils': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm + '@typescript-eslint/utils': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm + debug: 4.3.4 + eslint: 8.34.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + regexpp: 3.2.0 + semver: 7.3.8 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/experimental-utils/5.51.0_7kw3g6rralp5ps6mg3uyzz6azm: + resolution: {integrity: sha512-8/3+ZyBENl2aog1/QB3S39ptkZ2oRhDB+sJt15UWXBE3skgwL1C8BN9RjpOyhTejwR2hVrvqEjcYcNY6qtZ7nw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm + eslint: 8.34.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /@typescript-eslint/parser/5.51.0_7kw3g6rralp5ps6mg3uyzz6azm: + resolution: {integrity: sha512-fEV0R9gGmfpDeRzJXn+fGQKcl0inIeYobmmUWijZh9zA7bxJ8clPhV9up2ZQzATxAiFAECqPQyMDB4o4B81AaA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.51.0 + '@typescript-eslint/types': 5.51.0 + '@typescript-eslint/typescript-estree': 5.51.0_typescript@4.9.5 + debug: 4.3.4 + eslint: 8.34.0 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/scope-manager/5.51.0: + resolution: {integrity: sha512-gNpxRdlx5qw3yaHA0SFuTjW4rxeYhpHxt491PEcKF8Z6zpq0kMhe0Tolxt0qjlojS+/wArSDlj/LtE69xUJphQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.51.0 + '@typescript-eslint/visitor-keys': 5.51.0 + dev: false + + /@typescript-eslint/type-utils/5.51.0_7kw3g6rralp5ps6mg3uyzz6azm: + resolution: {integrity: sha512-QHC5KKyfV8sNSyHqfNa0UbTbJ6caB8uhcx2hYcWVvJAZYJRBo5HyyZfzMdRx8nvS+GyMg56fugMzzWnojREuQQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.51.0_typescript@4.9.5 + '@typescript-eslint/utils': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm + debug: 4.3.4 + eslint: 8.34.0 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/types/5.51.0: + resolution: {integrity: sha512-SqOn0ANn/v6hFn0kjvLwiDi4AzR++CBZz0NV5AnusT2/3y32jdc0G4woXPWHCumWtUXZKPAS27/9vziSsC9jnw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: false + + /@typescript-eslint/typescript-estree/5.51.0_typescript@4.9.5: + resolution: {integrity: sha512-TSkNupHvNRkoH9FMA3w7TazVFcBPveAAmb7Sz+kArY6sLT86PA5Vx80cKlYmd8m3Ha2SwofM1KwraF24lM9FvA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.51.0 + '@typescript-eslint/visitor-keys': 5.51.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.3.8 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/utils/5.51.0_7kw3g6rralp5ps6mg3uyzz6azm: + resolution: {integrity: sha512-76qs+5KWcaatmwtwsDJvBk4H76RJQBFe+Gext0EfJdC3Vd2kpY2Pf//OHHzHp84Ciw0/rYoGTDnIAr3uWhhJYw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.51.0 + '@typescript-eslint/types': 5.51.0 + '@typescript-eslint/typescript-estree': 5.51.0_typescript@4.9.5 + eslint: 8.34.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@8.34.0 + semver: 7.3.8 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /@typescript-eslint/visitor-keys/5.51.0: + resolution: {integrity: sha512-Oh2+eTdjHjOFjKA27sxESlA87YPSOJafGCR0md5oeMdh1ZcCfAGCIOL216uTBAkAIptvLIfKQhl7lHxMJet4GQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.51.0 + eslint-visitor-keys: 3.3.0 + dev: false + /@vascosantos/moving-average/1.1.0: resolution: {integrity: sha512-MVEJ4vWAPNbrGLjz7ITnHYg+YXZ6ijAqtH5/cHwSoCpbvuJ98aLXwFfPKAUfZpJMQR5uXB58UJajbY130IRF/w==} + dev: true /@wasmer/wasi/0.12.0: resolution: {integrity: sha512-FJhLZKAfLWm/yjQI7eCRHNbA8ezmb7LSpUYFkHruZXs2mXk2+DaQtSElEtOoNrVQ4vApTyVaAd5/b7uEu8w6wQ==} @@ -1153,6 +4586,123 @@ packages: pako: 1.0.11 tar-stream: 2.2.0 + /@webassemblyjs/ast/1.11.1: + resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + dev: false + + /@webassemblyjs/floating-point-hex-parser/1.11.1: + resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} + dev: false + + /@webassemblyjs/helper-api-error/1.11.1: + resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} + dev: false + + /@webassemblyjs/helper-buffer/1.11.1: + resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} + dev: false + + /@webassemblyjs/helper-numbers/1.11.1: + resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.1 + '@webassemblyjs/helper-api-error': 1.11.1 + '@xtuc/long': 4.2.2 + dev: false + + /@webassemblyjs/helper-wasm-bytecode/1.11.1: + resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} + dev: false + + /@webassemblyjs/helper-wasm-section/1.11.1: + resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + dev: false + + /@webassemblyjs/ieee754/1.11.1: + resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: false + + /@webassemblyjs/leb128/1.11.1: + resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} + dependencies: + '@xtuc/long': 4.2.2 + dev: false + + /@webassemblyjs/utf8/1.11.1: + resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} + dev: false + + /@webassemblyjs/wasm-edit/1.11.1: + resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/helper-wasm-section': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/wasm-opt': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + '@webassemblyjs/wast-printer': 1.11.1 + dev: false + + /@webassemblyjs/wasm-gen/1.11.1: + resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/ieee754': 1.11.1 + '@webassemblyjs/leb128': 1.11.1 + '@webassemblyjs/utf8': 1.11.1 + dev: false + + /@webassemblyjs/wasm-opt/1.11.1: + resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + dev: false + + /@webassemblyjs/wasm-parser/1.11.1: + resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-api-error': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/ieee754': 1.11.1 + '@webassemblyjs/leb128': 1.11.1 + '@webassemblyjs/utf8': 1.11.1 + dev: false + + /@webassemblyjs/wast-printer/1.11.1: + resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@xtuc/long': 4.2.2 + dev: false + + /@xtuc/ieee754/1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: false + + /@xtuc/long/4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: false + + /abab/2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + /abort-controller/3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -1164,23 +4714,128 @@ packages: resolution: {integrity: sha512-qVP8HFfTpUQI2F+f1tpTriKDIZ4XrmwCrBCrQeRKO7DKWF3kgoT6NXiNDv2krrGcHxPwmI63eGQiec81sEaWIw==} dependencies: get-iterator: 1.0.2 + dev: true + + /abortable-iterator/4.0.2: + resolution: {integrity: sha512-SJGELER5yXr9v3kiL6mT5RZ1qlyJ9hV4nm34+vfsdIM1lp3zENQvpsqKgykpFLgRMUn3lzlizLTpiOASW05/+g==} + dependencies: + get-iterator: 2.0.0 + it-stream-types: 1.0.5 + dev: false + + /accepts/1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + + /acorn-globals/6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + + /acorn-import-assertions/1.8.0_acorn@8.8.2: + resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.8.2 + dev: false + + /acorn-jsx/5.3.2_acorn@8.8.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.8.2 + dev: false + + /acorn-node/1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + xtend: 4.0.2 + dev: false + + /acorn-walk/7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} + dev: true + + /acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + + /acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + hasBin: true + + /address/1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} dev: false - /acorn/8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} - engines: {node: '>=0.4.0'} + /adjust-sourcemap-loader/4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} + dependencies: + loader-utils: 2.0.4 + regex-parser: 2.2.11 dev: false + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 + dev: true + + /ajv-formats/2.1.1_ajv@8.12.0: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.12.0 + dev: false + + /ajv-keywords/3.5.2_ajv@6.12.6: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: false + + /ajv-keywords/5.1.0_ajv@8.12.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + dependencies: + ajv: 8.12.0 + fast-deep-equal: 3.1.3 + dev: false /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -1190,16 +4845,36 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + /ajv/8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: false + /ansi-escapes/4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 + /ansi-html-community/0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + dev: false + /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + /ansi-regex/6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: false + /ansi-styles/3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -1220,14 +4895,14 @@ packages: resolution: {integrity: sha512-B+rDnWasMi/eWcajPcCWSlYc7muXOrcYrqgyzcdKisl2H/WTlQ0gip1KyQfr0ZlxJdsuWCj/LWwQm7fhyhRfIQ==} dependencies: abort-controller: 3.0.0 - native-abort-controller: 1.0.4 + native-abort-controller: 1.0.4_abort-controller@3.0.0 dev: true /any-signal/3.0.1: resolution: {integrity: sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg==} - /anymatch/3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + /anymatch/3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 @@ -1235,6 +4910,10 @@ packages: /arg/4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /arg/5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} dev: false /argparse/1.0.10: @@ -1242,6 +4921,85 @@ packages: dependencies: sprintf-js: 1.0.3 + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: false + + /aria-query/5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + dependencies: + deep-equal: 2.2.0 + dev: false + + /array-flatten/1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: false + + /array-flatten/2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + dev: false + + /array-includes/3.1.6: + resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + get-intrinsic: 1.2.0 + is-string: 1.0.7 + dev: false + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: false + + /array.prototype.flat/1.3.1: + resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + es-shim-unscopables: 1.0.0 + dev: false + + /array.prototype.flatmap/1.3.1: + resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + es-shim-unscopables: 1.0.0 + dev: false + + /array.prototype.reduce/1.0.5: + resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: false + + /array.prototype.tosorted/1.1.1: + resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.0 + dev: false + + /asap/2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: false + /asn1.js/5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} dependencies: @@ -1249,15 +5007,28 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 safer-buffer: 2.1.2 + dev: true /asn1/0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: safer-buffer: 2.1.2 + dev: true /assert-plus/1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} + dev: true + + /ast-types-flow/0.0.7: + resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + dev: false + + /async/2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + dependencies: + lodash: 4.17.21 + dev: true /async/3.2.3: resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} @@ -1269,78 +5040,292 @@ packages: /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + /at-least-node/1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: false + + /autoprefixer/10.4.13_postcss@8.4.21: + resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.5 + caniuse-lite: 1.0.30001451 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /available-typed-arrays/1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: false + /aws-sign2/0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + dev: true - /aws4/1.11.0: - resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==} + /aws4/1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + dev: true - /babel-jest/28.1.3_@babel+core@7.18.13: - resolution: {integrity: sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /axe-core/4.6.3: + resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==} + engines: {node: '>=4'} + dev: false + + /axobject-query/3.1.1: + resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} + dependencies: + deep-equal: 2.2.0 + dev: false + + /babel-jest/27.5.1_@babel+core@7.20.12: + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.18.13 - '@jest/transform': 28.1.3 - '@types/babel__core': 7.1.19 + '@babel/core': 7.20.12 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 28.1.3_@babel+core@7.18.13 + babel-preset-jest: 27.5.1_@babel+core@7.20.12 chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 transitivePeerDependencies: - supports-color + /babel-jest/28.1.3_@babel+core@7.20.12: + resolution: {integrity: sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.20.12 + '@jest/transform': 28.1.3 + '@types/babel__core': 7.20.0 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 28.1.3_@babel+core@7.20.12 + chalk: 4.1.2 + graceful-fs: 4.2.10 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-jest/29.4.2_@babel+core@7.20.12: + resolution: {integrity: sha512-vcghSqhtowXPG84posYkkkzcZsdayFkubUgbE3/1tuGbX7AQtwCkkNA/wIbB0BMjuCPoqTkiDyKN7Ty7d3uwNQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.20.12 + '@jest/transform': 29.4.2 + '@types/babel__core': 7.20.0 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.4.2_@babel+core@7.20.12 + chalk: 4.1.2 + graceful-fs: 4.2.10 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-loader/8.3.0_la66t7xldg4uecmyawueag5wkm: + resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.20.12 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.75.0 + dev: false + /babel-plugin-istanbul/6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.0 + istanbul-lib-instrument: 5.2.1 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color + /babel-plugin-jest-hoist/27.5.1: + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/template': 7.20.7 + '@babel/types': 7.20.7 + '@types/babel__core': 7.20.0 + '@types/babel__traverse': 7.18.3 + /babel-plugin-jest-hoist/28.1.3: resolution: {integrity: sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.18.13 - '@types/babel__core': 7.1.19 - '@types/babel__traverse': 7.18.0 + '@babel/template': 7.20.7 + '@babel/types': 7.20.7 + '@types/babel__core': 7.20.0 + '@types/babel__traverse': 7.18.3 + dev: true - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.18.13: + /babel-plugin-jest-hoist/29.4.2: + resolution: {integrity: sha512-5HZRCfMeWypFEonRbEkwWXtNS1sQK159LhRVyRuLzyfVBxDy/34Tr/rg4YVi0SScSJ4fqeaR/OIeceJ/LaQ0pQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/template': 7.20.7 + '@babel/types': 7.20.7 + '@types/babel__core': 7.20.0 + '@types/babel__traverse': 7.18.3 + dev: true + + /babel-plugin-macros/3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.20.13 + cosmiconfig: 7.1.0 + resolve: 1.22.1 + dev: false + + /babel-plugin-named-asset-import/0.3.8_@babel+core@7.20.12: + resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} + peerDependencies: + '@babel/core': ^7.1.0 + dependencies: + '@babel/core': 7.20.12 + dev: false + + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.12: + resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.20.14 + '@babel/core': 7.20.12 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.12: + resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + core-js-compat: 3.27.2 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.12: + resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.12 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-react-remove-prop-types/0.4.24: + resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} + dev: false + + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.12: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.18.13 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.18.13 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.18.13 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.18.13 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.18.13 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.18.13 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.18.13 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.18.13 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.18.13 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.18.13 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.18.13 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.18.13 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.18.13 + '@babel/core': 7.20.12 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 - /babel-preset-jest/28.1.3_@babel+core@7.18.13: + /babel-preset-jest/27.5.1_@babel+core@7.20.12: + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.12 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + + /babel-preset-jest/28.1.3_@babel+core@7.20.12: resolution: {integrity: sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.18.13 + '@babel/core': 7.20.12 babel-plugin-jest-hoist: 28.1.3 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.18.13 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + dev: true + + /babel-preset-jest/29.4.2_@babel+core@7.20.12: + resolution: {integrity: sha512-ecWdaLY/8JyfUDr0oELBMpj3R5I1L6ZqG+kRJmwqfHtLWuPrJStR0LUkvUhfykJWTsXXMnohsayN/twltBbDrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.12 + babel-plugin-jest-hoist: 29.4.2 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + dev: true + + /babel-preset-react-app/10.0.1: + resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} + dependencies: + '@babel/core': 7.20.12 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-proposal-decorators': 7.20.13_@babel+core@7.20.12 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-proposal-optional-chaining': 7.20.7_@babel+core@7.20.12 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-proposal-private-property-in-object': 7.20.5_@babel+core@7.20.12 + '@babel/plugin-transform-flow-strip-types': 7.19.0_@babel+core@7.20.12 + '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-runtime': 7.19.6_@babel+core@7.20.12 + '@babel/preset-env': 7.20.2_@babel+core@7.20.12 + '@babel/preset-react': 7.18.6_@babel+core@7.20.12 + '@babel/preset-typescript': 7.18.6_@babel+core@7.20.12 + '@babel/runtime': 7.20.13 + babel-plugin-macros: 3.1.0 + babel-plugin-transform-react-remove-prop-types: 0.4.24 + transitivePeerDependencies: + - supports-color + dev: false /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1357,18 +5342,58 @@ packages: /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + /basic-auth/2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /batch/0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + dev: false + /bcrypt-pbkdf/1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} dependencies: tweetnacl: 0.14.5 + dev: true - /bignumber.js/9.1.0: - resolution: {integrity: sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==} + /benchmark/2.1.4: + resolution: {integrity: sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==} + dependencies: + lodash: 4.17.21 + platform: 1.3.6 + dev: false + + /bfj/7.0.2: + resolution: {integrity: sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==} + engines: {node: '>= 8.0.0'} + dependencies: + bluebird: 3.7.2 + check-types: 11.2.2 + hoopy: 0.1.4 + tryer: 1.0.1 + dev: false + + /big.js/5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: false + + /bignumber.js/9.1.1: + resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: false /bindings/1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} dependencies: file-uri-to-path: 1.0.0 + dev: true /bl/4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -1377,12 +5402,13 @@ packages: inherits: 2.0.4 readable-stream: 3.6.0 - /bl/5.0.0: - resolution: {integrity: sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==} + /bl/5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} dependencies: buffer: 6.0.3 inherits: 2.0.4 readable-stream: 3.6.0 + dev: true /blakejs/1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} @@ -1394,14 +5420,53 @@ packages: browser-readablestream-to-it: 1.0.3 dev: true + /bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: false + /bn.js/4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + dev: true + + /body-parser/1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /bonjour-service/1.1.0: + resolution: {integrity: sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==} + dependencies: + array-flatten: 2.1.2 + dns-equal: 1.0.0 + fast-deep-equal: 3.1.3 + multicast-dns: 7.2.5 + dev: false + + /boolbase/1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: false /borc/3.0.0: resolution: {integrity: sha512-ec4JmVC46kE0+layfnwM3l15O70MlFiEbmQHY/vpqIKiUtPVntv4BY4NVnz3N4vb21edV3mY97XVckFvYHWF9g==} engines: {node: '>=4'} + hasBin: true dependencies: - bignumber.js: 9.1.0 + bignumber.js: 9.1.1 buffer: 6.0.3 commander: 2.20.3 ieee754: 1.2.1 @@ -1420,7 +5485,7 @@ packages: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 - dev: true + dev: false /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -1430,9 +5495,15 @@ packages: /brorand/1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: true /browser-or-node/2.0.0: resolution: {integrity: sha512-3Lrks/Okgof+/cRguUNG+qRXSeq79SO3hY4QrXJayJofwJwHiGC0qi99uDjsfTwULUFSr1OGVsBkdIkygKjTUA==} + dev: true + + /browser-or-node/2.1.1: + resolution: {integrity: sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==} + dev: true /browser-process-hrtime/1.0.0: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} @@ -1441,20 +5512,22 @@ packages: resolution: {integrity: sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw==} dev: true - /browserslist/4.21.3: - resolution: {integrity: sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==} + /browserslist/4.21.5: + resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true dependencies: - caniuse-lite: 1.0.30001382 - electron-to-chromium: 1.4.227 - node-releases: 2.0.6 - update-browserslist-db: 1.0.5_browserslist@4.21.3 + caniuse-lite: 1.0.30001451 + electron-to-chromium: 1.4.295 + node-releases: 2.0.10 + update-browserslist-db: 1.0.10_browserslist@4.21.5 /bs-logger/0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} dependencies: fast-json-stable-stringify: 2.1.0 + dev: true /bs58/5.0.0: resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} @@ -1484,10 +5557,56 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 + /builtin-modules/3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: false + + /busboy/1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + + /byte-access/1.0.1: + resolution: {integrity: sha512-GKYa+lvxnzhgHWj9X+LCsQ4s2/C5uvib573eAOiQKywXMkzFFErY2+yQdzmdE5iWVpmqecsRx3bOtOY4/1eINw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + uint8arraylist: 2.4.3 + dev: false + + /bytes/3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: false + + /bytes/3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.0 + /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + /camel-case/4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.5.0 + dev: false + + /camelcase-css/2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: false + /camelcase/5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -1496,11 +5615,26 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - /caniuse-lite/1.0.30001382: - resolution: {integrity: sha512-2rtJwDmSZ716Pxm1wCtbPvHtbDWAreTPxXbkc5RkKglow3Ig/4GNGazDI9/BVnXbG/wnv6r3B5FEbkfg9OcTGg==} + /caniuse-api/3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.21.5 + caniuse-lite: 1.0.30001451 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: false + + /caniuse-lite/1.0.30001451: + resolution: {integrity: sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==} + + /case-sensitive-paths-webpack-plugin/2.4.0: + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} + engines: {node: '>=4'} + dev: false /caseless/0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + dev: true /chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -1510,6 +5644,14 @@ packages: escape-string-regexp: 1.0.5 supports-color: 5.5.0 + /chalk/3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: false + /chalk/4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -1521,27 +5663,68 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - /ci-info/3.3.2: - resolution: {integrity: sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==} + /char-regex/2.0.1: + resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} + engines: {node: '>=12.20'} + dev: false + + /check-types/11.2.2: + resolution: {integrity: sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==} + dev: false + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: false + + /chrome-trace-event/1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: false + + /ci-info/3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} /cids/1.1.9: resolution: {integrity: sha512-l11hWRfugIcbGuTZwAM5PwpjPPjyb6UZOGwlHSnOBV5o07XhQ4gNpBN67FbODvpjyHtd+0Xs6KNvUcGBiDRsdg==} engines: {node: '>=4.0.0', npm: '>=3.0.0'} + deprecated: This module has been superseded by the multiformats module dependencies: multibase: 4.0.6 multicodec: 3.2.1 multihashes: 4.0.3 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 + dev: true /cjs-module-lexer/1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} /class-is/1.1.0: resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} + dev: true + + /clean-css/5.3.2: + resolution: {integrity: sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==} + engines: {node: '>= 10.0'} + dependencies: + source-map: 0.6.1 + dev: false /clean-stack/2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} + dev: true /cliui/7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -1550,10 +5733,28 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + /cliui/8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + /coa/2.0.2: + resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} + engines: {node: '>= 4.0'} + dependencies: + '@types/q': 1.5.5 + chalk: 2.4.2 + q: 1.5.1 + dev: false + /collect-v8-coverage/1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} @@ -1574,6 +5775,14 @@ packages: /color-name/1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /colord/2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: false + + /colorette/2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + dev: false + /combined-stream/1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -1582,22 +5791,146 @@ packages: /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true + + /commander/7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: false + + /commander/8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: false + + /common-path-prefix/3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + dev: false + + /common-tags/1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: false + + /commondir/1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: false + + /compressible/2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /compression/1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - /convert-source-map/1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} + /confusing-browser-globals/1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: false + + /connect-history-api-fallback/2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + dev: false + + /content-disposition/0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} dependencies: - safe-buffer: 5.1.2 + safe-buffer: 5.2.1 + dev: false + + /content-type/1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: false + + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + /convert-source-map/2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + + /cookie-signature/1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: false + + /cookie/0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: false + + /core-js-compat/3.27.2: + resolution: {integrity: sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg==} + dependencies: + browserslist: 4.21.5 + dev: false + + /core-js-pure/3.27.2: + resolution: {integrity: sha512-Cf2jqAbXgWH3VVzjyaaFkY1EBazxugUepGymDoeteyYr9ByX51kD2jdHZlsEF/xnJMyN3Prua7mQuzwMg6Zc9A==} + requiresBuild: true + dev: false + + /core-js/3.27.2: + resolution: {integrity: sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==} + requiresBuild: true + dev: false /core-util-is/1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + dev: true + + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + + /corser/2.0.1: + resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} + engines: {node: '>= 0.4.0'} + dev: true + + /cosmiconfig/6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + + /cosmiconfig/7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false /create-require/1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: false + dev: true /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -1607,15 +5940,265 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /crypto-random-string/2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: false + + /css-blank-pseudo/3.0.3_postcss@8.4.21: + resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /css-declaration-sorter/6.3.1_postcss@8.4.21: + resolution: {integrity: sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.21 + dev: false + + /css-has-pseudo/3.0.4_postcss@8.4.21: + resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /css-loader/6.7.3_webpack@5.75.0: + resolution: {integrity: sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + icss-utils: 5.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-modules-extract-imports: 3.0.0_postcss@8.4.21 + postcss-modules-local-by-default: 4.0.0_postcss@8.4.21 + postcss-modules-scope: 3.0.0_postcss@8.4.21 + postcss-modules-values: 4.0.0_postcss@8.4.21 + postcss-value-parser: 4.2.0 + semver: 7.3.8 + webpack: 5.75.0 + dev: false + + /css-minimizer-webpack-plugin/3.4.1_webpack@5.75.0: + resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@parcel/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + dependencies: + cssnano: 5.1.14_postcss@8.4.21 + jest-worker: 27.5.1 + postcss: 8.4.21 + schema-utils: 4.0.0 + serialize-javascript: 6.0.1 + source-map: 0.6.1 + webpack: 5.75.0 + dev: false + + /css-prefers-color-scheme/6.0.3_postcss@8.4.21: + resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.21 + dev: false + + /css-select-base-adapter/0.1.1: + resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} + dev: false + + /css-select/2.1.0: + resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} + dependencies: + boolbase: 1.0.0 + css-what: 3.4.2 + domutils: 1.7.0 + nth-check: 1.0.2 + dev: false + + /css-select/4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + dev: false + + /css-tree/1.0.0-alpha.37: + resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.4 + source-map: 0.6.1 + dev: false + + /css-tree/1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: false + + /css-what/3.4.2: + resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} + engines: {node: '>= 6'} + dev: false + + /css-what/6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: false + + /css.escape/1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + dev: false + + /cssdb/7.4.1: + resolution: {integrity: sha512-0Q8NOMpXJ3iTDDbUv9grcmQAfdDx4qz+fN/+Md2FGbevT+6+bJNQ2LjB2YIUlLbpBTM32idU1Sb+tb/uGt6/XQ==} + dev: false + + /cssesc/3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /cssnano-preset-default/5.2.13_postcss@8.4.21: + resolution: {integrity: sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.3.1_postcss@8.4.21 + cssnano-utils: 3.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-calc: 8.2.4_postcss@8.4.21 + postcss-colormin: 5.3.0_postcss@8.4.21 + postcss-convert-values: 5.1.3_postcss@8.4.21 + postcss-discard-comments: 5.1.2_postcss@8.4.21 + postcss-discard-duplicates: 5.1.0_postcss@8.4.21 + postcss-discard-empty: 5.1.1_postcss@8.4.21 + postcss-discard-overridden: 5.1.0_postcss@8.4.21 + postcss-merge-longhand: 5.1.7_postcss@8.4.21 + postcss-merge-rules: 5.1.3_postcss@8.4.21 + postcss-minify-font-values: 5.1.0_postcss@8.4.21 + postcss-minify-gradients: 5.1.1_postcss@8.4.21 + postcss-minify-params: 5.1.4_postcss@8.4.21 + postcss-minify-selectors: 5.2.1_postcss@8.4.21 + postcss-normalize-charset: 5.1.0_postcss@8.4.21 + postcss-normalize-display-values: 5.1.0_postcss@8.4.21 + postcss-normalize-positions: 5.1.1_postcss@8.4.21 + postcss-normalize-repeat-style: 5.1.1_postcss@8.4.21 + postcss-normalize-string: 5.1.0_postcss@8.4.21 + postcss-normalize-timing-functions: 5.1.0_postcss@8.4.21 + postcss-normalize-unicode: 5.1.1_postcss@8.4.21 + postcss-normalize-url: 5.1.0_postcss@8.4.21 + postcss-normalize-whitespace: 5.1.1_postcss@8.4.21 + postcss-ordered-values: 5.1.3_postcss@8.4.21 + postcss-reduce-initial: 5.1.1_postcss@8.4.21 + postcss-reduce-transforms: 5.1.0_postcss@8.4.21 + postcss-svgo: 5.1.0_postcss@8.4.21 + postcss-unique-selectors: 5.1.1_postcss@8.4.21 + dev: false + + /cssnano-utils/3.1.0_postcss@8.4.21: + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + dev: false + + /cssnano/5.1.14_postcss@8.4.21: + resolution: {integrity: sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.13_postcss@8.4.21 + lilconfig: 2.0.6 + postcss: 8.4.21 + yaml: 1.10.2 + dev: false + + /csso/4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: false + + /cssom/0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + + /cssom/0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + + /cssstyle/2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + dependencies: + cssom: 0.3.8 + + /csstype/3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} + dev: false + + /damerau-levenshtein/1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: false + /dashdash/1.14.1: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} dependencies: assert-plus: 1.0.0 + dev: true - /data-uri-to-buffer/4.0.0: - resolution: {integrity: sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==} + /data-uri-to-buffer/4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} + dev: true + + /data-urls/2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + dependencies: + abab: 2.0.6 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 /datastore-core/7.0.3: resolution: {integrity: sha512-DmPsUux63daOfCszxLkcp6LjdJ0k/BQNhIMtoAi5mbraYQnEQkFtKORmTu6XmDX6ujbtaBkeuJAiCBNI7MZklw==} @@ -1631,9 +6214,51 @@ packages: it-pipe: 1.1.0 it-pushable: 1.4.2 it-take: 1.0.2 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 transitivePeerDependencies: - supports-color + dev: true + + /datastore-core/8.0.4: + resolution: {integrity: sha512-oBA6a024NFXJOTu+w9nLAimfy4wCYUhdE/5XQGtdKt1BmCVtPYW10GORvVT3pdZBcse6k/mVcBl+hjkXIlm65A==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@libp2p/logger': 2.0.5 + err-code: 3.0.1 + interface-datastore: 7.0.4 + it-all: 2.0.0 + it-drain: 2.0.0 + it-filter: 2.0.0 + it-map: 2.0.0 + it-merge: 2.0.0 + it-pipe: 2.0.5 + it-pushable: 3.1.2 + it-take: 2.0.0 + uint8arrays: 4.0.3 + transitivePeerDependencies: + - supports-color + dev: false + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -1646,11 +6271,39 @@ packages: dependencies: ms: 2.1.2 + /decimal.js/10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + /dedent/0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - /deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + /deep-equal/2.2.0: + resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==} + dependencies: + 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.1 + 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.4.3 + side-channel: 1.0.4 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.9 + dev: false + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + /deepmerge/4.3.0: + resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} engines: {node: '>=0.10.0'} /default-gateway/6.0.3: @@ -1659,14 +6312,79 @@ packages: dependencies: execa: 5.1.1 + /default-import/1.1.5: + resolution: {integrity: sha512-aaJ6uzZlmaEcN1U8yvtiyV7MG3/zZQf1XtGSW5dTfAVvfk0VZuriJelXxVL9a0ni42vMkhjWcztFfpIhwFcfOQ==} + engines: {node: '>=14'} + + /define-lazy-prop/2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: false + + /define-properties/1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: false + + /defined/1.0.1: + resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} + dev: false + /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + /depd/1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: false + + /depd/2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /destroy/1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + /detect-newline/3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} + /detect-node/2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: false + + /detect-port-alt/1.1.6: + resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} + engines: {node: '>= 4.2.1'} + hasBin: true + dependencies: + address: 1.2.2 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + dev: false + + /detective/5.2.1: + resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + acorn-node: 1.8.2 + defined: 1.0.1 + minimist: 1.2.8 + dev: false + + /didyoumean/1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: false + /diff-sequences/27.5.1: resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -1674,35 +6392,185 @@ packages: /diff-sequences/28.1.1: resolution: {integrity: sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true + + /diff-sequences/29.4.2: + resolution: {integrity: sha512-R6P0Y6PrsH3n4hUXxL3nns0rbRk6Q33js3ygJBeEpbzLzgcNuJ61+u0RXasFpTKISw99TxUzFnumSnRLsjhLaw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true /diff/4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + dev: true + + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 dev: false - /dns-over-http-resolver/1.2.3: + /dlv/1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: false + + /dns-equal/1.0.0: + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} + dev: false + + /dns-over-http-resolver/1.2.3_node-fetch@3.3.0: resolution: {integrity: sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA==} dependencies: debug: 4.3.4 - native-fetch: 3.0.0 + native-fetch: 3.0.0_node-fetch@3.3.0 receptacle: 1.3.2 transitivePeerDependencies: + - node-fetch - supports-color + dev: true + + /dns-over-http-resolver/2.1.1: + resolution: {integrity: sha512-Lm/eXB7yAQLJ5WxlBGwYfBY7utduXPZykcSmcG6K7ozM0wrZFvxZavhT6PqI0kd/5CUTfev/RrEFQqyU4CGPew==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + debug: 4.3.4 + native-fetch: 4.0.2_undici@5.18.0 + receptacle: 1.3.2 + undici: 5.18.0 + transitivePeerDependencies: + - supports-color + + /dns-packet/5.4.0: + resolution: {integrity: sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==} + engines: {node: '>=6'} + dependencies: + '@leichtgewicht/ip-codec': 2.0.4 + dev: false + + /doctrine/2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: false + + /doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: false + + /dom-accessibility-api/0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dev: false + + /dom-converter/0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} + dependencies: + utila: 0.4.0 + dev: false + + /dom-serializer/0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + dev: false + + /dom-serializer/1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: false + + /domelementtype/1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: false + + /domelementtype/2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: false + + /domexception/2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + dependencies: + webidl-conversions: 5.0.0 + + /domhandler/4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: false + + /domutils/1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: false + + /domutils/2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: false + + /dot-case/3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.5.0 + dev: false + + /dotenv-expand/5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dev: false + + /dotenv/10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + dev: false + + /duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: false /ecc-jsbn/0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} dependencies: jsbn: 0.1.1 safer-buffer: 2.1.2 + dev: true - /electron-fetch/1.7.4: - resolution: {integrity: sha512-+fBLXEy4CJWQ5bz8dyaeSG1hD6JJ15kBZyj3eh24pIVrd3hLM47H/umffrdQfS6GZ0falF0g9JT9f3Rs6AVUhw==} + /ee-first/1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /ejs/3.1.8: + resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.5 + dev: false + + /electron-fetch/1.9.1: + resolution: {integrity: sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA==} engines: {node: '>=6'} dependencies: encoding: 0.1.13 + dev: true - /electron-to-chromium/1.4.227: - resolution: {integrity: sha512-I9VVajA3oswIJOUFg2PSBqrHLF5Y+ahIfjOV9+v6uYyBqFZutmPxA6fxocDUUmgwYevRWFu1VjLyVG3w45qa/g==} + /electron-to-chromium/1.4.295: + resolution: {integrity: sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==} /elliptic/6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -1714,24 +6582,61 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + dev: true /emittery/0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} engines: {node: '>=12'} + /emittery/0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + dev: true + + /emittery/0.8.1: + resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} + engines: {node: '>=10'} + /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + /emoji-regex/9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: false + + /emojis-list/3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: false + + /encodeurl/1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + /encoding/0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} dependencies: iconv-lite: 0.6.3 + dev: true /end-of-stream/1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 + /enhanced-resolve/5.12.0: + resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.10 + tapable: 2.2.1 + dev: false + + /entities/2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: false + /err-code/3.0.1: resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} @@ -1740,14 +6645,140 @@ packages: dependencies: is-arrayish: 0.2.1 + /error-stack-parser/2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + dependencies: + stackframe: 1.3.4 + dev: false + + /es-abstract/1.21.1: + resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function-bind: 1.1.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.1 + 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.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 + dev: false + + /es-array-method-boxes-properly/1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: false + + /es-get-iterator/1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + 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 + dev: false + + /es-module-lexer/0.9.3: + resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} + dev: false + + /es-set-tostringtag/2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: false + + /es-shim-unscopables/1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + dependencies: + has: 1.0.3 + dev: false + + /es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: false + /es6-promisify/7.0.0: resolution: {integrity: sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==} engines: {node: '>=6'} + dev: true + + /esbuild/0.16.17: + resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.16.17 + '@esbuild/android-arm64': 0.16.17 + '@esbuild/android-x64': 0.16.17 + '@esbuild/darwin-arm64': 0.16.17 + '@esbuild/darwin-x64': 0.16.17 + '@esbuild/freebsd-arm64': 0.16.17 + '@esbuild/freebsd-x64': 0.16.17 + '@esbuild/linux-arm': 0.16.17 + '@esbuild/linux-arm64': 0.16.17 + '@esbuild/linux-ia32': 0.16.17 + '@esbuild/linux-loong64': 0.16.17 + '@esbuild/linux-mips64el': 0.16.17 + '@esbuild/linux-ppc64': 0.16.17 + '@esbuild/linux-riscv64': 0.16.17 + '@esbuild/linux-s390x': 0.16.17 + '@esbuild/linux-x64': 0.16.17 + '@esbuild/netbsd-x64': 0.16.17 + '@esbuild/openbsd-x64': 0.16.17 + '@esbuild/sunos-x64': 0.16.17 + '@esbuild/win32-arm64': 0.16.17 + '@esbuild/win32-ia32': 0.16.17 + '@esbuild/win32-x64': 0.16.17 + dev: true /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + /escape-html/1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + /escape-string-regexp/1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -1756,14 +6787,396 @@ packages: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: false + + /escodegen/2.0.0: + resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + + /eslint-config-react-app/7.0.1_i3tuwedbyjkyv7x6vb4ybywusi: + resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} + engines: {node: '>=14.0.0'} + peerDependencies: + eslint: ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.20.12 + '@babel/eslint-parser': 7.19.1_ydmbqfus77qykiqxhcwsorsqbq + '@rushstack/eslint-patch': 1.2.0 + '@typescript-eslint/eslint-plugin': 5.51.0_z4swst3wuuqk4hlme4ajzslgh4 + '@typescript-eslint/parser': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm + babel-preset-react-app: 10.0.1 + confusing-browser-globals: 1.0.11 + eslint: 8.34.0 + eslint-plugin-flowtype: 8.0.3_5khfkqgka3gftezlren2b6mcy4 + eslint-plugin-import: 2.27.5_62tsymtiqxebhmxuag4hg3gx2m + eslint-plugin-jest: 25.7.0_24ag2vz6wmjuovrv63vw7tbd34 + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.34.0 + eslint-plugin-react: 7.32.2_eslint@8.34.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.34.0 + eslint-plugin-testing-library: 5.10.1_7kw3g6rralp5ps6mg3uyzz6azm + typescript: 4.9.5 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - jest + - supports-color + dev: false + + /eslint-import-resolver-node/0.3.7: + resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} + dependencies: + debug: 3.2.7 + is-core-module: 2.11.0 + resolve: 1.22.1 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-module-utils/2.7.4_ithmlgmaospkvl4p7n7pyp3rgq: + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm + debug: 3.2.7 + eslint: 8.34.0 + eslint-import-resolver-node: 0.3.7 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-plugin-flowtype/8.0.3_5khfkqgka3gftezlren2b6mcy4: + resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@babel/plugin-syntax-flow': ^7.14.5 + '@babel/plugin-transform-react-jsx': ^7.14.9 + eslint: ^8.1.0 + dependencies: + '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-react-jsx': 7.20.13_@babel+core@7.20.12 + eslint: 8.34.0 + lodash: 4.17.21 + string-natural-compare: 3.0.1 + dev: false + + /eslint-plugin-import/2.27.5_62tsymtiqxebhmxuag4hg3gx2m: + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm + 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: 8.34.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4_ithmlgmaospkvl4p7n7pyp3rgq + 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 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-plugin-jest/25.7.0_24ag2vz6wmjuovrv63vw7tbd34: + resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 5.51.0_z4swst3wuuqk4hlme4ajzslgh4 + '@typescript-eslint/experimental-utils': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm + eslint: 8.34.0 + jest: 27.5.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /eslint-plugin-jsx-a11y/6.7.1_eslint@8.34.0: + resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.20.13 + 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.3 + axobject-query: 3.1.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.34.0 + 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 + dev: false + + /eslint-plugin-react-hooks/4.6.0_eslint@8.34.0: + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.34.0 + dev: false + + /eslint-plugin-react/7.32.2_eslint@8.34.0: + resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + array.prototype.tosorted: 1.1.1 + doctrine: 2.1.0 + eslint: 8.34.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.3 + 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 + dev: false + + /eslint-plugin-testing-library/5.10.1_7kw3g6rralp5ps6mg3uyzz6azm: + resolution: {integrity: sha512-GRy87AqUi2Ij69pe0YnOXm3oGBCgnFwfIv+Hu9q/kT3jL0pX1cXA7aO+oJnvdpbJy2+riOPqGsa3iAkL888NLg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.51.0_7kw3g6rralp5ps6mg3uyzz6azm + eslint: 8.34.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: false + + /eslint-scope/7.1.1: + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: false + + /eslint-utils/3.0.0_eslint@8.34.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.34.0 + eslint-visitor-keys: 2.1.0 + dev: false + + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: false + + /eslint-visitor-keys/3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: false + + /eslint-webpack-plugin/3.2.0_tuobyd7hv2iyslumy6tj4ngzsq: + resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + webpack: ^5.0.0 + dependencies: + '@types/eslint': 8.21.0 + eslint: 8.34.0 + jest-worker: 28.1.3 + micromatch: 4.0.5 + normalize-path: 3.0.0 + schema-utils: 4.0.0 + webpack: 5.75.0 + dev: false + + /eslint/8.34.0: + resolution: {integrity: sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint/eslintrc': 1.4.1 + '@humanwhocodes/config-array': 0.11.8 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.1.1 + eslint-utils: 3.0.0_eslint@8.34.0 + eslint-visitor-keys: 3.3.0 + espree: 9.4.1 + esquery: 1.4.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-sdsl: 4.3.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.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: false + /esm/3.2.25: resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} engines: {node: '>=6'} optional: true + /espree/9.4.1: + resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.2 + acorn-jsx: 5.3.2_acorn@8.8.2 + eslint-visitor-keys: 3.3.0 + dev: false + /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} + hasBin: true + + /esquery/1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: false + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: false + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: false + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + /estree-walker/1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: false + + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + /etag/1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false /event-iterator/2.0.0: resolution: {integrity: sha512-KGft0ldl31BZVV//jj+IAIGCxkvvUkkON+ScH6zfoX+l+omX6001ggyRSpI0Io2Hlro0ThXotswCtfzS8UkIiQ==} @@ -1798,6 +7211,15 @@ packages: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} + /expect/27.5.1: + resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + jest-get-type: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + /expect/28.1.3: resolution: {integrity: sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -1807,13 +7229,66 @@ packages: jest-matcher-utils: 28.1.3 jest-message-util: 28.1.3 jest-util: 28.1.3 + dev: true + + /expect/29.4.2: + resolution: {integrity: sha512-+JHYg9O3hd3RlICG90OPVjRkPBoiUH7PxvDVMnRiaq1g6JUgZStX514erMl0v2Dc5SkfVbm7ztqbd6qHHPn+mQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.4.2 + jest-get-type: 29.4.2 + jest-matcher-utils: 29.4.2 + jest-message-util: 29.4.2 + jest-util: 29.4.2 + dev: true + + /express/4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false /extend/3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: true /extsprintf/1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} + dev: true /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1824,11 +7299,38 @@ packages: /fast-fifo/1.1.0: resolution: {integrity: sha512-Kl29QoNbNvn4nhDsLYjyIAaIqaJB6rBx5p3sL9VjaefJ+eMFBWVZiaoguaoZfzEKr5RhAti0UgM8703akGPJ6g==} + /fast-glob/3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: false + /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - /fb-watchman/2.0.1: - resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + /fastq/1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: false + + /faye-websocket/0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + dependencies: + websocket-driver: 0.7.4 + dev: false + + /fb-watchman/2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 @@ -1838,9 +7340,40 @@ packages: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.2.1 + dev: true + + /file-entry-cache/6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: false + + /file-loader/6.2.0_webpack@5.75.0: + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.1.1 + webpack: 5.75.0 + dev: false /file-uri-to-path/1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: true + + /filelist/1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: false + + /filesize/8.0.7: + resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} + engines: {node: '>= 0.4.0'} + dev: false /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} @@ -1848,6 +7381,37 @@ packages: dependencies: to-regex-range: 5.0.1 + /finalhandler/1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /find-cache-dir/3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: false + + /find-up/3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: false + /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -1855,8 +7419,76 @@ packages: locate-path: 5.0.0 path-exists: 4.0.0 + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: false + + /flat-cache/3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: false + + /flatted/3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: false + + /follow-redirects/1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: false + /forever-agent/0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + dev: true + + /fork-ts-checker-webpack-plugin/6.5.2_f3a4zrasoaotz7gdk64fcmlkrm: + resolution: {integrity: sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==} + engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@babel/code-frame': 7.18.6 + '@types/json-schema': 7.0.11 + chalk: 4.1.2 + chokidar: 3.5.3 + cosmiconfig: 6.0.0 + deepmerge: 4.3.0 + eslint: 8.34.0 + fs-extra: 9.1.0 + glob: 7.2.3 + memfs: 3.4.13 + minimatch: 3.1.2 + schema-utils: 2.7.0 + semver: 7.3.8 + tapable: 1.1.3 + typescript: 4.9.5 + webpack: 5.75.0 + dev: false /form-data/2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} @@ -1865,6 +7497,15 @@ packages: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + dev: true + + /form-data/3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 /form-data/4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} @@ -1880,13 +7521,56 @@ packages: engines: {node: '>=12.20.0'} dependencies: fetch-blob: 3.2.0 + dev: true + + /forwarded/0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /fraction.js/4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + dev: false + + /freeport-promise/2.0.0: + resolution: {integrity: sha512-dwWpT1DdQcwrhmRwnDnPM/ZFny+FtzU+k50qF2eid3KxaQDsMiBrwo1i0G3qSugkN5db6Cb0zgfc68QeTOpEFg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false + + /fresh/0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false /fs-constants/1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + /fs-extra/10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: false + + /fs-extra/9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: false + /fs-monkey/0.3.3: resolution: {integrity: sha512-FNUvuTAJ3CqCQb5ELn+qCbGR/Zllhf2HtwsdAtBi59s1WeCjKMT81fHcSu7dwIskqGVK+MmOrb7VOBlq3/SItw==} + /fs-monkey/1.0.3: + resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} + dev: false + /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1900,6 +7584,20 @@ packages: /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function.prototype.name/1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + functions-have-names: 1.2.3 + dev: false + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: false + /gensync/1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -1908,8 +7606,24 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + /get-intrinsic/1.2.0: + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.3 + /get-iterator/1.0.2: resolution: {integrity: sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==} + dev: true + + /get-iterator/2.0.0: + resolution: {integrity: sha512-BDJawD5PU2gZv6Vlp8O28H4GnZcsr3h9gZUvnAP5xXP3WOy/QAoOsyMepSkw21jur+4t5Vppde72ChjhTIzxzg==} + dev: false + + /get-own-enumerable-property-symbols/3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + dev: false /get-package-type/0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} @@ -1919,10 +7633,37 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + /get-symbol-description/1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + dev: false + /getpass/0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} dependencies: assert-plus: 1.0.0 + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: false + + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: false + + /glob-to-regexp/0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: false /glob/7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -1934,34 +7675,101 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /glob/8.0.3: - resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==} - engines: {node: '>=12'} + /global-modules/2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.0 - once: 1.4.0 - dev: true + global-prefix: 3.0.0 + dev: false + + /global-prefix/3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: false /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + /globals/13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: false + + /globalthis/1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + dev: false + + /globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.12 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: false + + /globrex/0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: true + + /gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.0 + dev: false + /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + /grapheme-splitter/1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: false + + /gzip-size/6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: false + + /handle-thing/2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: false + /har-schema/2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} engines: {node: '>=4'} + dev: true /har-validator/5.1.5: resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} engines: {node: '>=6'} + deprecated: this library is no longer supported dependencies: ajv: 6.12.6 har-schema: 2.0.0 + dev: true + + /harmony-reflect/1.6.2: + resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} + dev: false + + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: false /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -1971,6 +7779,28 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + /has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.0 + dev: false + + /has-proto/1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: false + + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + /has-tostringtag/1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} @@ -1982,20 +7812,185 @@ packages: dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 + dev: true /hashlru/2.3.0: resolution: {integrity: sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==} + /he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + /hmac-drbg/1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} dependencies: hash.js: 1.1.7 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + dev: true + + /hoopy/0.1.4: + resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} + engines: {node: '>= 6.0.0'} + dev: false + + /hpack.js/2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.7 + wbuf: 1.7.3 + dev: false + + /html-encoding-sniffer/2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + dependencies: + whatwg-encoding: 1.0.5 + + /html-encoding-sniffer/3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + dependencies: + whatwg-encoding: 2.0.0 + dev: true + + /html-entities/2.3.3: + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + dev: false /html-escaper/2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + /html-minifier-terser/6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.2 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.16.3 + dev: false + + /html-webpack-plugin/5.5.0_webpack@5.75.0: + resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} + engines: {node: '>=10.13.0'} + peerDependencies: + webpack: ^5.20.0 + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.1 + webpack: 5.75.0 + dev: false + + /htmlparser2/6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + dev: false + + /http-deceiver/1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + dev: false + + /http-errors/1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: false + + /http-errors/2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /http-parser-js/0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + dev: false + + /http-proxy-agent/4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + /http-proxy-middleware/2.0.6_@types+express@4.17.17: + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + dependencies: + '@types/express': 4.17.17 + '@types/http-proxy': 1.17.9 + http-proxy: 1.18.1 + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.5 + transitivePeerDependencies: + - debug + dev: false + + /http-proxy/1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.2 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + + /http-server/14.1.1: + resolution: {integrity: sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==} + engines: {node: '>=12'} + hasBin: true + dependencies: + basic-auth: 2.0.1 + chalk: 4.1.2 + corser: 2.0.1 + he: 1.2.0 + html-encoding-sniffer: 3.0.0 + http-proxy: 1.18.1 + mime: 1.6.0 + minimist: 1.2.8 + opener: 1.5.2 + portfinder: 1.0.32 + secure-compare: 3.0.1 + union: 0.5.0 + url-join: 4.0.1 + transitivePeerDependencies: + - debug + - supports-color + dev: true + /http-signature/1.2.0: resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} engines: {node: '>=0.8', npm: '>=1.3.7'} @@ -2003,23 +7998,77 @@ packages: assert-plus: 1.0.0 jsprim: 1.4.2 sshpk: 1.17.0 + dev: true + + /https-proxy-agent/5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color /human-signals/2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + /iconv-lite/0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + /iconv-lite/0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 + /icss-utils/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.21 + dev: false + + /idb/7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + dev: false + + /identity-obj-proxy/3.0.0: + resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} + engines: {node: '>=4'} + dependencies: + harmony-reflect: 1.6.2 + dev: false + /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + /ignore/5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + dev: false + + /immer/9.0.19: + resolution: {integrity: sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==} + dev: false + + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: false + /import-local/3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} + hasBin: true dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 @@ -2038,9 +8087,17 @@ packages: once: 1.4.0 wrappy: 1.0.2 + /inherits/2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + dev: false + /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + /ini/1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: false + /interface-datastore/4.0.2: resolution: {integrity: sha512-/XRmD7oagZMTaK25rV3WFrejLoUwxZcpgE+eNyZNYvb2jlB5P3MwJCIbetJSlVYK7yvaFmJi8s3f9VLcxJjdog==} dependencies: @@ -2061,10 +8118,21 @@ packages: dependencies: interface-store: 2.0.2 nanoid: 3.3.4 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 + dev: true + + /interface-datastore/7.0.4: + resolution: {integrity: sha512-Q8LZS/jfFFHz6XyZazLTAc078SSCoa27ZPBOfobWdpDiFO7FqPA2yskitUJIhaCgxNK8C+/lMBUTBNfVIDvLiw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + interface-store: 3.0.4 + nanoid: 4.0.1 + uint8arrays: 4.0.3 + dev: false /interface-ipld-format/1.0.1: resolution: {integrity: sha512-WV/ar+KQJVoQpqRDYdo7YPGYIUHJxCuOEhdvsRpzLqoOIVCqPKdMMYmsLL1nCRsF3yYNio+PAJbCKiv6drrEAg==} + deprecated: This module has been superseded by the multiformats module dependencies: cids: 1.1.9 multicodec: 3.2.1 @@ -2077,6 +8145,21 @@ packages: /interface-store/2.0.2: resolution: {integrity: sha512-rScRlhDcz6k199EkHqT8NpM87ebN89ICOzILoBHgaG36/WX50N32BnU/kpZgCGPLhARRAWUUX5/cyaIjt7Kipg==} + dev: true + + /interface-store/3.0.4: + resolution: {integrity: sha512-OjHUuGXbH4eXSBx1TF1tTySvjLldPLzRSYYXJwrEQI+XfH5JWYZofr0gVMV4F8XTwC+4V7jomDYkvGRmDSRKqQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false + + /internal-slot/1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + side-channel: 1.0.4 + dev: false /ip-address/8.1.0: resolution: {integrity: sha512-Wz91gZKpNKoXtqvY8ScarKYwhXoK4r/b5QuT+uywe/azv0/nUCo7Bh0IRRI7F9DHR06kJNWtzMGLIbXavngbKA==} @@ -2084,28 +8167,41 @@ packages: dependencies: jsbn: 1.1.0 sprintf-js: 1.1.2 + dev: true /ip-regex/4.3.0: resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} engines: {node: '>=8'} + dev: true + + /ip-regex/5.0.0: + resolution: {integrity: sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + + /ipaddr.js/1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false /ipaddr.js/2.0.1: resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} engines: {node: '>= 10'} - /ipfs-core-types/0.5.2: + /ipfs-core-types/0.5.2_node-fetch@3.3.0: resolution: {integrity: sha512-DOQeL+GFGYMTlnbdtMeBzvfVnyAalSgCfPr8XUCI+FVBZZWwzkt5jZZzGDmF87HVRrMR3FuVyBKZj772mcXKyQ==} dependencies: cids: 1.1.9 interface-datastore: 4.0.2 ipld-block: 0.11.1 - multiaddr: 9.0.2 + multiaddr: 9.0.2_node-fetch@3.3.0 multibase: 4.0.6 transitivePeerDependencies: + - node-fetch - supports-color dev: true - /ipfs-core-utils/0.8.3: + /ipfs-core-utils/0.8.3_node-fetch@3.3.0: resolution: {integrity: sha512-PY7PkCgCtVYtNOe1C3ew1+5D9NqXqizb886R/lyGWe+KsmWtBQkQIk0ZIDwKyHGvG2KA2QQeIDzdOmzBQBJtHQ==} dependencies: any-signal: 2.1.2 @@ -2113,22 +8209,23 @@ packages: browser-readablestream-to-it: 1.0.3 cids: 1.1.9 err-code: 3.0.1 - ipfs-core-types: 0.5.2 + ipfs-core-types: 0.5.2_node-fetch@3.3.0 ipfs-unixfs: 4.0.3 ipfs-utils: 8.1.6 it-all: 1.0.6 it-map: 1.0.6 it-peekable: 1.0.3 - multiaddr: 9.0.2 - multiaddr-to-uri: 7.0.0 + multiaddr: 9.0.2_node-fetch@3.3.0 + multiaddr-to-uri: 7.0.0_node-fetch@3.3.0 parse-duration: 1.0.2 timeout-abort-controller: 1.1.1 uint8arrays: 2.1.10 transitivePeerDependencies: + - node-fetch - supports-color dev: true - /ipfs-http-client/50.1.2: + /ipfs-http-client/50.1.2_node-fetch@3.3.0: resolution: {integrity: sha512-ZbJlED4wqwFXQFVB9FQDs20ygdq7O/zSq4AvO9KRAmkqUj2TsCWCteUz2fBMnGWLh2tExxeSl/rQbHbJptb8JQ==} engines: {node: '>=14.0.0', npm: '>=3.0.0'} dependencies: @@ -2137,8 +8234,8 @@ packages: cids: 1.1.9 debug: 4.3.4 form-data: 4.0.0 - ipfs-core-types: 0.5.2 - ipfs-core-utils: 0.8.3 + ipfs-core-types: 0.5.2_node-fetch@3.3.0 + ipfs-core-utils: 0.8.3_node-fetch@3.3.0 ipfs-unixfs: 4.0.3 ipfs-utils: 8.1.6 ipld-block: 0.11.1 @@ -2150,16 +8247,17 @@ packages: it-tar: 3.0.0 it-to-stream: 1.0.0 merge-options: 3.0.4 - multiaddr: 9.0.2 + multiaddr: 9.0.2_node-fetch@3.3.0 multibase: 4.0.6 multicodec: 3.2.1 multihashes: 4.0.3 nanoid: 3.3.4 - native-abort-controller: 1.0.4 + native-abort-controller: 1.0.4_abort-controller@3.0.0 parse-duration: 1.0.2 stream-to-it: 0.2.4 uint8arrays: 2.1.10 transitivePeerDependencies: + - node-fetch - supports-color dev: true @@ -2177,7 +8275,7 @@ packages: abort-controller: 3.0.0 any-signal: 2.1.2 buffer: 6.0.3 - electron-fetch: 1.7.4 + electron-fetch: 1.9.1 err-code: 3.0.1 is-electron: 2.2.1 iso-url: 1.2.1 @@ -2185,30 +8283,36 @@ packages: it-to-stream: 1.0.0 merge-options: 3.0.4 nanoid: 3.3.4 - native-abort-controller: 1.0.4 - native-fetch: 3.0.0 + native-abort-controller: 1.0.4_abort-controller@3.0.0 + native-fetch: 3.0.0_hmwa7nplpltavckpkeobtw6pv4 node-fetch: /@achingbrain/node-fetch/2.6.7 react-native-fetch-api: 2.0.0 stream-to-it: 0.2.4 dev: true - /ipfs-utils/9.0.7: - resolution: {integrity: sha512-Umvb0Zydy2zZiTmQBGLfLISr8vOmXX8cxEIP+N8zGHrtRShG/j32yl1xd/BtS+Hbg0FIbVm3opwvxB2gmta0YA==} + /ipfs-utils/9.0.14: + resolution: {integrity: sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} dependencies: any-signal: 3.0.1 + browser-readablestream-to-it: 1.0.3 buffer: 6.0.3 - electron-fetch: 1.7.4 + electron-fetch: 1.9.1 err-code: 3.0.1 is-electron: 2.2.1 iso-url: 1.2.1 + it-all: 1.0.6 it-glob: 1.0.2 it-to-stream: 1.0.0 merge-options: 3.0.4 nanoid: 3.3.4 - native-fetch: 3.0.0 - node-fetch: /@achingbrain/node-fetch/2.6.7 - react-native-fetch-api: 2.0.0 + native-fetch: 3.0.0_node-fetch@2.6.9 + node-fetch: 2.6.9 + react-native-fetch-api: 3.0.0 stream-to-it: 0.2.4 + transitivePeerDependencies: + - encoding + dev: true /ipld-block/0.11.1: resolution: {integrity: sha512-sDqqLqD5qh4QzGq6ssxLHUCnH4emCf/8F8IwjQM2cjEEIEHMUj57XhNYgmGbemdYPznUhffxFGEHsruh5+HQRw==} @@ -2220,6 +8324,7 @@ packages: /ipld-dag-cbor/1.0.1: resolution: {integrity: sha512-PZh8rHnRETX5bj60i73W2oq6BXoZnIvYCBDwIffYVJgxMr7BEVd5PycAARBiT6daORJ/4zbqEFR5CcrjeCtm/A==} engines: {node: '>=6.0.0', npm: '>=3.0.0'} + deprecated: This module has been superseded by @ipld/dag-cbor and multiformats dependencies: borc: 3.0.0 cids: 1.1.9 @@ -2233,6 +8338,7 @@ packages: /ipld-dag-pb/0.22.3: resolution: {integrity: sha512-dfG5C5OVAR4FEP7Al2CrHWvAyIM7UhAQrjnOYOIxXGQz5NlEj6wGX0XQf6Ru6or1na6upvV3NQfstapQG8X2rg==} engines: {node: '>=6.0.0', npm: '>=3.0.0'} + deprecated: This module has been superseded by @ipld/dag-pb and multiformats dependencies: cids: 1.1.9 interface-ipld-format: 1.0.1 @@ -2245,6 +8351,7 @@ packages: /ipld-raw/7.0.1: resolution: {integrity: sha512-oaiy0Ot23NCnoBA7sLvPL9qFRC6JDB0IsdZL6rUeZJxzxabQuBLNGYXcqjQ8jlF0UPLEUSO+h8OJh2DZPzL2aQ==} + deprecated: This module has been superseded by the multiformats module dependencies: cids: 1.1.9 interface-ipld-format: 1.0.1 @@ -2252,25 +8359,86 @@ packages: multihashing-async: 2.1.4 dev: true + /is-arguments/1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + + /is-array-buffer/3.0.1: + resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-typed-array: 1.1.10 + dev: false + /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + /is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: false + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: false + + /is-boolean-object/1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + /is-buffer/2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} + dev: true + + /is-callable/1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: false /is-circular/1.0.2: resolution: {integrity: sha512-YttjnrswnUYRVJvxCvu8z+PGMUSzC2JttP0OEXezlAEdp3EXzhf7IZ3j0gRAybJBQupedIZFhY61Tga6E0qASA==} dev: true - /is-core-module/2.10.0: - resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} + /is-core-module/2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 + /is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-docker/2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: false + /is-electron/2.2.1: resolution: {integrity: sha512-r8EEQQsqT+Gn0aXFx7lTFygYQhILLCB+wn0WCDL5LZRINeLH/Rvw1j2oKodELLXYNImQ3CRlVsY8wW4cGOsyuw==} + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: false + /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -2279,34 +8447,170 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: false + /is-ip/3.1.0: resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} engines: {node: '>=8'} dependencies: ip-regex: 4.3.0 + dev: true /is-loopback-addr/1.0.1: resolution: {integrity: sha512-DhWU/kqY7X2F6KrrVTu7mHlbd2Pbo4D1YkAzasBMjQs6lJAoefxaA6m6CpSX0K6pjt9D0b9PNFI5zduy/vzOYw==} + dev: true + + /is-loopback-addr/2.0.1: + resolution: {integrity: sha512-SEsepLbdWFb13B6U0tt6dYcUM0iK/U7XOC43N70Z4Qb88WpNtp+ospyNI9ddpqncs7Z7brAEsVBTQpaqSNntIw==} + dev: false + + /is-map/2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: false + + /is-module/1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: false + + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: false + + /is-number-object/1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + /is-obj/1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + dev: false + /is-observable/2.1.0: resolution: {integrity: sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==} engines: {node: '>=8'} + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: false + /is-plain-obj/2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} + /is-plain-obj/3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + dev: false + + /is-potential-custom-element-name/1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + /is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + + /is-regexp/1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + dev: false + + /is-root/2.1.0: + resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} + engines: {node: '>=6'} + dev: false + + /is-set/2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: false + + /is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: false + /is-stream/2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + /is-string/1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-symbol/1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /is-typed-array/1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + 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 + dev: false + /is-typedarray/1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + /is-weakmap/2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: false + + /is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: false + + /is-weakset/2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + dev: false + + /is-wsl/2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: false + + /isarray/1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: false + + /isarray/2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: false + /isexe/2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2322,6 +8626,7 @@ packages: dependencies: events: 3.3.0 readable-stream: 3.6.0 + dev: true /iso-url/1.2.1: resolution: {integrity: sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==} @@ -2329,17 +8634,18 @@ packages: /isstream/0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + dev: true /istanbul-lib-coverage/3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} - /istanbul-lib-instrument/5.2.0: - resolution: {integrity: sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==} + /istanbul-lib-instrument/5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.18.13 - '@babel/parser': 7.18.13 + '@babel/core': 7.20.12 + '@babel/parser': 7.20.15 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -2373,30 +8679,69 @@ packages: /it-all/1.0.6: resolution: {integrity: sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A==} + dev: true + + /it-all/2.0.0: + resolution: {integrity: sha512-I/yi9ogTY59lFxtfsDSlI9w9QZtC/5KJt6g7CPPBJJh2xql2ZS7Ghcp9hoqDDbc4QfwQvtx8Loy0zlKQ8H5gFg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false + + /it-batched-bytes/1.0.0: + resolution: {integrity: sha512-OfztV9UHQmoZ6u5F4y+YOI1Z+5JAhkv3Gexc1a0B7ikcVXc3PFSKlEnHv79u+Yp/h23o3tsF9hHAhuqgHCYT2Q==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + it-stream-types: 1.0.5 + p-defer: 4.0.0 + uint8arraylist: 2.4.3 + dev: false /it-buffer/0.1.3: resolution: {integrity: sha512-9a2/9SYVwG7bcn3tpRDR4bXbtuMLXnDK48KVC+GXiQg97ZOOdWz2nIITBsOQ19b+gj01Rw8RNwtiLDLI8P8oiQ==} dependencies: - bl: 5.0.0 + bl: 5.1.0 buffer: 6.0.3 + dev: true /it-concat/2.0.0: resolution: {integrity: sha512-jchrEB3fHlUENWkVJRmbFJ1A7gcjJDmwiolQsHhVC14DpUIbX8fgr3SOC7XNE5OoUUQNL6/RaMCPChkPemyQUw==} dependencies: - bl: 5.0.0 + bl: 5.1.0 dev: true /it-drain/1.0.5: resolution: {integrity: sha512-r/GjkiW1bZswC04TNmUnLxa6uovme7KKwPhc+cb1hHU65E3AByypHH6Pm91WHuvqfFsm+9ws0kPtDBV3/8vmIg==} + dev: true + + /it-drain/2.0.0: + resolution: {integrity: sha512-oa/5iyBtRs9UW486vPpyDTC0ee3rqx5qlrPI7txIUJcqqtiO5yVozEB6LQrl5ysQYv+P3y/dlKEqwVqlCV0SEA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false /it-filter/1.0.3: resolution: {integrity: sha512-EI3HpzUrKjTH01miLHWmhNWy3Xpbx4OXMXltgrNprL5lDpF3giVpHIouFpr5l+evXw6aOfxhnt01BIB+4VQA+w==} + dev: true + + /it-filter/2.0.0: + resolution: {integrity: sha512-E68+zzoNNI7MxdH1T4lUTgwpCyEnymlH349Qg2mcvsqLmYRkaZLM4NfZZ0hUuH7/5DkWXubQSDOYH396va8mpg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false /it-first/1.0.7: resolution: {integrity: sha512-nvJKZoBpZD/6Rtde6FXqwDqDZGF1sCADmr2Zoc0hZsIvnE449gRFnGctxDf09Bzc/FWnHXAdaHVIetY6lrE0/g==} + /it-first/2.0.0: + resolution: {integrity: sha512-fzZGzVf01exFyIZXNjkpSMFr1eW2+J1K0v018tYY26Dd4f/O3pWlBTdrOBfSQRZwtI8Pst6c7eKhYczWvFs6tA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false + /it-foreach/0.1.1: resolution: {integrity: sha512-ZLxL651N5w5SL/EIIcrXELgYrrkuEKj/TErG93C4lr6lNZziKsf338ljSG85PjQfu7Frg/1wESl5pLrPSFXI9g==} + dev: true + + /it-foreach/1.0.0: + resolution: {integrity: sha512-2j5HK1P6aMwEvgL6K5nzUwOk+81B/mjt05PxiSspFEKwJnqy1LfJYlLLS6llBoM+NdoUxf6EsBCHidFGmsXvhw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false /it-glob/0.0.14: resolution: {integrity: sha512-TKKzs9CglbsihSpcwJPXN5DBUssu4akRzPlp8QJRCoLrKoaOpyY2V1qDlxx+UMivn0i114YyTd4AawWl7eqIdw==} @@ -2410,6 +8755,7 @@ packages: dependencies: '@types/minimatch': 3.0.5 minimatch: 3.1.2 + dev: true /it-handshake/2.0.0: resolution: {integrity: sha512-K4q+mz8aLlCK3vTjtgNdHC9c/JbuOATsfogarjMsLcBZC5vYfKbX3Gq3AWcCdjIsIrPqzTlhPKSxl64LJkrt2w==} @@ -2417,6 +8763,18 @@ packages: it-pushable: 1.4.2 it-reader: 3.0.0 p-defer: 3.0.0 + dev: true + + /it-handshake/4.1.2: + resolution: {integrity: sha512-Q/EvrB4KWIX5+/wO7edBK3l79Vh28+iWPGZvZSSqwAtOJnHZIvywC+JUbiXPRJVXfICBJRqFETtIJcvrqWL2Zw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + it-pushable: 3.1.2 + it-reader: 6.0.2 + it-stream-types: 1.0.5 + p-defer: 4.0.0 + uint8arraylist: 2.4.3 + dev: false /it-last/1.0.6: resolution: {integrity: sha512-aFGeibeiX/lM4bX3JY0OkVCFkAw8+n9lkukkLNivbJRvNz8lI3YXv5xcqhFUV2lDJiraEK3OXRDbGuevnnR67Q==} @@ -2425,22 +8783,57 @@ packages: /it-length-prefixed/5.0.3: resolution: {integrity: sha512-b+jDHLcnOnPDQN79ronmzF5jeBjdJsy0ce2O6i6X4J5tnaO8Fd146ZA/tMbzaLlKnTpXa0eKtofpYhumXGENeg==} dependencies: - bl: 5.0.0 + bl: 5.1.0 buffer: 6.0.3 varint: 6.0.0 + dev: true + + /it-length-prefixed/8.0.4: + resolution: {integrity: sha512-5OJ1lxH+IaqJB7lxe8IAIwt9UfSfsmjKJoAI/RO9djYoBDt1Jfy9PeVHUmOfqhqyu/4kJvWBFAJUaG1HhLQ12A==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + err-code: 3.0.1 + it-stream-types: 1.0.5 + uint8-varint: 1.0.4 + uint8arraylist: 2.4.3 + uint8arrays: 4.0.3 + dev: false /it-map/1.0.6: resolution: {integrity: sha512-XT4/RM6UHIFG9IobGlQPFQUrlEKkU4eBUFG3qhWhfAdh1JfF2x11ShCrKCdmZ0OiZppPfoLuzcfA4cey6q3UAQ==} + dev: true + + /it-map/2.0.0: + resolution: {integrity: sha512-mLgtk/NZaN7NZ06iLrMXCA6jjhtZO0vZT5Ocsp31H+nsGI18RSPVmUbFyA1sWx7q+g92J22Sixya7T2QSSAwfA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false /it-merge/1.0.4: resolution: {integrity: sha512-DcL6GksTD2HQ7+5/q3JznXaLNfwjyG3/bObaF98da+oHfUiPmdo64oJlT9J8R8G5sJRU7thwaY5zxoAKCn7FJw==} dependencies: it-pushable: 1.4.2 + dev: true + + /it-merge/2.0.0: + resolution: {integrity: sha512-mH4bo/ZrMoU+Wlu7ZuYPNNh9oWZ/GvYbeXZ0zll97+Rp6H4jFu98iu6v9qqXDz//RUjdO9zGh8awzMfOElsjpA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + it-pushable: 3.1.2 + dev: false /it-pair/1.0.0: resolution: {integrity: sha512-9raOiDu5OAuDOahtMtapKQDrQTxBfzlzrNcB6o7JARHkt+7Bb1dMkW/TpYdAjBJE77KH3e2zGzwpGUP9tXbLww==} dependencies: get-iterator: 1.0.2 + dev: true + + /it-pair/2.0.3: + resolution: {integrity: sha512-heCgsbYscFCQY5YvltlGT9tjgLGYo7NxPEoJyl55X4BD2KOXpTyuwOhPLWhi9Io0y6+4ZUXCkyaQXIB6Y8xhRw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + it-stream-types: 1.0.5 + p-defer: 4.0.0 + dev: false /it-pb-rpc/0.1.13: resolution: {integrity: sha512-aZ4FNJsDgNepVVTmYXgXbQabIiOQyqYWUhdfovaHDcPSM5KjegwJihJEWMJjMyj+oLSKcZl0vmHgHxXWJ9/ufw==} @@ -2448,6 +8841,17 @@ packages: is-buffer: 2.0.5 it-handshake: 2.0.0 it-length-prefixed: 5.0.3 + dev: true + + /it-pb-stream/2.0.3: + resolution: {integrity: sha512-nuJzftDqk52gZmVD6T0sIKggXMhBkLSAFCD1OecxqGTVwk2wuDYY0ZHpcXZJuHty3kIuLY4xlWZrnDH9efV4YA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + it-handshake: 4.1.2 + it-length-prefixed: 8.0.4 + it-stream-types: 1.0.5 + uint8arraylist: 2.4.3 + dev: false /it-peekable/1.0.3: resolution: {integrity: sha512-5+8zemFS+wSfIkSZyf0Zh5kNN+iGyccN02914BY4w/Dj+uoFEoPSvj5vaWn8pNZJNSxzjW0zHRxC3LUb2KWJTQ==} @@ -2455,29 +8859,73 @@ packages: /it-pipe/1.1.0: resolution: {integrity: sha512-lF0/3qTVeth13TOnHVs0BTFaziwQF7m5Gg+E6JV0BXcLKutC92YjSi7bASgkPOXaLEb+YvNZrPorGMBIJvZfxg==} + dev: true + + /it-pipe/2.0.5: + resolution: {integrity: sha512-y85nW1N6zoiTnkidr2EAyC+ZVzc7Mwt2p+xt2a2ooG1ThFakSpNw1Kxm+7F13Aivru96brJhjQVRQNU+w0yozw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + it-merge: 2.0.0 + it-pushable: 3.1.2 + it-stream-types: 1.0.5 + dev: false /it-pushable/1.4.2: resolution: {integrity: sha512-vVPu0CGRsTI8eCfhMknA7KIBqqGFolbRx+1mbQ6XuZ7YCz995Qj7L4XUviwClFunisDq96FdxzF5FnAbw15afg==} dependencies: fast-fifo: 1.1.0 + dev: true + + /it-pushable/3.1.2: + resolution: {integrity: sha512-zU9FbeoGT0f+yobwm8agol2OTMXbq4ZSWLEi7hug6TEZx4qVhGhGyp31cayH04aBYsIoO2Nr5kgMjH/oWj2BJQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false /it-reader/3.0.0: resolution: {integrity: sha512-NxR40odATeaBmSefn6Xn43DplYvn2KtEKQzn4jrTRuPYXMky5M4e+KQ7aTJh0k0vkytLyeenGO1I1GXlGm4laQ==} dependencies: - bl: 5.0.0 + bl: 5.1.0 + dev: true + + /it-reader/6.0.2: + resolution: {integrity: sha512-rQdVyml+r/2v8PQsPfJgf626tAkbA7NW1EF6zuucT2Ryy1U6YJtSuCJL8fKuDOyiR/mLzbfP0QQJlSeeoLph2A==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + it-stream-types: 1.0.5 + uint8arraylist: 2.4.3 + dev: false /it-sort/1.0.1: resolution: {integrity: sha512-c+C48cP7XMMebB9irLrJs2EmpLILId8NYSojqAqN8etE8ienx0azBgaKvZHYH1DkerqIul0Fl2FqISu2BZgTEQ==} dependencies: it-all: 1.0.6 + dev: true + + /it-sort/2.0.0: + resolution: {integrity: sha512-yeAE97b5PEjCrWFUiNyR90eJdGslj8FB3cjT84rsc+mzx9lxPyR2zJkYB9ZOJoWE5MMebxqcQCLRT3OSlzo7Zg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + it-all: 2.0.0 + dev: false + + /it-stream-types/1.0.5: + resolution: {integrity: sha512-I88Ka1nHgfX62e5mi5LLL+oueqz7Ltg0bUdtsUKDe9SoUqbQPf2Mp5kxDTe9pNhHQGs4pvYPAINwuZ1HAt42TA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false /it-take/1.0.2: resolution: {integrity: sha512-u7I6qhhxH7pSevcYNaMECtkvZW365ARqAIt9K+xjdK1B2WUDEjQSfETkOCT8bxFq/59LqrN3cMLUtTgmDBaygw==} + dev: true + + /it-take/2.0.0: + resolution: {integrity: sha512-lN3diSTomOvYBk2K0LHAgrQ52DlQfvq8tH/+HLAFpX8Q3JwBkr/BPJEi3Z3Lf8jMmN1KOCBXvt5sXa3eW9vUmg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false /it-tar/3.0.0: resolution: {integrity: sha512-VhD1Hnx4IXDcQgYJnJgltkn+w5F8kiJaB46lqovh+YWfty2JGW7i40QQjWbSvcg1QfaU8is8AVX8xwx/Db9oOg==} dependencies: - bl: 5.0.0 + bl: 5.1.0 buffer: 6.0.3 iso-constants: 0.1.2 it-concat: 2.0.0 @@ -2494,6 +8942,7 @@ packages: p-defer: 3.0.0 p-fifo: 1.0.0 readable-stream: 3.6.0 + dev: true /it-ws/4.0.0: resolution: {integrity: sha512-XmTzpMkevc6rUboy73r0CCNhciMmL/Yxir9O6FujRwdrjysztqLBQ1Xkr4CpY2m7BVSCObKotaCWJeZ29lOXRA==} @@ -2505,6 +8954,40 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate + dev: true + + /it-ws/5.0.6: + resolution: {integrity: sha512-TEEJQaGtkxgP/nGVq8dq48nPT85Afu8kwwvtDFLj4rQLWRhZcb26RWdXLdn9qhXkWPiWbK5H7JWBW1Bebj/SuQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + event-iterator: 2.0.0 + iso-url: 1.2.1 + it-stream-types: 1.0.5 + uint8arrays: 4.0.3 + ws: 8.12.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /jake/10.8.5: + resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.4 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: false + + /jest-changed-files/27.5.1: + resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + execa: 5.1.1 + throat: 6.0.2 /jest-changed-files/28.1.3: resolution: {integrity: sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==} @@ -2512,6 +8995,41 @@ packages: dependencies: execa: 5.1.1 p-limit: 3.1.0 + dev: true + + /jest-changed-files/29.4.2: + resolution: {integrity: sha512-Qdd+AXdqD16PQa+VsWJpxR3kN0JyOCX1iugQfx5nUgAsI4gwsKviXkpclxOK9ZnwaY2IQVHz+771eAvqeOlfuw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + execa: 5.1.1 + p-limit: 3.1.0 + dev: true + + /jest-circus/27.5.1: + resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.12 + chalk: 4.1.2 + co: 4.6.0 + dedent: 0.7.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color /jest-circus/28.1.3: resolution: {integrity: sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==} @@ -2521,7 +9039,7 @@ packages: '@jest/expect': 28.1.3 '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.7.14 + '@types/node': 16.11.59 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -2535,11 +9053,98 @@ packages: p-limit: 3.1.0 pretty-format: 28.1.3 slash: 3.0.0 - stack-utils: 2.0.5 + stack-utils: 2.0.6 transitivePeerDependencies: - supports-color + dev: true - /jest-cli/28.1.3: + /jest-circus/29.4.2: + resolution: {integrity: sha512-wW3ztp6a2P5c1yOc1Cfrt5ozJ7neWmqeXm/4SYiqcSriyisgq63bwFj1NuRdSR5iqS0CMEYwSZd89ZA47W9zUg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.4.2 + '@jest/expect': 29.4.2 + '@jest/test-result': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 + chalk: 4.1.2 + co: 4.6.0 + dedent: 0.7.0 + is-generator-fn: 2.1.0 + jest-each: 29.4.2 + jest-matcher-utils: 29.4.2 + jest-message-util: 29.4.2 + jest-runtime: 29.4.2 + jest-snapshot: 29.4.2 + jest-util: 29.4.2 + p-limit: 3.1.0 + pretty-format: 29.4.2 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-cli/27.5.1: + resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.10 + import-local: 3.1.0 + jest-config: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + prompts: 2.4.2 + yargs: 16.2.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + + /jest-cli/27.5.1_ts-node@10.9.1: + resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1_ts-node@10.9.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.10 + import-local: 3.1.0 + jest-config: 27.5.1_ts-node@10.9.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + prompts: 2.4.2 + yargs: 16.2.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + + /jest-cli/28.1.3_@types+node@16.11.59: resolution: {integrity: sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true @@ -2556,17 +9161,126 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 28.1.3 + jest-config: 28.1.3_@types+node@16.11.59 jest-util: 28.1.3 jest-validate: 28.1.3 prompts: 2.4.2 - yargs: 17.5.1 + yargs: 17.6.2 transitivePeerDependencies: - '@types/node' - supports-color - ts-node + dev: true - /jest-config/28.1.3: + /jest-cli/29.4.2: + resolution: {integrity: sha512-b+eGUtXq/K2v7SH3QcJvFvaUaCDS1/YAZBYz0m28Q/Ppyr+1qNaHmVYikOrbHVbZqYQs2IeI3p76uy6BWbXq8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.4.2 + '@jest/test-result': 29.4.2 + '@jest/types': 29.4.2 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.10 + import-local: 3.1.0 + jest-config: 29.4.2 + jest-util: 29.4.2 + jest-validate: 29.4.2 + prompts: 2.4.2 + yargs: 17.6.2 + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true + + /jest-config/27.5.1: + resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + dependencies: + '@babel/core': 7.20.12 + '@jest/test-sequencer': 27.5.1 + '@jest/types': 27.5.1 + babel-jest: 27.5.1_@babel+core@7.20.12 + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.0 + glob: 7.2.3 + graceful-fs: 4.2.10 + jest-circus: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-get-type: 27.5.1 + jest-jasmine2: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runner: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 27.5.1 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + + /jest-config/27.5.1_ts-node@10.9.1: + resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + dependencies: + '@babel/core': 7.20.12 + '@jest/test-sequencer': 27.5.1 + '@jest/types': 27.5.1 + babel-jest: 27.5.1_@babel+core@7.20.12 + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.0 + glob: 7.2.3 + graceful-fs: 4.2.10 + jest-circus: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-get-type: 27.5.1 + jest-jasmine2: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runner: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 27.5.1 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.1_hjximzan7wcxvjcbhhc47yzr2e + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: true + + /jest-config/28.1.3_@types+node@16.11.59: resolution: {integrity: sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} peerDependencies: @@ -2578,13 +9292,14 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.18.13 + '@babel/core': 7.20.12 '@jest/test-sequencer': 28.1.3 '@jest/types': 28.1.3 - babel-jest: 28.1.3_@babel+core@7.18.13 + '@types/node': 16.11.59 + babel-jest: 28.1.3_@babel+core@7.20.12 chalk: 4.1.2 - ci-info: 3.3.2 - deepmerge: 4.2.2 + ci-info: 3.8.0 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.10 jest-circus: 28.1.3 @@ -2602,10 +9317,11 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color + dev: true - /jest-config/28.1.3_@types+node@18.7.14: - resolution: {integrity: sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-config/29.4.2: + resolution: {integrity: sha512-919CtnXic52YM0zW4C1QxjG6aNueX1kBGthuMtvFtRTAxhKfJmiXC9qwHmi6o2josjbDz8QlWyY55F1SIVmCWA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' ts-node: '>=9.0.0' @@ -2615,31 +9331,70 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.18.13 - '@jest/test-sequencer': 28.1.3 - '@jest/types': 28.1.3 - '@types/node': 18.7.14 - babel-jest: 28.1.3_@babel+core@7.18.13 + '@babel/core': 7.20.12 + '@jest/test-sequencer': 29.4.2 + '@jest/types': 29.4.2 + babel-jest: 29.4.2_@babel+core@7.20.12 chalk: 4.1.2 - ci-info: 3.3.2 - deepmerge: 4.2.2 + ci-info: 3.8.0 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.10 - jest-circus: 28.1.3 - jest-environment-node: 28.1.3 - jest-get-type: 28.0.2 - jest-regex-util: 28.0.2 - jest-resolve: 28.1.3 - jest-runner: 28.1.3 - jest-util: 28.1.3 - jest-validate: 28.1.3 + jest-circus: 29.4.2 + jest-environment-node: 29.4.2 + jest-get-type: 29.4.2 + jest-regex-util: 29.4.2 + jest-resolve: 29.4.2 + jest-runner: 29.4.2 + jest-util: 29.4.2 + jest-validate: 29.4.2 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 28.1.3 + pretty-format: 29.4.2 slash: 3.0.0 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color + dev: true + + /jest-config/29.4.2_@types+node@18.13.0: + resolution: {integrity: sha512-919CtnXic52YM0zW4C1QxjG6aNueX1kBGthuMtvFtRTAxhKfJmiXC9qwHmi6o2josjbDz8QlWyY55F1SIVmCWA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + dependencies: + '@babel/core': 7.20.12 + '@jest/test-sequencer': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 + babel-jest: 29.4.2_@babel+core@7.20.12 + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.0 + glob: 7.2.3 + graceful-fs: 4.2.10 + jest-circus: 29.4.2 + jest-environment-node: 29.4.2 + jest-get-type: 29.4.2 + jest-regex-util: 29.4.2 + jest-resolve: 29.4.2 + jest-runner: 29.4.2 + jest-util: 29.4.2 + jest-validate: 29.4.2 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.4.2 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true /jest-diff/27.5.1: resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} @@ -2658,12 +9413,47 @@ packages: diff-sequences: 28.1.1 jest-get-type: 28.0.2 pretty-format: 28.1.3 + dev: true + + /jest-diff/29.4.2: + resolution: {integrity: sha512-EK8DSajVtnjx9sa1BkjZq3mqChm2Cd8rIzdXkQMA8e0wuXq53ypz6s5o5V8HRZkoEt2ywJ3eeNWFKWeYr8HK4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.4.2 + jest-get-type: 29.4.2 + pretty-format: 29.4.2 + dev: true + + /jest-docblock/27.5.1: + resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + detect-newline: 3.1.0 /jest-docblock/28.1.1: resolution: {integrity: sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: detect-newline: 3.1.0 + dev: true + + /jest-docblock/29.4.2: + resolution: {integrity: sha512-dV2JdahgClL34Y5vLrAHde3nF3yo2jKRH+GIYJuCpfqwEJZcikzeafVTGAjbOfKPG17ez9iWXwUYp7yefeCRag==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + + /jest-each/27.5.1: + resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + jest-get-type: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 /jest-each/28.1.3: resolution: {integrity: sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==} @@ -2674,6 +9464,46 @@ packages: jest-get-type: 28.0.2 jest-util: 28.1.3 pretty-format: 28.1.3 + dev: true + + /jest-each/29.4.2: + resolution: {integrity: sha512-trvKZb0JYiCndc55V1Yh0Luqi7AsAdDWpV+mKT/5vkpnnFQfuQACV72IoRV161aAr6kAVIBpmYzwhBzm34vQkA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + chalk: 4.1.2 + jest-get-type: 29.4.2 + jest-util: 29.4.2 + pretty-format: 29.4.2 + dev: true + + /jest-environment-jsdom/27.5.1: + resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.12 + jest-mock: 27.5.1 + jest-util: 27.5.1 + jsdom: 16.7.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + + /jest-environment-node/27.5.1: + resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.12 + jest-mock: 27.5.1 + jest-util: 27.5.1 /jest-environment-node/28.1.3: resolution: {integrity: sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==} @@ -2682,9 +9512,22 @@ packages: '@jest/environment': 28.1.3 '@jest/fake-timers': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.7.14 + '@types/node': 16.11.59 jest-mock: 28.1.3 jest-util: 28.1.3 + dev: true + + /jest-environment-node/29.4.2: + resolution: {integrity: sha512-MLPrqUcOnNBc8zTOfqBbxtoa8/Ee8tZ7UFW7hRDQSUT+NGsvS96wlbHGTf+EFAT9KC3VNb7fWEM6oyvmxtE/9w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.4.2 + '@jest/fake-timers': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 + jest-mock: 29.4.2 + jest-util: 29.4.2 + dev: true /jest-get-type/27.5.1: resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} @@ -2693,16 +9536,41 @@ packages: /jest-get-type/28.0.2: resolution: {integrity: sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: true + + /jest-get-type/29.4.2: + resolution: {integrity: sha512-vERN30V5i2N6lqlFu4ljdTqQAgrkTFMC9xaIIfOPYBw04pufjXRty5RuXBiB1d72tGbURa/UgoiHB90ruOSivg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-haste-map/27.5.1: + resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/graceful-fs': 4.1.6 + '@types/node': 16.18.12 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.10 + jest-regex-util: 27.5.1 + jest-serializer: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.2 /jest-haste-map/28.1.3: resolution: {integrity: sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/graceful-fs': 4.1.5 - '@types/node': 18.7.14 - anymatch: 3.1.2 - fb-watchman: 2.0.1 + '@types/graceful-fs': 4.1.6 + '@types/node': 16.11.59 + anymatch: 3.1.3 + fb-watchman: 2.0.2 graceful-fs: 4.2.10 jest-regex-util: 28.0.2 jest-util: 28.1.3 @@ -2711,6 +9579,57 @@ packages: walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 + dev: true + + /jest-haste-map/29.4.2: + resolution: {integrity: sha512-WkUgo26LN5UHPknkezrBzr7lUtV1OpGsp+NfXbBwHztsFruS3gz+AMTTBcEklvi8uPzpISzYjdKXYZQJXBnfvw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@types/graceful-fs': 4.1.6 + '@types/node': 18.13.0 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.10 + jest-regex-util: 29.4.2 + jest-util: 29.4.2 + jest-worker: 29.4.2 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /jest-jasmine2/27.5.1: + resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.12 + chalk: 4.1.2 + co: 4.6.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + throat: 6.0.2 + transitivePeerDependencies: + - supports-color + + /jest-leak-detector/27.5.1: + resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + jest-get-type: 27.5.1 + pretty-format: 27.5.1 /jest-leak-detector/28.1.3: resolution: {integrity: sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==} @@ -2718,6 +9637,15 @@ packages: dependencies: jest-get-type: 28.0.2 pretty-format: 28.1.3 + dev: true + + /jest-leak-detector/29.4.2: + resolution: {integrity: sha512-Wa62HuRJmWXtX9F00nUpWlrbaH5axeYCdyRsOs/+Rb1Vb6+qWTlB5rKwCCRKtorM7owNwKsyJ8NRDUcZ8ghYUA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.4.2 + pretty-format: 29.4.2 + dev: true /jest-matcher-utils/27.5.1: resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} @@ -2736,6 +9664,31 @@ packages: jest-diff: 28.1.3 jest-get-type: 28.0.2 pretty-format: 28.1.3 + dev: true + + /jest-matcher-utils/29.4.2: + resolution: {integrity: sha512-EZaAQy2je6Uqkrm6frnxBIdaWtSYFoR8SVb2sNLAtldswlR/29JAgx+hy67llT3+hXBaLB0zAm5UfeqerioZyg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.4.2 + jest-get-type: 29.4.2 + pretty-format: 29.4.2 + dev: true + + /jest-message-util/27.5.1: + resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/code-frame': 7.18.6 + '@jest/types': 27.5.1 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.10 + micromatch: 4.0.5 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 /jest-message-util/28.1.3: resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} @@ -2749,28 +9702,105 @@ packages: micromatch: 4.0.5 pretty-format: 28.1.3 slash: 3.0.0 - stack-utils: 2.0.5 + stack-utils: 2.0.6 + + /jest-message-util/29.4.2: + resolution: {integrity: sha512-SElcuN4s6PNKpOEtTInjOAA8QvItu0iugkXqhYyguRvQoXapg5gN+9RQxLAkakChZA7Y26j6yUCsFWN+hlKD6g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': 7.18.6 + '@jest/types': 29.4.2 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.10 + micromatch: 4.0.5 + pretty-format: 29.4.2 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: true + + /jest-mock/27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 16.18.12 /jest-mock/28.1.3: resolution: {integrity: sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 18.7.14 + '@types/node': 16.11.59 + dev: true - /jest-pnp-resolver/1.2.2: - resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} + /jest-mock/29.4.2: + resolution: {integrity: sha512-x1FSd4Gvx2yIahdaIKoBjwji6XpboDunSJ95RpntGrYulI1ByuYQCKN/P7hvk09JB74IonU3IPLdkutEWYt++g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@types/node': 18.13.0 + jest-util: 29.4.2 + dev: true + + /jest-pnp-resolver/1.2.3_jest-resolve@27.5.1: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 27.5.1 + + /jest-pnp-resolver/1.2.3_jest-resolve@28.1.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' peerDependenciesMeta: jest-resolve: optional: true dependencies: jest-resolve: 28.1.3 + dev: true + + /jest-pnp-resolver/1.2.3_jest-resolve@29.4.2: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 29.4.2 + dev: true + + /jest-regex-util/27.5.1: + resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} /jest-regex-util/28.0.2: resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-regex-util/29.4.2: + resolution: {integrity: sha512-XYZXOqUl1y31H6VLMrrUL1ZhXuiymLKPz0BO1kEeR5xER9Tv86RZrjTm74g5l9bPJQXA/hyLdaVPN/sdqfteig==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-resolve-dependencies/27.5.1: + resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + jest-regex-util: 27.5.1 + jest-snapshot: 27.5.1 + transitivePeerDependencies: + - supports-color + /jest-resolve-dependencies/28.1.3: resolution: {integrity: sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -2779,6 +9809,32 @@ packages: jest-snapshot: 28.1.3 transitivePeerDependencies: - supports-color + dev: true + + /jest-resolve-dependencies/29.4.2: + resolution: {integrity: sha512-6pL4ptFw62rjdrPk7rRpzJYgcRqRZNsZTF1VxVTZMishbO6ObyWvX57yHOaNGgKoADtAHRFYdHQUEvYMJATbDg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-regex-util: 29.4.2 + jest-snapshot: 29.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-resolve/27.5.1: + resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + graceful-fs: 4.2.10 + jest-haste-map: 27.5.1 + jest-pnp-resolver: 1.2.3_jest-resolve@27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + resolve: 1.22.1 + resolve.exports: 1.1.1 + slash: 3.0.0 /jest-resolve/28.1.3: resolution: {integrity: sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==} @@ -2787,12 +9843,59 @@ packages: chalk: 4.1.2 graceful-fs: 4.2.10 jest-haste-map: 28.1.3 - jest-pnp-resolver: 1.2.2 + jest-pnp-resolver: 1.2.3_jest-resolve@28.1.3 jest-util: 28.1.3 jest-validate: 28.1.3 resolve: 1.22.1 - resolve.exports: 1.1.0 + resolve.exports: 1.1.1 slash: 3.0.0 + dev: true + + /jest-resolve/29.4.2: + resolution: {integrity: sha512-RtKWW0mbR3I4UdkOrW7552IFGLYQ5AF9YrzD0FnIOkDu0rAMlA5/Y1+r7lhCAP4nXSBTaE7ueeqj6IOwZpgoqw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.10 + jest-haste-map: 29.4.2 + jest-pnp-resolver: 1.2.3_jest-resolve@29.4.2 + jest-util: 29.4.2 + jest-validate: 29.4.2 + resolve: 1.22.1 + resolve.exports: 2.0.0 + slash: 3.0.0 + dev: true + + /jest-runner/27.5.1: + resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.5.1 + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.12 + chalk: 4.1.2 + emittery: 0.8.1 + graceful-fs: 4.2.10 + jest-docblock: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-haste-map: 27.5.1 + jest-leak-detector: 27.5.1 + jest-message-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runtime: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + source-map-support: 0.5.21 + throat: 6.0.2 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate /jest-runner/28.1.3: resolution: {integrity: sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==} @@ -2803,7 +9906,7 @@ packages: '@jest/test-result': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.7.14 + '@types/node': 16.11.59 chalk: 4.1.2 emittery: 0.10.2 graceful-fs: 4.2.10 @@ -2821,6 +9924,65 @@ packages: source-map-support: 0.5.13 transitivePeerDependencies: - supports-color + dev: true + + /jest-runner/29.4.2: + resolution: {integrity: sha512-wqwt0drm7JGjwdH+x1XgAl+TFPH7poowMguPQINYxaukCqlczAcNLJiK+OLxUxQAEWMdy+e6nHZlFHO5s7EuRg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.4.2 + '@jest/environment': 29.4.2 + '@jest/test-result': 29.4.2 + '@jest/transform': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.10 + jest-docblock: 29.4.2 + jest-environment-node: 29.4.2 + jest-haste-map: 29.4.2 + jest-leak-detector: 29.4.2 + jest-message-util: 29.4.2 + jest-resolve: 29.4.2 + jest-runtime: 29.4.2 + jest-util: 29.4.2 + jest-watcher: 29.4.2 + jest-worker: 29.4.2 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-runtime/27.5.1: + resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/globals': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + cjs-module-lexer: 1.2.2 + collect-v8-coverage: 1.0.1 + execa: 5.1.1 + glob: 7.2.3 + graceful-fs: 4.2.10 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color /jest-runtime/28.1.3: resolution: {integrity: sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==} @@ -2850,22 +10012,90 @@ packages: strip-bom: 4.0.0 transitivePeerDependencies: - supports-color + dev: true + + /jest-runtime/29.4.2: + resolution: {integrity: sha512-3fque9vtpLzGuxT9eZqhxi+9EylKK/ESfhClv4P7Y9sqJPs58LjVhTt8jaMp/pRO38agll1CkSu9z9ieTQeRrw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.4.2 + '@jest/fake-timers': 29.4.2 + '@jest/globals': 29.4.2 + '@jest/source-map': 29.4.2 + '@jest/test-result': 29.4.2 + '@jest/transform': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 + chalk: 4.1.2 + cjs-module-lexer: 1.2.2 + collect-v8-coverage: 1.0.1 + glob: 7.2.3 + graceful-fs: 4.2.10 + jest-haste-map: 29.4.2 + jest-message-util: 29.4.2 + jest-mock: 29.4.2 + jest-regex-util: 29.4.2 + jest-resolve: 29.4.2 + jest-snapshot: 29.4.2 + jest-util: 29.4.2 + semver: 7.3.8 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-serializer/27.5.1: + resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/node': 16.18.12 + graceful-fs: 4.2.10 + + /jest-snapshot/27.5.1: + resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.20.12 + '@babel/generator': 7.20.14 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__traverse': 7.18.3 + '@types/prettier': 2.7.2 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + chalk: 4.1.2 + expect: 27.5.1 + graceful-fs: 4.2.10 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + jest-haste-map: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + natural-compare: 1.4.0 + pretty-format: 27.5.1 + semver: 7.3.8 + transitivePeerDependencies: + - supports-color /jest-snapshot/28.1.3: resolution: {integrity: sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@babel/core': 7.18.13 - '@babel/generator': 7.18.13 - '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.18.13 - '@babel/traverse': 7.18.13 - '@babel/types': 7.18.13 + '@babel/core': 7.20.12 + '@babel/generator': 7.20.14 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 '@jest/expect-utils': 28.1.3 '@jest/transform': 28.1.3 '@jest/types': 28.1.3 - '@types/babel__traverse': 7.18.0 - '@types/prettier': 2.7.0 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.18.13 + '@types/babel__traverse': 7.18.3 + '@types/prettier': 2.7.2 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 chalk: 4.1.2 expect: 28.1.3 graceful-fs: 4.2.10 @@ -2877,18 +10107,51 @@ packages: jest-util: 28.1.3 natural-compare: 1.4.0 pretty-format: 28.1.3 - semver: 7.3.7 + semver: 7.3.8 transitivePeerDependencies: - supports-color + dev: true + + /jest-snapshot/29.4.2: + resolution: {integrity: sha512-PdfubrSNN5KwroyMH158R23tWcAXJyx4pvSvWls1dHoLCaUhGul9rsL3uVjtqzRpkxlkMavQjGuWG1newPgmkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.20.12 + '@babel/generator': 7.20.14 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 + '@jest/expect-utils': 29.4.2 + '@jest/transform': 29.4.2 + '@jest/types': 29.4.2 + '@types/babel__traverse': 7.18.3 + '@types/prettier': 2.7.2 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 + chalk: 4.1.2 + expect: 29.4.2 + graceful-fs: 4.2.10 + jest-diff: 29.4.2 + jest-get-type: 29.4.2 + jest-haste-map: 29.4.2 + jest-matcher-utils: 29.4.2 + jest-message-util: 29.4.2 + jest-util: 29.4.2 + natural-compare: 1.4.0 + pretty-format: 29.4.2 + semver: 7.3.8 + transitivePeerDependencies: + - supports-color + dev: true /jest-util/27.5.1: resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.7.14 + '@types/node': 16.18.12 chalk: 4.1.2 - ci-info: 3.3.2 + ci-info: 3.8.0 graceful-fs: 4.2.10 picomatch: 2.3.1 @@ -2897,12 +10160,35 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 18.7.11 + '@types/node': 16.11.59 chalk: 4.1.2 - ci-info: 3.3.2 + ci-info: 3.8.0 graceful-fs: 4.2.10 picomatch: 2.3.1 + /jest-util/29.4.2: + resolution: {integrity: sha512-wKnm6XpJgzMUSRFB7YF48CuwdzuDIHenVuoIb1PLuJ6F+uErZsuDkU+EiExkChf6473XcawBrSfDSnXl+/YG4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + '@types/node': 18.13.0 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.10 + picomatch: 2.3.1 + dev: true + + /jest-validate/27.5.1: + resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 27.5.1 + leven: 3.1.0 + pretty-format: 27.5.1 + /jest-validate/28.1.3: resolution: {integrity: sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -2913,6 +10199,47 @@ packages: jest-get-type: 28.0.2 leven: 3.1.0 pretty-format: 28.1.3 + dev: true + + /jest-validate/29.4.2: + resolution: {integrity: sha512-tto7YKGPJyFbhcKhIDFq8B5od+eVWD/ySZ9Tvcp/NGCvYA4RQbuzhbwYWtIjMT5W5zA2W0eBJwu4HVw34d5G6Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.2 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.4.2 + leven: 3.1.0 + pretty-format: 29.4.2 + dev: true + + /jest-watch-typeahead/1.1.0_jest@27.5.1: + resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + jest: ^27.0.0 || ^28.0.0 + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest: 27.5.1 + jest-regex-util: 28.0.2 + jest-watcher: 28.1.3 + slash: 4.0.0 + string-length: 5.0.1 + strip-ansi: 7.0.1 + dev: false + + /jest-watcher/27.5.1: + resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 16.18.12 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest-util: 27.5.1 + string-length: 4.0.2 /jest-watcher/28.1.3: resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} @@ -2920,23 +10247,105 @@ packages: dependencies: '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.7.11 + '@types/node': 16.18.12 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.10.2 jest-util: 28.1.3 string-length: 4.0.2 + /jest-watcher/29.4.2: + resolution: {integrity: sha512-onddLujSoGiMJt+tKutehIidABa175i/Ays+QvKxCqBwp7fvxP3ZhKsrIdOodt71dKxqk4sc0LN41mWLGIK44w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.4.2 + '@jest/types': 29.4.2 + '@types/node': 18.13.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.4.2 + string-length: 4.0.2 + dev: true + + /jest-worker/26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 16.18.12 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: false + + /jest-worker/27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 16.18.12 + merge-stream: 2.0.0 + supports-color: 8.1.1 + /jest-worker/28.1.3: resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@types/node': 18.7.11 + '@types/node': 16.18.12 merge-stream: 2.0.0 supports-color: 8.1.1 - /jest/28.1.3: - resolution: {integrity: sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==} + /jest-worker/29.4.2: + resolution: {integrity: sha512-VIuZA2hZmFyRbchsUCHEehoSf2HEl0YVF8SDJqtPnKorAaBuh42V8QsLnde0XP5F6TyCynGPEGgBOn3Fc+wZGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@types/node': 18.13.0 + jest-util: 29.4.2 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /jest/27.5.1: + resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1 + import-local: 3.1.0 + jest-cli: 27.5.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + + /jest/27.5.1_ts-node@10.9.1: + resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1_ts-node@10.9.1 + import-local: 3.1.0 + jest-cli: 27.5.1_ts-node@10.9.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: true + + /jest/28.1.0_@types+node@16.11.59: + resolution: {integrity: sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true peerDependencies: @@ -2946,17 +10355,45 @@ packages: optional: true dependencies: '@jest/core': 28.1.3 - '@jest/types': 28.1.3 import-local: 3.1.0 - jest-cli: 28.1.3 + jest-cli: 28.1.3_@types+node@16.11.59 transitivePeerDependencies: - '@types/node' - supports-color - ts-node + dev: true + + /jest/29.4.1: + resolution: {integrity: sha512-cknimw7gAXPDOmj0QqztlxVtBVCw2lYY9CeIE5N6kD+kET1H4H79HSNISJmijb1HF+qk+G+ploJgiDi5k/fRlg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 29.4.2 + '@jest/types': 29.4.2 + import-local: 3.1.0 + jest-cli: 29.4.2 + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + dev: true /js-base64/3.7.2: resolution: {integrity: sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==} + /js-base64/3.7.5: + resolution: {integrity: sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==} + dev: true + + /js-sdsl/4.3.0: + resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} + dev: false + /js-sha3/0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} dev: true @@ -2966,19 +10403,75 @@ packages: /js-yaml/3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: false + /jsbn/0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + dev: true /jsbn/1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + /jsdom/16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.6 + acorn: 8.8.2 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.4.3 + domexception: 2.0.1 + escodegen: 2.0.0 + form-data: 3.0.1 + html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.2 + parse5: 6.0.1 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.1.2 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + ws: 7.5.9 + xml-name-validator: 3.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /jsesc/0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: false + /jsesc/2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} + hasBin: true /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -2986,11 +10479,20 @@ packages: /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + /json-schema-traverse/1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: false + /json-schema/0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: false + /json-stringify-safe/5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: true /json-text-sequence/0.3.0: resolution: {integrity: sha512-7khKIYPKwXQem4lWXfpIN/FEnhztCeRPSxH4qm3fVlqulwujrRDD54xAwDDn/qVKpFtV550+QAkcWJcufzqQuA==} @@ -2999,13 +10501,30 @@ packages: '@sovpro/delimited-stream': 1.1.0 dev: true - /json5/2.2.1: - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} - engines: {node: '>=6'} + /json5/1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: false - /jsonc-parser/3.1.0: - resolution: {integrity: sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==} - dev: true + /json5/2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.10 + dev: false + + /jsonpointer/5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: false /jsprim/1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} @@ -3015,18 +10534,63 @@ packages: extsprintf: 1.3.0 json-schema: 0.4.0 verror: 1.10.0 + dev: true + + /jsx-ast-utils/3.3.3: + resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.6 + object.assign: 4.1.4 + dev: false /keypair/1.0.4: resolution: {integrity: sha512-zwhgOhhniaL7oxMgUMKKw5219PWWABMO+dgMnzJOQ2/5L3XJtTJGhW2PEXlxXj9zaccdReZJZ83+4NPhVfNVDg==} + dev: true + + /kind-of/6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: false /kleur/3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + /klona/2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + dev: false + + /language-subtag-registry/0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: false + + /language-tags/1.0.5: + resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} + dependencies: + language-subtag-registry: 0.3.22 + dev: false + /leven/3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} + /levn/0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + + /levn/0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: false + /libp2p-crypto/0.19.7: resolution: {integrity: sha512-Qb5o/3WFKF2j6mYSt4UBPyi2kbKl3jYV0podBJoJCw70DlpM5Xc+oh3fFY9ToSunu8aSQQ5GY8nutjXgX/uGRA==} engines: {node: '>=12.0.0'} @@ -3040,8 +10604,9 @@ packages: pem-jwk: 2.0.0 protobufjs: 6.11.3 secp256k1: 4.0.3 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 ursa-optional: 0.10.2 + dev: true /libp2p-crypto/0.20.0: resolution: {integrity: sha512-WgIW9rYcWaO/5j2T6NW3R6Q46yvp2ZfFErqRMbi4/pOTL3T7+OROYpL/1iWVksWkXyurU/t2qFsIijWMxR5C4Q==} @@ -3056,23 +10621,25 @@ packages: node-forge: 0.10.0 pem-jwk: 2.0.0 protobufjs: 6.11.3 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 ursa-optional: 0.10.2 + dev: true /libp2p-crypto/0.21.2: resolution: {integrity: sha512-EXFrhSpiHtJ+/L8xXDvQNK5VjUMG51u878jzZcaT5XhuN/zFg6PWJFnl/qB2Y2j7eMWnvCRP7Kp+ua2H36cG4g==} engines: {node: '>=12.0.0'} dependencies: - '@noble/ed25519': 1.6.1 - '@noble/secp256k1': 1.6.3 + '@noble/ed25519': 1.7.3 + '@noble/secp256k1': 1.7.1 err-code: 3.0.1 iso-random-stream: 2.0.2 multiformats: 9.9.0 node-forge: 1.3.1 protobufjs: 6.11.3 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 + dev: true - /libp2p-interfaces/4.0.6: + /libp2p-interfaces/4.0.6_node-fetch@3.3.0: resolution: {integrity: sha512-3KjzNEIWhi+VoOamLvgKKUE/xqwxSw/JYqsBnfMhAWVRvRtosROtVT03wci2XbuuowCYw+/hEX1xKJIR1w5n0A==} dependencies: abortable-iterator: 3.0.2 @@ -3082,20 +10649,22 @@ packages: it-pipe: 1.1.0 it-pushable: 1.4.2 libp2p-crypto: 0.21.2 - multiaddr: 10.0.1 + multiaddr: 10.0.1_node-fetch@3.3.0 multiformats: 9.9.0 p-queue: 6.6.2 peer-id: 0.16.0 protobufjs: 6.11.3 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 transitivePeerDependencies: + - node-fetch - supports-color + dev: true /libp2p-mplex/0.10.7: resolution: {integrity: sha512-21VV0DZWuOsHgitWy1GZD1M/kki3a/hVoAJ5QC48p01JNSK5W8gxRiZtq7cCGJ/xNpbQxvMlMtS5eq8CFRlysg==} dependencies: abortable-iterator: 3.0.2 - bl: 5.0.0 + bl: 5.1.0 debug: 4.3.4 err-code: 3.0.1 it-pipe: 1.1.0 @@ -3103,8 +10672,9 @@ packages: varint: 6.0.0 transitivePeerDependencies: - supports-color + dev: true - /libp2p-utils/0.4.1: + /libp2p-utils/0.4.1_node-fetch@3.3.0: resolution: {integrity: sha512-kq/US2unamiyY+YwP47dO1uqpAdcbdYI2Fzi9JIEhjfPBaD1MR/uyQ/YP7ABthl3EaxAjIQYd1TVp85d6QKAtQ==} dependencies: abortable-iterator: 3.0.2 @@ -3112,32 +10682,37 @@ packages: err-code: 3.0.1 ip-address: 8.1.0 is-loopback-addr: 1.0.1 - multiaddr: 10.0.1 + multiaddr: 10.0.1_node-fetch@3.3.0 private-ip: 2.3.4 transitivePeerDependencies: + - node-fetch - supports-color + dev: true - /libp2p-websockets/0.16.2: + /libp2p-websockets/0.16.2_node-fetch@3.3.0: resolution: {integrity: sha512-QGfo8jX1Ks16yi8C67CCyMW7k9cfCYiQ0lzKVJBud0fV3ymbMO2L8gzU6iXUUZTHILo8ka26zKhwQ4lmUMI+nA==} dependencies: abortable-iterator: 3.0.2 class-is: 1.1.0 debug: 4.3.4 err-code: 3.0.1 - ipfs-utils: 9.0.7 + ipfs-utils: 9.0.14 it-ws: 4.0.0 - libp2p-utils: 0.4.1 - mafmt: 10.0.0 - multiaddr: 10.0.1 - multiaddr-to-uri: 8.0.0 + libp2p-utils: 0.4.1_node-fetch@3.3.0 + mafmt: 10.0.0_node-fetch@3.3.0 + multiaddr: 10.0.1_node-fetch@3.3.0 + multiaddr-to-uri: 8.0.0_node-fetch@3.3.0 p-defer: 3.0.0 p-timeout: 4.1.0 transitivePeerDependencies: - bufferutil + - encoding + - node-fetch - supports-color - utf-8-validate + dev: true - /libp2p/0.36.2: + /libp2p/0.36.2_node-fetch@3.3.0: resolution: {integrity: sha512-UpNYBMQVivMu56zoibdGitopv39uBBAybIBOEGWmFy/I2NnTVGUutLPrxo47AuN2kntYgo/TNJfW+PpswUgSaw==} engines: {node: '>=15.0.0'} dependencies: @@ -3145,7 +10720,7 @@ packages: abortable-iterator: 3.0.2 aggregate-error: 3.1.0 any-signal: 3.0.1 - bignumber.js: 9.1.0 + bignumber.js: 9.1.1 class-is: 1.1.0 datastore-core: 7.0.3 debug: 4.3.4 @@ -3168,13 +10743,13 @@ packages: it-sort: 1.0.1 it-take: 1.0.2 libp2p-crypto: 0.21.2 - libp2p-interfaces: 4.0.6 - libp2p-utils: 0.4.1 - mafmt: 10.0.0 + libp2p-interfaces: 4.0.6_node-fetch@3.3.0 + libp2p-utils: 0.4.1_node-fetch@3.3.0 + mafmt: 10.0.0_node-fetch@3.3.0 merge-options: 3.0.4 mortice: 2.0.1 - multiaddr: 10.0.1 - multiformats: 9.7.1 + multiaddr: 10.0.1_node-fetch@3.3.0 + multiformats: 9.9.0 multistream-select: 3.0.2 mutable-proxy: 1.0.0 nat-api: 0.3.1 @@ -3191,25 +10766,161 @@ packages: set-delayed-interval: 1.0.0 streaming-iterables: 6.2.0 timeout-abort-controller: 3.0.0 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 varint: 6.0.0 wherearewe: 1.0.2 xsalsa20: 1.2.0 transitivePeerDependencies: + - node-fetch - supports-color + dev: true + + /libp2p/0.42.2: + resolution: {integrity: sha512-arTOCJEEmAFw5HjlXdULVAFs7Y/dWZmgX/qN4SzuxtSkB0pa+fqn/DIbIfpBi2BuY+QozvnARPF1xJtSdqfqJQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + '@achingbrain/nat-port-mapper': 1.0.7 + '@libp2p/crypto': 1.0.8_uint8arraylist@2.4.3 + '@libp2p/interface-address-manager': 2.0.4 + '@libp2p/interface-connection': 3.0.8 + '@libp2p/interface-connection-encrypter': 3.0.6 + '@libp2p/interface-connection-manager': 1.3.7 + '@libp2p/interface-content-routing': 2.0.1 + '@libp2p/interface-dht': 2.0.1 + '@libp2p/interface-libp2p': 1.1.1 + '@libp2p/interface-metrics': 4.0.5 + '@libp2p/interface-peer-discovery': 1.0.5 + '@libp2p/interface-peer-id': 2.0.1 + '@libp2p/interface-peer-info': 1.0.8 + '@libp2p/interface-peer-routing': 1.0.7 + '@libp2p/interface-peer-store': 1.2.8 + '@libp2p/interface-pubsub': 3.0.6 + '@libp2p/interface-registrar': 2.0.8 + '@libp2p/interface-stream-muxer': 3.0.5 + '@libp2p/interface-transport': 2.1.1 + '@libp2p/interfaces': 3.3.1 + '@libp2p/logger': 2.0.5 + '@libp2p/multistream-select': 3.1.2 + '@libp2p/peer-collections': 3.0.0 + '@libp2p/peer-id': 2.0.1 + '@libp2p/peer-id-factory': 2.0.1 + '@libp2p/peer-record': 5.0.0 + '@libp2p/peer-store': 6.0.0 + '@libp2p/tracked-map': 3.0.2 + '@libp2p/utils': 3.0.4 + '@multiformats/mafmt': 11.0.3 + '@multiformats/multiaddr': 11.3.0 + abortable-iterator: 4.0.2 + any-signal: 3.0.1 + datastore-core: 8.0.4 + err-code: 3.0.1 + events: 3.3.0 + hashlru: 2.3.0 + interface-datastore: 7.0.4 + it-all: 2.0.0 + it-drain: 2.0.0 + it-filter: 2.0.0 + it-first: 2.0.0 + it-foreach: 1.0.0 + it-handshake: 4.1.2 + it-length-prefixed: 8.0.4 + it-map: 2.0.0 + it-merge: 2.0.0 + it-pair: 2.0.3 + it-pipe: 2.0.5 + it-sort: 2.0.0 + it-stream-types: 1.0.5 + merge-options: 3.0.4 + multiformats: 11.0.1 + node-forge: 1.3.1 + p-fifo: 1.0.0 + p-retry: 5.1.2 + p-settle: 5.1.0 + private-ip: 3.0.0 + protons-runtime: 4.0.2_uint8arraylist@2.4.3 + rate-limiter-flexible: 2.4.1 + retimer: 3.0.0 + sanitize-filename: 1.6.3 + set-delayed-interval: 1.0.0 + timeout-abort-controller: 3.0.0 + uint8arraylist: 2.4.3 + uint8arrays: 4.0.3 + wherearewe: 2.0.1 + xsalsa20: 1.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /lilconfig/2.0.6: + resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} + engines: {node: '>=10'} + dev: false /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + /loader-runner/4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: false + + /loader-utils/2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.3 + dev: false + + /loader-utils/3.2.1: + resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + engines: {node: '>= 12.13.0'} + dev: false + + /locate-path/3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: false + /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: false + + /lodash.debounce/4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: false + /lodash.memoize/4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: false + + /lodash.sortby/4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: false + + /lodash.uniq/4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: false + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + /loglevel/1.8.0: resolution: {integrity: sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==} engines: {node: '>= 0.6.0'} @@ -3218,10 +10929,40 @@ packages: /loglevel/1.8.1: resolution: {integrity: sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==} engines: {node: '>= 0.6.0'} - dev: false /long/4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + dev: true + + /long/5.2.1: + resolution: {integrity: sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==} + dev: false + + /longbits/1.1.0: + resolution: {integrity: sha512-22U2exkkYy7sr7nuQJYx2NEZ2kEMsC69+BxM5h8auLvkVIJa+LwAB5mFIExnuW2dFuYXFOWsFMKXjaWiq/htYQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + byte-access: 1.0.1 + uint8arraylist: 2.4.3 + dev: false + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /lower-case/2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.5.0 + dev: false + + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} @@ -3229,16 +10970,32 @@ packages: dependencies: yallist: 4.0.0 - /lunr/2.3.9: - resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - dev: true + /lz-string/1.4.4: + resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} + hasBin: true + dev: false - /mafmt/10.0.0: + /mafmt/10.0.0_node-fetch@3.3.0: resolution: {integrity: sha512-K1bziJOXcnepfztu+2Xy9FLKVLaFMDuspmiyJIYRxnO0WOxFSV7XKSdMxMrVZxcvg1+YjlTIvSGTImUHU2k4Aw==} dependencies: - multiaddr: 10.0.1 + multiaddr: 10.0.1_node-fetch@3.3.0 transitivePeerDependencies: + - node-fetch - supports-color + dev: true + + /magic-string/0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: false + + /magic-string/0.27.0: + resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} @@ -3248,16 +11005,25 @@ packages: /make-error/1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true /makeerror/1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 - /marked/4.0.19: - resolution: {integrity: sha512-rgQF/OxOiLcvgUAj1Q1tAf4Bgxn5h5JZTp04Fx4XUkVhs7B+7YA9JEWJhJpoO8eJt8MkZMwqLCNeNqj1bCREZQ==} - engines: {node: '>= 12'} - dev: true + /mdn-data/2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: false + + /mdn-data/2.0.4: + resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} + dev: false + + /media-typer/0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false /memfs/3.0.4: resolution: {integrity: sha512-OcZEzwX9E5AoY8SXjuAvw0DbIAYwUzV/I236I8Pqvrlv7sL/Y0E9aRCon05DhaV8pg1b32uxj76RgW0s5xjHBA==} @@ -3265,6 +11031,17 @@ packages: fast-extend: 1.0.2 fs-monkey: 0.3.3 + /memfs/3.4.13: + resolution: {integrity: sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.3 + dev: false + + /merge-descriptors/1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: false + /merge-options/3.0.4: resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} engines: {node: '>=10'} @@ -3274,6 +11051,16 @@ packages: /merge-stream/2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: false + + /methods/1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false + /micromatch/4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -3291,30 +11078,57 @@ packages: dependencies: mime-db: 1.52.0 + /mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + /min-indent/1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: false + + /mini-css-extract-plugin/2.7.2_webpack@5.75.0: + resolution: {integrity: sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + schema-utils: 4.0.0 + webpack: 5.75.0 + dev: false + /minimalistic-assert/1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} /minimalistic-crypto-utils/1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: true /minimatch/3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - /minimatch/5.1.0: - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} + /minimatch/5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: true + dev: false - /minimist/1.2.6: - resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + /minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + /mkdirp/0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 /mortice/2.0.1: resolution: {integrity: sha512-9gsXmjq+5LZmXDIoyC/crf2i/7CUwDGSBEwSEsr1i/WfKmJ6DVt38B5kg6BE/WF/1/yfGJYiB1Wyiu423iI3nQ==} @@ -3323,6 +11137,21 @@ packages: observable-webworkers: 1.0.0 p-queue: 6.6.2 promise-timeout: 1.3.0 + dev: true + + /mortice/3.0.1: + resolution: {integrity: sha512-eyDUsl1nCR9+JtNksKnaESLP9MgAXCA4w1LTtsmOSQNsThnv++f36rrBu5fC/fdGIwTJZmbiaR/QewptH93pYA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + nanoid: 4.0.1 + observable-webworkers: 2.0.1 + p-queue: 7.3.4 + p-timeout: 6.1.1 + dev: false + + /ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -3330,75 +11159,106 @@ packages: /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /multiaddr-to-uri/7.0.0: + /multiaddr-to-uri/7.0.0_node-fetch@3.3.0: resolution: {integrity: sha512-VbscDpLcbV0m25tJqfnZSfbjVUuNlPa4BbD5l/7me1t0lc3SWI0XAoO5E/PNJF0e1qUlbdq7yjVFEQjUT+9r0g==} + deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr-to-uri dependencies: - multiaddr: 9.0.2 + multiaddr: 9.0.2_node-fetch@3.3.0 transitivePeerDependencies: + - node-fetch - supports-color dev: true - /multiaddr-to-uri/8.0.0: + /multiaddr-to-uri/8.0.0_node-fetch@3.3.0: resolution: {integrity: sha512-dq4p/vsOOUdVEd1J1gl+R2GFrXJQH8yjLtz4hodqdVbieg39LvBOdMQRdQnfbg5LSM/q1BYNVf5CBbwZFFqBgA==} + deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr-to-uri dependencies: - multiaddr: 10.0.1 + multiaddr: 10.0.1_node-fetch@3.3.0 transitivePeerDependencies: + - node-fetch - supports-color + dev: true - /multiaddr/10.0.1: + /multiaddr/10.0.1_node-fetch@3.3.0: resolution: {integrity: sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg==} + deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr dependencies: - dns-over-http-resolver: 1.2.3 + dns-over-http-resolver: 1.2.3_node-fetch@3.3.0 err-code: 3.0.1 is-ip: 3.1.0 - multiformats: 9.6.5 - uint8arrays: 3.1.0 + multiformats: 9.9.0 + uint8arrays: 3.1.1 varint: 6.0.0 transitivePeerDependencies: + - node-fetch - supports-color + dev: true - /multiaddr/9.0.2: + /multiaddr/9.0.2_node-fetch@3.3.0: resolution: {integrity: sha512-YFaEb9t4yXSbaGksSEdg+Kn2U02s7w4wXUgyEMQmPxFJj7CfVHY10WOsScAX/rK6Soa15S1zXYadqH9TtlVreQ==} + deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr dependencies: cids: 1.1.9 - dns-over-http-resolver: 1.2.3 + dns-over-http-resolver: 1.2.3_node-fetch@3.3.0 err-code: 3.0.1 is-ip: 3.1.0 multibase: 4.0.6 uint8arrays: 2.1.10 varint: 6.0.0 transitivePeerDependencies: + - node-fetch - supports-color dev: true /multibase/4.0.6: resolution: {integrity: sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==} engines: {node: '>=12.0.0', npm: '>=6.0.0'} + deprecated: This module has been superseded by the multiformats module dependencies: '@multiformats/base-x': 4.0.1 + dev: true + + /multicast-dns/7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + dependencies: + dns-packet: 5.4.0 + thunky: 1.1.0 + dev: false /multicodec/3.2.1: resolution: {integrity: sha512-+expTPftro8VAW8kfvcuNNNBgb9gPeNYV9dn+z1kJRWF2vih+/S79f2RVeIwmrJBUJ6NT9IUPWnZDQvegEh5pw==} + deprecated: This module has been superseded by the multiformats module dependencies: - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 varint: 6.0.0 + dev: true + + /multiformats/10.0.3: + resolution: {integrity: sha512-K2yGSmstS/oEmYiEIieHb53jJCaqp4ERPDQAYrm5sV3UUrVDZeshJQCK6GHAKyIGufU1vAcbS0PdAAZmC7Tzcw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false + + /multiformats/11.0.1: + resolution: {integrity: sha512-atWruyH34YiknSdL5yeIir00EDlJRpHzELYQxG7Iy29eCyL+VrZHpPrX5yqlik3jnuqpLpRKVZ0SGVb9UzKaSA==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} /multiformats/9.6.5: resolution: {integrity: sha512-vMwf/FUO+qAPvl3vlSZEgEVFY/AxeZq5yg761ScF3CZsXgmTi/HGkicUiNN0CI4PW8FiY2P0OLklOcmQjdQJhw==} - - /multiformats/9.7.1: - resolution: {integrity: sha512-TaVmGEBt0fhxiNJMGphBfB+oGvUxFs8KgGvgl8d3C+GWtrFcvXdJ2196eg+dYhmSFClmgFfSfJEklo+SZzdNuw==} + dev: true /multiformats/9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} + dev: true /multihashes/4.0.3: resolution: {integrity: sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA==} engines: {node: '>=12.0.0', npm: '>=6.0.0'} dependencies: multibase: 4.0.6 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 varint: 5.0.2 + dev: true /multihashing-async/2.1.4: resolution: {integrity: sha512-sB1MiQXPSBTNRVSJc2zM157PXgDtud2nMFUEIvBrsq5Wv96sUclMRK/ecjoP1T/W61UJBqt4tCTwMkUpt2Gbzg==} @@ -3409,14 +11269,14 @@ packages: js-sha3: 0.8.0 multihashes: 4.0.3 murmurhash3js-revisited: 3.0.0 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 dev: true /multistream-select/3.0.2: resolution: {integrity: sha512-ICGA8DAviZj6Xo1NkaRV3J38M+tFDoWiGtO1ksluyMnskAsdGjAzocg806OzpQPivNGWWboX3CrFT2Tk4UdYXA==} dependencies: abortable-iterator: 3.0.2 - bl: 5.0.0 + bl: 5.1.0 debug: 4.3.4 err-code: 3.0.1 it-first: 1.0.7 @@ -3425,9 +11285,10 @@ packages: it-pipe: 1.1.0 it-reader: 3.0.0 p-defer: 3.0.0 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 transitivePeerDependencies: - supports-color + dev: true /murmurhash3js-revisited/3.0.0: resolution: {integrity: sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==} @@ -3437,13 +11298,22 @@ packages: /mutable-proxy/1.0.0: resolution: {integrity: sha512-4OvNRr1DJpy2QuDUV74m+BWZ//n4gG4bmd21MzDSPqHEidIDWqwyOjcadU1LBMO3vXYGurVKjfBrxrSQIHFu9A==} engines: {node: '>=6.X.X', npm: '>=3.X.X'} + dev: true - /nan/2.16.0: - resolution: {integrity: sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==} + /nan/2.17.0: + resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} + dev: true /nanoid/3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /nanoid/4.0.1: + resolution: {integrity: sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww==} + engines: {node: ^14 || ^16 || >=18} + hasBin: true + dev: false /nat-api/0.3.1: resolution: {integrity: sha512-5cyLugEkXnKSKSvVjKjxxPMLDnkwY3boZLbATWwiGJ4T/3UvIpiQmzb2RqtxxEFcVo/7PwsHPGN0MosopONO8Q==} @@ -3457,81 +11327,280 @@ packages: xml2js: 0.1.14 transitivePeerDependencies: - supports-color + dev: true - /native-abort-controller/1.0.4: + /native-abort-controller/1.0.4_abort-controller@3.0.0: resolution: {integrity: sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==} + peerDependencies: + abort-controller: '*' dependencies: abort-controller: 3.0.0 dev: true - /native-fetch/3.0.0: + /native-fetch/3.0.0_hmwa7nplpltavckpkeobtw6pv4: resolution: {integrity: sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==} + peerDependencies: + node-fetch: '*' dependencies: - node-fetch: 3.2.10 + node-fetch: /@achingbrain/node-fetch/2.6.7 + dev: true + + /native-fetch/3.0.0_node-fetch@2.6.9: + resolution: {integrity: sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==} + peerDependencies: + node-fetch: '*' + dependencies: + node-fetch: 2.6.9 + dev: true + + /native-fetch/3.0.0_node-fetch@3.3.0: + resolution: {integrity: sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw==} + peerDependencies: + node-fetch: '*' + dependencies: + node-fetch: 3.3.0 + dev: true + + /native-fetch/4.0.2_undici@5.18.0: + resolution: {integrity: sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg==} + peerDependencies: + undici: '*' + dependencies: + undici: 5.18.0 + + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: false /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + /negotiator/0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + + /neo-async/2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: false + /netmask/2.0.2: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} + /no-case/3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.5.0 + dev: false + /noble-ed25519/1.2.6: resolution: {integrity: sha512-zfnWqg9FVMp8CnzUpAjbt1nDXpDjCvxYiCXdnW1mY8zQHw/6twUlkFm14VPdojVzc0kcd+i9zT79+26GcNbsuQ==} + deprecated: Switch to namespaced @noble/ed25519 for security and feature updates + dev: true /noble-secp256k1/1.2.14: resolution: {integrity: sha512-GSCXyoZBUaaPwVWdYncMEmzlSUjF9J/YeEHpklYJCyg8wPuJP3NzDx0BkiwArzINkdX2HJHvUJhL6vVWPOQQcg==} + deprecated: Switch to namespaced @noble/secp256k1 for security and feature updates + dev: true /node-addon-api/2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + dev: true /node-domexception/1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} + dev: true - /node-fetch/3.2.10: - resolution: {integrity: sha512-MhuzNwdURnZ1Cp4XTazr69K0BTizsBroX7Zx3UgDSVcZYKF/6p0CBe4EUb/hLqmzVhl0UpYfgRljQ4yxE+iCxA==} + /node-fetch/2.6.9: + resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-fetch/3.3.0: + resolution: {integrity: sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - data-uri-to-buffer: 4.0.0 + data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + dev: true /node-forge/0.10.0: resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} engines: {node: '>= 6.0.0'} + dev: true /node-forge/1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} - /node-gyp-build/4.5.0: - resolution: {integrity: sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==} + /node-gyp-build/4.6.0: + resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} + hasBin: true + dev: true /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - /node-releases/2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + /node-releases/2.0.10: + resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + /normalize-range/0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-url/6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: false + /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: path-key: 3.1.1 + /nth-check/1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + dependencies: + boolbase: 1.0.0 + dev: false + + /nth-check/2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: false + + /nwsapi/2.2.2: + resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} + /oauth-sign/0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + dev: true + + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: false + + /object-hash/3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: false + + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + + /object-is/1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + dev: false + + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: false + + /object.assign/4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: false + + /object.entries/1.1.6: + resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + dev: false + + /object.fromentries/2.0.6: + resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + dev: false + + /object.getownpropertydescriptors/2.1.5: + resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} + engines: {node: '>= 0.8'} + dependencies: + array.prototype.reduce: 1.0.5 + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + dev: false + + /object.hasown/1.1.2: + resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} + dependencies: + define-properties: 1.2.0 + es-abstract: 1.21.1 + dev: false + + /object.values/1.1.6: + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + dev: false /observable-fns/0.6.1: resolution: {integrity: sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==} /observable-webworkers/1.0.0: resolution: {integrity: sha512-+cECwCR8IEh8UY5nefQVLO9Cydqpk1izO+o7BABmKjXfJZyEOzBWY3ss5jbOPM6KmEa9aQExvAtTW6tVTOsNAQ==} + dev: true + + /observable-webworkers/2.0.1: + resolution: {integrity: sha512-JI1vB0u3pZjoQKOK1ROWzp0ygxSi7Yb0iR+7UNsw4/Zn4cQ0P3R7XL38zac/Dy2tEA7Lg88/wIJTjF8vYXZ0uw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false + + /obuf/1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + dev: false + + /on-finished/2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-headers/1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: false /once/1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3544,21 +11613,65 @@ packages: dependencies: mimic-fn: 2.1.0 + /open/8.4.1: + resolution: {integrity: sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /opener/1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + dev: true + + /optionator/0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.3 + + /optionator/0.9.1: + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + dev: false + /p-any/3.0.0: resolution: {integrity: sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w==} engines: {node: '>=10'} dependencies: p-cancelable: 2.1.1 p-some: 5.0.0 + dev: true /p-cancelable/2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} + dev: true /p-defer/3.0.0: resolution: {integrity: sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==} engines: {node: '>=8'} + /p-defer/4.0.0: + resolution: {integrity: sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ==} + engines: {node: '>=12'} + dev: false + /p-fifo/1.0.0: resolution: {integrity: sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==} dependencies: @@ -3568,6 +11681,7 @@ packages: /p-finally/1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} + dev: true /p-limit/2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} @@ -3581,22 +11695,58 @@ packages: dependencies: yocto-queue: 0.1.0 + /p-limit/4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: false + + /p-locate/3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: false + /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: false + /p-queue/6.6.2: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} dependencies: eventemitter3: 4.0.7 p-timeout: 3.2.0 + dev: true + + /p-queue/7.3.4: + resolution: {integrity: sha512-esox8CWt0j9EZECFvkFl2WNPat8LN4t7WWeXq73D9ha0V96qPRufApZi4ZhPwXAln1uVVal429HVVKPa2X0yQg==} + engines: {node: '>=12'} + dependencies: + eventemitter3: 4.0.7 + p-timeout: 5.1.0 + dev: false /p-reflect/2.1.0: resolution: {integrity: sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==} engines: {node: '>=8'} + dev: true + + /p-reflect/3.1.0: + resolution: {integrity: sha512-3sG3UlpisPSaX+o7u2q01hIQmrpkvdl5GSO1ZwL7pfc5kHB2bPF0eFNCfYTrW1/LTUdgmPwBAvmT0Zr8eSmaAQ==} + engines: {node: '>=12'} + dev: false /p-retry/4.6.2: resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} @@ -3605,12 +11755,29 @@ packages: '@types/retry': 0.12.0 retry: 0.13.1 + /p-retry/5.1.2: + resolution: {integrity: sha512-couX95waDu98NfNZV+i/iLt+fdVxmI7CbrrdC2uDWfPdUAApyxT4wmDlyOtR5KtTDmkDO0zDScDjDou9YHhd9g==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + '@types/retry': 0.12.1 + retry: 0.13.1 + dev: false + /p-settle/4.1.1: resolution: {integrity: sha512-6THGh13mt3gypcNMm0ADqVNCcYa3BK6DWsuJWFCuEKP1rpY+OKGp7gaZwVmLspmic01+fsg/fN57MfvDzZ/PuQ==} engines: {node: '>=10'} dependencies: p-limit: 2.3.0 p-reflect: 2.1.0 + dev: true + + /p-settle/5.1.0: + resolution: {integrity: sha512-ujR6UFfh09ziOKyC5aaJak5ZclsjlLw57SYtFZg6yllMofyygnaibQRZ4jf6QPWqoOCGUXyb1cxUKELeAyKO7g==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-limit: 4.0.0 + p-reflect: 3.1.0 + dev: false /p-some/5.0.0: resolution: {integrity: sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig==} @@ -3618,16 +11785,29 @@ packages: dependencies: aggregate-error: 3.1.0 p-cancelable: 2.1.1 + dev: true /p-timeout/3.2.0: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} dependencies: p-finally: 1.0.0 + dev: true /p-timeout/4.1.0: resolution: {integrity: sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==} engines: {node: '>=10'} + dev: true + + /p-timeout/5.1.0: + resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} + engines: {node: '>=12'} + dev: false + + /p-timeout/6.1.1: + resolution: {integrity: sha512-yqz2Wi4fiFRpMmK0L2pGAU49naSUaP23fFIQL2Y6YT+qDGPoFwpvgQM/wzc6F8JoenUkIlAFa4Ql7NguXBxI7w==} + engines: {node: '>=14.16'} + dev: false /p-try/2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} @@ -3636,6 +11816,20 @@ packages: /pako/1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + /param-case/3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.5.0 + dev: false + + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: false + /parse-duration/1.0.2: resolution: {integrity: sha512-Dg27N6mfok+ow1a2rj/nRjtCfaKrHUZV2SJpEn/s8GaVUSlf4GGRCRP1c13Hj+wfPKVMrFDqLMLITkYKgKxyyg==} dev: true @@ -3649,9 +11843,29 @@ packages: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + /parse5/6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + /parseurl/1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /pascal-case/3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.5.0 + dev: false + /path-browserify/1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + /path-exists/3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: false + /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3667,16 +11881,27 @@ packages: /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + /path-to-regexp/0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: false + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: false + /peer-id/0.15.4: resolution: {integrity: sha512-MDoBIMZYwQIAHaZQUwsIcvoFgdbIl5GtZMwSkXpIYvc5v0TSDv+u8WsTKrKt2Vv28tHFFDJQdVzu3T4qTPzK+w==} engines: {node: '>=14.0.0'} + hasBin: true dependencies: class-is: 1.1.0 libp2p-crypto: 0.20.0 - minimist: 1.2.6 + minimist: 1.2.8 multiformats: 9.9.0 protobufjs: 6.11.3 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 + dev: true /peer-id/0.16.0: resolution: {integrity: sha512-EmL7FurFUduU9m1PS9cfJ5TAuCvxKQ7DKpfx3Yj6IKWyBRtosriFuOag/l3ni/dtPgPLwiA4R9IvpL7hsDLJuQ==} @@ -3684,19 +11909,26 @@ packages: dependencies: class-is: 1.1.0 libp2p-crypto: 0.21.2 - multiformats: 9.7.1 + multiformats: 9.9.0 protobufjs: 6.11.3 - uint8arrays: 3.1.0 + uint8arrays: 3.1.1 + dev: true /pem-jwk/2.0.0: resolution: {integrity: sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==} engines: {node: '>=5.10.0'} + hasBin: true dependencies: asn1.js: 5.4.1 + dev: true /performance-now/2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + /picocolors/0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + dev: false + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -3704,6 +11936,11 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + /pify/2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: false + /pirates/4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} @@ -3714,9 +11951,824 @@ packages: dependencies: find-up: 4.1.0 + /pkg-up/3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + dependencies: + find-up: 3.0.0 + dev: false + /platform/1.3.6: resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} + /portfinder/1.0.32: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} + engines: {node: '>= 0.12.0'} + dependencies: + async: 2.6.4 + debug: 3.2.7 + mkdirp: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /postcss-attribute-case-insensitive/5.0.2_postcss@8.4.21: + resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-browser-comments/4.0.0_jrpp4geoaqu5dz2gragkckznb4: + resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} + engines: {node: '>=8'} + peerDependencies: + browserslist: '>=4' + postcss: '>=8' + dependencies: + browserslist: 4.21.5 + postcss: 8.4.21 + dev: false + + /postcss-calc/8.2.4_postcss@8.4.21: + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-clamp/4.1.0_postcss@8.4.21: + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-color-functional-notation/4.2.4_postcss@8.4.21: + resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-color-hex-alpha/8.0.4_postcss@8.4.21: + resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-color-rebeccapurple/7.1.1_postcss@8.4.21: + resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-colormin/5.3.0_postcss@8.4.21: + resolution: {integrity: sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.5 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-convert-values/5.1.3_postcss@8.4.21: + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.5 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-custom-media/8.0.2_postcss@8.4.21: + resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-custom-properties/12.1.11_postcss@8.4.21: + resolution: {integrity: sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-custom-selectors/6.0.3_postcss@8.4.21: + resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-dir-pseudo-class/6.0.5_postcss@8.4.21: + resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-discard-comments/5.1.2_postcss@8.4.21: + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-discard-duplicates/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-discard-empty/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-discard-overridden/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-double-position-gradients/3.1.2_postcss@8.4.21: + resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-env-function/4.0.6_postcss@8.4.21: + resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-flexbugs-fixes/5.0.2_postcss@8.4.21: + resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} + peerDependencies: + postcss: ^8.1.4 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-focus-visible/6.0.4_postcss@8.4.21: + resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-focus-within/5.0.4_postcss@8.4.21: + resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-font-variant/5.0.0_postcss@8.4.21: + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-gap-properties/3.0.5_postcss@8.4.21: + resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-image-set-function/4.0.7_postcss@8.4.21: + resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-import/14.1.0_postcss@8.4.21: + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.1 + dev: false + + /postcss-initial/4.0.1_postcss@8.4.21: + resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-js/4.0.1_postcss@8.4.21: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.21 + dev: false + + /postcss-lab-function/4.2.1_postcss@8.4.21: + resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-load-config/3.1.4_postcss@8.4.21: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.0.6 + postcss: 8.4.21 + yaml: 1.10.2 + dev: false + + /postcss-loader/6.2.1_6jdsrmfenkuhhw3gx4zvjlznce: + resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + dependencies: + cosmiconfig: 7.1.0 + klona: 2.0.6 + postcss: 8.4.21 + semver: 7.3.8 + webpack: 5.75.0 + dev: false + + /postcss-logical/5.0.4_postcss@8.4.21: + resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-media-minmax/5.0.0_postcss@8.4.21: + resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-merge-longhand/5.1.7_postcss@8.4.21: + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1_postcss@8.4.21 + dev: false + + /postcss-merge-rules/5.1.3_postcss@8.4.21: + resolution: {integrity: sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.5 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-minify-font-values/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-minify-gradients/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-minify-params/5.1.4_postcss@8.4.21: + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.5 + cssnano-utils: 3.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-minify-selectors/5.2.1_postcss@8.4.21: + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-modules-extract-imports/3.0.0_postcss@8.4.21: + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-modules-local-by-default/4.0.0_postcss@8.4.21: + resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-modules-scope/3.0.0_postcss@8.4.21: + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-modules-values/4.0.0_postcss@8.4.21: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0_postcss@8.4.21 + postcss: 8.4.21 + dev: false + + /postcss-nested/6.0.0_postcss@8.4.21: + resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-nesting/10.2.0_postcss@8.4.21: + resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.1.1_wajs5nedgkikc5pcuwett7legi + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-normalize-charset/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-normalize-display-values/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-positions/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-repeat-style/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-string/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-timing-functions/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-unicode/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.5 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-url/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-whitespace/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize/10.0.1_jrpp4geoaqu5dz2gragkckznb4: + resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} + engines: {node: '>= 12'} + peerDependencies: + browserslist: '>= 4' + postcss: '>= 8' + dependencies: + '@csstools/normalize.css': 12.0.0 + browserslist: 4.21.5 + postcss: 8.4.21 + postcss-browser-comments: 4.0.0_jrpp4geoaqu5dz2gragkckznb4 + sanitize.css: 13.0.0 + dev: false + + /postcss-opacity-percentage/1.1.3_postcss@8.4.21: + resolution: {integrity: sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-ordered-values/5.1.3_postcss@8.4.21: + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 3.1.0_postcss@8.4.21 + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-overflow-shorthand/3.0.4_postcss@8.4.21: + resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-page-break/3.0.4_postcss@8.4.21: + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-place/7.0.5_postcss@8.4.21: + resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-preset-env/7.8.3_postcss@8.4.21: + resolution: {integrity: sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-cascade-layers': 1.1.1_postcss@8.4.21 + '@csstools/postcss-color-function': 1.1.1_postcss@8.4.21 + '@csstools/postcss-font-format-keywords': 1.0.1_postcss@8.4.21 + '@csstools/postcss-hwb-function': 1.0.2_postcss@8.4.21 + '@csstools/postcss-ic-unit': 1.0.1_postcss@8.4.21 + '@csstools/postcss-is-pseudo-class': 2.0.7_postcss@8.4.21 + '@csstools/postcss-nested-calc': 1.0.0_postcss@8.4.21 + '@csstools/postcss-normalize-display-values': 1.0.1_postcss@8.4.21 + '@csstools/postcss-oklab-function': 1.1.1_postcss@8.4.21 + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.21 + '@csstools/postcss-stepped-value-functions': 1.0.1_postcss@8.4.21 + '@csstools/postcss-text-decoration-shorthand': 1.0.0_postcss@8.4.21 + '@csstools/postcss-trigonometric-functions': 1.0.2_postcss@8.4.21 + '@csstools/postcss-unset-value': 1.0.2_postcss@8.4.21 + autoprefixer: 10.4.13_postcss@8.4.21 + browserslist: 4.21.5 + css-blank-pseudo: 3.0.3_postcss@8.4.21 + css-has-pseudo: 3.0.4_postcss@8.4.21 + css-prefers-color-scheme: 6.0.3_postcss@8.4.21 + cssdb: 7.4.1 + postcss: 8.4.21 + postcss-attribute-case-insensitive: 5.0.2_postcss@8.4.21 + postcss-clamp: 4.1.0_postcss@8.4.21 + postcss-color-functional-notation: 4.2.4_postcss@8.4.21 + postcss-color-hex-alpha: 8.0.4_postcss@8.4.21 + postcss-color-rebeccapurple: 7.1.1_postcss@8.4.21 + postcss-custom-media: 8.0.2_postcss@8.4.21 + postcss-custom-properties: 12.1.11_postcss@8.4.21 + postcss-custom-selectors: 6.0.3_postcss@8.4.21 + postcss-dir-pseudo-class: 6.0.5_postcss@8.4.21 + postcss-double-position-gradients: 3.1.2_postcss@8.4.21 + postcss-env-function: 4.0.6_postcss@8.4.21 + postcss-focus-visible: 6.0.4_postcss@8.4.21 + postcss-focus-within: 5.0.4_postcss@8.4.21 + postcss-font-variant: 5.0.0_postcss@8.4.21 + postcss-gap-properties: 3.0.5_postcss@8.4.21 + postcss-image-set-function: 4.0.7_postcss@8.4.21 + postcss-initial: 4.0.1_postcss@8.4.21 + postcss-lab-function: 4.2.1_postcss@8.4.21 + postcss-logical: 5.0.4_postcss@8.4.21 + postcss-media-minmax: 5.0.0_postcss@8.4.21 + postcss-nesting: 10.2.0_postcss@8.4.21 + postcss-opacity-percentage: 1.1.3_postcss@8.4.21 + postcss-overflow-shorthand: 3.0.4_postcss@8.4.21 + postcss-page-break: 3.0.4_postcss@8.4.21 + postcss-place: 7.0.5_postcss@8.4.21 + postcss-pseudo-class-any-link: 7.1.6_postcss@8.4.21 + postcss-replace-overflow-wrap: 4.0.0_postcss@8.4.21 + postcss-selector-not: 6.0.1_postcss@8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-pseudo-class-any-link/7.1.6_postcss@8.4.21: + resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-reduce-initial/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.5 + caniuse-api: 3.0.0 + postcss: 8.4.21 + dev: false + + /postcss-reduce-transforms/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-replace-overflow-wrap/4.0.0_postcss@8.4.21: + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 + dependencies: + postcss: 8.4.21 + dev: false + + /postcss-selector-not/6.0.1_postcss@8.4.21: + resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-selector-parser/6.0.11: + resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: false + + /postcss-svgo/5.1.0_postcss@8.4.21: + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + dev: false + + /postcss-unique-selectors/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + + /postcss-value-parser/4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: false + + /postcss/7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} + dependencies: + picocolors: 0.2.1 + source-map: 0.6.1 + dev: false + + /postcss/8.4.21: + resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /prelude-ls/1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: false + + /pretty-bytes/5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + dev: false + + /pretty-error/4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} + dependencies: + lodash: 4.17.21 + renderkid: 3.0.0 + dev: false + /pretty-format/27.5.1: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -3734,6 +12786,15 @@ packages: ansi-styles: 5.2.0 react-is: 18.2.0 + /pretty-format/29.4.2: + resolution: {integrity: sha512-qKlHR8yFVCbcEWba0H0TOC8dnLlO4vPlyEjRPw31FZ2Rupy9nLa8ZLbYny8gWEl8CkEhJqAE6IzdNELTBVcBEg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.4.2 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + /private-ip/2.3.4: resolution: {integrity: sha512-ts/YFVwfBeLq61f9+KsOhXW6RH0wvY0gU50R6QZYzgFhggyyLK6WDFeYdjfi/HMnBm2hecLvsR3PB3JcRxDk+A==} dependencies: @@ -3741,9 +12802,36 @@ packages: ipaddr.js: 2.0.1 is-ip: 3.1.0 netmask: 2.0.2 + dev: true + + /private-ip/3.0.0: + resolution: {integrity: sha512-HkMBs4nMtrP+cvcw0bDi2BAZIGgiKI4Zq8Oc+dMqNBpHS8iGL4+WO/pRtc8Bwnv9rjnV0QwMDwEBymFtqv7Kww==} + engines: {node: '>=14.16'} + dependencies: + '@chainsafe/is-ip': 2.0.1 + ip-regex: 5.0.0 + ipaddr.js: 2.0.1 + netmask: 2.0.2 + dev: false + + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: false + + /process/0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: false /promise-timeout/1.3.0: resolution: {integrity: sha512-5yANTE0tmi5++POym6OgtFmwfDvOXABD9oj/jLQr5GPEyuNEb7jH4wbbANJceJid49jwhi1RddxnhnEAb/doqg==} + dev: true + + /promise/8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + dependencies: + asap: 2.0.6 + dev: false /prompts/2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} @@ -3752,8 +12840,17 @@ packages: kleur: 3.0.3 sisteransi: 1.0.5 + /prop-types/15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: false + /protobufjs/6.11.3: resolution: {integrity: sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==} + hasBin: true requiresBuild: true dependencies: '@protobufjs/aspromise': 1.1.2 @@ -3767,19 +12864,87 @@ packages: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 18.7.11 + '@types/node': 18.13.0 long: 4.0.0 + dev: true + + /protobufjs/7.2.2: + resolution: {integrity: sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q==} + engines: {node: '>=12.0.0'} + requiresBuild: true + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 18.13.0 + long: 5.2.1 + dev: false + + /protons-runtime/4.0.2_uint8arraylist@2.4.3: + resolution: {integrity: sha512-R4N6qKHgz8T2Gl45CTcZfITzXPQY9ym8lbLb4VyFMS4ag1KusCRZwkQXTBRhxQ+93ck3K3aDhK1wIk98AMtNyw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + peerDependencies: + uint8arraylist: ^2.3.2 + dependencies: + protobufjs: 7.2.2 + uint8arraylist: 2.4.3 + dev: false + + /proxy-addr/2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false /psl/1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - /punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + /punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} + /q/1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + dev: false + + /qs/6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + /qs/6.5.3: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} + dev: true + + /querystringify/2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: false + + /quick-lru/5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: false + + /raf/3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + dependencies: + performance-now: 2.1.0 + dev: false /randombytes/2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -3792,6 +12957,97 @@ packages: randombytes: 2.1.0 safe-buffer: 5.2.1 + /range-parser/1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /rate-limiter-flexible/2.4.1: + resolution: {integrity: sha512-dgH4T44TzKVO9CLArNto62hJOwlWJMLUjVVr/ii0uUzZXEXthDNr7/yefW5z/1vvHAfycc1tnuiYyNJ8CTRB3g==} + dev: false + + /raw-body/2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /react-app-polyfill/3.0.0: + resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} + engines: {node: '>=14'} + dependencies: + core-js: 3.27.2 + object-assign: 4.1.1 + promise: 8.3.0 + raf: 3.4.1 + regenerator-runtime: 0.13.11 + whatwg-fetch: 3.6.2 + dev: false + + /react-dev-utils/12.0.1_f3a4zrasoaotz7gdk64fcmlkrm: + resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=2.7' + webpack: '>=4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/code-frame': 7.18.6 + address: 1.2.2 + browserslist: 4.21.5 + chalk: 4.1.2 + cross-spawn: 7.0.3 + detect-port-alt: 1.1.6 + escape-string-regexp: 4.0.0 + filesize: 8.0.7 + find-up: 5.0.0 + fork-ts-checker-webpack-plugin: 6.5.2_f3a4zrasoaotz7gdk64fcmlkrm + global-modules: 2.0.0 + globby: 11.1.0 + gzip-size: 6.0.0 + immer: 9.0.19 + is-root: 2.1.0 + loader-utils: 3.2.1 + open: 8.4.1 + pkg-up: 3.1.0 + prompts: 2.4.2 + react-error-overlay: 6.0.11 + recursive-readdir: 2.2.3 + shell-quote: 1.8.0 + strip-ansi: 6.0.1 + text-table: 0.2.0 + typescript: 4.9.5 + webpack: 5.75.0 + transitivePeerDependencies: + - eslint + - supports-color + - vue-template-compiler + dev: false + + /react-dom/18.2.0_react@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-error-overlay/6.0.11: + resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} + dev: false + + /react-is/16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: false + /react-is/17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -3802,6 +13058,140 @@ packages: resolution: {integrity: sha512-GOA8tc1EVYLnHvma/TU9VTgLOyralO7eATRuCDchQveXW9Fr9vXygyq9iwqmM7YRZ8qRJfEt9xOS7OYMdJvRFw==} dependencies: p-defer: 3.0.0 + dev: true + + /react-native-fetch-api/3.0.0: + resolution: {integrity: sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==} + dependencies: + p-defer: 3.0.0 + dev: true + + /react-refresh/0.11.0: + resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} + engines: {node: '>=0.10.0'} + dev: false + + /react-scripts/5.0.1_72im5qx3m2npzev2b5222y6sne: + resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} + engines: {node: '>=14.0.0'} + hasBin: true + peerDependencies: + eslint: '*' + react: '>= 16' + typescript: ^3.2.1 || ^4 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.20.12 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_unmakpayn7vcxadrrsbqlrpehy + '@svgr/webpack': 5.5.0 + babel-jest: 27.5.1_@babel+core@7.20.12 + babel-loader: 8.3.0_la66t7xldg4uecmyawueag5wkm + babel-plugin-named-asset-import: 0.3.8_@babel+core@7.20.12 + babel-preset-react-app: 10.0.1 + bfj: 7.0.2 + browserslist: 4.21.5 + camelcase: 6.3.0 + case-sensitive-paths-webpack-plugin: 2.4.0 + css-loader: 6.7.3_webpack@5.75.0 + css-minimizer-webpack-plugin: 3.4.1_webpack@5.75.0 + dotenv: 10.0.0 + dotenv-expand: 5.1.0 + eslint: 8.34.0 + eslint-config-react-app: 7.0.1_i3tuwedbyjkyv7x6vb4ybywusi + eslint-webpack-plugin: 3.2.0_tuobyd7hv2iyslumy6tj4ngzsq + file-loader: 6.2.0_webpack@5.75.0 + fs-extra: 10.1.0 + html-webpack-plugin: 5.5.0_webpack@5.75.0 + identity-obj-proxy: 3.0.0 + jest: 27.5.1 + jest-resolve: 27.5.1 + jest-watch-typeahead: 1.1.0_jest@27.5.1 + mini-css-extract-plugin: 2.7.2_webpack@5.75.0 + postcss: 8.4.21 + postcss-flexbugs-fixes: 5.0.2_postcss@8.4.21 + postcss-loader: 6.2.1_6jdsrmfenkuhhw3gx4zvjlznce + postcss-normalize: 10.0.1_jrpp4geoaqu5dz2gragkckznb4 + postcss-preset-env: 7.8.3_postcss@8.4.21 + prompts: 2.4.2 + react: 18.2.0 + react-app-polyfill: 3.0.0 + react-dev-utils: 12.0.1_f3a4zrasoaotz7gdk64fcmlkrm + react-refresh: 0.11.0 + resolve: 1.22.1 + resolve-url-loader: 4.0.0 + sass-loader: 12.6.0_webpack@5.75.0 + semver: 7.3.8 + source-map-loader: 3.0.2_webpack@5.75.0 + style-loader: 3.3.1_webpack@5.75.0 + tailwindcss: 3.2.6_postcss@8.4.21 + terser-webpack-plugin: 5.3.6_webpack@5.75.0 + typescript: 4.9.5 + webpack: 5.75.0 + webpack-dev-server: 4.11.1_webpack@5.75.0 + webpack-manifest-plugin: 4.1.1_webpack@5.75.0 + workbox-webpack-plugin: 6.5.4_webpack@5.75.0 + optionalDependencies: + fsevents: 2.3.2 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - '@parcel/css' + - '@swc/core' + - '@types/babel__core' + - '@types/webpack' + - bufferutil + - canvas + - clean-css + - csso + - debug + - esbuild + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - fibers + - node-notifier + - node-sass + - rework + - rework-visit + - sass + - sass-embedded + - sockjs-client + - supports-color + - ts-node + - type-fest + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + - webpack-hot-middleware + - webpack-plugin-serve + dev: false + + /react/18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /read-cache/1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: false + + /readable-stream/2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false /readable-stream/3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} @@ -3811,17 +13201,113 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + /receptacle/1.3.2: resolution: {integrity: sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==} dependencies: ms: 2.1.3 + /recursive-readdir/2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + dependencies: + minimatch: 3.1.2 + dev: false + + /redent/3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: false + + /regenerate-unicode-properties/10.1.0: + resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: false + + /regenerate/1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: false + + /regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + + /regenerator-transform/0.15.1: + resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + dependencies: + '@babel/runtime': 7.20.13 + dev: false + + /regex-parser/2.2.11: + resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} + dev: false + + /regexp.prototype.flags/1.4.3: + resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + dev: false + + /regexpp/3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: false + + /regexpu-core/5.3.0: + resolution: {integrity: sha512-ZdhUQlng0RoscyW7jADnUZ25F5eVtHdMyXSb2PiwafvteRAOJUjFoUPEYZSIfP99fBIs3maLIRfpEddT78wAAQ==} + engines: {node: '>=4'} + 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 + dev: false + + /regjsparser/0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: false + + /relateurl/0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: false + + /renderkid/3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} + dependencies: + css-select: 4.3.0 + dom-converter: 0.2.0 + htmlparser2: 6.1.0 + lodash: 4.17.21 + strip-ansi: 6.0.1 + dev: false + /request/2.88.2: resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 dependencies: aws-sign2: 0.7.0 - aws4: 1.11.0 + aws4: 1.12.0 caseless: 0.12.0 combined-stream: 1.0.8 extend: 3.0.2 @@ -3840,32 +13326,80 @@ packages: tough-cookie: 2.5.0 tunnel-agent: 0.6.0 uuid: 3.4.0 + dev: true /require-directory/2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + /require-from-string/2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: false + + /requires-port/1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + /resolve-cwd/3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: false + /resolve-from/5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - /resolve.exports/1.1.0: - resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} + /resolve-url-loader/4.0.0: + resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} + engines: {node: '>=8.9'} + peerDependencies: + rework: 1.0.1 + rework-visit: 1.0.0 + peerDependenciesMeta: + rework: + optional: true + rework-visit: + optional: true + dependencies: + adjust-sourcemap-loader: 4.0.0 + convert-source-map: 1.9.0 + loader-utils: 2.0.4 + postcss: 7.0.39 + source-map: 0.6.1 + dev: false + + /resolve.exports/1.1.1: + resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} engines: {node: '>=10'} + /resolve.exports/2.0.0: + resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} + engines: {node: '>=10'} + dev: true + /resolve/1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true dependencies: - is-core-module: 2.10.0 + is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + /resolve/2.0.0-next.4: + resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} + hasBin: true + dependencies: + is-core-module: 2.11.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + /retimer/2.0.0: resolution: {integrity: sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg==} dev: true @@ -3877,15 +13411,62 @@ packages: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: false + /rimraf/3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true dependencies: glob: 7.2.3 - /rxjs/7.5.6: - resolution: {integrity: sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==} + /rollup-plugin-terser/7.0.2_rollup@2.79.1: + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 dependencies: - tslib: 2.4.0 + '@babel/code-frame': 7.18.6 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.16.3 + dev: false + + /rollup/2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: false + + /rollup/3.15.0: + resolution: {integrity: sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: false + + /rxjs/7.5.5: + resolution: {integrity: sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==} + dependencies: + tslib: 2.5.0 + + /rxjs/7.8.0: + resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} + dependencies: + tslib: 2.5.0 + dev: true /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -3893,6 +13474,14 @@ packages: /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-regex-test/1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-regex: 1.1.4 + dev: false + /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -3901,9 +13490,86 @@ packages: dependencies: truncate-utf8-bytes: 1.0.2 + /sanitize.css/13.0.0: + resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} + dev: false + + /sass-loader/12.6.0_webpack@5.75.0: + resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + dependencies: + klona: 2.0.6 + neo-async: 2.6.2 + webpack: 5.75.0 + dev: false + /sax/1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + /saxes/5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + dependencies: + xmlchars: 2.2.0 + + /scheduler/0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /schema-utils/2.7.0: + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.11 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: false + + /schema-utils/2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.11 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: false + + /schema-utils/3.1.1: + resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.11 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: false + + /schema-utils/4.0.0: + resolution: {integrity: sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==} + engines: {node: '>= 12.13.0'} + dependencies: + '@types/json-schema': 7.0.11 + ajv: 8.12.0 + ajv-formats: 2.1.1_ajv@8.12.0 + ajv-keywords: 5.1.0_ajv@8.12.0 + dev: false + /secp256k1/4.0.3: resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} engines: {node: '>=10.0.0'} @@ -3911,20 +13577,106 @@ packages: dependencies: elliptic: 6.5.4 node-addon-api: 2.0.2 - node-gyp-build: 4.5.0 + node-gyp-build: 4.6.0 + dev: true + + /secure-compare/3.0.1: + resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} + dev: true + + /select-hose/2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + dev: false + + /selfsigned/2.1.1: + resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} + engines: {node: '>=10'} + dependencies: + node-forge: 1.3.1 + dev: false /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true - /semver/7.3.7: - resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} + /semver/7.3.8: + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} + hasBin: true dependencies: lru-cache: 6.0.0 + /send/0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /serialize-javascript/4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: false + + /serialize-javascript/6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + dependencies: + randombytes: 2.1.0 + dev: false + + /serve-index/1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /serve-static/1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + /set-delayed-interval/1.0.0: resolution: {integrity: sha512-29fhAwuZlLcuBnW/EwxvLcg2D3ELX+VBDNhnavs3YYkab72qmrcSeQNVdzl8EcPPahGQXhBM6MKdPLCQGMDakw==} + /setprototypeof/1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: false + + /setprototypeof/1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3935,13 +13687,16 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /shiki/0.10.1: - resolution: {integrity: sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==} + /shell-quote/1.8.0: + resolution: {integrity: sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==} + dev: false + + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: - jsonc-parser: 3.1.0 - vscode-oniguruma: 1.6.2 - vscode-textmate: 5.2.0 - dev: true + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + object-inspect: 1.12.3 /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -3953,16 +13708,98 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + /slash/4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: false + + /sockjs/0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + dev: false + + /source-list-map/2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: false + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map-loader/3.0.2_webpack@5.75.0: + resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + abab: 2.0.6 + iconv-lite: 0.6.3 + source-map-js: 1.0.2 + webpack: 5.75.0 + dev: false + /source-map-support/0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 + dev: true + + /source-map-support/0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + /source-map/0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + /source-map/0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: false + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: false + + /spdy-transport/3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + dependencies: + debug: 4.3.4 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.0 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + dev: false + + /spdy/4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + dependencies: + debug: 4.3.4 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -3972,6 +13809,7 @@ packages: /sshpk/1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} + hasBin: true dependencies: asn1: 0.2.6 assert-plus: 1.0.0 @@ -3982,25 +13820,53 @@ packages: jsbn: 0.1.1 safer-buffer: 2.1.2 tweetnacl: 0.14.5 + dev: true /stable/0.1.8: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - dev: true + 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' - /stack-utils/2.0.5: - resolution: {integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==} + /stack-utils/2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 + /stackframe/1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: false + + /statuses/1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: false + + /statuses/2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /stop-iteration-iterator/1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.5 + dev: false + /stream-to-it/0.2.4: resolution: {integrity: sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==} dependencies: get-iterator: 1.0.2 + dev: true /streaming-iterables/6.2.0: resolution: {integrity: sha512-3AYC8oB60WyD1ic7uHmN/vm2oRGzRnQ3XFBl/bFMDi1q1+nc5/vjMmiE4vroIya3jG59t87VpyAj/iXYxyw9AA==} engines: {node: '>=10'} + dev: true + + /streamsearch/1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} /string-length/4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} @@ -4009,6 +13875,18 @@ packages: char-regex: 1.0.2 strip-ansi: 6.0.1 + /string-length/5.0.1: + resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} + engines: {node: '>=12.20'} + dependencies: + char-regex: 2.0.1 + strip-ansi: 7.0.1 + dev: false + + /string-natural-compare/3.0.1: + resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} + dev: false + /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -4017,29 +13895,117 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + /string.prototype.matchall/4.0.8: + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + get-intrinsic: 1.2.0 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + regexp.prototype.flags: 1.4.3 + side-channel: 1.0.4 + dev: false + + /string.prototype.trimend/1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + dev: false + + /string.prototype.trimstart/1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.21.1 + dev: false + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: false + /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 + /stringify-object/3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + dev: false + /strip-ansi/6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 + /strip-ansi/7.0.1: + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: false + + /strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: false + /strip-bom/4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} + /strip-comments/2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + dev: false + /strip-final-newline/2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + /strip-indent/3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: false + /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + /style-loader/3.3.1_webpack@5.75.0: + resolution: {integrity: sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + webpack: 5.75.0 + dev: false + + /stylehacks/5.1.1_postcss@8.4.21: + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.5 + postcss: 8.4.21 + postcss-selector-parser: 6.0.11 + dev: false + /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -4058,8 +14024,8 @@ packages: dependencies: has-flag: 4.0.0 - /supports-hyperlinks/2.2.0: - resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} + /supports-hyperlinks/2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 @@ -4069,6 +14035,92 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + /svg-parser/2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + dev: false + + /svgo/1.3.2: + resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} + engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true + dependencies: + chalk: 2.4.2 + coa: 2.0.2 + css-select: 2.1.0 + css-select-base-adapter: 0.1.1 + css-tree: 1.0.0-alpha.37 + csso: 4.2.0 + js-yaml: 3.14.1 + mkdirp: 0.5.6 + object.values: 1.1.6 + sax: 1.2.4 + stable: 0.1.8 + unquote: 1.1.1 + util.promisify: 1.0.1 + dev: false + + /svgo/2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: false + + /symbol-tree/3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + /tailwindcss/3.2.6_postcss@8.4.21: + resolution: {integrity: sha512-BfgQWZrtqowOQMC2bwaSNe7xcIjdDEgixWGYOd6AL0CbKHJlvhfdbINeAW76l1sO+1ov/MJ93ODJ9yluRituIw==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + postcss: ^8.0.9 + dependencies: + arg: 5.0.2 + chokidar: 3.5.3 + color-name: 1.1.4 + detective: 5.2.1 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.2.12 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lilconfig: 2.0.6 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.21 + postcss-import: 14.1.0_postcss@8.4.21 + postcss-js: 4.0.1_postcss@8.4.21 + postcss-load-config: 3.1.4_postcss@8.4.21 + postcss-nested: 6.0.0_postcss@8.4.21 + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.1 + transitivePeerDependencies: + - ts-node + dev: false + + /tapable/1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + dev: false + + /tapable/2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: false + /tar-stream/2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -4079,12 +14131,62 @@ packages: inherits: 2.0.4 readable-stream: 3.6.0 + /temp-dir/2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + dev: false + + /tempy/0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + dev: false + /terminal-link/2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} dependencies: ansi-escapes: 4.3.2 - supports-hyperlinks: 2.2.0 + supports-hyperlinks: 2.3.0 + + /terser-webpack-plugin/5.3.6_webpack@5.75.0: + resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.17 + jest-worker: 27.5.1 + schema-utils: 3.1.1 + serialize-javascript: 6.0.1 + terser: 5.16.3 + webpack: 5.75.0 + dev: false + + /terser/5.16.3: + resolution: {integrity: sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.2 + acorn: 8.8.2 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: false /test-exclude/6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} @@ -4094,6 +14196,10 @@ packages: glob: 7.2.3 minimatch: 3.1.2 + /text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: false + /threads/1.7.0: resolution: {integrity: sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==} dependencies: @@ -4106,6 +14212,13 @@ packages: transitivePeerDependencies: - supports-color + /throat/6.0.2: + resolution: {integrity: sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==} + + /thunky/1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + dev: false + /timeout-abort-controller/1.1.1: resolution: {integrity: sha512-BsF9i3NAJag6T0ZEjki9j654zoafI2X6ayuNd6Tp8+Ul6Tr5s4jo973qFeiWrRSweqvskC+AHDKUmIW4b7pdhQ==} dependencies: @@ -4138,19 +14251,54 @@ packages: dependencies: is-number: 7.0.0 + /toidentifier/1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + /tough-cookie/2.5.0: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} engines: {node: '>=0.8'} dependencies: psl: 1.9.0 - punycode: 2.1.1 + punycode: 2.3.0 + dev: true + + /tough-cookie/4.1.2: + resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.0 + universalify: 0.2.0 + url-parse: 1.5.10 + + /tr46/0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /tr46/1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.3.0 + dev: false + + /tr46/2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + dependencies: + punycode: 2.3.0 /truncate-utf8-bytes/1.0.2: resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} dependencies: utf8-byte-length: 1.0.4 - /ts-jest/27.1.5_rl5xm3oiydas7snsul2pa47p2m: + /tryer/1.0.1: + resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} + dev: false + + /ts-jest/27.1.5_cnngzrja2umb46xxazlucyx2qu: resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -4171,30 +14319,132 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.18.13 - '@types/jest': 27.5.2 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 28.1.3 + jest: 27.5.1 jest-util: 27.5.1 - json5: 2.2.1 + json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.3.7 + semver: 7.3.8 + typescript: 4.9.5 + yargs-parser: 20.2.9 + dev: true + + /ts-jest/27.1.5_ddylxr3wxksmlyjpihqkkowegi: + resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@types/jest': ^27.0.0 + babel-jest: '>=27.0.0 <28' + esbuild: '*' + jest: ^27.0.0 + typescript: '>=3.8 <5.0' + peerDependenciesMeta: + '@babel/core': + optional: true + '@types/jest': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.20.12 + '@types/jest': 29.4.0 + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 29.4.1 + jest-util: 27.5.1 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.3.8 + typescript: 4.9.5 + yargs-parser: 20.2.9 + dev: true + + /ts-jest/27.1.5_g4n3hsjlbmz4ag5o32ytojordu: + resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@types/jest': ^27.0.0 + babel-jest: '>=27.0.0 <28' + esbuild: '*' + jest: ^27.0.0 + typescript: '>=3.8 <5.0' + peerDependenciesMeta: + '@babel/core': + optional: true + '@types/jest': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 27.5.1_ts-node@10.9.1 + jest-util: 27.5.1 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.3.8 typescript: 4.7.4 yargs-parser: 20.2.9 + dev: true - /ts-jest/28.0.8_wnrrwh7x4gcdskobbfqnvknnyi: - resolution: {integrity: sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==} + /ts-jest/28.0.2_m4pn7vsromlf5ffrouypoapnnq: + resolution: {integrity: sha512-IOZMb3D0gx6IHO9ywPgiQxJ3Zl4ECylEFwoVpENB55aTn5sdO0Ptyx/7noNBxAaUff708RqQL4XBNxxOVjY0vQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^28.0.0 + '@types/jest': ^27.0.0 babel-jest: ^28.0.0 esbuild: '*' jest: ^28.0.0 typescript: '>=4.3' + peerDependenciesMeta: + '@babel/core': + optional: true + '@types/jest': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.20.12 + '@types/jest': 28.1.0 + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 28.1.0_@types+node@16.11.59 + jest-util: 28.1.3 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.3.8 + typescript: 4.9.5 + yargs-parser: 20.2.9 + dev: true + + /ts-jest/29.0.5_ecv55cdbauq6znr7ci2lzguwra: + resolution: {integrity: sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3' peerDependenciesMeta: '@babel/core': optional: true @@ -4205,20 +14455,20 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.18.13 + '@babel/core': 7.20.12 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 28.1.3 - jest-util: 28.1.3 - json5: 2.2.1 + jest: 29.4.1 + jest-util: 29.4.2 + json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.3.7 - typescript: 4.7.4 + semver: 7.3.8 + typescript: 4.9.5 yargs-parser: 21.1.1 dev: true - /ts-node/10.9.1_leegklmkepybzc4ng4qys4ftou: + /ts-node/10.9.1_hjximzan7wcxvjcbhhc47yzr2e: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -4237,8 +14487,8 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 18.7.14 - acorn: 8.8.0 + '@types/node': 16.11.59 + acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 @@ -4247,48 +14497,139 @@ packages: typescript: 4.7.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: false + dev: true /ts-pattern/3.3.3: resolution: {integrity: sha512-Z5EFi6g6wyX3uDFHqxF5W5c5h663oZg9O6aOiAT7fqNu0HPSfCxtHzrQ7SblTy738Mrg2Ezorky8H5aUOm8Pvg==} - /tslib/2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + /tsconfck/2.0.2_typescript@4.9.5: + resolution: {integrity: sha512-H3DWlwKpow+GpVLm/2cpmok72pwRr1YFROV3YzAmvzfGFiC1zEM/mc9b7+1XnrxuXtEbhJ7xUSIqjPFbedp7aQ==} + engines: {node: ^14.13.1 || ^16 || >=18, pnpm: ^7.18.0} + hasBin: true + peerDependencies: + typescript: ^4.3.5 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 4.9.5 + dev: true + + /tsconfig-paths/3.14.1: + resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: false + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: false + + /tslib/2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + + /tsutils/3.21.0_typescript@4.9.5: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + 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' + dependencies: + tslib: 1.14.1 + typescript: 4.9.5 + dev: false /tunnel-agent/0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: safe-buffer: 5.2.1 + dev: true /tweetnacl/0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + dev: true + + /type-check/0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + + /type-check/0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: false /type-detect/4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} + /type-fest/0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + dev: false + + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: false + /type-fest/0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - /typedoc/0.22.18_typescript@4.7.4: - resolution: {integrity: sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA==} - engines: {node: '>= 12.10.0'} - hasBin: true - peerDependencies: - typescript: 4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x || 4.7.x + /type-is/1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} dependencies: - glob: 8.0.3 - lunr: 2.3.9 - marked: 4.0.19 - minimatch: 5.1.0 - shiki: 0.10.1 - typescript: 4.7.4 - dev: true + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: false + + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.10 + dev: false + + /typedarray-to-buffer/3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 /typescript/4.7.4: resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /typescript/4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + /uint8-varint/1.0.4: + resolution: {integrity: sha512-FHnaReHRIM7kHe/Ms0I2KGkuSY4o7ouhUJGJeiFEuYWGvBt4Y64+BJ3mV6DqmyYtYTZj4Pz8K/BmViSNFLRrVw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + byte-access: 1.0.1 + longbits: 1.1.0 + uint8arraylist: 2.4.3 + uint8arrays: 4.0.3 + dev: false + + /uint8arraylist/2.4.3: + resolution: {integrity: sha512-oEVZr4/GrH87K0kjNce6z8pSCzLEPqHNLNR5sj8cJOySrTP8Vb/pMIbZKLJGhQKxm1TiZ31atNrpn820Pyqpow==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + uint8arrays: 4.0.3 + dev: false /uint8arrays/2.1.10: resolution: {integrity: sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==} @@ -4296,28 +14637,121 @@ packages: multiformats: 9.9.0 dev: true - /uint8arrays/3.1.0: - resolution: {integrity: sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog==} + /uint8arrays/3.1.1: + resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} dependencies: multiformats: 9.9.0 + dev: true + + /uint8arrays/4.0.3: + resolution: {integrity: sha512-b+aKlI2oTnxnfeSQWV1sMacqSNxqhtXySaH6bflvONGxF8V/fT3ZlYH7z2qgGfydsvpVo4JUgM/Ylyfl2YouCg==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + multiformats: 11.0.1 + + /unbox-primitive/1.0.2: + resolution: {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 + dev: false + + /undici/5.18.0: + resolution: {integrity: sha512-1iVwbhonhFytNdg0P4PqyIAXbdlVZVebtPDvuM36m66mRw4OGrCm2MYynJv/UENFLdP13J1nPVQzVE2zTs1OeA==} + engines: {node: '>=12.18'} + dependencies: + busboy: 1.6.0 + + /unicode-canonical-property-names-ecmascript/2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: false + + /unicode-match-property-ecmascript/2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: false + + /unicode-match-property-value-ecmascript/2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: false + + /unicode-property-aliases-ecmascript/2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: false + + /union/0.5.0: + resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} + engines: {node: '>= 0.8.0'} + dependencies: + qs: 6.11.0 + dev: true + + /unique-string/2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: false + + /universalify/0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: false /unordered-array-remove/1.0.2: resolution: {integrity: sha512-45YsfD6svkgaCBNyvD+dFHm4qFX9g3wRSIVgWVPtm2OCnphvPxzJoe20ATsiNpNJrmzHifnxm+BN5F7gFT/4gw==} + dev: true - /update-browserslist-db/1.0.5_browserslist@4.21.3: - resolution: {integrity: sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==} + /unpipe/1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /unquote/1.1.1: + resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} + dev: false + + /upath/1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: false + + /update-browserslist-db/1.0.10_browserslist@4.21.5: + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.3 + browserslist: 4.21.5 escalade: 3.1.1 picocolors: 1.0.0 /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.1.1 + punycode: 2.3.0 + + /url-join/4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + dev: true + + /url-parse/1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 /ursa-optional/0.10.2: resolution: {integrity: sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==} @@ -4325,7 +14759,8 @@ packages: requiresBuild: true dependencies: bindings: 1.5.0 - nan: 2.16.0 + nan: 2.17.0 + dev: true /utf8-byte-length/1.0.4: resolution: {integrity: sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==} @@ -4333,30 +14768,67 @@ packages: /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + /util.promisify/1.0.1: + resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} + dependencies: + define-properties: 1.2.0 + es-abstract: 1.21.1 + has-symbols: 1.0.3 + object.getownpropertydescriptors: 2.1.5 + dev: false + + /utila/0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + dev: false + + /utils-merge/1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + /uuid/3.4.0: resolution: {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. + hasBin: true + dev: true /uuid/8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true /v8-compile-cache-lib/3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: false + dev: true + + /v8-to-istanbul/8.1.1: + resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} + engines: {node: '>=10.12.0'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + convert-source-map: 1.9.0 + source-map: 0.7.4 /v8-to-istanbul/9.0.1: resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/trace-mapping': 0.3.17 '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.8.0 + convert-source-map: 1.9.0 + dev: true /varint/5.0.2: resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} + dev: true /varint/6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + /vary/1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + /verror/1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} @@ -4364,36 +14836,535 @@ packages: assert-plus: 1.0.0 core-util-is: 1.0.2 extsprintf: 1.3.0 - - /vscode-oniguruma/1.6.2: - resolution: {integrity: sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==} dev: true - /vscode-textmate/5.2.0: - resolution: {integrity: sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==} + /vite-plugin-replace/0.1.1_vite@4.0.4: + resolution: {integrity: sha512-v+okl3JNt2pf1jDYijw+WPVt6h9FWa/atTi+qnSFBqmKThLTDhlesx0r3bh+oFPmxRJmis5tNx9HtN6lGFoqWg==} + peerDependencies: + vite: ^2 + dependencies: + vite: 4.0.4_@types+node@16.11.59 dev: true + /vite-tsconfig-paths/4.0.3_egung5nfepmolqa7uavvqho3gq: + resolution: {integrity: sha512-gRO2Q/tOkV+9kMht5tz90+IaEKvW2zCnvwJV3tp2ruPNZOTM5rF+yXorJT4ggmAMYEaJ3nyXjx5P5jY5FwiZ+A==} + peerDependencies: + vite: '>2.0.0-0' + dependencies: + debug: 4.3.4 + globrex: 0.1.2 + tsconfck: 2.0.2_typescript@4.9.5 + vite: 4.0.4_@types+node@16.11.59 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /vite/4.0.4_@types+node@16.11.59: + resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + 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 + dependencies: + '@types/node': 16.11.59 + esbuild: 0.16.17 + postcss: 8.4.21 + resolve: 1.22.1 + rollup: 3.15.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /w3c-hr-time/1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. + dependencies: + browser-process-hrtime: 1.0.0 + + /w3c-xmlserializer/2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + dependencies: + xml-name-validator: 3.0.0 + /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 + /watchpack/2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.10 + dev: false + + /wbuf/1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + dependencies: + minimalistic-assert: 1.0.1 + dev: false + /web-streams-polyfill/3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} + dev: true + + /web-vitals/2.1.4: + resolution: {integrity: sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==} + dev: false + + /webidl-conversions/3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /webidl-conversions/4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: false + + /webidl-conversions/5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + + /webidl-conversions/6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + + /webpack-dev-middleware/5.3.3_webpack@5.75.0: + resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + colorette: 2.0.19 + memfs: 3.4.13 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.0.0 + webpack: 5.75.0 + dev: false + + /webpack-dev-server/4.11.1_webpack@5.75.0: + resolution: {integrity: sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==} + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/bonjour': 3.5.10 + '@types/connect-history-api-fallback': 1.3.5 + '@types/express': 4.17.17 + '@types/serve-index': 1.9.1 + '@types/serve-static': 1.15.0 + '@types/sockjs': 0.3.33 + '@types/ws': 8.5.4 + ansi-html-community: 0.0.8 + bonjour-service: 1.1.0 + chokidar: 3.5.3 + colorette: 2.0.19 + compression: 1.7.4 + connect-history-api-fallback: 2.0.0 + default-gateway: 6.0.3 + express: 4.18.2 + graceful-fs: 4.2.10 + html-entities: 2.3.3 + http-proxy-middleware: 2.0.6_@types+express@4.17.17 + ipaddr.js: 2.0.1 + open: 8.4.1 + p-retry: 4.6.2 + rimraf: 3.0.2 + schema-utils: 4.0.0 + selfsigned: 2.1.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack: 5.75.0 + webpack-dev-middleware: 5.3.3_webpack@5.75.0 + ws: 8.12.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + dev: false + + /webpack-manifest-plugin/4.1.1_webpack@5.75.0: + resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} + engines: {node: '>=12.22.0'} + peerDependencies: + webpack: ^4.44.2 || ^5.47.0 + dependencies: + tapable: 2.2.1 + webpack: 5.75.0 + webpack-sources: 2.3.1 + dev: false + + /webpack-sources/1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: false + + /webpack-sources/2.3.1: + resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} + engines: {node: '>=10.13.0'} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: false + + /webpack-sources/3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: false + + /webpack/5.75.0: + resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 0.0.51 + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/wasm-edit': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + acorn: 8.8.2 + acorn-import-assertions: 1.8.0_acorn@8.8.2 + browserslist: 4.21.5 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.12.0 + es-module-lexer: 0.9.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.10 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.1.1 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.6_webpack@5.75.0 + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: false + + /websocket-driver/0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + dev: false + + /websocket-extensions/0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + dev: false + + /whatwg-encoding/1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + dependencies: + iconv-lite: 0.4.24 + + /whatwg-encoding/2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + dependencies: + iconv-lite: 0.6.3 + dev: true + + /whatwg-fetch/3.6.2: + resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} + dev: false + + /whatwg-mimetype/2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + + /whatwg-url/5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: true + + /whatwg-url/7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: false + + /whatwg-url/8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 /wherearewe/1.0.2: resolution: {integrity: sha512-HyLZ7n1Yox+w1qWaFEgP/sMs5D7ka2UXmoVNaY0XzbEHLGljo4ScBchYm6cWRYNO33tmFX3Mgg4BiZkDOjihyw==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} dependencies: is-electron: 2.2.1 + dev: true + + /wherearewe/2.0.1: + resolution: {integrity: sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + is-electron: 2.2.1 + dev: false + + /which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: false + + /which-collection/1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: false + + /which-typed-array/1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + 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 + dev: false + + /which/1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} + hasBin: true dependencies: isexe: 2.0.0 + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + + /workbox-background-sync/6.5.4: + resolution: {integrity: sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==} + dependencies: + idb: 7.1.1 + workbox-core: 6.5.4 + dev: false + + /workbox-broadcast-update/6.5.4: + resolution: {integrity: sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==} + dependencies: + workbox-core: 6.5.4 + dev: false + + /workbox-build/6.5.4: + resolution: {integrity: sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==} + engines: {node: '>=10.0.0'} + dependencies: + '@apideck/better-ajv-errors': 0.3.6_ajv@8.12.0 + '@babel/core': 7.20.12 + '@babel/preset-env': 7.20.2_@babel+core@7.20.12 + '@babel/runtime': 7.20.13 + '@rollup/plugin-babel': 5.3.1_3dsfpkpoyvuuxyfgdbpn4j4uzm + '@rollup/plugin-node-resolve': 11.2.1_rollup@2.79.1 + '@rollup/plugin-replace': 2.4.2_rollup@2.79.1 + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.12.0 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + rollup-plugin-terser: 7.0.2_rollup@2.79.1 + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 6.5.4 + workbox-broadcast-update: 6.5.4 + workbox-cacheable-response: 6.5.4 + workbox-core: 6.5.4 + workbox-expiration: 6.5.4 + workbox-google-analytics: 6.5.4 + workbox-navigation-preload: 6.5.4 + workbox-precaching: 6.5.4 + workbox-range-requests: 6.5.4 + workbox-recipes: 6.5.4 + workbox-routing: 6.5.4 + workbox-strategies: 6.5.4 + workbox-streams: 6.5.4 + workbox-sw: 6.5.4 + workbox-window: 6.5.4 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: false + + /workbox-cacheable-response/6.5.4: + resolution: {integrity: sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==} + dependencies: + workbox-core: 6.5.4 + dev: false + + /workbox-core/6.5.4: + resolution: {integrity: sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==} + dev: false + + /workbox-expiration/6.5.4: + resolution: {integrity: sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==} + dependencies: + idb: 7.1.1 + workbox-core: 6.5.4 + dev: false + + /workbox-google-analytics/6.5.4: + resolution: {integrity: sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==} + dependencies: + workbox-background-sync: 6.5.4 + workbox-core: 6.5.4 + workbox-routing: 6.5.4 + workbox-strategies: 6.5.4 + dev: false + + /workbox-navigation-preload/6.5.4: + resolution: {integrity: sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==} + dependencies: + workbox-core: 6.5.4 + dev: false + + /workbox-precaching/6.5.4: + resolution: {integrity: sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==} + dependencies: + workbox-core: 6.5.4 + workbox-routing: 6.5.4 + workbox-strategies: 6.5.4 + dev: false + + /workbox-range-requests/6.5.4: + resolution: {integrity: sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==} + dependencies: + workbox-core: 6.5.4 + dev: false + + /workbox-recipes/6.5.4: + resolution: {integrity: sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==} + dependencies: + workbox-cacheable-response: 6.5.4 + workbox-core: 6.5.4 + workbox-expiration: 6.5.4 + workbox-precaching: 6.5.4 + workbox-routing: 6.5.4 + workbox-strategies: 6.5.4 + dev: false + + /workbox-routing/6.5.4: + resolution: {integrity: sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==} + dependencies: + workbox-core: 6.5.4 + dev: false + + /workbox-strategies/6.5.4: + resolution: {integrity: sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==} + dependencies: + workbox-core: 6.5.4 + dev: false + + /workbox-streams/6.5.4: + resolution: {integrity: sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==} + dependencies: + workbox-core: 6.5.4 + workbox-routing: 6.5.4 + dev: false + + /workbox-sw/6.5.4: + resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==} + dev: false + + /workbox-webpack-plugin/6.5.4_webpack@5.75.0: + resolution: {integrity: sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: ^4.4.0 || ^5.9.0 + dependencies: + fast-json-stable-stringify: 2.1.0 + pretty-bytes: 5.6.0 + upath: 1.2.0 + webpack: 5.75.0 + webpack-sources: 1.4.3 + workbox-build: 6.5.4 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: false + + /workbox-window/6.5.4: + resolution: {integrity: sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==} + dependencies: + '@types/trusted-types': 2.0.2 + workbox-core: 6.5.4 + dev: false + /wrap-ansi/7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -4405,12 +15376,21 @@ packages: /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + /write-file-atomic/3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + /write-file-atomic/4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 + dev: true /ws/7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} @@ -4424,21 +15404,67 @@ packages: utf-8-validate: optional: true + /ws/8.12.0: + resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==} + 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 + dev: false + + /xml-name-validator/3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + /xml2js/0.1.14: resolution: {integrity: sha512-pbdws4PPPNc1HPluSUKamY4GWMk592K7qwcj6BExbVOhhubub8+pMda/ql68b6L3luZs/OGjGSB5goV7SnmgnA==} dependencies: sax: 1.2.4 + dev: true + + /xml2js/0.4.23: + resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} + engines: {node: '>=4.0.0'} + dependencies: + sax: 1.2.4 + xmlbuilder: 11.0.1 + dev: false + + /xmlbuilder/11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + dev: false + + /xmlchars/2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} /xsalsa20/1.2.0: resolution: {integrity: sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==} + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + /yaml/1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false + /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -4446,10 +15472,11 @@ packages: /yargs-parser/21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + dev: true - /yargs/17.5.1: - resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} - engines: {node: '>=12'} + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} dependencies: cliui: 7.0.4 escalade: 3.1.1 @@ -4457,13 +15484,31 @@ packages: require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 + yargs-parser: 20.2.9 + + /yargs/17.6.2: + resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==} + engines: {node: '>=12'} + 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.8 yargs-parser: 21.1.1 + dev: true /yn/3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} - dev: false + dev: true /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + + /yocto-queue/1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: false diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..b5bac564 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "lib": ["es2015", "dom"], + "outDir": "./dist/", + "target": "ESNext", + "module": "ESNext", + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "declaration": true, + "moduleResolution": "nodenext" + } +} diff --git a/typedoc.json b/typedoc.json deleted file mode 100644 index 7e0dce5b..00000000 --- a/typedoc.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "readme": "./typedoc.md", - "theme": "default", - "out": "docs", - "excludePrivate": true, - "entryPoints": ["packages/fluence-js/src/index.ts"] -} diff --git a/typedoc.md b/typedoc.md deleted file mode 100644 index 5916cd78..00000000 --- a/typedoc.md +++ /dev/null @@ -1,16 +0,0 @@ -# Fluence JS - -To start developing applications with Fluence JS refer to the official [documentation](https://fluence.dev/docs/build/fluence-js/) - -Fluence JS is an implementation of the Fluence protocol for JavaScript-based environments. It can connect browsers, Node.js applications, and so on to the Fluence p2p network. - -Similar to the [Rust Fluence Peer implementation](https://github.com/fluencelabs/fluence) it includes: - -- Peer-to-peer communication layer (via [js-libp2p](https://github.com/libp2p/js-libp2p)) -- [Aqua VM](https://github.com/fluencelabs/aquavm) -- Builtin services - -Fluence JS can call services and functions on the Fluence network, and expose new APIs to the p2p network directly from TypeScript and JavaScript. -[Aqua language](https://github.com/fluencelabs/aqua) uses Fluence JS as a compilation target, and they are designed to [work in tandem](https://fluence.dev/docs/build/fluence-js/in-depth#understanding-the-aqua-compiler-output). - -Fluence JS can be used with any framework of your choice \(or even without frameworks\).