From c1b650442483c66da622459b62ef7cbbcf79ef56 Mon Sep 17 00:00:00 2001 From: "Prashant.patil" Date: Tue, 4 Mar 2025 14:40:59 +0530 Subject: [PATCH] SCAL-237375 rn mobile embed sdk --- .github/workflows/build.yml | 24 + .github/workflows/publish.yml | 40 + .gitignore | 2 + README.md | 7 +- package-lock.json | 7066 +++++++++++++++++++++++++++++++++ package.json | 38 + rollup.config.mjs | 41 + src/BaseEmbed.tsx | 129 + src/LiveboardEmbed.tsx | 21 + src/constants.ts | 29 + src/event-bridge.ts | 110 + src/hooks/useLiveboardRef.ts | 7 + src/index.ts | 14 + src/init.ts | 19 + src/types.ts | 5586 ++++++++++++++++++++++++++ src/utils.ts | 23 + tsconfig.json | 20 + 17 files changed, 13175 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/publish.yml create mode 100644 .gitignore create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 rollup.config.mjs create mode 100644 src/BaseEmbed.tsx create mode 100644 src/LiveboardEmbed.tsx create mode 100644 src/constants.ts create mode 100644 src/event-bridge.ts create mode 100644 src/hooks/useLiveboardRef.ts create mode 100644 src/index.ts create mode 100644 src/init.ts create mode 100644 src/types.ts create mode 100644 src/utils.ts create mode 100644 tsconfig.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..71457e1 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,24 @@ +name: Build and Test +on: + push: + branches: [ main, develop ] + pull_request: + branches: [ main ] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '18.x' + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build + \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..ea61455 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,40 @@ +name: Publish to NPM +on: + workflow_dispatch: + inputs: + version: + description: 'Version to publish (patch, minor, major)' + required: true + default: 'patch' + type: choice + options: + - patch + - minor + - major + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '18.x' + registry-url: 'https://registry.npmjs.org' + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build + + - name: Version and Publish + run: | + git config --global user.email "${{ secrets.NPM_EMAIL }}" + git config --global user.name "${{ secrets.NPM_USERNAME }}" + npm version ${{ inputs.version }} + npm publish --access public + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..76add87 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist \ No newline at end of file diff --git a/README.md b/README.md index 4a97a85..cca4593 100644 --- a/README.md +++ b/README.md @@ -1 +1,6 @@ -# react-native-mobile-sdk \ No newline at end of file +# React Native Embed SDK + +## Overview + +The React Native Embed SDK is a library that allows you to embed a Thoughtspot component in your mobile application. + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5e70c81 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7066 @@ +{ + "name": "embed-react-native-sdk", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "embed-react-native-sdk", + "version": "1.0.0", + "dependencies": { + "use-deep-compare-effect": "^1.8.1" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^28.0.2", + "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-typescript": "^12.1.2", + "rollup": "^4.32.0", + "rollup-plugin-dts": "^6.1.1", + "typescript": "^5.7.3" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-native": ">=0.60.0", + "react-native-webview": ">=11.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-native": { + "optional": true + } + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", + "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", + "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.5.tgz", + "integrity": "sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.26.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.9.tgz", + "integrity": "sha512-ykqgwNfSnNOB+C8fV5X4mG3AVmvu+WVxcaU9xHHtBb7PCrPeweMmPjGsn8eMaeJg6SJuoUuZENeeSWaarWqonQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.25.9.tgz", + "integrity": "sha512-9MhJ/SMTsVqsd69GyQg89lYR4o9T+oDGv5F6IsigxxqFVOyR/IflDLYP8WDI1l8fkhNGGktqkvL5qwNCtGEpgQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", + "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", + "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.26.5.tgz", + "integrity": "sha512-eGK26RsbIkYUns3Y8qKl362juDDYK+wEdPGHGrhzUl6CewZFo55VZ7hg+CyMFU4dd5QQakBN86nBMpRsFpRvbQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/plugin-syntax-flow": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", + "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", + "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", + "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", + "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.5.tgz", + "integrity": "sha512-GJhPO0y8SD5EYVCy2Zr+9dSZcEgaSmq5BLR0Oc25TOEhC+ba49vUAGZFjy8v79z9E1mdldq4x9d1xgh4L1d5dQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", + "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.25.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.25.9", + "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.38.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-flow": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.25.9.tgz", + "integrity": "sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-flow-strip-types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.9.tgz", + "integrity": "sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==", + "license": "MIT", + "peer": true, + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.6", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", + "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.5", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.5", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse--for-generate-function-map": { + "name": "@babel/traverse", + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.5.tgz", + "integrity": "sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.5", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.5", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.5.tgz", + "integrity": "sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "license": "ISC", + "peer": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@react-native/assets-registry": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.77.0.tgz", + "integrity": "sha512-Ms4tYYAMScgINAXIhE4riCFJPPL/yltughHS950l0VP5sm5glbimn9n7RFn9Tc8cipX74/ddbk19+ydK2iDMmA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/babel-plugin-codegen": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.77.0.tgz", + "integrity": "sha512-5TYPn1k+jdDOZJU4EVb1kZ0p9TCVICXK3uplRev5Gul57oWesAaiWGZOzfRS3lonWeuR4ij8v8PFfIHOaq0vmA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.25.3", + "@react-native/codegen": "0.77.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/babel-preset": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.77.0.tgz", + "integrity": "sha512-Z4yxE66OvPyQ/iAlaETI1ptRLcDm7Tk6ZLqtCPuUX3AMg+JNgIA86979T4RSk486/JrBUBH5WZe2xjj7eEHXsA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-proposal-export-default-from": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-default-from": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.4", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.25.4", + "@babel/plugin-transform-classes": "^7.25.4", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-flow-strip-types": "^7.25.2", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-runtime": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-typescript": "^7.25.2", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/template": "^7.25.0", + "@react-native/babel-plugin-codegen": "0.77.0", + "babel-plugin-syntax-hermes-parser": "0.25.1", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/codegen": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.77.0.tgz", + "integrity": "sha512-rE9lXx41ZjvE8cG7e62y/yGqzUpxnSvJ6me6axiX+aDewmI4ZrddvRGYyxCnawxy5dIBHSnrpZse3P87/4Lm7w==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.25.3", + "glob": "^7.1.1", + "hermes-parser": "0.25.1", + "invariant": "^2.2.4", + "jscodeshift": "^17.0.0", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/@react-native/community-cli-plugin": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.77.0.tgz", + "integrity": "sha512-GRshwhCHhtupa3yyCbel14SlQligV8ffNYN5L1f8HCo2SeGPsBDNjhj2U+JTrMPnoqpwowPGvkCwyqwqYff4MQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@react-native/dev-middleware": "0.77.0", + "@react-native/metro-babel-transformer": "0.77.0", + "chalk": "^4.0.0", + "debug": "^2.2.0", + "invariant": "^2.2.4", + "metro": "^0.81.0", + "metro-config": "^0.81.0", + "metro-core": "^0.81.0", + "readline": "^1.3.0", + "semver": "^7.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@react-native-community/cli-server-api": "*" + }, + "peerDependenciesMeta": { + "@react-native-community/cli-server-api": { + "optional": true + } + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.77.0.tgz", + "integrity": "sha512-glOvSEjCbVXw+KtfiOAmrq21FuLE1VsmBsyT7qud4KWbXP43aUEhzn70mWyFuiIdxnzVPKe2u8iWTQTdJksR1w==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.77.0.tgz", + "integrity": "sha512-DAlEYujm43O+Dq98KP2XfLSX5c/TEGtt+JBDEIOQewk374uYY52HzRb1+Gj6tNaEj/b33no4GibtdxbO5zmPhg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.77.0", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "selfsigned": "^2.4.1", + "serve-static": "^1.16.2", + "ws": "^6.2.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/@react-native/gradle-plugin": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.77.0.tgz", + "integrity": "sha512-rmfh93jzbndSq7kihYHUQ/EGHTP8CCd3GDCmg5SbxSOHAaAYx2HZ28ZG7AVcGUsWeXp+e/90zGIyfOzDRx0Zaw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.77.0.tgz", + "integrity": "sha512-kHFcMJVkGb3ptj3yg1soUsMHATqal4dh0QTGAbYihngJ6zy+TnP65J3GJq4UlwqFE9K1RZkeCmTwlmyPFHOGvA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/metro-babel-transformer": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.77.0.tgz", + "integrity": "sha512-19GfvhBRKCU3UDWwCnDR4QjIzz3B2ZuwhnxMRwfAgPxz7QY9uKour9RGmBAVUk1Wxi/SP7dLEvWnmnuBO39e2A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@react-native/babel-preset": "0.77.0", + "hermes-parser": "0.25.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/normalize-colors": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.77.0.tgz", + "integrity": "sha512-qjmxW3xRZe4T0ZBEaXZNHtuUbRgyfybWijf1yUuQwjBt24tSapmIslwhCjpKidA0p93ssPcepquhY0ykH25mew==", + "license": "MIT", + "peer": true + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.2.tgz", + "integrity": "sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz", + "integrity": "sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.2.tgz", + "integrity": "sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.0.tgz", + "integrity": "sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.0.tgz", + "integrity": "sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.0.tgz", + "integrity": "sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.0.tgz", + "integrity": "sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.0.tgz", + "integrity": "sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.0.tgz", + "integrity": "sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.0.tgz", + "integrity": "sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.0.tgz", + "integrity": "sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.0.tgz", + "integrity": "sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.0.tgz", + "integrity": "sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.0.tgz", + "integrity": "sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.0.tgz", + "integrity": "sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.0.tgz", + "integrity": "sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.0.tgz", + "integrity": "sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.0.tgz", + "integrity": "sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.0.tgz", + "integrity": "sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.0.tgz", + "integrity": "sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.0.tgz", + "integrity": "sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.0.tgz", + "integrity": "sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT", + "peer": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "22.10.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.10.tgz", + "integrity": "sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==", + "license": "MIT", + "peer": true, + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@types/react": { + "version": "18.3.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", + "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT", + "peer": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "peer": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "peer": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "license": "MIT", + "peer": true + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT", + "peer": true + }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "license": "MIT", + "peer": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", + "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.3", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", + "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz", + "integrity": "sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-parser": "0.25.1" + } + }, + "node_modules/babel-plugin-transform-flow-enums": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", + "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/plugin-syntax-flow": "^7.12.1" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "license": "MIT", + "peer": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT", + "peer": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "peer": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT", + "peer": true + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "license": "MIT", + "peer": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001695", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", + "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0", + "peer": true + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chromium-edge-launcher": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", + "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "peer": true + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT", + "peer": true + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT", + "peer": true + }, + "node_modules/core-js-compat": { + "version": "3.40.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.40.0.tgz", + "integrity": "sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "browserslist": "^4.24.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT", + "peer": true + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "license": "MIT", + "peer": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==", + "license": "MIT", + "peer": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT", + "peer": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.87", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.87.tgz", + "integrity": "sha512-mPFwmEWmRivw2F8x3w3l2m6htAUN97Gy0kwpO++2m9iT1Gt8RCFVUfv9U/sIbHJ6rY4P6/ooqFL/eL7ock+pPg==", + "license": "ISC", + "peer": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "peer": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT", + "peer": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT", + "peer": true + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "peer": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flow-enums-runtime": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", + "license": "MIT", + "peer": true + }, + "node_modules/flow-parser": { + "version": "0.259.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.259.1.tgz", + "integrity": "sha512-xiXLmMH2Z7OmdE9Q+MjljUMr/rbemFqZIRxaeZieVScG4HzQrKKhNcCYZbWTGpoN7ZPi7z8ClQbeVPq6t5AszQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC", + "peer": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "peer": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC", + "peer": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "license": "MIT", + "peer": true + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/image-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.0.tgz", + "integrity": "sha512-4S8fwbO6w3GeCVN6OPtA9I5IGKkcDMPcKndtUlpJuCwu7JLjtj7JZpwqLuyY2nrmQT3AWsCJLSKPsc2mPBSl3w==", + "license": "MIT", + "peer": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "license": "MIT", + "peer": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "peer": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC", + "peer": true + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT", + "peer": true + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "peer": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "peer": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT", + "peer": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsc-android": { + "version": "250231.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", + "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/jsc-safe-url": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", + "license": "0BSD", + "peer": true + }, + "node_modules/jscodeshift": { + "version": "17.1.2", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-17.1.2.tgz", + "integrity": "sha512-uime4vFOiZ1o3ICT4Sm/AbItHEVw2oCxQ3a0egYVy3JMMOctxe07H3SKL1v175YqjMt27jn1N+3+Bj9SKDNgdQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/preset-flow": "^7.24.7", + "@babel/preset-typescript": "^7.24.7", + "@babel/register": "^7.24.6", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.7", + "neo-async": "^2.5.0", + "picocolors": "^1.0.1", + "recast": "^0.23.9", + "tmp": "^0.2.3", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + }, + "peerDependenciesMeta": { + "@babel/preset-env": { + "optional": true + } + } + }, + "node_modules/jscodeshift/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jscodeshift/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "license": "ISC", + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "license": "MIT", + "peer": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "license": "MIT", + "peer": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "peer": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "license": "MIT", + "peer": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/marky": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", + "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT", + "peer": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT", + "peer": true + }, + "node_modules/metro": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.81.0.tgz", + "integrity": "sha512-kzdzmpL0gKhEthZ9aOV7sTqvg6NuTxDV8SIm9pf9sO8VVEbKrQk5DNcwupOUjgPPFAuKUc2NkT0suyT62hm2xg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "@babel/types": "^7.25.2", + "accepts": "^1.3.7", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.24.0", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.81.0", + "metro-cache": "0.81.0", + "metro-cache-key": "0.81.0", + "metro-config": "0.81.0", + "metro-core": "0.81.0", + "metro-file-map": "0.81.0", + "metro-resolver": "0.81.0", + "metro-runtime": "0.81.0", + "metro-source-map": "0.81.0", + "metro-symbolicate": "0.81.0", + "metro-transform-plugins": "0.81.0", + "metro-transform-worker": "0.81.0", + "mime-types": "^2.1.27", + "nullthrows": "^1.1.1", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^6.0.0", + "throat": "^5.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" + }, + "bin": { + "metro": "src/cli.js" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-babel-transformer": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.81.0.tgz", + "integrity": "sha512-Dc0QWK4wZIeHnyZ3sevWGTnnSkIDDn/SWyfrn99zbKbDOCoCYy71PAn9uCRrP/hduKLJQOy+tebd63Rr9D8tXg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.24.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.24.0.tgz", + "integrity": "sha512-LyoXLB7IFzeZW0EvAbGZacbxBN7t6KKSDqFJPo3Ydow7wDlrDjXwsdiAHV6XOdvEN9MEuWXsSIFN4tzpyrXIHw==", + "license": "MIT", + "peer": true + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.24.0.tgz", + "integrity": "sha512-IJooSvvu2qNRe7oo9Rb04sUT4omtZqZqf9uq9WM25Tb6v3usmvA93UqfnnoWs5V0uYjEl9Al6MNU10MCGKLwpg==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.24.0" + } + }, + "node_modules/metro-cache": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.81.0.tgz", + "integrity": "sha512-DyuqySicHXkHUDZFVJmh0ygxBSx6pCKUrTcSgb884oiscV/ROt1Vhye+x+OIHcsodyA10gzZtrVtxIFV4l9I4g==", + "license": "MIT", + "peer": true, + "dependencies": { + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "metro-core": "0.81.0" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-cache-key": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.81.0.tgz", + "integrity": "sha512-qX/IwtknP9bQZL78OK9xeSvLM/xlGfrs6SlUGgHvrxtmGTRSsxcyqxR+c+7ch1xr05n62Gin/O44QKg5V70rNQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-config": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.81.0.tgz", + "integrity": "sha512-6CinEaBe3WLpRlKlYXXu8r1UblJhbwD6Gtnoib5U8j6Pjp7XxMG9h/DGMeNp9aGLDu1OieUqiXpFo7O0/rR5Kg==", + "license": "MIT", + "peer": true, + "dependencies": { + "connect": "^3.6.5", + "cosmiconfig": "^5.0.5", + "flow-enums-runtime": "^0.0.6", + "jest-validate": "^29.6.3", + "metro": "0.81.0", + "metro-cache": "0.81.0", + "metro-core": "0.81.0", + "metro-runtime": "0.81.0" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-core": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.81.0.tgz", + "integrity": "sha512-CVkM5YCOAFkNMvJai6KzA0RpztzfEKRX62/PFMOJ9J7K0uq/UkOFLxcgpcncMIrfy0PbfEj811b69tjULUQe1Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.81.0" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-file-map": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.81.0.tgz", + "integrity": "sha512-zMDI5uYhQCyxbye/AuFx/pAbsz9K+vKL7h1ShUXdN2fz4VUPiyQYRsRqOoVG1DsiCgzd5B6LW0YW77NFpjDQeg==", + "license": "MIT", + "peer": true, + "dependencies": { + "anymatch": "^3.0.3", + "debug": "^2.2.0", + "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.6.3", + "micromatch": "^4.0.4", + "node-abort-controller": "^3.1.1", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" + }, + "engines": { + "node": ">=18.18" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/metro-file-map/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro-file-map/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/metro-minify-terser": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.81.0.tgz", + "integrity": "sha512-U2ramh3W822ZR1nfXgIk+emxsf5eZSg10GbQrT0ZizImK8IZ5BmJY+BHRIkQgHzWFpExOVxC7kWbGL1bZALswA==", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "terser": "^5.15.0" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-resolver": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.81.0.tgz", + "integrity": "sha512-Uu2Q+buHhm571cEwpPek8egMbdSTqmwT/5U7ZVNpK6Z2ElQBBCxd7HmFAslKXa7wgpTO2FAn6MqGeERbAtVDUA==", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-runtime": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.81.0.tgz", + "integrity": "sha512-6oYB5HOt37RuGz2eV4A6yhcl+PUTwJYLDlY9vhT+aVjbUWI6MdBCf69vc4f5K5Vpt+yOkjy+2LDwLS0ykWFwYw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-source-map": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.81.0.tgz", + "integrity": "sha512-TzsVxhH83dyxg4A4+L1nzNO12I7ps5IHLjKGZH3Hrf549eiZivkdjYiq/S5lOB+p2HiQ+Ykcwtmcja95LIC62g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.25.3", + "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.81.0", + "nullthrows": "^1.1.1", + "ob1": "0.81.0", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-symbolicate": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.81.0.tgz", + "integrity": "sha512-C/1rWbNTPYp6yzID8IPuQPpVGzJ2rbWYBATxlvQ9dfK5lVNoxcwz77hjcY8ISLsRRR15hyd/zbjCNKPKeNgE1Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.81.0", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-transform-plugins": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.81.0.tgz", + "integrity": "sha512-uErLAPBvttGCrmGSCa0dNHlOTk3uJFVEVWa5WDg6tQ79PRmuYRwzUgLhVzn/9/kyr75eUX3QWXN79Jvu4txt6Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.3", + "flow-enums-runtime": "^0.0.6", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro-transform-worker": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.81.0.tgz", + "integrity": "sha512-HrQ0twiruhKy0yA+9nK5bIe3WQXZcC66PXTvRIos61/EASLAP2DzEmW7IxN/MGsfZegN2UzqL2CG38+mOB45vg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/types": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "metro": "0.81.0", + "metro-babel-transformer": "0.81.0", + "metro-cache": "0.81.0", + "metro-cache-key": "0.81.0", + "metro-minify-terser": "0.81.0", + "metro-source-map": "0.81.0", + "metro-transform-plugins": "0.81.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/metro/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT", + "peer": true + }, + "node_modules/metro/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.24.0.tgz", + "integrity": "sha512-LyoXLB7IFzeZW0EvAbGZacbxBN7t6KKSDqFJPo3Ydow7wDlrDjXwsdiAHV6XOdvEN9MEuWXsSIFN4tzpyrXIHw==", + "license": "MIT", + "peer": true + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.24.0.tgz", + "integrity": "sha512-IJooSvvu2qNRe7oo9Rb04sUT4omtZqZqf9uq9WM25Tb6v3usmvA93UqfnnoWs5V0uYjEl9Al6MNU10MCGKLwpg==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.24.0" + } + }, + "node_modules/metro/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/metro/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "peer": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", + "peer": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT", + "peer": true + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "license": "MIT", + "peer": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "peer": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT", + "peer": true + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT", + "peer": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "license": "MIT", + "peer": true + }, + "node_modules/ob1": { + "version": "0.81.0", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.81.0.tgz", + "integrity": "sha512-6Cvrkxt1tqaRdWqTAMcVYEiO5i1xcF9y7t06nFdjFqkfPsEloCf8WwhXdwBpNUkVYSQlSGS7cDgVQR86miBfBQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=18.18" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "license": "MIT", + "peer": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "license": "MIT", + "peer": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT", + "peer": true + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "license": "MIT", + "peer": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-6.0.1.tgz", + "integrity": "sha512-II3iSJhnR5nAscYDa9FCgPLq8mO5aEx/EKKtdXYTDnvdFEa3K7gs3jn1SKRXwQf9maOmIilmjnnx7Qy+3annPA==", + "license": "MIT", + "peer": true, + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT", + "peer": true + }, + "node_modules/react-native": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.77.0.tgz", + "integrity": "sha512-oCgHLGHFIp6F5UbyHSedyUXrZg6/GPe727freGFvlT7BjPJ3K6yvvdlsp7OEXSAHz6Fe7BI2n5cpUyqmP9Zn+Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/create-cache-key-function": "^29.6.3", + "@react-native/assets-registry": "0.77.0", + "@react-native/codegen": "0.77.0", + "@react-native/community-cli-plugin": "0.77.0", + "@react-native/gradle-plugin": "0.77.0", + "@react-native/js-polyfills": "0.77.0", + "@react-native/normalize-colors": "0.77.0", + "@react-native/virtualized-lists": "0.77.0", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "babel-jest": "^29.7.0", + "babel-plugin-syntax-hermes-parser": "0.25.1", + "base64-js": "^1.5.1", + "chalk": "^4.0.0", + "commander": "^12.0.0", + "event-target-shim": "^5.0.1", + "flow-enums-runtime": "^0.0.6", + "glob": "^7.1.1", + "invariant": "^2.2.4", + "jest-environment-node": "^29.6.3", + "jsc-android": "^250231.0.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.81.0", + "metro-source-map": "^0.81.0", + "nullthrows": "^1.1.1", + "pretty-format": "^29.7.0", + "promise": "^8.3.0", + "react-devtools-core": "^6.0.1", + "react-refresh": "^0.14.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.24.0-canary-efb381bbf-20230505", + "semver": "^7.1.3", + "stacktrace-parser": "^0.1.10", + "whatwg-fetch": "^3.0.0", + "ws": "^6.2.3", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "^18.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-native-webview": { + "version": "13.13.2", + "resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.13.2.tgz", + "integrity": "sha512-zACPDTF0WnaEnKZ9mA/r/UpcOpV2gQM06AAIrOOexnO8UJvXL8Pjso0b/wTqKFxUZZnmjKuwd8gHVUosVOdVrw==", + "license": "MIT", + "peer": true, + "dependencies": { + "escape-string-regexp": "^4.0.0", + "invariant": "2.2.4" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native/node_modules/@react-native/virtualized-lists": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.77.0.tgz", + "integrity": "sha512-ppPtEu9ISO9iuzpA2HBqrfmDpDAnGGduNDVaegadOzbMCPAB3tC9Blxdu9W68LyYlNQILIsP6/FYtLwf7kfNew==", + "license": "MIT", + "peer": true, + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/react": "^18.2.6", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", + "license": "BSD", + "peer": true + }, + "node_modules/recast": { + "version": "0.23.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", + "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT", + "peer": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "license": "MIT", + "peer": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT", + "peer": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "license": "MIT", + "peer": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT", + "peer": true + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.32.0.tgz", + "integrity": "sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.32.0", + "@rollup/rollup-android-arm64": "4.32.0", + "@rollup/rollup-darwin-arm64": "4.32.0", + "@rollup/rollup-darwin-x64": "4.32.0", + "@rollup/rollup-freebsd-arm64": "4.32.0", + "@rollup/rollup-freebsd-x64": "4.32.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.32.0", + "@rollup/rollup-linux-arm-musleabihf": "4.32.0", + "@rollup/rollup-linux-arm64-gnu": "4.32.0", + "@rollup/rollup-linux-arm64-musl": "4.32.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.32.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.32.0", + "@rollup/rollup-linux-riscv64-gnu": "4.32.0", + "@rollup/rollup-linux-s390x-gnu": "4.32.0", + "@rollup/rollup-linux-x64-gnu": "4.32.0", + "@rollup/rollup-linux-x64-musl": "4.32.0", + "@rollup/rollup-win32-arm64-msvc": "4.32.0", + "@rollup/rollup-win32-ia32-msvc": "4.32.0", + "@rollup/rollup-win32-x64-msvc": "4.32.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-dts": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-6.1.1.tgz", + "integrity": "sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==", + "dev": true, + "license": "LGPL-3.0-only", + "dependencies": { + "magic-string": "^0.30.10" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/Swatinem" + }, + "optionalDependencies": { + "@babel/code-frame": "^7.24.2" + }, + "peerDependencies": { + "rollup": "^3.29.4 || ^4", + "typescript": "^4.5 || ^5.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT", + "peer": true + }, + "node_modules/scheduler": { + "version": "0.24.0-canary-efb381bbf-20230505", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", + "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "peer": true, + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "peer": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC", + "peer": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", + "peer": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC", + "peer": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT", + "peer": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "license": "MIT", + "peer": true, + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terser": { + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", + "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT", + "peer": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "license": "ISC", + "peer": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "license": "MIT", + "peer": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT", + "peer": true + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "peer": true + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "license": "(MIT OR CC0-1.0)", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typescript": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", + "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "license": "MIT", + "peer": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/use-deep-compare-effect": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/use-deep-compare-effect/-/use-deep-compare-effect-1.8.1.tgz", + "integrity": "sha512-kbeNVZ9Zkc0RFGpfMN3MNfaKNvcLNyxOAAd9O4CBZ+kCBXXscn9s/4I+8ytUER4RDpEYs5+O6Rs4PqiZ+rHr5Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "dequal": "^2.0.2" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "react": ">=16.13" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT", + "peer": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "license": "MIT", + "peer": true + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT", + "peer": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC", + "peer": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "license": "ISC", + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", + "peer": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC", + "peer": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "peer": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..874c2c5 --- /dev/null +++ b/package.json @@ -0,0 +1,38 @@ +{ + "name": "embed-react-native-sdk", + "version": "5.0.0", + "description": "React Native SDK for Embedding TS", + "main": "dist/index.cjs.js", + "module": "dist/index.esm.js", + "types": "dist/index.d.ts", + "files": [ + "dist/**/*" + ], + "peerDependencies": { + "react": ">=16.8.0", + "react-native": ">=0.60.0", + "react-native-webview": ">=11.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-native": { + "optional": true + } + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^28.0.2", + "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-typescript": "^12.1.2", + "rollup": "^4.32.0", + "rollup-plugin-dts": "^6.1.1", + "typescript": "^5.7.3" + }, + "scripts": { + "build": "rollup -c" + }, + "dependencies": { + "use-deep-compare-effect": "^1.8.1" + } +} diff --git a/rollup.config.mjs b/rollup.config.mjs new file mode 100644 index 0000000..4b9517f --- /dev/null +++ b/rollup.config.mjs @@ -0,0 +1,41 @@ +import resolve from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import typescript from '@rollup/plugin-typescript'; +import dts from 'rollup-plugin-dts'; + +export default [ + { + input: 'src/index.ts', + output: [ + { + file: 'dist/index.cjs.js', + format: 'cjs', + }, + { + file: 'dist/index.esm.js', + format: 'esm', + }, + ], + external: [ + 'react', + 'react-native', + 'react-native-webview', + /^react-native\/.*/, + ], + plugins: [ + resolve(), + commonjs(), + typescript({ + tsconfig: './tsconfig.json', + declaration: true, + declarationDir: './dist', + jsx: 'react' + }), + ], + }, + { + input: 'src/index.ts', + output: [{ file: 'dist/index.d.ts', format: 'es' }], + plugins: [dts()], + }, +]; diff --git a/src/BaseEmbed.tsx b/src/BaseEmbed.tsx new file mode 100644 index 0000000..0b38596 --- /dev/null +++ b/src/BaseEmbed.tsx @@ -0,0 +1,129 @@ +import React, { + useRef, + useEffect, + useImperativeHandle, + forwardRef, + useMemo, + useState, + useCallback, +} from "react"; +import { WebView, WebViewMessageEvent } from "react-native-webview"; +import { EmbedBridge } from "./event-bridge"; +import { embedConfigCache } from "./init"; +import * as Constants from './constants'; +import { MSG_TYPE, DEFAULT_WEBVIEW_CONFIG } from './constants'; +import { ERROR_MESSAGE, notifyErrorSDK } from "./utils"; +import { ViewConfig, EmbedEventHandlers, EmbedEvent } from "./types"; +import useDeepCompareEffect from "use-deep-compare-effect"; + +interface BaseEmbedProps extends ViewConfig, EmbedEventHandlers { + typeofEmbed: string; + onErrorSDK?: (error: Error) => void; + [key: string]: any; +} + +export interface TSEmbedRef { + trigger: (hostEventName: string, payload?: any) => Promise; +} + +export const BaseEmbed = forwardRef( + (props, ref) => { + const webViewRef = useRef(null); + const [embedBridge, setEmbedBridge] = useState(null); + const [vercelShellLoaded, setVercelShellLoaded] = useState(false); + const [viewConfig, setViewConfig] = useState>({}); + const [pendingHandlers, setPendingHandlers] = useState>([]); + const [isWebViewReady, setIsWebViewReady] = useState(false); + + useDeepCompareEffect(() => { + const newViewConfig: Record = {}; + Object.keys(props).forEach((key) => { + if (key.startsWith("on")) { + const eventName = key.substring(2); + const embedEventName = EmbedEvent[eventName as keyof typeof EmbedEvent]; + setPendingHandlers((prev) => [...prev, [embedEventName, props[key]]]); + } else if (key !== 'embedType') { + newViewConfig[key] = props[key]; + } + }); + setViewConfig(newViewConfig); + }, [props]); + + const sendConfigToShell = useCallback((bridge: EmbedBridge, config: Record) => { + if (!webViewRef.current || !vercelShellLoaded) { + console.info("Waiting for Vercel shell to load..."); + return; + } + + const initMsg = { + type: MSG_TYPE.INIT, + payload: embedConfigCache, + }; + + bridge.sendMessage(initMsg); + + const message = { + type: MSG_TYPE.EMBED, + embedType: props.embedType, + viewConfig: config, + }; + + bridge.sendMessage(message); + }, [props.embedType, vercelShellLoaded]); + + useDeepCompareEffect(() => { + if (embedBridge && vercelShellLoaded && isWebViewReady) { + sendConfigToShell(embedBridge, viewConfig); + } + }, [viewConfig, embedBridge, vercelShellLoaded, isWebViewReady, sendConfigToShell]); + + useImperativeHandle(ref, () => ({ + trigger: (hostEventName: string, payload?: any) => { + return embedBridge?.trigger(hostEventName, payload) || Promise.resolve(undefined); + }, + })); + + const handleInitVercelShell = () => { + setVercelShellLoaded(true); + const newEmbedBridge = new EmbedBridge(webViewRef); + setEmbedBridge(newEmbedBridge); + + pendingHandlers.forEach(([eventName, callback]) => { + newEmbedBridge.registerEmbedEvent(eventName, callback); + }); + setPendingHandlers([]); + sendConfigToShell(newEmbedBridge, viewConfig); + }; + + const handleMessage = (event: WebViewMessageEvent) => { + try { + const msg = JSON.parse(event.nativeEvent.data); + if (msg.type === MSG_TYPE.INIT_VERCEL_SHELL) { + handleInitVercelShell(); + setIsWebViewReady(true); + } + embedBridge?.handleMessage(msg); + } catch (err) { + notifyErrorSDK(err as Error, props.onErrorSDK, ERROR_MESSAGE.EVENT_ERROR); + } + }; + + return ( + { + const { nativeEvent } = syntheticEvent; + console.warn("[BaseEmbed] WebView error: ", nativeEvent); + }} + onHttpError={(syntheticEvent) => { + const { nativeEvent } = syntheticEvent; + console.warn("[BaseEmbed] HTTP error: ", nativeEvent); + }} + style={{ flex: 1 }} + /> + ); + } +); \ No newline at end of file diff --git a/src/LiveboardEmbed.tsx b/src/LiveboardEmbed.tsx new file mode 100644 index 0000000..7bb3f19 --- /dev/null +++ b/src/LiveboardEmbed.tsx @@ -0,0 +1,21 @@ +import React, { forwardRef } from "react"; +import { BaseEmbed, TSEmbedRef } from "./BaseEmbed"; +import { LiveboardViewConfig, EmbedEvent } from "./types"; + +type EventHandlers = { + [K in keyof typeof EmbedEvent as `on${Capitalize}`]?: (event: any) => void; +}; + +export type LiveboardEmbedRef = TSEmbedRef; + +export const LiveboardEmbed = forwardRef( + (props, ref) => { + return ( + + ); + } +); diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 0000000..fef6656 --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,29 @@ +import { WebViewProps } from 'react-native-webview'; + +export const VERCEL_SHELL_URL = "https://embed-vercel-shell-git-class-based-final-yinstardevs-projects.vercel.app"; + +export enum MSG_TYPE { + INIT = "INIT", + EMBED = "EMBED", + INIT_VERCEL_SHELL = "INIT_VERCEL_SHELL", + REQUEST_AUTH_TOKEN = "REQUEST_AUTH_TOKEN", + EMBED_EVENT = "EMBED_EVENT", + HOST_EVENT_REPLY = "HOST_EVENT_REPLY", + EMBED_EVENT_REPLY = "EVENT_REPLY", + HOST_EVENT = "HOST_EVENT", + AUTH_TOKEN_RESPONSE = "AUTH_TOKEN_RESPONSE", +} + +export const DEFAULT_WEBVIEW_CONFIG: WebViewProps = { + javaScriptEnabled: true, + domStorageEnabled: true, + mixedContentMode: 'always', + keyboardDisplayRequiresUserAction: false, + automaticallyAdjustContentInsets: false, + scrollEnabled: false, + style: { + flex: 1, + height: '100%', + width: '100%', + }, +}; \ No newline at end of file diff --git a/src/event-bridge.ts b/src/event-bridge.ts new file mode 100644 index 0000000..13938f7 --- /dev/null +++ b/src/event-bridge.ts @@ -0,0 +1,110 @@ +import type { WebView } from "react-native-webview"; +import { authFunctionCache } from "./init"; +import { MSG_TYPE } from "./constants"; + +export interface EmbedMessage { + type: MSG_TYPE; + eventName?: string; + eventId?: string; + payload?: any; + embedType?: string; + hasResponder?: boolean; +} + +export class EmbedBridge { + private events: Record = {}; + private pendingReplies: Record = {}; + + constructor(private webViewRef: React.RefObject | null) {} + + registerEmbedEvent(eventName: string, callback: Function) { + if (!this.events[eventName]) { + this.events[eventName] = []; + } + this.events[eventName].push(callback); + } + + public trigger(hostEventName: string, payload?: any): Promise { + if (!this.webViewRef?.current) { + console.warn("webview is not ready for host event"); + return Promise.resolve(undefined); + } + return new Promise((resolve) => { + const eventId = this.generateEventId(); + this.pendingReplies[eventId] = resolve; + const message = { + type: MSG_TYPE.HOST_EVENT, + eventId, + eventName: hostEventName, + payload, + }; + this.sendMessage(message); + }); + } + + handleMessage(msg: any) { + switch (msg.type) { + case MSG_TYPE.REQUEST_AUTH_TOKEN: { + authFunctionCache?.().then((token: string) => { + const replyTokenData = { + type: MSG_TYPE.AUTH_TOKEN_RESPONSE, + token, + }; + this.sendMessage(replyTokenData); + }) + break; + } + case MSG_TYPE.EMBED_EVENT: { + if(msg?.hasResponder) { + this.triggerEventWithResponder(msg.eventName, msg.payload, msg.eventId); + } else { + this.triggerEvent(msg.eventName, msg.payload); + } + break; + } + case MSG_TYPE.HOST_EVENT_REPLY: { + if (msg.eventId && this.pendingReplies[msg.eventId]) { + this.pendingReplies[msg.eventId](msg.payload); + delete this.pendingReplies[msg.eventId]; + } + break; + } + default: + console.log("Type of the message is unknown from the Shell app", msg.type); + } + } + + private triggerEvent(eventName: string, data: any) { + const handlers = this.events[eventName] || []; + handlers.forEach(handler => handler(data)); + } + + private triggerEventWithResponder(eventName: string, data: any, eventId: string) { + const handlers = this.events[eventName] || []; + handlers.forEach(handler => { + handler(data, (responseData: any) => { + this.sendMessage({ + type: MSG_TYPE.EMBED_EVENT_REPLY, + eventId, + payload: responseData + }); + }); + }); + } + + public sendMessage(msg: EmbedMessage) { + const msgString = JSON.stringify(msg); + const jsCode = `window.postMessage(${msgString}, "*");true;`; + this.webViewRef?.current?.injectJavaScript(jsCode); + } + + private generateEventId(): string { + return `evt_${Date.now()}_${Math.floor(Math.random() * 100000)}`; + } + + public destroy() { + this.events = {}; + this.pendingReplies = {}; + this.webViewRef = null; + } +} diff --git a/src/hooks/useLiveboardRef.ts b/src/hooks/useLiveboardRef.ts new file mode 100644 index 0000000..5bdaaeb --- /dev/null +++ b/src/hooks/useLiveboardRef.ts @@ -0,0 +1,7 @@ +import { useRef } from "react"; +import { TSEmbedRef } from "src/BaseEmbed"; + +export const useLiveboardRef = () => { + const liveboardRef = useRef(null); + return liveboardRef; +}; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..57662b7 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,14 @@ +import { useLiveboardRef } from "./hooks/useLiveboardRef"; +import { init } from "./init"; +import { LiveboardEmbed, LiveboardEmbedRef } from "./LiveboardEmbed"; +import { Action, AuthType, ViewConfig, HostEvent } from "./types"; + +export { init, LiveboardEmbed, useLiveboardRef, AuthType, ViewConfig, Action, HostEvent }; +export type { LiveboardEmbedRef }; + +const EmbedReactNativeSDK = { + init, + LiveboardEmbed, + useLiveboardRef, +}; +export default EmbedReactNativeSDK; \ No newline at end of file diff --git a/src/init.ts b/src/init.ts new file mode 100644 index 0000000..f6fd2ff --- /dev/null +++ b/src/init.ts @@ -0,0 +1,19 @@ +import { WebView } from "react-native-webview"; +import React, { useRef } from "react"; + +export let embedConfigCache: any = null; +export let authFunctionCache: (() => Promise) | null = null; + +// TODO : add the webview at the time of the init. +export const init = (embedConfig: any) => { + embedConfigCache = embedConfig; + authFunctionCache = embedConfig.getAuthToken; + embedConfigCache.getTokenFromSDK = true; +}; + +export const getEmbedConfig = () => { + if (!embedConfigCache) { + throw new Error('Thoughtspot not initialized'); + } + return embedConfigCache; +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..e43e79d --- /dev/null +++ b/src/types.ts @@ -0,0 +1,5586 @@ + +export type EmbedEventHandlers = { [key in keyof typeof EmbedEvent as `on${Capitalize}`]?: MessageCallback }; +/** + * The list of customization css variables. These + * are the only allowed variables possible. + */ +export interface CustomCssVariables { + /** + * Background color of the Liveboard, visualization, Search, and Answer pages. + */ + '--ts-var-root-background'?: string; + + /** + * Color of the text on application pages. + */ + '--ts-var-root-color'?: string; + + /** + * Font type for the text on application pages. + */ + '--ts-var-root-font-family'?: string; + + /** + * Text transformation specification for UI elements in the app. + */ + '--ts-var-root-text-transform'?: string; + + /** + * Font color of the text on toggle buttons such as + * **All**, **Answers**, and **Liveboards** on the Home page (Classic experience), + * the text color of the chart and table tiles on Home page (New modular Homepage + * experience), and title text on the AI-generated charts and tables. + * The default color code is #2770EF. + * + */ + '--ts-var-application-color'?: string; + + /** + * Background color of the top navigation panel. + */ + '--ts-var-nav-background'?: string; + + /** + * Font color of the top navigation panel. + */ + '--ts-var-nav-color'?: string; + + /** + * Background color of the *Search data* button. + */ + '--ts-var-search-data-button-background'?: string; + + /** + * Color of the text on the *Search data* button. + */ + '--ts-var-search-data-button-font-color'?: string; + + /** + * Font of the text on the *Search data* button. + */ + '--ts-var-search-data-button-font-family'?: string; + + /** + * Font color of the text in the Search bar. + */ + '--ts-var-search-bar-text-font-color'?: string; + + /** + * Font of the text in the Search bar. + */ + '--ts-var-search-bar-text-font-family'?: string; + + /** + * Font style of the text in the Search bar. + */ + '--ts-var-search-bar-text-font-style'?: string; + + /** + * Background color of the search bar. + */ + '--ts-var-search-bar-background'?: string; + + /** + * Background color of the search suggestions panel. + */ + '--ts-var-search-auto-complete-background'?: string; + + /** + * Background color of the navigation panel that allows you to undo, redo, and reset + * search operations. + */ + '--ts-var-search-navigation-button-background'?: string; + + /** + * Background color of the navigation help text that appears at the bottom of the + * search suggestions panel. + */ + '--ts-var-search-bar-navigation-help-text-background'?: string; + + /** + * Background color of the search suggestion block on hover. + */ + '--ts-var-search-bar-auto-complete-hover-background'?: string; + + /** + * Font color of the text in the search suggestion panel. + */ + '--ts-var-search-auto-complete-font-color'?: string; + + /** + * Font color of the sub-text that appears below the keyword in the search suggestion + * panel. + */ + '--ts-var-search-auto-complete-subtext-font-color'?: string; + + /** + * Background color of the data panel. + */ + '--ts-var-answer-data-panel-background-color'?: string; + + /** + * Background color of the vertical panel on the right side of the Answer page, which + * includes the options to edit charts and tables. + */ + '--ts-var-answer-edit-panel-background-color'?: string; + + /** + * Background color of the chart switcher on search results and Answer pages. + */ + '--ts-var-answer-view-table-chart-switcher-background'?: string; + + /** + * Background color of the currently selected chart type in the chart switcher. + */ + '--ts-var-answer-view-table-chart-switcher-active-background'?: string; + + /** + * Border-radius of main buttons. + * For example, the *Search data* button in the top navigation panel. + */ + '--ts-var-button-border-radius'?: string; + + /** + * Border-radius of small buttons such as secondary buttons. + * For example, share and favorite buttons. + */ + '--ts-var-button--icon-border-radius'?: string; + + /** + * Font color of the text on primary buttons. For example, the primary buttons on + * Liveboard*, Answer, *Data* workspace, *SpotIQ*, or *Home* page. + */ + '--ts-var-button--primary-color'?: string; + + /** + * Font family specification for the text on primary buttons. + */ + '--ts-var-button--primary--font-family'?: string; + + /** + * Background color of the primary buttons. For example, the primary buttons such as + * Pin* and *Save*. + */ + '--ts-var-button--primary-background'?: string; + + /** + * Background color of the primary buttons on hover. + */ + '--ts-var-button--primary--hover-background'?: string; + + /** + * Backgroud color of the primary buttons when active. + */ + '--ts-var-button--primary--active-background'?: string; + + /** + * Font color of the text on the secondary buttons. + */ + '--ts-var-button--secondary-color'?: string; + + /** + * Font family specification for the text on the secondary buttons. + */ + '--ts-var-button--secondary--font-family'?: string; + + /** + * Background color of the secondary buttons. + */ + '--ts-var-button--secondary-background'?: string; + + /** + * Background color of the secondary button on hover. + */ + '--ts-var-button--secondary--hover-background'?: string; + + /** + * Backgroud color of the secondary buttons when active. + */ + '--ts-var-button--secondary--active-background'?: string; + + /** + * Font color of the tertiary button. For example, the *Undo*, *Redo*, and *Reset* + * buttons on the *Search* page. + */ + '--ts-var-button--tertiary-color'?: string; + + /** + * Background color of the tertiary button. + */ + '--ts-var-button--tertiary-background'?: string; + + /** + * Background color of the tertiary button when a user hovers over these buttons. + */ + '--ts-var-button--tertiary--hover-background'?: string; + + /** + * Backgroud color of the tertiary buttons when active. + */ + '--ts-var-button--tertiary--active-background'?: string; + + /** + * Font color of the title text of a visualization or Answer. + */ + '--ts-var-viz-title-color'?: string; + + /** + * Font family specification for the title text of a visualization/Answer. + */ + '--ts-var-viz-title-font-family'?: string; + + /** + * Text transformation specification for visualization and Answer titles. + */ + '--ts-var-viz-title-text-transform'?: string; + + /** + * Font color of the description text and subtitle of a visualization or Answer. + */ + '--ts-var-viz-description-color'?: string; + + /** + * Font family specification of description text and subtitle of a visualization or + * Answer. + */ + '--ts-var-viz-description-font-family'?: string; + + /** + * Text transformation specification for description text and subtitle of a + * visualization or Answer. + */ + '--ts-var-viz-description-text-transform'?: string; + + /** + * Border-radius for the visualization tiles and header panel on a Liveboard. + */ + '--ts-var-viz-border-radius'?: string; + + /** + * Box shadow property for the visualization tiles and header panel on a Liveboard. + */ + '--ts-var-viz-box-shadow'?: string; + + /** + * Background color of the visualization tiles and header panel on a Liveboard. + */ + '--ts-var-viz-background'?: string; + + /** + * Background color of the legend on a visualization or Answer. + */ + '--ts-var-viz-legend-hover-background'?: string; + + /** + * Background color of the selected chart type on the chart selection widget. + */ + '--ts-var-answer-chart-select-background'?: string; + + /** + * Background color of the chart type element when a user hovers over a chart type on + * the chart selection widget. + */ + '--ts-var-answer-chart-hover-background'?: string; + + /** + * Border-radius of filter chips. + */ + '--ts-var-chip-border-radius'?: string; + + /** + * Shadow effect for filter chips. + */ + '--ts-var-chip-box-shadow'?: string; + + /** + * Background color of filter chips. + */ + '--ts-var-chip-background'?: string; + + /** + * Font color of the filter label when a filter chip is selected + */ + '--ts-var-chip--active-color'?: string; + + /** + * Background color of the filter chips when selected. + */ + '--ts-var-chip--active-background'?: string; + + /** + * Font color of the text on filter chips when hovered over. + */ + '--ts-var-chip--hover-color'?: string; + + /** + * Background color of filter chips on hover. + */ + '--ts-var-chip--hover-background'?: string; + + /** + * Font color of the text on filter chips. + */ + '--ts-var-chip-color'?: string; + + /** + * Font family specification for the text on filter chips. + */ + '--ts-var-chip-title-font-family'?: string; + + /** + * Font color of axis title on charts. + */ + '--ts-var-axis-title-color'?: string; + + /** + * Font family specification for the X and Y axis title text. + */ + '--ts-var-axis-title-font-family'?: string; + + /** + * Font color of the X and Y axis labels. + */ + '--ts-var-axis-data-label-color'?: string; + + /** + * Font family specification for X and Y axis labels. + */ + '--ts-var-axis-data-label-font-family'?: string; + + /** + * Font color of the menu items. + */ + '--ts-var-menu-color'?: string; + + /** + * Background color of menu panels. + */ + '--ts-var-menu-background'?: string; + + /** + * Font family specification for the menu items. + */ + '--ts-var-menu-font-family'?: string; + + /** + * Text capitalization specification for the menu items. + */ + '--ts-var-menu-text-transform'?: string; + + /** + * Background color for menu items on hover. + */ + '--ts-var-menu--hover-background'?: string; + + /** + * Text color for selected menu items. + */ + '--ts-var-menu-selected-text-color'?: string; + + /** + * Background color of the dialogs. + */ + '--ts-var-dialog-body-background'?: string; + + /** + * Font color of the body text displayed on dialogs. + */ + '--ts-var-dialog-body-color'?: string; + + /** + * Background color of the header text on dialogs. + */ + '--ts-var-dialog-header-background'?: string; + + /** + * Font color of the header text on dialogs. + */ + '--ts-var-dialog-header-color'?: string; + + /** + * Background color of the footer area on dialogs. + */ + '--ts-var-dialog-footer-background'?: string; + + /** + * Background for selected state in list + */ + '--ts-var-list-selected-background'?: string; + + /** + * Background for hover state in list + */ + '--ts-var-list-hover-background'?: string; + + /** + * Background for hover state in segment control. + */ + '--ts-var-segment-control-hover-background'?: string; + + /** + * Text color for slected item in modular home's watchlist. + */ + '--ts-var-home-watchlist-selected-text-color'?: string; + + /** + * Text color for favorite carousel find your favorites card in modular home. + */ + '--ts-var-home-favorite-suggestion-card-text-color'?: string; + + /** + * Icon color for favorite carousel find your favorites card in modular home. + */ + '--ts-var-home-favorite-suggestion-card-icon-color'?: string; + + /** + * Background for favorite carousel find your favorites card in modular home. + */ + '--ts-var-home-favorite-suggestion-card-background'?: string; + /** + * Border color of checkbox in error state. + */ + '--ts-var-checkbox-error-border'?: string; + /** + * Border color of checkbox. + */ + '--ts-var-checkbox-border-color'?: string; + /** + * Border color of checkbox in hover state. + */ + '--ts-var-checkbox-hover-border'?: string; + /** + * Border and font color of checkbox in active state. + */ + '--ts-var-checkbox-active-color'?: string; + /** + * Border color and font color of checkbox in checked state. + */ + '--ts-var-checkbox-checked-color'?: string; + /** + * Border and font color of checkbox in disabled state. + */ + '--ts-var-checkbox-checked-disabled'?: string; + /** + * Background color of checkbox. + */ + '--ts-var-checkbox-background-color'?: string; + } + +// import type { SessionInterface } from './answerService/answerService'; +export interface SessionInterface { + sessionId: string; + genNo: number; + acSession: { sessionId: string; genNo: number }; +} + +/** + * The authentication mechanism for allowing access to the + * the embedded app + * @group Authentication / Init + */ +// eslint-disable-next-line no-shadow +export enum AuthType { + /** + * No authentication on the SDK. Pass-through to the embedded App. Alias for + * `Passthrough`. + * @example + * ```js + * init({ + * // ... + * authType: AuthType.None, + * }); + * ``` + */ + None = 'None', + /** + * Passthrough SSO to the embedded application within the iframe. Requires least + * configuration, but may not be supported by all IDPs. This will behave like `None` + * if SSO is not configured on ThoughtSpot. + * + * To use this: + * Your SAML or OpenID provider must allow iframe redirects. + * For example, if you are using Okta as IdP, you can enable iframe embedding. + * @example + * ```js + * init({ + * // ... + * authType: AuthType.EmbeddedSSO, + * }); + * ``` + * @version: SDK: 1.15.0 | ThoughtSpot: 8.8.0.cl + */ + EmbeddedSSO = 'EmbeddedSSO', + /** + * SSO using SAML + * @deprecated Use {@link SAMLRedirect} instead + * @hidden + */ + SSO = 'SSO_SAML', + /** + * SSO using SAML + * @deprecated Use {@link SAMLRedirect} instead + * @hidden + */ + SAML = 'SSO_SAML', + /** + * SSO using SAML + * Makes the host application redirect to the SAML IdP. Use this + * if your IdP does not allow itself to be embedded. + * + * This redirects the host application to the SAML IdP. The host application + * will be redirected back to the ThoughtSpot app after authentication. + * @example + * ```js + * init({ + * // ... + * authType: AuthType.SAMLRedirect, + * }); + * ``` + * + * This opens the SAML IdP in a popup window. The popup is triggered + * when the user clicks the trigger button. The popup window will be + * closed automatically after authentication. + * @example + * ```js + * init({ + * // ... + * authType: AuthType.SAMLRedirect, + * authTriggerText: 'Login with SAML', + * authTriggerContainer: '#embed-container', + * inPopup: true, + * }); + * ``` + * + * Can also use the event to trigger the popup flow. Works the same + * as the above example. + * @example + * ```js + * const authEE = init({ + * // ... + * authType: AuthType.SAMLRedirect, + * inPopup: true, + * }); + * + * someButtonOnYourPage.addEventListener('click', () => { + * authEE.emit(AuthEvent.TRIGGER_SSO_POPUP); + * }); + * ``` + */ + SAMLRedirect = 'SSO_SAML', + /** + * SSO using OIDC + * @hidden + * @deprecated Use {@link OIDCRedirect} instead + */ + OIDC = 'SSO_OIDC', + /** + * SSO using OIDC + * Will make the host application redirect to the OIDC IdP. + * See code samples in {@link SAMLRedirect}. + */ + OIDCRedirect = 'SSO_OIDC', + /** + * Trusted authentication server + * @hidden + * @deprecated Use {@link TrustedAuth} instead + */ + AuthServer = 'AuthServer', + /** + * Trusted authentication server. Use your own authentication server + * which returns a bearer token, generated using the `secret_key` obtained + * from ThoughtSpot. + * @example + * ```js + * init({ + * // ... + * authType: AuthType.TrustedAuthToken, + * getAuthToken: () => { + * return fetch('https://my-backend.app/ts-token') + * .then((response) => response.json()) + * .then((data) => data.token); + * } + * }); + * ``` + */ + TrustedAuthToken = 'AuthServer', + /** + * Trusted authentication server Cookieless, Use your own authentication + * server which returns a bearer token, generated using the `secret_key` + * obtained from ThoughtSpot. This uses a cookieless authentication + * approach, recommended to bypass the third-party cookie-blocking restriction + * implemented by some browsers. + * @example + * ```js + * init({ + * // ... + * authType: AuthType.TrustedAuthTokenCookieless, + * getAuthToken: () => { + * return fetch('https://my-backend.app/ts-token') + * .then((response) => response.json()) + * .then((data) => data.token); + * } + * ``` + * @version SDK: 1.22.0| ThoughtSpot: 9.3.0.cl, 9.5.1.sw + */ + TrustedAuthTokenCookieless = 'AuthServerCookieless', + /** + * Use the ThoughtSpot login API to authenticate to the cluster directly. + * + * Warning: This feature is primarily intended for developer testing. It is + * strongly advised not to use this authentication method in production. + */ + Basic = 'Basic', +} +/** + * + * This option does not apply to the classic homepage experience. + * To access the updated modular homepage, + * set `modularHomeExperience` to `true` + * (available as Early Access feature in 9.12.5.cl). + * + */ + +export enum HomeLeftNavItem { + /** + * @version SDK: 1.28.0| ThoughtSpot: 9.12.5.cl + */ + SearchData = 'search-data', + /** + * @version SDK: 1.28.0| ThoughtSpot: 9.12.5.cl + */ + Home = 'insights-home', + /** + * @version SDK: 1.28.0| ThoughtSpot: 9.12.5.cl + */ + Liveboards = 'liveboards', + /** + * @version SDK: 1.28.0| ThoughtSpot: 9.12.5.cl + */ + Answers = 'answers', + /** + * @version SDK: 1.28.0| ThoughtSpot: 9.12.5.cl + */ + MonitorSubscription = 'monitor-alerts', + /** + * @version SDK: 1.28.0| ThoughtSpot: 9.12.5.cl + */ + SpotIQAnalysis = 'spotiq-analysis', + /** + * @version SDK: 1.34.0| ThoughtSpot: 10.3.0.cl + */ + LiveboardSchedules = 'liveboard-schedules' +} +export type DOMSelector = string | HTMLElement; + +/** + * inline customCSS within the {@link CustomisationsInterface}. + * Use {@link CustomCssVariables} or css rules. + */ +export interface customCssInterface { + /** + * The custom css variables, which can be set. + * The allowed list is in the CustomCssVariables + * interface. For more information, see + * link:https://developers.thoughtspot.com/docs/css-variables-reference + */ + variables?: CustomCssVariables; + /** + * Can be used to define a custom font face + * like: + * @example + * ```js + * rules_UNSTABLE?: { + * "@font-face": { + * "font-family": "custom-font", + * "src": url("/path/") + * }; + * }; + * ``` + * + * Also, custom css rules outside of variables. + * @example + * ```js + * rules_UNSTABLE?: { + * ".thoughtspot_class_name": { + * "border-radius": "10px", + * margin: "20px" + * }; + * }; + * ``` + */ + // eslint-disable-next-line camelcase + rules_UNSTABLE?: { + [selector: string]: { + [declaration: string]: string; + }; + }; +} +/** + * Styles within the {@link CustomisationsInterface}. + */ +export interface CustomStyles { + customCSSUrl?: string; + customCSS?: customCssInterface; +} + +/** + * Configuration to define the customization on the Embedded + * ThoughtSpot components. + * You can customize styles, text strings, and icons. + * For more information, see https://developers.thoughtspot.com/docs/custom-css. + * @example + * ```js + * init({ + * // ... + * customizations: { + * style: { + * customCSS: { + * variables: {}, + * rules_UNSTABLE: {} + * } + * }, + * content: { + * strings: { + * 'LIVEBOARDS': 'Dashboards', + * 'ANSWERS': 'Visualizations', + * 'Edit': 'Modify', + * 'Show underlying data': 'Show source data', + * 'SpotIQ': 'Insights', + * 'Monitor': 'Alerts', + * } + * }, + * iconSpriteUrl: 'https://my-custom-icon-sprite.svg' + * } + * }) + * ``` + */ +export interface CustomisationsInterface { + style?: CustomStyles; + content?: { + /** + * @version SDK: 1.26.0 | 9.7.0.cl + */ + strings?: Record; + [key: string]: any; + }; + iconSpriteUrl?: string; +} + +/** + * The configuration object for embedding ThoughtSpot content. + * It includes the ThoughtSpot hostname or IP address, + * the type of authentication, and the authentication endpoint + * if a trusted authentication server is used. + * @group Authentication / Init + */ +export interface EmbedConfig { + /** + * The ThoughtSpot cluster hostname or IP address. + */ + thoughtSpotHost: string; + /** + * The authentication mechanism to use. + */ + authType: AuthType; + /** + * [AuthServer] The trusted authentication endpoint to use to get the + * authentication token. A `GET` request is made to the + * authentication API endpoint, which returns the token + * as a plaintext response. For trusted authentication, + * the `authEndpoint` or `getAuthToken` attribute is required. + */ + authEndpoint?: string; + /** + * [AuthServer] A function that invokes the trusted authentication endpoint + * and returns a Promise that resolves to the `auth token` string. + * For trusted authentication, the `authEndpoint` or `getAuthToken` + * attribute is required. + * + * It is advisable to fetch a new token inside this method and not + * reuse the old issued token. When auth expires this method is + * called again and if it is called with an older token, the authentication + * will not succeed. + */ + getAuthToken?: () => Promise; + /** + * [AuthServer / Basic] The user name of the ThoughtSpot user. This + * attribute is required for trusted authentication. + */ + username?: string; + + /** + * [Basic] The ThoughtSpot login password corresponding to the username + * + * Warning: This feature is primarily intended for developer testing. It is + * strongly advised not to use this authentication method in production. + */ + password?: string; + + /** + * [SSO] For SSO Authentication, if `noRedirect` is set to true, it will + * open the SAML auth flow in a popup, instead of redirecting the browser in + * place. + * @default false + * @deprecated + */ + noRedirect?: boolean; + + /** + * [SSO] For SSO Authentication, if `inPopup` is set to true, it will open + * the SAML auth flow in a popup, instead of redirecting the browser in place. + * + * Need to use this with `authTriggerContainer`. Or manually trigger + * the `AuthEvent.TRIGGER_SSO_POPUP` event on a user interaction. + * @default false + * @version SDK: 1.18.0 + */ + inPopup?: boolean; + + /** + * [SSO] For SSO Authentication, one can supply an optional path param; + * This will be the path on the host origin where the SAML flow will be + * terminated. + * + * Eg: "/dashboard", "#/foo" [Do not include the host] + * @version SDK: 1.10.2 | ThoughtSpot 8.2.0.cl, 8.4.1.sw + */ + redirectPath?: string; + + /** @internal */ + basepath?: string; + + /** + * Boolean to define if the query parameters in the ThoughtSpot URL + * should be encoded in base64. This provides additional security to + * ThoughtSpot clusters against cross-site scripting attacks. + * @default false + */ + shouldEncodeUrlQueryParams?: boolean; + + /** + * Suppress cookie access alert when third-party cookies are blocked by the + * user's browser. Third-party cookie blocking is the default behaviour on + * some web browsers like Safari. If you set this attribute to `true`, + * you are encouraged to handle `noCookieAccess` event, to show your own treatment + * in this case. + * @default false + */ + suppressNoCookieAccessAlert?: boolean; + + /** + * Ignore the cookie access alert when third-party cookies are blocked by the + * user's browser. If you set this to `true`, the embedded iframe behaviour + * persists even in the case of a non-logged-in user. + * @default false + */ + ignoreNoCookieAccess?: boolean; + + /** + * Re-login a user with the previous login options + * when a user session expires. + * @default false + */ + autoLogin?: boolean; + + /** + * Disable redirection to the login page when the embedded session expires + * This flag is typically used alongside the combination of authentication modes such + * as {@link AuthType.AuthServer} and auto-login behavior {@link + * EmbedConfig.autoLogin} + * @version SDK: 1.9.3 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw + * @default false + */ + disableLoginRedirect?: boolean; + + /** + * This message is displayed in the embedded view when a user login fails. + * @version SDK: 1.10.1 | ThoughtSpot: 8.2.0.cl, 8.4.1.sw + */ + loginFailedMessage?: string; + + /** + * Calls the prefetch method internally when set to `true` + * @default false + */ + callPrefetch?: boolean; + + /** + * When there are multiple objects embedded, queue the rendering of embedded objects + * to start after the previous embed's render is complete. This helps improve + * performance by decreasing the load on the browser. + * @Version SDK: 1.5.0 | ThoughtSpot: ts7.oct.cl, 7.2.1 + * @default false + */ + queueMultiRenders?: boolean; + + /** + * [AuthServer|Basic] Detect if third-party party cookies are enabled by doing an + * additional call. This is slower and should be avoided. Listen to the + * `NO_COOKIE_ACCESS` event to handle the situation. + * + * This is slightly slower than letting the browser handle the cookie check, as it + * involves an extra network call. + * @version SDK: 1.10.4 | ThoughtSpot: 8.2.0.cl, 8.4.1.sw + */ + detectCookieAccessSlow?: boolean; + /** + * Hide the `beta` alert warning message for SearchEmbed. + * @version SDK: 1.12.0 | ThoughtSpot: 8.4.0.cl, 8.4.1.sw* + */ + suppressSearchEmbedBetaWarning?: boolean; + /** + * Hide `beta` alert warning message for SageEmbed. + * + */ + suppressSageEmbedBetaWarning?: boolean; + /** + * Custom style params for embed Config. + * @version SDK: 1.17.0 | ThoughtSpot: 8.9.0.cl, 9.0.1.sw + */ + customizations?: CustomisationsInterface; + /** + * For `inPopup` SAMLRedirect or OIDCRedirect authentication, we need a + * button that the user can click to trigger the flow. + * This attribute sets a containing element for that button. + * @example + * ```js + * init({ + * authType: AuthType.SAMLRedirect, + * inPopup: true, + * authTriggerContainer: '#auth-trigger-container' + * }) + * ``` + * @version SDK: 1.17.0 | ThoughtSpot: 8.9.0.cl, 9.0.1.sw + */ + authTriggerContainer?: string | HTMLElement; + /** + * Specify that we want to use the `AuthEvent.TRIGGER_SSO_POPUP` event to trigger + * SAML popup. This is useful when you want to trigger the popup on a custom user + * action. + * + */ + useEventForSAMLPopup?: boolean; + /** + * Text to show in the button which triggers the popup auth flow. + * Default: `Authorize`. + * @version SDK: 1.17.0 | ThoughtSpot: 8.9.0.cl, 9.0.1.sw + */ + authTriggerText?: string; + /** + * Prevent users from accessing the full application or ThoughtSpot application pages + * access to the embedded application users + * outside of the iframe. + * @default true + * @version SDK: 1.22.0 | ThoughtSpot: 9.3.0.cl, 9.5.1.sw + */ + blockNonEmbedFullAppAccess?: boolean; + + /** + * Host config in case embedded app is inside TS app itself + * @hidden + */ + hostConfig?: { + hostUserGuid: string; + hostClusterId: string; + hostClusterName: string; + }; + + /** + * Pendo API key to enable Pendo tracking to your own subscription, the key + * is added as an additional key to the embed, as per this link:https://support.pendo.io/hc/en-us/articles/360032201951-Send-data-to-multiple-subscriptions[document]. + * @version SDK: 1.27.0 | ThoughtSpot: 9.8.0.cl + */ + pendoTrackingKey?: string; + + /** + * If passed as true all alerts will be suppressed in the embedded app. + * @version SDK: 1.26.2 | ThoughtSpot: * + */ + suppressErrorAlerts?: boolean; + + /** + * Log level for the SDK. + * @default LogLevel.ERROR + * @example + * ```js + * init({ + * ...embedConfig, + * logLevel: LogLevel.SILENT + * }) + * ``` + * @version SDK: 1.26.7 | ThoughtSpot: 9.10.0.cl + */ + logLevel?: LogLevel; + /** + * Disables the Mixpanel tracking from the SDK. + * @version SDK: 1.27.9 + */ + disableSDKTracking?: boolean; + /** + * Overrides default/user preferred locale for date formatting + * @version SDK: 1.28.4 | ThoughtSpot: 10.0.0.cl, 9.5.0.sw + */ + dateFormatLocale?: string; + /** + * Overrides default/user preferred locale for number formatting + * @version SDK: 1.28.4 | ThoughtSpot: 10.0.0.cl, 9.5.0.sw + */ + numberFormatLocale?: string; + /** + * Format to be used for currency when currency format is set to infer from browser + * @version SDK: 1.28.4 | ThoughtSpot: 10.0.0.cl, 9.5.0.sw + */ + currencyFormat?: string; + + /** + * This flag is used to disable the token verification in the SDK. + * Enabling this flag will also disable the caching of the token. + * @hidden + * @example + * ```js + * init({ + * ...embedConfig, + * disableTokenVerification : true + * }) + * ``` + * @version SDK: 1.28.5 | ThoughtSpot: 9.10.0.cl, 10.1.0.sw + */ + disableTokenVerification?: boolean; + + /** + * This flag is used to disable showing the login failure page in the embedded app. + * @version SDK 1.32.3 | ThoughtSpot: 10.1.0.cl, 10.1.0.sw + */ + disableLoginFailurePage?: boolean; + /** + * This is an object (key/val) of override flags which will be applied + * to the internal embedded object. This can be used to add any + * URL flag. + * Warning: This option is for advanced use only and is used internally + * to control embed behavior in non-regular ways. We do not publish the + * list of supported keys and values associated with each. + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * additionalFlags: { + * flag1: 'value1', + * flag2: 'value2' + * } + * }); + * ``` + * @version SDK: 1.33.5 | ThoughtSpot: * + */ + additionalFlags?: { [key: string]: string | number | boolean }; + /** + * This is an object (key/val) for customVariables being + * used by the third party tool's script. + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * customVariablesForThirdPartyTools: { + * key1: 'value1', + * key2: 'value2' + * } + * }); + * ``` + * @version SDK 1.37.0 | ThoughtSpot: 10.7.0.cl + */ + customVariablesForThirdPartyTools?: Record< string, any >; +} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface LayoutConfig { + laygoutH: string +} + +/** + * Embedded iframe configuration + * @group Embed components + */ +export interface FrameParams { + /** + * The width of the iframe (unit is pixels if numeric). + */ + width?: number | string; + /** + * The height of the iframe (unit is pixels if numeric). + */ + height?: number | string; + /** + * Set to 'lazy' to enable lazy loading of the embedded TS frame. + * This will defer loading of the frame until it comes into the + * viewport. This is useful for performance optimization. + */ + loading?: 'lazy' | 'eager' | 'auto'; + /** + * This parameters will be passed on the iframe + * as is. + */ + [key: string]: string | number | boolean | undefined; +} + +/** + * The configuration object for an embedded view. + */ +export interface ViewConfig { + /** + * @hidden + */ + layoutConfig?: LayoutConfig; + /** + * The width and height dimensions to render an embedded + * object inside your app. Specify the values in pixels or percentage. + * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 7.2.1 + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * frameParams: { + * width: '500px' | '50%', + * height: '400px' | '60%', + * }, + * }); + * ``` + */ + frameParams?: FrameParams; + /** + * @hidden + */ + theme?: string; + /** + * @hidden + */ + // eslint-disable-next-line camelcase + styleSheet__unstable?: string; + /** + * The list of actions to disable from the primary menu, more menu + * (...), and the contextual menu. These actions will be disabled + * for the user. + * Use this to disable actions. + * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * disabledActions: [Action.Download, Action.Save] + * }); + * ``` + */ + disabledActions?: Action[]; + /** + * The tooltip to display for disabled actions. + * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * disabledActions: [Action.Download, Action.Save] + * disabledActionReason: "Reason for disabling", + * }); + * ``` + */ + disabledActionReason?: string; + /** + * The list of actions to hide from the embedded. + * This actions will be hidden from the user. + * Use this to hide an action. + * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * hiddenActions: [Action.Download, Action.Export] + * }); + * ``` + * @important + */ + hiddenActions?: Action[]; + /** + * The list of actions to display from the primary menu, more menu + * (...), and the contextual menu. These will be only actions that + * are visible to the user. + * Use this to hide all actions except the ones you want to show. + * + * Use either this or hiddenActions. + * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw + * @important + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * visibleActions: [Action.Download, Action.Export] + * }); + * ``` + */ + visibleActions?: Action[]; + /** + * Show alert messages and toast messages in the embedded + * view in full app embed. + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + * ```js + * const embed = new AppEmbed('#embed-container', { + * ... // other options + * showAlerts:true, + * }) + * ``` + */ + showAlerts?: boolean; + /** + * The list of runtime filters to apply to a search answer, + * visualization, or Liveboard. + * @version SDK: 1.9.4 | ThoughtSpot 8.1.0.cl, 8.4.1.sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * runtimeFilters: [ + * { + * columnName: 'value', + * operator: RuntimeFilterOp.EQ, + * values: ['string' | 123 | true], + * }, + * ], + * }) + * ``` + */ + runtimeFilters?: RuntimeFilter[]; + /** + * The list of parameter override to apply to a search answer, + * visualization, or Liveboard. + * @version SDK : 1.25.0 | ThoughtSpot: 9.2.0.cl, 9.5.0.sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * runtimeParameters: [ + * { + * name: 'value', + * value: 'string' | 123 | true, + * }, + * ], + * }) + * ``` + */ + runtimeParameters?: RuntimeParameter[]; + /** + * The locale/language to use for the embedded view. + * @version SDK: 1.9.4 | ThoughtSpot 8.1.0.cl, 8.4.1.sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * locale:'en', + * }) + * ``` + */ + locale?: string; + /** + * This is an object (key/val) of override flags which will be applied + * to the internal embedded object. This can be used to add any + * URL flag. + * If the same flags are passed in init, they will be overriden by the values here. + * Warning: This option is for advanced use only and is used internally + * to control embed behavior in non-regular ways. We do not publish the + * list of supported keys and values associated with each. + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * additionalFlags: { + * flag1: 'value1', + * flag2: 'value2' + * } + * }); + * ``` + * @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw + */ + additionalFlags?: { [key: string]: string | number | boolean }; + /** + * Dynamic CSSUrl and customCSS to be injected in the loaded application. + * You would also need to set `style-src` in the CSP settings. + * @version SDK: 1.17.2 | ThoughtSpot: 8.4.1.sw, 8.4.0.cl + * @default '' + */ + customizations?: CustomisationsInterface; + /** + * Insert as a sibling of the target container, instead of appending to a + * child inside it. + * @version SDK: 1.2.0 | ThoughtSpot: 9.0.0.cl, 9.0.0.sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * insertAsSibling:true, + * }) + * ``` + */ + insertAsSibling?: boolean; + /** + * flag to set ContextMenu Trigger to either left or right click. + * @example + * ```js + * const embed = new LiveboardEmbed('#tsEmbed', { + * ... // other options + * contextMenuTrigger:ContextMenuTriggerOptions.LEFT_CLICK || RIGHT_CLICK, + * }) + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl + */ + contextMenuTrigger?: ContextMenuTriggerOptions; + /** + * Flag to override openNew tab context menu link + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * linkOverride:false, + * }) + * ``` + */ + linkOverride?: boolean; + /** + * flag to enable insert into slides action + * @hidden + * @private + */ + insertInToSlide?: boolean; + /** + * Use a pre-rendered iframe from a pool of pre-rendered iframes + * if available and matches the configuration. + * @version SDK: 1.22.0 + * @hidden + * + * See [docs]() on how to create a prerender pool. + */ + usePrerenderedIfAvailable?: boolean; + /** + * Boolean to exclude runtimeFilters in the URL + * By default it is true, this flag removes runtime filters from the URL + * when set to false, runtime filters will be included in the URL. + * + * Irrespective of this flag, runtime filters ( if passed ) will be applied to the + * embedded view. + * @default false + * @version SDK: 1.24.0 | ThoughtSpot: 9.5.0.cl + */ + excludeRuntimeFiltersfromURL?: boolean; + /** + * The list of tab IDs to hide from the embedded. + * This Tabs will be hidden from their respective LBs. + * Use this to hide an tabID. + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * hiddenTabs: [ + * '430496d6-6903-4601-937e-2c691821af3c', + * 'f547ec54-2a37-4516-a222-2b06719af726'] + * }); + * ``` + * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 10.1.0.sw + */ + hiddenTabs?: string[]; + /** + * Hide the home page modules + * For example: hiddenHomepageModules = [HomepageModule.MyLibrary] + * + * **Note**: This option does not apply to the classic homepage. + * To access the updated modular homepage, set + * `modularHomeExperience` to `true` (available as Early Access feature in 9.12.5.cl). + * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl, 10.1.0.sw + * @example + * ```js + * const embed = new AppEmbed('#tsEmbed', { + * ... // other options + * hiddenHomepageModules : [HomepageModule.Favorite,HomepageModule.Learning], + * }) + * ``` + */ + hiddenHomepageModules?: HomepageModule[]; + /** + * reordering the home page modules + * eg: reorderedHomepageModules = [HomepageModule.MyLibrary, HomepageModule.Watchlist] + * + * **Note**: This option does not apply to the classic homepage. + * To access the updated modular homepage, set + * `modularHomeExperience` to `true` (available as Early Access feature in 9.12.5.cl). + * @version SDK: 1.28.0| ThoughtSpot: 9.12.5.cl, 10.1.0.sw + * @example + * ```js + * const embed = new AppEmbed('#tsEmbed', { + * ... // other options + * reorderedHomepageModules:[HomepageModule.Favorite,HomepageModule.MyLibrary] + * }) + * ``` + */ + reorderedHomepageModules?: HomepageModule[]; + /** + * The list of tab IDs to show in the embedded Liveboard. + * Only the tabs specified in the array will be shown in the Liveboard. + * + * Use either `visibleTabs` or `hiddenTabs`. + * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 10.1.0.sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * visibleTabs: [ + * '430496d6-6903-4601-937e-2c691821af3c', + * 'f547ec54-2a37-4516-a222-2b06719af726' + * ] + * }) + * ``` + */ + visibleTabs?: string[]; + /** + * homepageLeftNavItems : Show or hide the left navigation bar items. + * There are 8 eight home navigation list items. + * To hide these items, specify the string in the array. + * @example + * ```js + * const embed = new AppEmbed('#tsEmbed', { + * ... // other options + * hiddenHomeLeftNavItems : [HomeLeftNavItem.Home,HomeLeftNavItem.Answers], + * }) + * ``` + * + * **Note**: This option does not apply to the classic homepage. + * To access the updated modular homepage, set + * `modularHomeExperience` to `true` (available as Early Access feature in 9.12.5.cl). + * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl, 10.1.0.sw + */ + hiddenHomeLeftNavItems?: HomeLeftNavItem[]; + /** + * PreRender id to be used for PreRendering the embed. + * Use PreRender to render the embed in the background and then + * show or hide the rendered embed using showPreRender or hidePreRender respectively. + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * preRenderId: "preRenderId-123" + * }); + * embed.showPreRender(); + * ``` + * @version SDK: 1.25.0 | ThoughtSpot: 9.6.0.cl, 9.8.0.sw + */ + preRenderId?: string; + + /** + * Determines whether the PreRender component should not dynamically track the size + * of its embedding element and adjust its own size accordingly. + * Enabling this option allows the PreRender component to automatically adapt + * its dimensions based on changes to the size of the embedding element. + * @type {boolean} + * @default false + * @version SDK: 1.24.0 | ThoughtSpot:9.4.0.cl, 9.4.0.sw + * @example + * ```js + * // Disable tracking PreRender size in the configuration + * const config = { + * doNotTrackPreRenderSize: true, + * }; + * + * // Instantiate an object with the configuration + * const myComponent = new MyComponent(config); + * ``` + */ + doNotTrackPreRenderSize?: boolean; + /** + * For internal tracking of the embed component type. + * @hidden + */ + embedComponentType?: string; + /** + * Boolean to exclude runtimeParameters from the URL + * when set to true, this flag removes runtime parameters from the URL. + * + * Irrespective of this flag, runtime filters ( if passed ) will be applied to the + * embedded view. + * @default false + * @version SDK: 1.29.0 | ThoughtSpot: 10.1.0.cl + */ + excludeRuntimeParametersfromURL?: boolean; + /** + * Enable the V2 shell. This can provide performance benefits + * due to a lighterweight shell. + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * liveboardId: '123', + * enableV2Shell_experimental: true + * }); + * ``` + * @version SDK: 1.31.2 | ThoughtSpot: 10.0.0.cl + */ + // eslint-disable-next-line camelcase + enableV2Shell_experimental?: boolean; + /** + * To set the initial state of the search bar in case of saved Answers. + * @default true + * @version SDK: 1.34.0 | ThoughtSpot: 10.3.0.cl + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * liveboardId: '123', + * collapseSearchBar: true + * }); + */ + collapseSearchBar?: boolean; + /** + * This flag can be used to disable links inside the embedded app, + * and disable redirection of links in a new tab. + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * disableRedirectionLinksInNewTab: true + * }); + * ``` + * @version SDK: 1.32.1 | ThoughtSpot: 10.3.0.cl + */ + disableRedirectionLinksInNewTab?: boolean; + /** + * Flag to control Data panel experience + * @default false + * @version SDK: 1.34.0 | ThoughtSpot Cloud: 10.3.0.cl + * @example + * ```js + * const embed = new AppEmbed('#tsEmbed', { + * ... // other options + * dataPanelV2: true, + * }) + * ``` + */ + dataPanelV2?: boolean; + /** + * To enable custom column groups in data panel v2 + * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl, 10.1.0.sw + * @default false + * @example + * ```js + * const embed = new SearchEmbed('#tsEmbed', { + * ... // other options + * enableCustomColumnGroups: true, + * }); + * ``` + */ + enableCustomColumnGroups?: boolean; + /** + * Overrides an Org context for embedding application users. + * This parameter allows a user authenticated to one Org to view the + * objects from another Org. + * The `overrideOrgId` setting is honoured only if the + * Per Org URL feature is enabled on your ThoughtSpot instance. + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other options + * overrideOrgId: 142536 + * }); + * ``` + * @version SDK: 1.35.0 | ThoughtSpot: 10.5.0.cl + */ + overrideOrgId?: number; +} + +/** + * MessagePayload: Embed event payload: message type, data and status (start/end) + * @group Events + */ +export type MessagePayload = { + /* type: message type eg: 'save' */ + type: string; + /* data: message payload data eg: { answerId: '123' } */ + data: any; + /* status: message payload status - start or end */ + status?: string; +}; +/** + * MessageOptions: By providing options, getting specific event start / end based on + * option + * @group Events + */ +export type MessageOptions = { + /** + * A boolean value indicating that start status events of this type + * will be dispatched. + */ + start?: boolean; +}; +/** + * MessageCallback: Embed event message callback + * @group Events + */ +export type MessageCallback = ( + /* payload: Message payload contains type, data, and status */ + payload: MessagePayload, + /** + * responder: Message callback function triggered when embed event + * initiated + */ + responder?: (data: any) => void, +) => void; +/** + * MessageCallbackObj: contains message options & callback function + */ +export type MessageCallbackObj = { + /** + * options: It contains start, a boolean value indicating that start + * status events of this type will be dispatched + */ + /* callback: Embed event message callback */ + options: MessageOptions; + callback: MessageCallback; +}; + +export type GenericCallbackFn = (...args: any[]) => any; + +export type QueryParams = { + [key: string]: string | boolean | number; +}; + +/** + * A map of the supported runtime filter operations + */ +// eslint-disable-next-line no-shadow +export enum RuntimeFilterOp { + /** + * Equals + */ + EQ = 'EQ', + /** + * Does not equal + */ + NE = 'NE', + /** + * Less than + */ + LT = 'LT', + /** + * Less than or equal to + */ + LE = 'LE', + /** + * Greater than + */ + GT = 'GT', + /** + * Greater than or equal to + */ + GE = 'GE', + /** + * Contains + */ + CONTAINS = 'CONTAINS', + /** + * Begins with + */ + BEGINS_WITH = 'BEGINS_WITH', + /** + * Ends with + */ + ENDS_WITH = 'ENDS_WITH', + /** + * Between, inclusive of higher value + */ + BW_INC_MAX = 'BW_INC_MAX', + /** + * Between, inclusive of lower value + */ + BW_INC_MIN = 'BW_INC_MIN', + /** + * Between, inclusive of both higher and lower value + */ + BW_INC = 'BW_INC', + /** + * Between, non-inclusive + */ + BW = 'BW', + /** + * Is included in this list of values + */ + IN = 'IN', + /** + * Is not included in this list of values + */ + NOT_IN = 'NOT_IN', +} + +/** + * Home page module that can be hidden. + * **Note**: This option does not apply to the classic homepage. + * To access the updated modular homepage, set + * `modularHomeExperience` to `true` (available as Early Access feature in 9.12.5.cl). + * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl, 10.1.0.sw + */ +// eslint-disable-next-line no-shadow +export enum HomepageModule { + /** + * Search bar + */ + Search = 'SEARCH', + /** + * kPI watchlist module + */ + Watchlist = 'WATCHLIST', + /** + * favorite objects + */ + Favorite = 'FAVORITE', + /** + * List of answers and Liveboards + */ + MyLibrary = 'MY_LIBRARY', + /** + * Trending list + */ + Trending = 'TRENDING', + /** + * Learning videos + */ + Learning = 'LEARNING', +} + +/** + * A filter that can be applied to ThoughtSpot answers, Liveboards, or + * visualizations at runtime. + */ +export interface RuntimeFilter { + /** + * The name of the column to filter on (case-sensitive) + */ + columnName: string; + /** + * The operator to apply + */ + operator: RuntimeFilterOp; + /** + * The list of operands. Some operators like EQ, LE accept + * a single operand, whereas other operators like BW and IN accept multiple + * operands. + */ + values: (number | boolean | string | bigint)[]; +} +/** + * A filter that can be applied to ThoughtSpot Answers, Liveboards, or + * visualizations at runtime. + */ +export interface RuntimeParameter { + /** + * The name of the runtime parameter to filter on (case-sensitive) + */ + name: string; + /** + * Values + */ + value: number | boolean | string; +} + +/** + * Event types emitted by the embedded ThoughtSpot application. + * + * To add an event listener use the corresponding + * {@link LiveboardEmbed.on} or {@link AppEmbed.on} or {@link SearchEmbed.on} method. + * @example + * ```js + * import { EmbedEvent } from '@thoughtspot/visual-embed-sdk'; + * // Or + * // const { EmbedEvent } = window.tsembed; + * + * // create the liveboard embed. + * + * liveboardEmbed.on(EmbedEvent.Drilldown, (drilldown) => { + * console.log('Drilldown event', drilldown); + * })); + * ``` + * + * If you are using React components for embedding, you can register to any + * events from the `EmbedEvent` list by using the `on` convention. + * For example,`onAlert`, `onCopyToClipboard` and so on. + * @example + * ```js + * // ... + * const MyComponent = ({ dataSources }) => { + * const onLoad = () => { + * console.log(EmbedEvent.Load, {}); + * }; + * + * return ( + * + * ); + * }; + * ``` + * @group Events + */ +// eslint-disable-next-line no-shadow +export enum EmbedEvent { + /** + * Rendering has initialized. + * @example + *```js + * liveboardEmbed.on(EmbedEvent.Init, showLoader) + * //show a loader + * function showLoader() { + * document.getElementById("loader"); + * } + *``` + * @returns timestamp - The timestamp when the event was generated. + */ + Init = 'init', + /** + * Authentication has either succeeded or failed. + * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw + * @example + *```js + * appEmbed.on(EmbedEvent.AuthInit, payload => { + * console.log('AuthInit', payload); + * }) + *``` + * @returns isLoggedIn - A Boolean specifying whether authentication was successful. + */ + AuthInit = 'authInit', + /** + * The embed object container has loaded. + * @returns timestamp - The timestamp when the event was generated. + * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.Load, hideLoader) + * //hide loader + * function hideLoader() { + * document.getElementById("loader"); + * } + *``` + */ + Load = 'load', + /** + * Data pertaining to answer or Liveboard is received + * @return data - The answer or Liveboard data + * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.Data, payload => { + * console.log('data', payload); + * }) + *``` + * @important + */ + Data = 'data', + /** + * Search query has been updated by the user. + * @version SDK: 1.4.0 | ThoughtSpot: ts7.sep.cl, 8.4.1.sw + * @example + *```js + * searchEmbed.on(EmbedEvent.QueryChanged, payload => console.log('data', payload)) + *``` + */ + QueryChanged = 'queryChanged', + /** + * A drill-down operation has been performed. + * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw + * @returns additionalFilters - Any additional filters applied + * @returns drillDownColumns - The columns on which drill down was performed + * @returns nonFilteredColumns - The columns that were not filtered + * @example + *```js + * searchEmbed.on(EmbedEvent.DrillDown, { + * points: { + * clickedPoint, + * selectedPoints: selectedPoint + * }, + * autoDrillDown: true, + * }) + *``` + * In this example, `VizPointDoubleClick` event is used for + * triggering the `DrillDown` event when an area or specific + * data point on a table or chart is double-clicked. + * @example + *```js + * searchEmbed.on(EmbedEvent.VizPointDoubleClick, (payload) => { + * console.log(payload); + * const clickedPoint = payload.data.clickedPoint; + * const selectedPoint = payload.data.selectedPoints; + * console.log('>>> called', clickedPoint); + * embed.trigger(HostEvent.DrillDown, { + * points: { + * clickedPoint, + * selectedPoints: selectedPoint + * }, + * autoDrillDown: true, + * }) + * }) + *``` + */ + Drilldown = 'drillDown', + /** + * One or more data sources have been selected. + * @returns dataSourceIds - the list of data sources + * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw + * @example + * ```js + * searchEmbed.on(EmbedEvent.DataSourceSelected, payload => { + * console.log('DataSourceSelected', payload); + * }) + * ``` + */ + DataSourceSelected = 'dataSourceSelected', + /** + * One or more data columns have been selected. + * @returns columnIds - the list of columns + * @version SDK: 1.10.0 | ThoughtSpot: 8.2.0.cl, 8.4.1.sw + * @example + * ```js + * appEmbed.on(EmbedEvent.AddRemoveColumns, payload => { + * console.log('AddRemoveColumns', payload); + * }) + * ``` + */ + AddRemoveColumns = 'addRemoveColumns', + /** + * A custom action has been triggered. + * @returns actionId - ID of the custom action + * @returns payload {@link CustomActionPayload} - Response payload with the + * Answer or Liveboard data + * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw + * @example + * ```js + * appEmbed.on(EmbedEvent.customAction, payload => { + * const data = payload.data; + * if (data.id === 'insert Custom Action ID here') { + * console.log('Custom Action event:', data.embedAnswerData); + * } + * }) + * ``` + */ + CustomAction = 'customAction', + /** + * Listen to double click actions on a visualization. + * @return ContextMenuInputPoints - Data point that is double-clicked + * @version SDK: 1.5.0 | ThoughtSpot: ts7.oct.cl, 7.2.1 + * @example + * ```js + * livebaordEmbed.on(EmbedEvent.VizPointDoubleClick, payload => { + * console.log('VizPointDoubleClick', payload); + * }) + * ``` + */ + VizPointDoubleClick = 'vizPointDoubleClick', + /** + * Listen to clicks on a visualization in a Liveboard or Search result. + * @return viz, clickedPoint - metadata about the point that is clicked + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @important + * @example + * ```js + * embed.on(EmbedEvent.VizPointClick, ({data}) => { + * console.log( + * data.vizId, // viz id + * data.clickedPoint.selectedAttributes[0].value, + * data.clickedPoint.selectedAttributes[0].column.name, + * data.clickedPoint.selectedMeasures[0].value, + * data.clickedPoint.selectedMeasures[0].column.name, + * ) + * }); + * ``` + */ + VizPointClick = 'vizPointClick', + /** + * An error has occurred. This event is fired for the following error types: + * + * `API` - API call failure error. + * `FULLSCREEN` - Error when presenting a Liveboard or visualization in full screen + * mode. `SINGLE_VALUE_FILTER` - Error due to multiple values in the single value + * filter. `NON_EXIST_FILTER` - Error due to a non-existent filter. + * `INVALID_DATE_VALUE` - Invalid date value error. + * `INVALID_OPERATOR` - Use of invalid operator during filter application. + * + * For more information, see https://developers.thoughtspot.com/docs/events-app-integration#errorType + * @returns error - An error object or message + * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw + * @example + * ```js + * // API error + * SearchEmbed.on(EmbedEvent.Error, (error) => { + * console.log(error); + * // { type: "Error", data: { errorType: "API", error: { message: '...', error: '...' } } } + * }); + * ``` + * @example + * ```js + * // Fullscreen error (Errors during presenting of a liveboard) + * LiveboardEmbed.on(EmbedEvent.Error, (error) => { + * console.log(error); + * // { type: "Error", data: { errorType: "FULLSCREEN", error: { + * // message: "Fullscreen API is not enabled", + * // stack: "..." + * // } }} + * }) + * ``` + */ + Error = 'Error', + /** + * The embedded object has sent an alert. + * @returns alert - An alert object + * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw + * @example + * ```js + * searchEmbed.on(EmbedEvent.Alert) + * ``` + */ + Alert = 'alert', + /** + * The ThoughtSpot auth session has expired. + * @version SDK: 1.4.0 | ThoughtSpot: ts7.sep.cl, 8.4.1.sw + * @example + *```js + * appEmbed.on(EmbedEvent.AuthExpire, showAuthExpired) + * //show auth expired banner + * function showAuthExpired() { + * document.getElementById("authExpiredBanner"); + * } + *``` + */ + AuthExpire = 'ThoughtspotAuthExpired', + /** + * ThoughtSpot failed to validate the auth session. + * @hidden + */ + AuthFailure = 'ThoughtspotAuthFailure', + /** + * ThoughtSpot failed to validate the auth session. + * @hidden + */ + AuthLogout = 'ThoughtspotAuthLogout', + /** + * The height of the embedded Liveboard or visualization has been computed. + * @returns data - The height of the embedded Liveboard or visualization + * @hidden + */ + EmbedHeight = 'EMBED_HEIGHT', + /** + * The center of visible iframe viewport is calculated. + * @returns data - The center of the visible Iframe viewport. + * @hidden + */ + EmbedIframeCenter = 'EmbedIframeCenter', + /** + * Emitted when the **Get Data** action is initiated. + * Applicable to `SearchBarEmbed` only. + * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw + * @example + *```js + * searchbarEmbed.on(EmbedEvent.GetDataClick) + * .then(data => { + * console.log('Answer Data:', data); + * }) + *``` + */ + GetDataClick = 'getDataClick', + /** + * Detects the route change. + * @version SDK: 1.7.0 | ThoughtSpot: 8.0.0.cl, 8.4.1.sw + * @example + *```js + * searchEmbed.on(EmbedEvent.RouteChange, payload => + * console.log('data', payload)) + *``` + */ + RouteChange = 'ROUTE_CHANGE', + /** + * The v1 event type for Data + * @hidden + */ + V1Data = 'exportVizDataToParent', + /** + * Emitted when the embed does not have cookie access. This happens + * when Safari and other Web browsers block third-party cookies + * are blocked by default. `NoCookieAccess` can trigger + * @example + *```js + * appEmbed.on(EmbedEvent.NoCookieAccess) + *``` + * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 7.2.1.sw + */ + NoCookieAccess = 'noCookieAccess', + /** + * Emitted when SAML is complete + * @private + * @hidden + */ + SAMLComplete = 'samlComplete', + /** + * Emitted when any modal is opened in the app + * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw + * @example + *```js + * appEmbed.on(EmbedEvent.DialogOpen, payload => { + * console.log('dialog open', payload); + * }) + *``` + */ + DialogOpen = 'dialog-open', + /** + * Emitted when any modal is closed in the app + * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw + * @example + *```js + * appEmbed.on(EmbedEvent.DialogClose, payload => { + * console.log('dialog close', payload); + * }) + *``` + */ + DialogClose = 'dialog-close', + /** + * Emitted when the Liveboard shell loads. + * You can use this event as a hook to trigger + * other events on the rendered Liveboard. + * @version SDK: 1.9.1 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.LiveboardRendered, payload => { + console.log('Liveboard is rendered', payload); + }) + *``` + * The following example shows how to trigger + * `SetVisibleVizs` event using LiveboardRendered embed event: + * @example + *```js + * const embedRef = useEmbedRef(); + * const onLiveboardRendered = () => { + * embed.trigger(HostEvent.SetVisibleVizs, ['viz1', 'viz2']); + * }; + *``` + */ + LiveboardRendered = 'PinboardRendered', + /** + * Emits all events. + * @Version SDK: 1.10.0 | ThoughtSpot: 8.2.0.cl, 8.4.1.sw + * @example + *```js + * appEmbed.on(EmbedEvent.ALL, payload => { + * console.log('Embed Events', payload) + * }) + *``` + */ + ALL = '*', + /** + * Emitted when an Answer is saved in the app + * @Version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * //Emit when action starts + * searchEmbed.on(EmbedEvent.Save, payload => { + * console.log('Save', payload) + * }, { + * start: true + * }) + * //emit when action ends + * searchEmbed.on(EmbedEvent.Save, payload => { + * console.log('Save', payload) + * }) + *``` + */ + Save = 'save', + /** + * Emitted when the download action is triggered on an answer + * + * **Note**: This event is deprecated in v1.21.0. + * To fire an event when a download action is initiated on a chart or table, + * use `EmbedEvent.DownloadAsPng`, `EmbedEvent.DownloadAsPDF`, + * `EmbedEvent.DownloadAsCSV`, or `EmbedEvent.DownloadAsXLSX` + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.Download, { + * vizId: '730496d6-6903-4601-937e-2c691821af3c' + * }) + *``` + */ + Download = 'download', + /** + * Emitted when the download action is triggered on an answer + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.4.0.sw + * @example + *```js + * //emit when action starts + * searchEmbed.on(EmbedEvent.DownloadAsPng, payload => { + * console.log('download PNG', payload)}, {start: true }) + * //emit when action ends + * searchEmbed.on(EmbedEvent.DownloadAsPng, payload => { + * console.log('download PNG', payload)}) + *``` + */ + DownloadAsPng = 'downloadAsPng', + /** + * Emitted when the Download as PDF action is triggered on an answer + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * //emit when action starts + * searchEmbed.on(EmbedEvent.DownloadAsPdf, payload => { + * console.log('download PDF', payload)}, {start: true }) + * //emit when action ends + * searchEmbed.on(EmbedEvent.DownloadAsPdf, payload => { + * console.log('download PDF', payload)}) + *``` + */ + DownloadAsPdf = 'downloadAsPdf', + /** + * Emitted when the Download as CSV action is triggered on an answer + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * //emit when action starts + * searchEmbed.on(EmbedEvent.DownloadAsCSV, payload => { + * console.log('download CSV', payload)}, {start: true }) + * //emit when action ends + * searchEmbed.on(EmbedEvent.DownloadAsCSV, payload => { + * console.log('download CSV', payload)}) + *``` + */ + DownloadAsCsv = 'downloadAsCsv', + /** + * Emitted when the Download as XLSX action is triggered on an answer + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * //emit when action starts + * searchEmbed.on(EmbedEvent.DownloadAsXlsx, payload => { + * console.log('download Xlsx', payload)}, { start: true }) + * //emit when action ends + * searchEmbed.on(EmbedEvent.DownloadAsXlsx, payload => { + * console.log('download Xlsx', payload)}) + *``` + */ + DownloadAsXlsx = 'downloadAsXlsx', + /** + * Emitted when an Answer is deleted in the app + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * //emit when action starts + * appEmbed.on(EmbedEvent.AnswerDelete, payload => { + * console.log('delete answer', payload)}, {start: true }) + * //trigger when action is completed + * appEmbed.on(EmbedEvent.AnswerDelete, payload => { + * console.log('delete answer', payload)}) + *``` + */ + AnswerDelete = 'answerDelete', + /** + * Emitted when an answer is pinned to a Liveboard + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * //emit when action starts + * searchEmbed.on(EmbedEvent.Pin, payload => { + * console.log('pin', payload) + * }, { + * start: true + * }) + * //emit when action ends + * searchEmbed.on(EmbedEvent.Pin, payload => { + * console.log('pin', payload) + * }) + *``` + */ + Pin = 'pin', + /** + * Emitted when SpotIQ analysis is triggered + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * //emit when action starts + * searchEmbed.on(EmbedEvent.SpotIQAnalyze, payload => { + * console.log('SpotIQAnalyze', payload) + * }, { + * start: true + * }) + * //emit when action ends + * searchEmbed.on(EmbedEvent.SpotIQAnalyze, payload => { + * console.log('SpotIQ analyze', payload) + * }) + *``` + */ + SpotIQAnalyze = 'spotIQAnalyze', + /** + * Emitted when a user shares an object with another user or group + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * //emit when action starts + * searchEmbed.on(EmbedEvent.Share, payload => { + * console.log('Share', payload) + * }, { + * start: true + * }) + * //emit when action ends + * searchEmbed.on(EmbedEvent.Share, payload => { + * console.log('Share', payload) + * }) + *``` + */ + Share = 'share', + /** + * Emitted when a user clicks the **Include** action to include a specific value or + * data on a chart or table. + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * appEmbed.on(EmbedEvent.DrillInclude, payload => { + * console.log('Drill include', payload); + * }) + *``` + */ + DrillInclude = 'context-menu-item-include', + /** + * Emitted when a user clicks the **Exclude** action to exclude a specific value or + * data on a chart or table + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * appEmbed.on(EmbedEvent.DrillExclude, payload => { + * console.log('Drill exclude', payload); + * }) + *``` + */ + DrillExclude = 'context-menu-item-exclude', + /** + * Emitted when a column value is copied in the embedded app. + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * seachEmbed.on(EmbedEvent.CopyToClipboard, payload => { + * console.log('copy to clipboard', payload); + * }) + *``` + */ + CopyToClipboard = 'context-menu-item-copy-to-clipboard', + /** + * Emitted when a user clicks the **Update TML** action on + * embedded Liveboard. + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.UpdateTML) + * }) + *``` + */ + UpdateTML = 'updateTSL', + /** + * Emitted when a user clicks the **Edit TML** action + * on an embedded Liveboard. + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * appEmbed.on(EmbedEvent.EditTML, payload => { + * console.log('Edit TML', payload); + * }) + *``` + */ + EditTML = 'editTSL', + /** + * Emitted when the **Export TML** action is triggered on an + * an embedded object in the app + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * //emit when action starts + * searchEmbed.on(EmbedEvent.ExportTML, payload => { + * console.log('Export TML', payload)}, { start: true }) + * //emit when action ends + * searchEmbed.on(EmbedEvent.ExportTML, payload => { + * console.log('Export TML', payload)}) + *``` + */ + ExportTML = 'exportTSL', + /** + * Emitted when an Answer is saved as a View. + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * appEmbed.on(EmbedEvent.SaveAsView, payload => { + * console.log('View', payload); + * }) + *``` + */ + SaveAsView = 'saveAsView', + /** + * Emitted when the user creates a copy of an Answer + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * //emit when action starts + * appEmbed.on(EmbedEvent.CopyAEdit, payload => { + * console.log('Copy and edit', payload)}, {start: true }) + * //emit when action ends + * appEmbed.on(EmbedEvent.CopyAEdit, payload => { + * console.log('Copy and edit', payload)}) + *``` + */ + CopyAEdit = 'copyAEdit', + /** + * Emitted when a user clicks Show underlying data on an Answer + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.ShowUnderlyingData, payload => { + * console.log('show data', payload); + * }) + *``` + */ + ShowUnderlyingData = 'showUnderlyingData', + /** + * Emitted when an answer is switched to a chart or table view. + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + * @example + *```js + * searchEmbed.on(EmbedEvent.AnswerChartSwitcher, payload => { + * console.log('switch view', payload); + * }) + *``` + */ + AnswerChartSwitcher = 'answerChartSwitcher', + /** + * Internal event to communicate the initial settings back to the ThoughtSpot app + * @hidden + */ + APP_INIT = 'appInit', + /** + * Emitted when a user clicks **Show Liveboard details** on a Liveboard + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.AnswerChartSwitcher, payload => { + * console.log('Liveboard details', payload); + * }) + *``` + */ + LiveboardInfo = 'pinboardInfo', + /** + * Emitted when a user clicks on the Favorite icon on a Liveboard + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.AddToFavorites, payload => { + * console.log('favorites', payload); + * }) + *``` + */ + AddToFavorites = 'addToFavorites', + /** + * Emitted when a user clicks **Schedule** on a Liveboard + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.Schedule, payload => { + * console.log(`Liveboard schedule', payload); + * }) + *``` + */ + Schedule = 'subscription', + /** + * Emitted when a user clicks **Edit** on a Liveboard or visualization + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.Edit, payload => { + * console.log(`Liveboard edit', payload); + * }) + *``` + */ + Edit = 'edit', + /** + * Emitted when a user clicks *Make a copy* on a Liveboard + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.MakeACopy, payload => { + * console.log(`Copy', payload); + * }) + *``` + */ + MakeACopy = 'makeACopy', + /** + * Emitted when a user clicks **Present** on a Liveboard or visualization + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.Present) + *``` + * @example + *```js + * liveboardEmbed.on(EmbedEvent.Present, { + * vizId: '730496d6-6903-4601-937e-2c691821af3c'}) + * }) + *``` + */ + Present = 'present', + /** + * Emitted when a user clicks **Delete** on a visualization + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.Delete, + * {vizId: '730496d6-6903-4601-937e-2c691821af3c'}) + *``` + */ + Delete = 'delete', + /** + * Emitted when a user clicks Manage schedules on a Liveboard + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.SchedulesList) + *``` + */ + SchedulesList = 'schedule-list', + /** + * Emitted when a user clicks **Cancel** in edit mode on a Liveboard + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.Cancel) + *``` + */ + Cancel = 'cancel', + /** + * Emitted when a user clicks **Explore** on a visualization + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.Explore, { + * vizId: '730496d6-6903-4601-937e-2c691821af3c'}) + *``` + */ + Explore = 'explore', + /** + * Emitted when a user clicks **Copy link** action on a visualization. + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + * @example + *```js + * liveboardEmbed.on(EmbedEvent.CopyLink, { + * vizId: '730496d6-6903-4601-937e-2c691821af3c'}) + *``` + */ + CopyLink = 'embedDocument', + /** + * Emitted when a user interacts with cross filters on a visualization or Liveboard + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.0.sw + * @example + *```js + * liveboardEmbed.trigger(HostEvent.CrossFilterChanged, { + * vizId: '730496d6-6903-4601-937e-2c691821af3c'}) + *``` + */ + CrossFilterChanged = 'cross-filter-changed', + /** + * Emitted when a user right clicks on a visualization (chart or table) + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.0.sw + * @example + *```js + * LiveboardEmbed.on(EmbedEvent.VizPointRightClick, payload => { + * console.log('VizPointClick', payload) + * }) + *``` + */ + VizPointRightClick = 'vizPointRightClick', + /** + * Emitted when a user clicks **Insert to slide** on a visualization + * @hidden + */ + InsertIntoSlide = 'insertInToSlide', + /** + * Emitted when a user changes any filter on a Liveboard. + * Returns filter type and name, column name and ID, and runtime + * filter details. + * @example + * + *```js + * LiveboardEmbed.on(EmbedEvent.FilterChanged, (payload) => { + * console.log('payload', payload); + * }) + * + * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl, 9.5.0.sw + */ + FilterChanged = 'filterChanged', + /** + * Emitted when a user clicks the **Go** button to initiate + * a Natural Language Search query + * @version SDK : 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw + */ + SageEmbedQuery = 'sageEmbedQuery', + /** + * Emitted when a user selects a data source on the embedded + * Natural Language Search interface. + * + * @version SDK : 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw + */ + SageWorksheetUpdated = 'sageWorksheetUpdated', + /** + * Emitted when a user updates a connection on the **Data** page + * @version SDK : 1.27.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw + */ + UpdateConnection = 'updateConnection', + /** + * Emitted when a user updates a connection on the **Data** page + * @version SDK : 1.27.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw + */ + CreateConnection = 'createConnection', + /** + * Emitted when name, status (private or public) or filter values of a + * Personalised view is updated. + * @returns viewName: string + * @returns viewId: string + * @returns liveboardId: string + * @returns isPublic: boolean + * @version SDK : 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw + */ + UpdatePersonalisedView = 'updatePersonalisedView', + /** + * Emitted when a Personalised view is saved. + * @returns viewName: string + * @returns viewId: string + * @returns liveboardId: string + * @returns isPublic: boolean + * @version SDK : 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw + */ + SavePersonalisedView = 'savePersonalisedView', + /** + * Emitted when a Liveboard is reset. + * @returns viewName: string + * @returns viewId: string + * @returns liveboardId: string + * @returns isPublic: boolean + * @version SDK : 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw + */ + ResetLiveboard = 'resetLiveboard', + /** + * Emitted when a PersonalisedView is deleted. + * @returns views: string[] + * @returns liveboardId: string + * @version SDK : 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw + */ + DeletePersonalisedView = 'deletePersonalisedView', + /** + * Emitted when a user creates a new worksheet + * @version SDK : 1.27.0 | ThoughtSpot Cloud: 9.8.0.cl + */ + CreateWorksheet = 'createWorksheet', + /** + * Emitted when the *Ask Sage* is initialized. + * @returns viewName: string + * @returns viewId: string + * @returns liveboardId: string + * @returns isPublic: boolean + * @version SDK : 1.29.0 | ThoughtSpot Cloud: 9.12.0.cl + */ + AskSageInit = 'AskSageInit', + /** + * Emitted when a LB/viz is renamed + * @version SDK : 1.28.0 | ThoughtSpot: 9.10.5.cl + */ + Rename = 'rename', + /** + * + * This event can be emitted to intercept search execution initiated by + * the users and implement the logic to allow or restrict search execution. + * You can can also show custom error text if the search query must be + * restricted due to your application or business requirements. + + * Prerequisite: Set `isOnBeforeGetVizDataInterceptEnabled` to `true` + * for this embed event to get emitted. + * @param: payload + * @param: responder + * Contains elements that lets developers define whether ThoughtSpot + * should run the search, and if not, what error message + * should be shown to the user. + * + * execute: When execute returns `true`, the search will be run. + * When execute returns `false`, the search will not be executed. + * + * error: Developers can customize the error message text when `execute` + * returns `false` using the error parameter in responder. + * @version SDK : 1.29.0 | ThoughtSpot : 10.3.0.cl + * @example + *```js + * .on(EmbedEvent.OnBeforeGetVizDataIntercept, + * (payload, responder) => { + * responder({ + * data: { + * execute:false, + * error: { + * //Provide a custom error message to explain to your end user + * //why their search did not run + * errorText: "This search query cannot be run. + * Please contact your administrator for more details." + * } + * }}) + * }) + * ``` + * + *```js + * .on(EmbedEvent.OnBeforeGetVizDataIntercept, + * (payload, responder) => { + * const query = payload.data.data.answer.search_query + * responder({ + * data: { + * // returns true as long as the query does not include + * // both the 'sales' AND the 'county' column + * execute: !(query.includes("sales")&&query.includes("county")), + * error: { + * //Provide a custom error message to explain to your end user + * // why their search did not run, and which searches are accepted by your custom logic. + * errorText: "You can't use this query :" + query + ". + * The 'sales' measures can never be used at the 'county' level. + * Please try another measure, or remove 'county' from your search." + * } + * }}) + * }) + *``` + */ + OnBeforeGetVizDataIntercept = 'onBeforeGetVizDataIntercept', + /** + * Emitted when parameter changes in an Answer + * or Liveboard + * + * ```js + * liveboardEmbed.on(EmbedEvent.ParameterChanged, (payload) => { + * console.log('payload', payload); + * }) + *``` + * @version SDK : 1.29.0 | ThoughtSpot : 10.3.0.cl + */ + ParameterChanged = 'parameterChanged', + /** + * Emitted when the table viz renders. + * You can use this event as a hook to trigger + * other events on the rendered table viz data. + * @example + * ```js + * searchEmbed.on(EmbedEvent.TableVizRendered, (payload) => { + * console.log(payload); + * const columnDataLite = payload.data.data.columnDataLite; + * columnDataLite[0].dataValue[0]="new fob"; + * console.log('>>> new Data', columnDataLite); + * searchEmbed.trigger(HostEvent.TransformTableVizData, columnDataLite); + * }) + * ``` + * @version SDK: 1.35.12 | ThoughtSpot: 10.7.0.cl + */ + TableVizRendered = 'TableVizRendered', +} + +/** + * Event types that can be triggered by the host application + * to the embedded ThoughtSpot app. + * + * To trigger an event use the corresponding + * {@link LiveboardEmbed.trigger} or {@link AppEmbed.trigger} or {@link + * SearchEmbed.trigger} method. + * @example + * ```js + * import { HostEvent } from '@thoughtspot/visual-embed-sdk'; + * // Or + * // const { HostEvent } = window.tsembed; + * + * // create the liveboard embed. + * + * liveboardEmbed.trigger(HostEvent.UpdateRuntimeFilters, [ + * { columnName: 'state, operator: RuntimeFilterOp.EQ, values: ['california']} + * ]); + * ``` + * @example + * If using React components to embed, use the format shown in this example: + * + * ```js + * const selectVizs = () => { + * embedRef.current.trigger(HostEvent.SetVisibleVizs, [ + * "715e4613-c891-4884-be44-aa8d13701c06", + * "3f84d633-e325-44b2-be25-c6650e5a49cf" + * ]); + * }; + * ``` + * + * + * You can also attach an Embed event to a Host event to trigger + * a specific action as shown in this example: + * @example + * ```js + * const EmbeddedComponent = () => { + * const embedRef = useRef(null); // import { useRef } from react + * const onLiveboardRendered = () => { + * embedRef.current.trigger(HostEvent.SetVisibleVizs, ['viz1', 'viz2']); + * }; + * + * return ( + * + * ); + * } + * ``` + * @group Events + */ +// eslint-disable-next-line no-shadow +export enum HostEvent { + /** + * Triggers a search operation with the search tokens specified in + * the search query string. + * Supported in `AppEmbed` and `SearchEmbed` deployments. + * Includes the following properties: + * @param - `searchQuery` - query string with search tokens + * @param - `dataSources` - Data source GUID to Search on + * - Although an array, only a single source + * is supported. + * @param - `execute` - executes search and updates the existing query + * @example + * ```js + * searchembed.trigger(HostEvent.Search, { + searchQuery: "[sales] by [item type]", + dataSources: ["cd252e5c-b552-49a8-821d-3eadaa049cca"], + execute: true + }); + * ``` + */ + Search = 'search', + /** + * Triggers a drill on certain points of the specified column + * Includes the following properties: + * @param - points - an object containing selectedPoints/clickedPoints + * to drill to. For example, { selectedPoints: []} + * @param - columnGuid - Optional. GUID of the column to drill + * by. If not provided it will auto drill by the configured + * column. + * @param - autoDrillDown - Optional. If true, the drill down will be + * done automatically on the most popular column. + * @param - vizId [TS >= 9.8.0] - Optional. The GUID of the visualization to drill + * in case of a Liveboard. + * @example + * ```js + * searchEmbed.on(EmbedEvent.VizPointDoubleClick, (payload) => { + * console.log(payload); + * const clickedPoint = payload.data.clickedPoint; + * const selectedPoint = payload.data.selectedPoints; + * console.log('>>> called', clickedPoint); + * searchEmbed.trigger(HostEvent.DrillDown, { + * points: { + * clickedPoint, + * selectedPoints: selectedPoint + * }, + * autoDrillDown: true, + * }); + * }) + * ``` + * @example + * ```js + * // Works with TS 9.8.0 and above + * + * liveboardEmbed.on(EmbedEvent.VizPointDoubleClick, (payload) => { + * console.log(payload); + * const clickedPoint = payload.data.clickedPoint; + * const selectedPoint = payload.data.selectedPoints; + * console.log('>>> called', clickedPoint); + * liveboardEmbed.trigger(HostEvent.DrillDown, { + * points: { + * clickedPoint, + * selectedPoints: selectedPoint + * }, + * columnGuid: "", + * vizId: payload.data.vizId + * }); + * }) + * ``` + * @version SDK: 1.5.0 | ThoughtSpot: ts7.oct.cl, 7.2.1 + */ + DrillDown = 'triggerDrillDown', + /** + * Apply filters + * @hidden + */ + Filter = 'filter', + /** + * Reload the answer or visualization + * @hidden + */ + Reload = 'reload', + /** + * Get iframe URL for the current embed view on the playground. + * Developers can use this URL to embed a ThoughtSpot object + * in apps like Salesforce or Sharepoint. + * @example + * ```js + * const url = embed.trigger(HostEvent.GetIframeUrl); + * console.log("iFrameURL",url); + * ``` + * @version SDK: 1.35.0 | ThoughtSpot: 10.4.0.cl + */ + GetIframeUrl = 'GetIframeUrl', + /** + * Display specific visualizations on a Liveboard. + * @param - An array of GUIDs of the visualization to show. The visualization IDs not passed + * in this parameter will be hidden. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.SetVisibleVizs, [ + * '730496d6-6903-4601-937e-2c691821af3c', + * 'd547ec54-2a37-4516-a222-2b06719af726']) + * ``` + * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw + */ + SetVisibleVizs = 'SetPinboardVisibleVizs', + /** + * Set a Liveboard tab as an active tab. + * @param - tabId - string of id of Tab to show + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.SetActiveTab,{ + * tabId:'730496d6-6903-4601-937e-2c691821af3c' + * }) + * ``` + * @version SDK: 1.24.0 | ThoughtSpot: 9.5.0.cl, 9.5.1-sw + */ + SetActiveTab = 'SetActiveTab', + /** + * Updates the runtime filters applied on a Liveboard. The filter + * attributes passed with this event are appended to the existing runtime + * filters applied on a Liveboard. + * + * **Note**: `HostEvent.UpdateRuntimeFilters` is supported in `LiveboardEmbed` + * and `AppEmbed` only. In full application embedding, this event updates + * the runtime filters applied on the Liveboard and saved Answer objects. + * + * + * Pass an array of runtime filters with the following attributes: + * + * `columnName` - _String_. The name of the column to filter on. + * + * `operator` - Runtime filter operator to apply. For more information, + * see link:https://developers.thoughtspot.com/docs/?pageid=runtime-filters#rtOperator[Developer Documentation]. + * + * `values` - List of operands. Some operators such as EQ and LE allow a + * single value, whereas BW and IN accept multiple values. + * + * **Note**: Updating runtime filters resets the ThoughtSpot + * object to its original state and applies new filter conditions. + * Any user changes (like drilling into a visualization) + * will be cleared, restoring the original visualization + * with the updated filters. + * + * @param - {@link RuntimeFilter}[] an array of {@link RuntimeFilter} Types. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.UpdateRuntimeFilters, [ + * {columnName: "state",operator: RuntimeFilterOp.EQ,values: ["michigan"]}, + * {columnName: "item type",operator: RuntimeFilterOp.EQ,values: ["Jackets"]} + * ]) + * ``` + * @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw + * @important + */ + UpdateRuntimeFilters = 'UpdateRuntimeFilters', + /** + * Navigate to a specific page in the embedded ThoughtSpot application. + * This is the same as calling `appEmbed.navigateToPage(path, true)`. + * @param - `path` - the path to navigate to to go forward or back. The path value can + * be a number; for example, `1`, `-1`. + * @example + * ```js + * appEmbed.navigateToPage(-1) + * ``` + * @version SDK: 1.12.0 | ThoughtSpot 8.4.0.cl, 8.4.1.sw + */ + Navigate = 'Navigate', + /** + * Open the filter panel for a particular column. + * Works with Search and Liveboard embed. + * @param - { columnId: string, + * name: string, + * type: INT64/CHAR/DATE, + * dataType: ATTRIBUTE/MEASURE } + * @example + * ```js + * searchEmbed.trigger(HostEvent.OpenFilter, + * { columnId: '', name: 'column name', type: 'INT64', dataType: 'ATTRIBUTE'}) + * LiveboardEmbed.trigger(HostEvent.OpenFilter, + * { columnId: ''}) + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl + */ + OpenFilter = 'openFilter', + /** + * Add columns to the current search query. + * @param - { columnIds: string[] } + * @example + * ```js + * searchEmbed.trigger(HostEvent.AddColumns, { columnIds: ['',''] }) + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl + */ + AddColumns = 'addColumns', + /** + * Remove a column from the current search query. + * @param - { columnId: string } + * @example + * ```js + * searchEmbed.trigger(HostEvent.RemoveColumn, { columnId: '' }) + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl + */ + RemoveColumn = 'removeColumn', + /** + * Get the transient state of a Liveboard as encoded content. + * This includes unsaved and ad hoc changes such as + * Liveboard filters, runtime filters applied on visualizations on a + * Liveboard, and Liveboard layout, changes to visualizations such as + * sorting, toggling of legends, and data drill down. + * For more information, see + * link:https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#transient-lb-content[Liveboard data with unsaved changes]. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.getExportRequestForCurrentPinboard).then( + * data=>console.log(data)) + * ``` + * @version SDK: 1.13.0 | ThoughtSpot: 8.5.0.cl, 8.8.1.sw + */ + getExportRequestForCurrentPinboard = 'getExportRequestForCurrentPinboard', + /** + * Trigger the **Pin** action on an embedded object + * @param - Liveboard embed takes the `vizId` as a + * key. Can be left undefined when embedding Search, full app, or + * a visualization. + * @example + * ```js + * appEmbed.trigger(HostEvent.Pin) + * ``` + * ```js + * searchEmbed.trigger(HostEvent.Pin) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + Pin = 'pin', + /** + * Trigger the **Show Liveboard details** action + * on an embedded Liveboard. + * @example + *```js + * liveboardEmbed.trigger(HostEvent.LiveboardInfo) + *``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + LiveboardInfo = 'pinboardInfo', + /** + * Trigger the **Schedule** action on an embedded Liveboard. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.Schedule) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + Schedule = 'subscription', + /** + * Trigger the **Manage schedule** action on an embedded Liveboard + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.ScheduleList) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + SchedulesList = 'schedule-list', + /** + * Trigger the **Export TML** action on an embedded Liveboard or + * Answer. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.ExportTML) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + ExportTML = 'exportTSL', + /** + * Trigger the **Edit TML** action on an embedded Liveboard or + * saved Answers in the full application embedding. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.EditTML) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + EditTML = 'editTSL', + /** + * Trigger the **Update TML** action on an embedded Liveboard. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.UpdateTML) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + UpdateTML = 'updateTSL', + /** + * Trigger the **Download PDF** action on an embedded Liveboard, + * visualization or Answer. + * + * **NOTE**: The **Download** > **PDF** action is available on + * visualizations and Answers if the data is in tabular format. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.DownloadAsPdf) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + DownloadAsPdf = 'downloadAsPdf', + /** + * Trigger the **Make a copy** action on a Liveboard, + * visualization, or Answer page. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.MakeACopy) + * ``` + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.MakeACopy, { + * vizId: '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * @example + * ```js + * vizEmbed.trigger(HostEvent.MakeACopy) + * ``` + * @example + * ```js + * searchEmbed.trigger(HostEvent.MakeACopy) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + MakeACopy = 'makeACopy', + /** + * Trigger the **Delete** action for a Liveboard. + * @example + * ```js + * appEmbed.trigger(HostEvent.Remove) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + Remove = 'delete', + /** + * Trigger the **Explore** action on a visualization. + * @param - an object with `vizId` as a key + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.Explore, {vizId: '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + Explore = 'explore', + /** + * Trigger the **Create alert** action on a KPI chart + * in a Liveboard or saved Answer. + * @param - an object with `vizId` as a key + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.CreateMonitor, { + * vizId: '730496d6-6903-4601-937e-2c691821af3c' + * }) + * ``` + * @example + * ```js + * searchEmbed.trigger(HostEvent.CreateMonitor) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + CreateMonitor = 'createMonitor', + /** + * Trigger the **Manage alerts** action on a KPI chart + * in a visualization or saved Answer. + * @param - an object with `vizId` as a key + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.ManageMonitor, { + * vizId: '730496d6-6903-4601-937e-2c691821af3c' + * }) + * ``` + * @example + * ```js + * searchEmbed.trigger(HostEvent.ManageMonitor) + * ``` + * @example + * ```js + * vizEmbed.trigger(HostEvent.ManageMonitor) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + ManageMonitor = 'manageMonitor', + /** + * Trigger the **Edit** action on a Liveboard or a visualization + * on a Liveboard. + * + * This event is not supported in visualization embed and search embed. + * @param - object - To trigger the action for a specific visualization + * in Liveboard embed, pass in `vizId` as a key. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.Edit) + * ``` + * ```js + * liveboardEmbed.trigger(HostEvent.Edit, {vizId: + * '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + Edit = 'edit', + /** + * Trigger the **Copy link** action on a Liveboard or visualization + * @param - object - to trigger the action for a + * specific visualization in Liveboard embed, pass in `vizId` as a key + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.CopyLink) + * ``` + * ```js + * liveboardEmbed.trigger(HostEvent.CopyLink, {vizId: '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * ```js + * vizEmbed.trigger((HostEvent.CopyLink) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + CopyLink = 'embedDocument', + /** + * Trigger the **Present** action on a Liveboard or visualization + * @param - object - to trigger the action for a specific visualization + * in Liveboard embed, pass in `vizId` as a key + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.Present) + * ``` + * ```js + * liveboardEmbed.trigger(HostEvent.Present, {vizId: '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * ```js + * vizEmbed.trigger((HostEvent.Present) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw + */ + Present = 'present', + /** + * Get TML for the current search. + * @example + * ```js + * searchEmbed.trigger(HostEvent.GetTML).then((tml) => { + * console.log( + * tml.answer.search_query // TML representation of the search query + * ); + * }) + * ``` + * @version SDK: 1.18.0 | ThoughtSpot: 8.10.0.cl, 9.0.1.sw + * @important + */ + GetTML = 'getTML', + /** + * Trigger the **Show underlying data** action on a + * chart or table. + * + * @param - an object with vizId as a key + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.ShowUnderlyingData, {vizId: + * '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * ```js + * vizEmbed.trigger(HostEvent.ShowUnderlyingData) + * ``` + * ```js + * searchEmbed.trigger(HostEvent.ShowUnderlyingData) + * ``` + * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw + */ + ShowUnderlyingData = 'showUnderlyingData', + /** + * Trigger the **Delete** action for a visualization + * in an embedded Liveboard, or a chart or table + * generated from Search. + * @param - Liveboard embed takes an object with `vizId` as a key. + * Can be left empty if embedding Search or visualization. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.Delete, {vizId: + * '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * ```js + * searchEmbed.trigger(HostEvent.Delete) + * ``` + * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw + */ + Delete = 'onDeleteAnswer', + /** + * Trigger the **SpotIQ analyze** action on a + * chart or table. + * @param - Liveboard embed takes `vizId` as a + * key. Can be left undefined when embedding Search or + * visualization. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.SpotIQAnalyze, {vizId: + * '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * ```js + * vizEmbed.trigger(HostEvent.SpotIQAnalyze) + * ``` + * ```js + * searchEmbed.trigger(HostEvent.SpotIQAnalyze) + * ``` + * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw + */ + SpotIQAnalyze = 'spotIQAnalyze', + /** + * Trigger the **Download** action on charts in + * the embedded view. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.Download, {vizId: + * '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * ```js + * embed.trigger(HostEvent.Download) + * ``` + * @deprecated from SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl ,9.4.1.sw + * Use {@link DownloadAsPng} + * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw + */ + Download = 'downloadAsPng', + /** + * Trigger the **Download** > **PNG** action on + * charts in the embedded view. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.DownloadAsPng, + * {vizId:'730496d6-6903-4601-937e-2c691821af3c'}) + * + * vizEmbed.trigger(HostEvent.DownloadAsPng) + * + * searchEmbed.trigger(HostEvent.DownloadAsPng) + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.4.1.sw + */ + DownloadAsPng = 'downloadAsPng', + /** + * Trigger the **Download** > **CSV** action on tables in + * the embedded view. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.DownloadAsCsv, {vizId: + * '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * ```js + * vizEmbed.trigger(HostEvent.DownloadAsCsv) + * ``` + * ```js + * searchEmbed.trigger(HostEvent.DownloadAsCsv) + * ``` + * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw + */ + DownloadAsCsv = 'downloadAsCSV', + /** + * Trigger the **Download** > **XLSX** action on tables + * in the embedded view. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.DownloadAsXlsx, {vizId: + * '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * ```js + * vizEmbed.trigger(HostEvent.DownloadAsXlsx) + * ``` + * ```js + * searchEmbed.trigger(HostEvent.DownloadAsXlsx) + * ``` + * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw + */ + DownloadAsXlsx = 'downloadAsXLSX', + /** + * Trigger the **Share** action on an embedded + * Liveboard or Answer. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.Share) + * ``` + * ```js + * searchEmbed.trigger(HostEvent.Share) + * ``` + * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw + */ + Share = 'share', + /** + * Trigger the **Save** action on a Liveboard or Answer. + * Saves the changes. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.Save) + * ``` + * ```js + * searchEmbed.trigger(HostEvent.Save) + * ``` + * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw + */ + Save = 'save', + /** + * Trigger the **Sync to Sheets** action on an embedded visualization or Answer + * Sends data from an Answer or Liveboard visualization to a Google sheet. + * @param - an object with `vizId` as a key + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.SyncToSheets, {vizId: + * '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * ```js + * vizEmbed.trigger(HostEvent.SyncToSheets) + * ``` + * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw + */ + SyncToSheets = 'sync-to-sheets', + /** + * Trigger the **Sync to Other Apps** action on an embedded visualization or Answer + * Sends data from an Answer or Liveboard visualization to third-party apps such + * as Slack, Salesforce, Microsoft Teams, ServiceNow and so on. + * @param - an object with vizId as a key + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.SyncToOtherApps, {vizId: + * '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * ```js + * vizEmbed.trigger(HostEvent.SyncToOtherApps) + * ``` + * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw + */ + SyncToOtherApps = 'sync-to-other-apps', + /** + * Trigger the **Manage pipelines** action on an embedded + * visualization or Answer. + * Allows users to manage ThoughtSpot Sync pipelines. + * @param - an object with `vizId` as a key + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.ManagePipelines, {vizId: + * '730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * ```js + * vizEmbed.trigger(HostEvent.ManagePipelines) + * ``` + * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw + */ + ManagePipelines = 'manage-pipeline', + /** + * Reset search operation on the Search or Answer page. + * @example + * ```js + * searchEmbed.trigger(HostEvent.ResetSearch) + * ``` + * ```js + * appEmbed.trigger(HostEvent.ResetSearch) + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.0.1.sw + */ + ResetSearch = 'resetSearch', + /** + * Get details of filters applied on the Liveboard. + * Returns arrays containing Liveboard filter and runtime filter elements. + * @example + * ```js + * const data = await liveboardEmbed.trigger(HostEvent.GetFilters); + * console.log('data', data); + * ``` + * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl + */ + GetFilters = 'getFilters', + /** + * Update one or several filters applied on a Liveboard. + * @param - `filter`: a single filter object containing column name, + * filter operator, and values. + * @param - `filters`: multiple filter objects with column name, filter operator, + * and values for each. + * + * Each filter object must include the following attributes: + * + * `column` - Name of the column to filter on. + * + * `oper` - Filter operator, for example, EQ, IN, CONTAINS. + * For information about the supported filter operators, + * see link:https://developers.thoughtspot.com/docs/runtime-filters#rtOperator[Developer Documentation]. + * + * `values` - An array of one or several values. The value definition on the + * data type you choose to filter on. For a complete list of supported data types, + * see + * link:https://developers.thoughtspot.com/docs/runtime-filters#_supported_data_types[Supported + * data types]. + * + * `type` - To update filters for date time, specify the date format type. + * For more information and examples, see link:https://developers.thoughtspot.com/docs/embed-liveboard#_date_filters[Date filters]. + * @example + * ```js + * + * liveboardEmbed.trigger(HostEvent.UpdateFilters, { + * filter: { + * column: "item type", + * oper: "IN", + * values: ["bags","shirts"] + * } + * }); + * ``` + * @example + * ```js + * + * liveboardEmbed.trigger(HostEvent.UpdateFilters, { + * filter: { + * column: "date", + * oper: "EQ", + * values: ["JULY","2023"], + * type: "MONTH_YEAR" + * } + * }); + * ``` + * @example + * + * ```js + * liveboardEmbed.trigger(HostEvent.UpdateFilters, { + * filters: [{ + * column: "Item Type", + * oper: 'IN', + * values: ["bags","shirts"] + * }, + * { + * column: "Region", + * oper: 'IN', + * values: ["West","Midwest"] + * }, + * { + * column: "Date", + * oper: 'EQ', + * values: ["2023-07-31"], + * types: "EXACT_DATE" + * }] + * }); + * ``` + * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl + */ + UpdateFilters = 'updateFilters', + /** + * Get tab details for the current Liveboard. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.GetTabs).then((tabDetails) => { + * console.log( + * tabDetails // TabDetails of current LB + * ); + * }) + * ``` + * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl + */ + GetTabs = 'getTabs', + /** + * Set the visible tabs on a Liveboard. + * @param - an array of ids of tabs to show, the IDs not passed + * will be hidden. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.SetVisibleTabs, [ + * '430496d6-6903-4601-937e-2c691821af3c', + * 'f547ec54-2a37-4516-a222-2b06719af726']) + * ``` + * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw + */ + SetVisibleTabs = 'SetPinboardVisibleTabs', + /** + * Set the hidden tabs on a Liveboard. + * @param - an array of the IDs of the tabs to hide. + * The IDs not passed will be shown. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.SetHiddenTabs, [ + * '630496d6-6903-4601-937e-2c691821af3c', + * 'i547ec54-2a37-4516-a222-2b06719af726']) + * ``` + * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw + */ + SetHiddenTabs = 'SetPinboardHiddenTabs', + /** + * Updates the search query string for Natural Language Search operations. + * @param - `queryString`: Text string in Natural Language format + * @param - `executeSearch`: Boolean to execute search and update search query + * @example + * ```js + * sageEmbed.trigger(HostEvent.UpdateSageQuery, { + * queryString: 'revenue per year', + * executeSearch: true, + * }) + * ``` + * @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw + */ + UpdateSageQuery = 'updateSageQuery', + /** + * Get the answer session for a Search or + * Liveboard visualization. + * @example + * ```js + * const {session} = await embed.trigger( + * HostEvent.GetAnswerSession, { + * vizId: '123', // For Liveboard Visualization. + * }) + * ``` + * @example + * ```js + * const {session} = await embed.trigger( HostEvent.GetAnswerSession ) + * ``` + * @version SDK: 1.26.0 | ThoughtSpot: 9.10.0.cl, 10.1.0.sw + */ + GetAnswerSession = 'getAnswerSession', + /** + * Trigger the *Ask Sage* action for visualizations + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.AskSage, + * {vizId:'730496d6-6903-4601-937e-2c691821af3c'}) + * ``` + * @version SDK: 1.29.0 | ThoughtSpot Cloud: 9.12.0.cl + */ + AskSage = 'AskSage', + /** + * Trigger cross filter update action on a Liveboard. + * + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.UpdateCrossFilter, { + * vizId: 'b535c760-8bbe-4e6f-bb26-af56b4129a1e', + * conditions: [ + * { columnName: 'Category', values: ['mfgr#12','mfgr#14'] }, + * { columnName: 'color', values: ['mint','hot'] }, + * ], + * }); + * ``` + * @version SDK: 1.29.0 | ThoughtSpot Cloud: 10.0.0.cl, 10.1.0.sw + */ + UpdateCrossFilter = 'UpdateCrossFilter', + /** + * Trigger reset action for a personalized Liveboard view. + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.ResetLiveboardPersonalisedView); + * ``` + * @version SDK: 1.29.0 | ThoughtSpot Cloud: 10.1.0.cl, 10.1.0.sw + */ + ResetLiveboardPersonalisedView = 'ResetLiveboardPersonalisedView', + /** + * Triggers an action to update Parameter values on embedded + * Answers and Liveboard. + * + * @example + * ```js + * liveboardEmbed.trigger(HostEvent.UpdateParameters, [{ + * name: "Color", + * value: "almond" + * }]) + * + * @version SDK: 1.29.0 | ThoughtSpot: 10.1.0.cl, 10.1.0.sw + */ + UpdateParameters = 'UpdateParameters', + /** + * Triggers GetParameters to fetch the runtime Parameters. + * ```js + * liveboardEmbed.trigger(HostEvent.GetParameters).then((parameter) => { + * console.log('parameters', parameter); + * }); + *``` + * @version SDK: 1.29.0 | ThoughtSpot: 10.1.0.cl, 10.1.0.sw + */ + GetParameters = 'GetParameters', + /** + * Triggers an event to update a personalized view of a Liveboard. + * ```js + * liveboardEmbed.trigger(HostEvent.UpdatePersonalisedView, {viewId: '1234'}) + * ``` + * @version SDK: 1.36.0 | ThoughtSpot: 10.6.0.cl + */ + UpdatePersonalisedView = 'UpdatePersonalisedView', + /** + * Triggers the action to get the current view of the Liveboard. + * @version SDK: 1.36.0 | ThoughtSpot: 10.6.0.cl + */ + SaveAnswer = 'saveAnswer', + /** + * EmbedApi + * @hidden + */ + UIPassthrough = 'UiPassthrough', + /** + * Triggers the table viz rerender with the updated data. + * Includes the following properties: + * @param - columnDataLite - an array of object containing data + * transformed from data picked from TableVizRendered event. + * For example, { columnDataLite: []} + * @example + * ```js + * searchEmbed.on(EmbedEvent.TableVizRendered, (payload) => { + * console.log(payload); + * const columnDataLite = payload.data.data.columnDataLite; + * columnDataLite[0].dataValue[0]="new fob"; + * console.log('>>> new Data', columnDataLite); + * searchEmbed.trigger(HostEvent.TransformTableVizData, columnDataLite); + * }) + * ``` + * @version SDK: 1.35.12 | ThoughtSpot: 10.7.0.cl + */ + TransformTableVizData = 'TransformTableVizData', +} + +/** + * The different visual modes that the data sources panel within + * search could appear in, such as hidden, collapsed, or expanded. + */ +// eslint-disable-next-line no-shadow +export enum DataSourceVisualMode { + /** + * The data source panel is hidden. + */ + Hidden = 'hide', + /** + * The data source panel is collapsed, but the user can manually expand it. + */ + Collapsed = 'collapse', + /** + * The data source panel is expanded, but the user can manually collapse it. + */ + Expanded = 'expand', +} + +/** + * The query params passed down to the embedded ThoughtSpot app + * containing configuration and/or visual information. + */ +// eslint-disable-next-line no-shadow +export enum Param { + EmbedApp = 'embedApp', + DataSources = 'dataSources', + DataSourceMode = 'dataSourceMode', + DisableActions = 'disableAction', + DisableActionReason = 'disableHint', + ForceTable = 'forceTable', + preventLiveboardFilterRemoval = 'preventPinboardFilterRemoval', // update-TSCB + SearchQuery = 'searchQuery', + HideActions = 'hideAction', + HideObjects = 'hideObjects', + HostAppUrl = 'hostAppUrl', + EnableVizTransformations = 'enableVizTransform', + EnableSearchAssist = 'enableSearchAssist', + HideResult = 'hideResult', + UseLastSelectedDataSource = 'useLastSelectedSources', + Tag = 'tag', + searchTokenString = 'searchTokenString', + executeSearch = 'executeSearch', + fullHeight = 'isFullHeightPinboard', + livedBoardEmbed = 'isLiveboardEmbed', + searchEmbed = 'isSearchEmbed', + vizEmbed = 'isVizEmbed', + Version = 'sdkVersion', + ViewPortHeight = 'viewPortHeight', + ViewPortWidth = 'viewPortWidth', + VisibleActions = 'visibleAction', + DisableLoginRedirect = 'disableLoginRedirect', + visibleVizs = 'pinboardVisibleVizs', + LiveboardV2Enabled = 'isPinboardV2Enabled', + DataPanelV2Enabled = 'enableDataPanelV2', + ShowAlerts = 'showAlerts', + Locale = 'locale', + CustomStyle = 'customStyle', + ForceSAMLAutoRedirect = 'forceSAMLAutoRedirect', + // eslint-disable-next-line @typescript-eslint/no-shadow + AuthType = 'authType', + IconSpriteUrl = 'iconSprite', + cookieless = 'cookieless', + // Deprecated: `isContextMenuEnabledOnLeftClick` + // Introduced: `contextMenuEnabledOnWhichClick` with values: 'left', + // 'right', or 'both'. This update only affects ThoughtSpot URL parameters + // and does not impact existing workflows or use cases. Added support for + // 'both' clicks in `contextMenuTrigger` configuration. + ContextMenuTrigger = 'contextMenuEnabledOnWhichClick', + LinkOverride = 'linkOverride', + blockNonEmbedFullAppAccess = 'blockNonEmbedFullAppAccess', + ShowInsertToSlide = 'insertInToSlide', + PrimaryNavHidden = 'primaryNavHidden', + HideProfleAndHelp = 'profileAndHelpInNavBarHidden', + HideApplicationSwitcher = 'applicationSwitcherHidden', + HideOrgSwitcher = 'orgSwitcherHidden', + IsSageEmbed = 'isSageEmbed', + HideWorksheetSelector = 'hideWorksheetSelector', + DisableWorksheetChange = 'disableWorksheetChange', + HideSourceSelection = 'hideSourceSelection', + DisableSourceSelection = 'disableSourceSelection', + HideEurekaResults = 'hideEurekaResults', + HideEurekaSuggestions = 'hideEurekaSuggestions', + HideAutocompleteSuggestions = 'hideAutocompleteSuggestions', + HideLiveboardHeader = 'hideLiveboardHeader', + ShowLiveboardDescription = 'showLiveboardDescription', + ShowLiveboardTitle = 'showLiveboardTitle', + HiddenTabs = 'hideTabs', + VisibleTabs = 'visibleTabs', + HideTabPanel = 'hideTabPanel', + HideSampleQuestions = 'hideSampleQuestions', + WorksheetId = 'worksheet', + Query = 'query', + HideHomepageLeftNav = 'hideHomepageLeftNav', + ModularHomeExperienceEnabled = 'modularHomeExperience', + PendoTrackingKey = 'additionalPendoKey', + LiveboardHeaderSticky = 'isLiveboardHeaderSticky', + IsProductTour = 'isProductTour', + HideSearchBarTitle = 'hideSearchBarTitle', + HideSageAnswerHeader = 'hideSageAnswerHeader', + HideSearchBar = 'hideSearchBar', + ClientLogLevel = 'clientLogLevel', + OverrideNativeConsole = 'overrideConsoleLogs', + enableAskSage = 'enableAskSage', + CollapseSearchBarInitially = 'collapseSearchBarInitially', + DataPanelCustomGroupsAccordionInitialState = 'dataPanelCustomGroupsAccordionInitialState', + EnableCustomColumnGroups = 'enableCustomColumnGroups', + DateFormatLocale = 'dateFormatLocale', + NumberFormatLocale = 'numberFormatLocale', + CurrencyFormat = 'currencyFormat', + Enable2ColumnLayout = 'enable2ColumnLayout', + IsFullAppEmbed = 'isFullAppEmbed', + IsOnBeforeGetVizDataInterceptEnabled = 'isOnBeforeGetVizDataInterceptEnabled', + FocusSearchBarOnRender = 'focusSearchBarOnRender', + DisableRedirectionLinksInNewTab = 'disableRedirectionLinksInNewTab', + HomePageSearchBarMode = 'homePageSearchBarMode', + ShowLiveboardVerifiedBadge = 'showLiveboardVerifiedBadge', + ShowLiveboardReverifyBanner = 'showLiveboardReverifyBanner', + LiveboardHeaderV2 = 'isLiveboardHeaderV2Enabled', + HideIrrelevantFiltersInTab = 'hideIrrelevantFiltersAtTabLevel', + SpotterEnabled = 'isSpotterExperienceEnabled', + IsUnifiedSearchExperienceEnabled = 'isUnifiedSearchExperienceEnabled', + OverrideOrgId = 'orgId', + OauthPollingInterval = 'oAuthPollingInterval', + IsForceRedirect = 'isForceRedirect', + DataSourceId = 'dataSourceId', +} + +/** + * ThoughtSpot application pages include actions and menu commands + * for various user-initiated operations. These actions are represented + * as enumeration members in the SDK. To show, hide, or disable + * specific actions in the embedded view, define the Action + * enumeration members in the `disabledActions`, `visibleActions`, + * or `hiddenActions` array. + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * visibleActions: [Action.Save, Action.Edit, Action.Present, ActionAction.Explore], + * disabledActions: [Action.Download], + * //hiddenActions: [], // Set either this or visibleActions + * }) + * ``` + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * //visibleActions: [], + * disabledActions: [Action.Download], + * hiddenActions: [Action.Edit, ActionAction.Explore], + * }) + * ``` + */ +// eslint-disable-next-line no-shadow +export enum Action { + /** + * The **Save** action on an Answer or Liveboard. + * Allows users to save the changes. + * @example + * ```js + * disabledActions: [Action.Save] + * ``` + */ + Save = 'save', + /** + * @hidden + */ + Update = 'update', + /** + * @hidden + */ + SaveUntitled = 'saveUntitled', + /** + * The **Save as View** action on the Answer + * page. Saves an Answer as a View object in the full + * application embedding mode. + * @example + * ```js + * disabledActions: [Action.SaveAsView] + * ``` + */ + SaveAsView = 'saveAsView', + /** + * The **Make a copy** action on a Liveboard or Answer + * page. Creates a copy of the Liveboard. + * In LiveboardEmbed, the **Make a copy** action is not available for + * visualizations in the embedded Liveboard view. + * In AppEmbed, the **Make a copy** action is available on both + * Liveboards and visualizations. + * @example + * ```js + * disabledActions: [Action.MakeACopy] + * ``` + */ + MakeACopy = 'makeACopy', + /** + * The **Copy and Edit** action on a Liveboard. + * This action is now replaced with `Action.MakeACopy`. + * @example + * ```js + * disabledActions: [Action.EditACopy] + * ``` + */ + EditACopy = 'editACopy', + /** + * The **Copy link** menu action on a Liveboard visualization. + * Copies the visualization URL + * @example + * ```js + * disabledActions: [Action.CopyLink] + * ``` + */ + CopyLink = 'embedDocument', + /** + * @hidden + */ + ResetLayout = 'resetLayout', + /** + * The **Schedule** menu action on a Liveboard. + * Allows scheduling a Liveboard job, for example, + * sending periodic notifications. + * @example + * ```js + * disabledActions: [Action.Schedule] + * ``` + */ + Schedule = 'subscription', + /** + * The **Manage schedules** menu action on a Liveboard. + * Allows users to manage scheduled Liveboard jobs. + * @example + * ```js + * disabledActions: [Action.SchedulesList] + * ``` + */ + SchedulesList = 'schedule-list', + /** + * The **Share** action on a Liveboard, Answer, or Worksheet. + * Allows users to share an object with other users and groups. + * @example + * ```js + * disabledActions: [Action.Share] + * ``` + */ + Share = 'share', + /** + * The **Add filter** action on a Liveboard page. + * Allows adding filters to visualizations on a Liveboard. + * @example + * ```js + * disabledActions: [Action.AddFilter] + * ``` + */ + AddFilter = 'addFilter', + /** + * The **Add Data Panel Objects** action on the data panel v2. + * Allows to show action menu to add different objects (such as + * formulas, Parameters) in data panel new experience. + * @example + * ```js + * disabledActions: [Action.AddDataPanelObjects] + * ``` + * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl, 10.1.0.sw + */ + AddDataPanelObjects = 'addDataPanelObjects', + /** + * Filter configuration options on a Liveboard page. + * Allows configuring filters on a + * Liveboard. + * @example + * ```js + * disabledActions: [Action.ConfigureFilter] + * ``` + */ + ConfigureFilter = 'configureFilter', + /** + * The **Collapse data sources** icon on the Search page. + * Collapses the panel showing data sources. + * + * @example + * ```js + * disabledActions: [Action.CollapseDataPanel] + * ``` + * @version: SDK: 1.1.0 | ThoughtSpot Cloud: ts7.may.cl, 8.4.1.sw + */ + CollapseDataSources = 'collapseDataSources', + /** + * The **Collapse data panel** icon on the Search page. + * Collapses the data panel view. + * + * @version: SDK: 1.34.0 | ThoughtSpot Cloud: 10.3.0.cl, 10.7.0.sw + * + * @example + * ```js + * disabledActions: [Action.CollapseDataPanel] + * ``` + */ + CollapseDataPanel = 'collapseDataPanel', + /** + * The **Choose sources** button on Search page. + * Allows selecting data sources for search queries. + * @example + * ```js + * disabledActions: [Action.ChooseDataSources] + * ``` + */ + ChooseDataSources = 'chooseDataSources', + /** + * The **Create formula** action on a Search or Answer page. + * Allows adding formulas to an Answer. + * @example + * ```js + * disabledActions: [Action.AddFormula] + * ``` + */ + AddFormula = 'addFormula', + /** + * The **Add parameter** action on a Liveboard or Answer. + * Allows adding Parameters to a Liveboard or Answer. + * @example + * ```js + * disabledActions: [Action.AddParameter] + * ``` + */ + AddParameter = 'addParameter', + /** + * The **Add Column Set** action on a Answer. + * Allows adding column sets to a Answer. + * @example + * ```js + * disabledActions: [Action.AddColumnSet] + * ``` + * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl, 10.1.0.sw + */ + AddColumnSet = 'addSimpleCohort', + /** + * The **Add Query Set** action on a Answer. + * Allows adding query sets to a Answer. + * @example + * ```js + * disabledActions: [Action.AddQuerySet] + * ``` + * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl, 10.1.0.sw + */ + AddQuerySet = 'addAdvancedCohort', + /** + * @hidden + */ + SearchOnTop = 'searchOnTop', + /** + * The **SpotIQ analyze** menu action on a visualization or + * Answer page. + * @example + * ```js + * disabledActions: [Action.SpotIQAnalyze] + * ``` + */ + SpotIQAnalyze = 'spotIQAnalyze', + /** + * @hidden + */ + ExplainInsight = 'explainInsight', + /** + * @hidden + */ + SpotIQFollow = 'spotIQFollow', + ShareViz = 'shareViz', + /** + * @hidden + */ + ReplaySearch = 'replaySearch', + /** + * The **Show underlying data** menu action on a visualization or + * Answer page. + * Displays detailed information and raw data + * for a given visualization. + * @example + * ```js + * disabledActions: [Action.ShowUnderlyingData] + * ``` + */ + ShowUnderlyingData = 'showUnderlyingData', + /** + * The **Download** menu action on Liveboard visualizations + * and Answers. + * Allows downloading a visualization or Answer. + * @example + * ```js + * disabledActions: [Action.DownloadAsPng] + * ``` + */ + Download = 'download', + /** + * The **Download** > **PNG** menu action for charts on a Liveboard + * or Answer page. + * Downloads a visualization or Answer as a PNG file. + * @example + * ```js + * disabledActions: [Action.DownloadAsPng] + * ``` + */ + DownloadAsPng = 'downloadAsPng', + /** + * + *The **Download PDF** action that downloads a Liveboard, + *visualization, or Answer as a PDF file. + * + * + ***NOTE**: The **Download** > **PDF** action is available on + *visualizations and Answers if the data is in tabular format. + * @example + * ```js + * disabledActions: [Action.DownloadAsPdf] + * ``` + */ + DownloadAsPdf = 'downloadAsPdf', + /** + * The **Download** > **CSV** menu action for tables on a Liveboard + * or Answer page. + * Downloads a visualization or Answer in the XLSX format. + * @example + * ```js + * disabledActions: [Action.DownloadAsCsv] + * ``` + */ + DownloadAsCsv = 'downloadAsCSV', + /** + * The **Download** > **XLSX** menu action for tables on a Liveboard + * or Answer page. + * Downloads a visualization or Answer in the XLSX format. + * @example + * ```js + * disabledActions: [Action.DownloadAsXlsx] + * ``` + */ + DownloadAsXlsx = 'downloadAsXLSX', + /** + * @hidden + */ + DownloadTrace = 'downloadTrace', + /** + * The **Export TML** menu action on Liveboard, Answers + * Worksheets and Data Connections page. + * Exports an object as a TML file. + * @example + * ```js + * disabledActions: [Action.ExportTML] + * ``` + */ + ExportTML = 'exportTSL', + /** + * The **Import TML** menu action for Liveboards and Answers. + * Imports TML representation of ThoughtSpot objects. + * @example + * ```js + * disabledActions: [Action.ImportTML] + * ``` + */ + ImportTML = 'importTSL', + /** + * The **Update TML** menu action for Liveboards and Answers. + * Update TML representation of ThoughtSpot objects. + * @example + * ```js + * disabledActions: [Action.UpdateTML] + * ``` + */ + UpdateTML = 'updateTSL', + /** + * The **Edit TML** menu action for Liveboards and Answers. + * Opens the TML editor. + * @example + * ```js + * disabledActions: [Action.EditTML] + * ``` + */ + EditTML = 'editTSL', + /** + * The **Present** menu action for Liveboards and Answers. + * Allows presenting a Liveboard or visualization in + * slideshow mode. + * @example + * ```js + * disabledActions: [Action.Present] + * ``` + */ + Present = 'present', + /** + * The tile resize options in the visualization menu. + * Allows switching between different preset layouts. + * @example + * ```js + * disabledActions: [Action.ToggleSize] + * ``` + */ + ToggleSize = 'toggleSize', + /** + * The *Edit* action on the Liveboard page and in the + * visualization menu. + * Opens a Liveboard or visualization in edit mode. + * @example + * ```js + * disabledActions: [Action.Edit] + * ``` + */ + Edit = 'edit', + /** + * The text edit option for Liveboard and visualization titles. + * @example + * ```js + * disabledActions: [Action.EditTitle] + * ``` + */ + EditTitle = 'editTitle', + /** + * The **Delete** menu action on Liveboards and visualizations. + * Deletes a Liveboard or a visualization from a Liveboard. + * @example + * ```js + * disabledActions: [Action.Remove] + * ``` + */ + Remove = 'delete', + /** + * @hidden + */ + Ungroup = 'ungroup', + /** + * @hidden + */ + Describe = 'describe', + /** + * @hidden + */ + Relate = 'relate', + /** + * @hidden + */ + CustomizeHeadlines = 'customizeHeadlines', + /** + * @hidden + */ + PinboardInfo = 'pinboardInfo', + /** + * The **Show Liveboard details** menu action on a Liveboard. + * Displays details such as the name, description, and + * author of the Liveboard, and timestamp of Liveboard creation + * and update. + * @example + * ```js + * disabledActions: [Action.LiveboardInfo] + * ``` + */ + LiveboardInfo = 'pinboardInfo', + /** + * @hidden + */ + SendAnswerFeedback = 'sendFeedback', + /** + * @hidden + */ + DownloadEmbraceQueries = 'downloadEmbraceQueries', + /** + * The **Pin** menu action on an Answer or + * Search results page. + * @example + * ```js + * disabledActions: [Action.Pin] + * ``` + */ + Pin = 'pin', + /** + * @hidden + */ + AnalysisInfo = 'analysisInfo', + /** + * The **Schedule** menu action on a Liveboard. + * Allows scheduling a Liveboard job. + * @example + * ```js + * disabledActions: [Action.Subscription] + * ``` + */ + Subscription = 'subscription', + /** + * The **Explore** action on Liveboard visualizations + * @example + * ```js + * disabledActions: [Action.Explore] + * ``` + */ + Explore = 'explore', + /** + * The action to include data points on a drilled-down Answer + * or visualization + * @example + * ```js + * disabledActions: [Action.DrillInclude] + * ``` + */ + + DrillInclude = 'context-menu-item-include', + /** + * The action to exclude data points on a drilled-down Answer + * or visualization + * @example + * ```js + * disabledActions: [Action.DrillInclude] + * ``` + */ + DrillExclude = 'context-menu-item-exclude', + /** + * The **Copy to clipboard** menu action on tables in an Answer + * or Liveboard. + * Copies the selected data point. + * @example + * ```js + * disabledActions: [Action.CopyToClipboard] + * ``` + */ + CopyToClipboard = 'context-menu-item-copy-to-clipboard', + CopyAndEdit = 'context-menu-item-copy-and-edit', + /** + * @hidden + */ + DrillEdit = 'context-menu-item-edit', + EditMeasure = 'context-menu-item-edit-measure', + Separator = 'context-menu-item-separator', + /** + * The **Drill down** menu action on Answers and Liveboard + * visualizations. + * Allows drilling down to a specific data point on a chart or table. + * @example + * ```js + * disabledActions: [Action.DrillDown] + * ``` + */ + DrillDown = 'DRILL', + /** + * The request access action on Liveboards. + * Allows users with view permissions to request edit access to a Liveboard. + * @example + * ```js + * disabledActions: [Action.RequestAccess] + * ``` + */ + RequestAccess = 'requestAccess', + /** + * The **Query visualizer** and **Query SQL** buttons in + * Query details panel of the Answer page. + * + * **Query visualizer** - Displays the tables + * and filters used in a search query. + * **Query SQL** - Displays the SQL statements used + * in a search query to fetch data. + * @example + * ```js + * disabledActions: [Action.QueryDetailsButtons] + * ``` + */ + QueryDetailsButtons = 'queryDetailsButtons', + /** + * The **Delete** action for Answers in the full application + * embedding mode. + * @example + * ```js + * disabledActions: [Action.AnswerDelete] + * ``` + * @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw + */ + AnswerDelete = 'onDeleteAnswer', + /** + * The chart switcher icon on Answer page and + * visualizations in edit mode. + * Allows switching to the table or chart mode + * when editing a visualization. + * @example + * ```js + * disabledActions: [Action.AnswerChartSwitcher] + * ``` + * @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw + */ + AnswerChartSwitcher = 'answerChartSwitcher', + /** + * The Favorites icon (*) for Answers, + * Liveboard, and data objects like Worksheet, Model, + * Tables and Views. + * Allows adding an object to the user’s favorites list. + * @example + * ```js + * disabledActions: [Action.AddToFavorites] + * ``` + * @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw + */ + AddToFavorites = 'addToFavorites', + /** + * The edit icon on Liveboards (Classic experience). + * @example + * ```js + * disabledActions: [Action.EditDetails] + * ``` + * @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw + */ + EditDetails = 'editDetails', + /** + * The *Create alert* action for KPI charts. + * Allows users to schedule threshold-based alerts + * for KPI charts. + * @example + * ```js + * disabledActions: [Action.CreateMonitor] + * ``` + * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + */ + CreateMonitor = 'createMonitor', + /** + * @deprecated + * Reports errors + * @example + * ```js + * disabledActions: [Action.ReportError] + * ``` + * @version SDK: 1.11.1 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw + */ + ReportError = 'reportError', + /** + * The **Sync to sheets** action on Answers and Liveboard visualizations. + * Allows sending data to a Google Sheet. + * @example + * ```js + * disabledActions: [Action.SyncToSheets] + * ``` + * @version SDK: 1.18.0| ThoughtSpot: 8.10.0.cl, 9.0.1.sw + */ + SyncToSheets = 'sync-to-sheets', + /** + * The **Sync to other apps** action on Answers and Liveboard visualizations. + * Allows sending data to third-party apps like Slack, Salesforce, + * Microsoft Teams, and so on. + * @example + * ```js + * disabledActions: [Action.SyncToOtherApps] + * ``` + * @version SDK: 1.18.0| ThoughtSpot: 8.10.0.cl, 9.0.1.sw + */ + SyncToOtherApps = 'sync-to-other-apps', + /** + * The **Manage pipelines** action on Answers and Liveboard visualizations. + * Allows users to manage data sync pipelines to third-party apps. + * @example + * ```js + * disabledActions: [Action.SyncToOtherApps] + * ``` + * @version SDK: 1.18.0| ThoughtSpot: 8.10.0.cl, 9.0.1.sw + */ + ManagePipelines = 'manage-pipeline', + /** + * The **Filter** action on Liveboard visualizations. + * Allows users to apply cross-filters on a Liveboard. + * @example + * ```js + * disabledActions: [Action.CrossFilter] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.8.0.sw + */ + CrossFilter = 'context-menu-item-cross-filter', + /** + * The **Sync to Slack** action on Liveboard visualizations. + * Allows sending data to third-party apps Slack + * @example + * ```js + * disabledActions: [Action.SyncToSlack] + * ``` + * @version @version SDK : 1.32.0 | ThoughtSpot Cloud: 10.1.0.cl + */ + SyncToSlack = 'syncToSlack', + /** + * The **Sync to Teams** action on Liveboard visualizations. + * Allows sending data to third-party apps Team + * @example + * ```js + * disabledActions: [Action.SyncToTeams] + * ``` + * @version @version SDK : 1.32.0 | ThoughtSpot Cloud: 10.1.0.cl + */ + SyncToTeams = 'syncToTeams', + /** + * The **Remove** action that appears when cross filters are applied + * on a Liveboard. + * Removes filters applied o a visualization. + * @example + * ```js + * disabledActions: [Action.RemoveCrossFilter] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + RemoveCrossFilter = 'context-menu-item-remove-cross-filter', + /** + * The **Aggregate** option in the chart axis or the + * table column customization menu. + * Provides aggregation options to analyze the data on a chart or table. + * @example + * ```js + * disabledActions: [Action.AxisMenuAggregate] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + AxisMenuAggregate = 'axisMenuAggregate', + /** + * The **Time bucket** option in the chart axis or table column + * customization menu. + * Allows defining time metric for date comparison. + * @example + * ```js + * disabledActions: [Action.AxisMenuTimeBucket] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + AxisMenuTimeBucket = 'axisMenuTimeBucket', + /** + * The **Filter** action in the chart axis or table column + * customization menu. + * Allows adding, editing, or removing filters. + * + * @example + * ```js + * disabledActions: [Action.AxisMenuFilter] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + AxisMenuFilter = 'axisMenuFilter', + /** + * The **Conditional formatting** action on chart or table. + * Allows adding rules for conditional formatting of data + * points on a chart or table. + * @example + * ```js + * disabledActions: [Action.AxisMenuConditionalFormat] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + AxisMenuConditionalFormat = 'axisMenuConditionalFormat', + /** + * The **Sort** menu action on a table or chart axis + * Sorts data in ascending or descending order. + * Allows adding, editing, or removing filters. + * @example + * ```js + * disabledActions: [Action.AxisMenuConditionalFormat] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + AxisMenuSort = 'axisMenuSort', + /** + * The **Group** option in the chart axis or table column + * customization menu. + * Allows grouping data points if the axes use the same + * unit of measurement and a similar scale. + * @example + * ```js + * disabledActions: [Action.AxisMenuGroup] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + AxisMenuGroup = 'axisMenuGroup', + /** + * The **Position** option in the axis customization menu. + * Allows changing the position of the axis to the + * left or right side of the chart. + * @example + * ```js + * disabledActions: [Action.AxisMenuPosition] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + AxisMenuPosition = 'axisMenuPosition', + /** + * The **Rename** option in the chart axis or table column customization menu. + * Renames the axis label on a chart or the column header on a table. + * @example + * ```js + * disabledActions: [Action.AxisMenuRename] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + AxisMenuRename = 'axisMenuRename', + /** + * The **Edit** action in the axis customization menu. + * Allows editing the axis name, position, minimum and maximum values, + * and format of a column. + * @example + * ```js + * disabledActions: [Action.AxisMenuEdit] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + AxisMenuEdit = 'axisMenuEdit', + /** + * The **Number format** action to customize the format of + * the data labels on a chart or table. + * @example + * ```js + * disabledActions: [Action.AxisMenuNumberFormat] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + AxisMenuNumberFormat = 'axisMenuNumberFormat', + /** + * The **Text wrapping** action on a table. + * Wraps or clips column text on a table. + * @example + * ```js + * disabledActions: [Action.AxisMenuTextWrapping] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + AxisMenuTextWrapping = 'axisMenuTextWrapping', + /** + * The **Remove** action in the chart axis or table column + * customization menu. + * Removes the data labels from a chart or the column of a + * table visualization. + * @example + * ```js + * disabledActions: [Action.AxisMenuRemove] + * ``` + * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw + */ + AxisMenuRemove = 'axisMenuRemove', + /** + * @hidden + */ + InsertInToSlide = 'insertInToSlide', + /** + * The **Rename** menu action on Liveboards and visualizations. + * Allows renaming a Liveboard or visualization. + * @example + * ```js + * disabledActions: [Action.RenameModalTitleDescription] + * ``` + * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl, 9.8.0.sw + */ + RenameModalTitleDescription = 'renameModalTitleDescription', + /** + * The *Request verification* action on a Liveboard. + * Initiates a request for Liveboard verification. + * @example + * ```js + * disabledActions: [Action.RequestVerification] + * ``` + * @version SDK: 1.25.0 | ThoughtSpot: 9.6.0.cl, 10.1.0.sw + */ + RequestVerification = 'requestVerification', + /** + * + * Allows users to mark a Liveboard as verified. + * @example + * ```js + * disabledActions: [Action.MarkAsVerified] + * ``` + * @version SDK: 1.25.0 | ThoughtSpot: 9.6.0.cl, 10.1.0.sw + */ + MarkAsVerified = 'markAsVerified', + /** + * The **Add Tab** action on a Liveboard. + * Allows adding a new tab to a Liveboard view. + * @example + * ```js + * disabledActions: [Action.AddTab] + * ``` + * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw + */ + AddTab = 'addTab', + /** + * + *Initiates contextual change analysis on KPI charts. + * @example + * ```js + * disabledActions: [Action.EnableContextualChangeAnalysis] + * ``` + * @version SDK: 1.25.0 | ThoughtSpot Cloud: 9.6.0.cl + */ + EnableContextualChangeAnalysis = 'enableContextualChangeAnalysis', + /** + * Action ID to hide or disable Natural Language Search query. + * + * @example + * ```js + * disabledActions: [Action.ShowSageQuery] + * ``` + * @version SDK: 1.26.0 | ThoughtSpot Cloud: 9.7.0.cl + */ + ShowSageQuery = 'showSageQuery', + /** + * + * Action ID to hide or disable the edit option for the + * results generated from the + * Natural Language Search query. + * + * @example + * ```js + * disabledActions: [Action.EditSageAnswer] + * ``` + * @version SDK: 1.26.0 | ThoughtSpot Cloud: 9.7.0.cl + */ + EditSageAnswer = 'editSageAnswer', + /** + * The feedback widget for AI-generated Answers. + * Allows users to send feedback on the Answers generated + * from a Natural Language Search query. + * + * @example + * ```js + * disabledActions: [Action.SageAnswerFeedback] + * ``` + * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl + */ + SageAnswerFeedback = 'sageAnswerFeedback', + /** + * + * @example + * ```js + * disabledActions: [Action.ModifySageAnswer] + * ``` + * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl + */ + ModifySageAnswer = 'modifySageAnswer', + /** + * The **Move to Tab** menu action on visualizations in Liveboard edit mode. + * Allows moving a visualization to a different tab. + * @example + * ```js + * disabledActions: [Action.MoveToTab] + * ``` + */ + MoveToTab = 'onContainerMove', + /** + * The **Manage Alerts** menu action on KPI visualizations. + * Allows creating, viewing, and editing monitor + * alerts for a KPI chart. + * + * @example + * ```js + * disabledActions: [Action.ManageMonitor] + * ``` + */ + ManageMonitor = 'manageMonitor', + /** + * The Liveboard Personalised Views dropdown. + * Allows navigating to a personalized Liveboard View. + * @example + * ```js + * disabledActions: [Action.PersonalisedViewsDropdown] + * ``` + * @version SDK : 1.26.0 | ThoughtSpot: 9.7.0.cl, 10.1.0.sw + */ + PersonalisedViewsDropdown = 'personalisedViewsDropdown', + /** + * Action ID for show or hide the user details on a + * Liveboard (Recently visited / social proof) + * @example + * ```js + * disabledActions: [Action.LiveboardUsers] + * ``` + * @version SDK : 1.26.0 | ThoughtSpot: 9.7.0.cl, 10.1.0.sw + */ + LiveboardUsers = 'liveboardUsers', + + /** + * Action ID for the Parent TML action + * The parent action **TML** must be included to access TML-related options + * within the cascading menu (specific to the answer page) + * @example + * ```js + * // to include specific TML actions + * visibleActions: [Action.TML, Action.ExportTML, Action.EditTML] + * + * ``` + * @example + * ```js + * hiddenAction: [Action.TML] // hide all TML actions + * disabledActions: [Action.TML] // to disable all TML actions + * ``` + * @version SDK : 1.28.3 | ThoughtSpot: 9.12.0.cl, 10.1.0.sw + */ + TML = 'tml', + /** + * The **Create Liveboard* action on + * the Liveboards page and the Pin modal. + * Allows users to create a Liveboard. + * + * @example + * ```js + * hiddenAction: [Action.CreateLiveboard] + * disabledActions: [Action.CreateLiveboard] + * ``` + * @version SDK: 1.32.0 | ThoughtSpot: 10.1.0.cl, 10.1.0.sw + */ + CreateLiveboard = 'createLiveboard', + + /** + * Action ID for to hide or disable the + * Verified Liveboard banner. + * @example + * ```js + * hiddenAction: [Action.VerifiedLiveboard] + * ``` + * @version SDK: 1.29.0 | ThoughtSpot: 9.10.0.cl, 10.1.0.sw + */ + VerifiedLiveboard = 'verifiedLiveboard', + + /** + * The *Ask Sage* action for Answers and visualizations. + * Allows initiating a Natural Language Search query. + * + * @example + * ```js + * hiddenAction: [Action.AskAi] + * ``` + * @version SDK: 1.29.0 | ThoughtSpot Cloud: 9.12.0.cl + */ + AskAi = 'AskAi', + + /** + * The **Add KPI to Watchlist** action on Home page watchlist. + * Adds a KPI chart to the watchlist on the Home page. + * @example + * ```js + * disabledActions: [Action.AddToWatchlist] + * ``` + * @version SDK : 1.27.9 | ThoughtSpot Cloud: 9.12.5.cl + */ + AddToWatchlist = 'addToWatchlist', + + /** + * The **Remove from watchlist** menu action on KPI watchlist. + * Removes a KPI chart from the watchlist on the Home page. + * @example + * ```js + * disabledActions: [Action.RemoveFromWatchlist] + * ``` + * @version SDK : 1.27.9 | ThoughtSpot: 9.12.5.cl + */ + RemoveFromWatchlist = 'removeFromWatchlist', + /** + * The **Organize Favourites** action on Homepage + * *Favorites* module. + * + * @example + * ```js + * disabledActions: [Action.OrganiseFavourites] + * ``` + * @version SDK : 1.32.0 | ThoughtSpot: 10.0.0.cl + */ + OrganiseFavourites = 'organiseFavourites', + + /** + * The **AI Highlights** action on a Liveboard. + * + * @example + * ```js + * hiddenAction: [Action.AIHighlights] + * ``` + * @version SDK: 1.27.10 | ThoughtSpot Cloud: 9.12.5.cl + */ + AIHighlights = 'AIHighlights', + + /** + * The *Edit* action on the *Liveboard Schedules* page + * (new Homepage experience). + * Allows editing Liveboard schedules. + * + * @example + * ```js + * disabledActions: [Action.EditScheduleHomepage] + * ``` + * @version SDK: 1.34.0 | ThoughtSpot Cloud: 10.3.0.cl + */ + EditScheduleHomepage = 'editScheduleHomepage', + + /** + * The *Pause* action on the *Liveboard Schedules* page + * Pauses a scheduled Liveboard job. + * @example + * ```js + * disabledActions: [Action.PauseScheduleHomepage] + * ``` + * @version SDK: 1.34.0 | ThoughtSpot Cloud: 10.3.0.cl + */ + PauseScheduleHomepage = 'pauseScheduleHomepage', + + /** + * The **View run history** action **Liveboard Schedules** page. + * Allows viewing schedule run history. + * @example + * ```js + * disabledActions: [Action.ViewScheduleRunHomepage] + * ``` + * @version SDK: 1.34.0 | ThoughtSpot: 10.3.0.cl + */ + ViewScheduleRunHomepage = 'viewScheduleRunHomepage', + + /** + * Action ID to hide or disable the + * unsubscribe option for Liveboard schedules. + * @example + * ```js + * disabledActions: [Action.UnsubscribeScheduleHomepage] + * ``` + * @version SDK: 1.34.0 | ThoughtSpot: 10.3.0.cl + */ + UnsubscribeScheduleHomepage = 'unsubscribeScheduleHomepage', + + /** + * The **Manage Tags** action on Homepage Favourite Module. + * @example + * ```js + * disabledActions: [Action.ManageTags] + * ``` + * @version SDK : 1.34.0 | ThoughtSpot Cloud: 10.3.0.cl + */ + ManageTags = 'manageTags', + + /** + * The **Delete** action on the **Liveboard Schedules* page. + * Deletes a Liveboard schedule. + * @example + * ```js + * disabledActions: [Action.DeleteScheduleHomepage] + * ``` + * @version SDK: 1.34.0 | ThoughtSpot: 10.3.0.cl + */ + DeleteScheduleHomepage = 'deleteScheduleHomepage', + + /** + * The **Analyze CTA** action on KPI chart. + * @example + * ```js + * disabledActions: [Action.KPIAnalysisCTA] + * ``` + * @version SDK: 1.34.0 | ThoughtSpot Cloud: 10.3.0.cl + */ + KPIAnalysisCTA = 'kpiAnalysisCTA', + /** + * Action ID for disabling chip reorder in Answer and Liveboard + * @example + * ```js + * const disabledActions = [Action.DisableChipReorder] + * ``` + * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl + */ + DisableChipReorder = 'disableChipReorder', + + /** + * Action ID to show, hide, or disable filters + * in a Liveboard tab. + * + * @example + * ```js + * hiddenAction: [Action.ChangeFilterVisibilityInTab] + * ``` + * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl + */ + ChangeFilterVisibilityInTab = 'changeFilterVisibilityInTab', + + /** + * The **Preview data** button on the Spotter interface. + * Allows previewing the data used for Spotter queries. + * + * @example + * ```js + * hiddenAction: [Action.PreviewDataSpotter] + * ``` + * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl + */ + PreviewDataSpotter = 'previewDataSpotter', + + /** + * The **Reset** link on the Spotter interface. + * Resets the conversation with Spotter. + * + * @example + * ```js + * hiddenAction: [Action.ResetSpotterChat] + * ``` + * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl + */ + ResetSpotterChat = 'resetSpotterChat', + /** + * Action ID for hide or disable the + * Spotter feedback widget. + * + * @example + * ```js + * hiddenAction: [Action.SpotterFeedback] + * ``` + * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl + */ + SpotterFeedback = 'spotterFeedback', + /** + * Action ID for hide or disable + * the previous prompt edit option in Spotter. + * + * @example + * ```js + * hiddenAction: [Action.EditPreviousPrompt] + * ``` + * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl + */ + EditPreviousPrompt = 'editPreviousPrompt', + /** + * Action ID for hide or disable + * the previous prompt deletion option in Spotter. + * + * @example + * ```js + * hiddenAction: [Action.DeletePreviousPrompt] + * ``` + * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl + */ + DeletePreviousPrompt = 'deletePreviousPrompt', + /** + * Action ID for hide/disable edit of tokens on spotter results. + * @example + * ```js + * hiddenAction: [Action.EditTokens] + * ``` + * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl + */ + EditTokens = 'editTokens', +} + +export interface AnswerServiceType { + getAnswer?: (offset: number, batchSize: number) => any; +} + +export enum PrefetchFeatures { + FullApp = 'FullApp', + SearchEmbed = 'SearchEmbed', + LiveboardEmbed = 'LiveboardEmbed', + VizEmbed = 'VizEmbed', +} + +/** + * Enum for options to change context trigger + * BOTH_CLICKS option is introduced in 10.7 + */ +export enum ContextMenuTriggerOptions { + LEFT_CLICK = 'left-click', + RIGHT_CLICK = 'right-click', + BOTH_CLICKS = 'both-clicks', +} + +export interface ColumnValue { + column: { + id: string; + name: string; + dataType: string; + [key: string]: any; + }; + value: + | string + | number + | boolean + | { + v: { + s: number; + e: number; + }; + }; +} + +export interface VizPoint { + selectedAttributes: ColumnValue[]; + selectedMeasures: ColumnValue[]; +} + +/** + * @group Events + */ +export interface CustomActionPayload { + contextMenuPoints?: { + clickedPoint: VizPoint; + selectedPoints: VizPoint[]; + }; + embedAnswerData: { + name: string; + id: string; + sources: { + header: { + guid: string; + }; + }; + columns: any[]; + data: any[]; + [key: string]: any; + }; + session: SessionInterface; + vizId?: string; +} + +export enum LogLevel { + /** + * No logs will be logged in the console. + * @example + * ```js + * init({ + * ... // other options, + * logLevel: LogLevel.SILENT, + * }) + * ``` + * @version SDK: 1.26.7 | ThoughtSpot Cloud: 9.10.0.cl + */ + SILENT = 'SILENT', + /** + * Only ERROR logs will be logged in the console. + * @example + * ```js + * init({ + * ... // other options, + * logLevel: LogLevel.ERROR, + * }) + * ``` + * @version SDK: 1.26.7 | ThoughtSpot Cloud: 9.10.0.cl + */ + ERROR = 'ERROR', + /** + * Only WARN and ERROR logs will be logged in the console. + * @example + * ```js + * init({ + * ... // other options, + * logLevel: LogLevel.WARN, + * }) + * ``` + * @version SDK: 1.26.7 | ThoughtSpot Cloud: 9.10.0.cl + */ + WARN = 'WARN', + /** + * Only INFO, WARN, and ERROR logs will be logged in the console. + * @example + * ```js + * init({ + * ... // other options, + * logLevel: LogLevel.INFO, + * }) + * ``` + * @version SDK: 1.26.7 | ThoughtSpot Cloud: 9.10.0.cl + */ + INFO = 'INFO', + + /** + * Only DEBUG, INFO, WARN, and ERROR logs will be logged in the console. + * @example + * ```js + * init({ + * ... // other options, + * logLevel: LogLevel.DEBUG, + * }) + * ``` + * @version SDK: 1.26.7 | ThoughtSpot Cloud: 9.10.0.cl + */ + DEBUG = 'DEBUG', + /** + * All logs will be logged in the console. + * @example + * ```js + * init({ + * ... // other options, + * logLevel: LogLevel.TRACE, + * }) + * ``` + * @version SDK: 1.26.7 | ThoughtSpot Cloud: 9.10.0.cl + */ + TRACE = 'TRACE', +} + +export interface DefaultAppInitData { + customisations: CustomisationsInterface; + authToken: string; + runtimeFilterParams: string | null; + runtimeParameterParams: string | null; + hiddenHomepageModules: HomepageModule[]; + reorderedHomepageModules: string[]; + hostConfig: Record; + hiddenHomeLeftNavItems: string[]; + customVariablesForThirdPartyTools: Record; +} + +export interface LiveboardViewConfig + extends Omit< + ViewConfig, + 'hiddenHomepageModules' | 'hiddenHomeLeftNavItems' | 'reorderedHomepageModules' + > { + /** + * If set to true, the embedded object container dynamically resizes + * according to the height of the Liveboard. + * + * **Note**: Using fullHeight loads all visualizations on the + * Liveboard simultaneously, which results in multiple warehouse + * queries and potentially a longer wait for the topmost + * visualizations to display on the screen. + * Setting `fullHeight` to `false` fetches visualizations + * incrementally as users scroll the page to view the charts and tables. + * + * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 7.2.1 + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * fullHeight: true, + * }); + * ``` + */ + fullHeight?: boolean; + /** + * This is the minimum height(in pixels) for a full-height Liveboard. + * Setting this height helps resolve issues with empty Liveboards and + * other screens navigable from a Liveboard. + * @version SDK: 1.5.0 | ThoughtSpot: ts7.oct.cl, 7.2.1 + * @default 500 + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * fullHeight: true, + * defaultHeight: 600, + * }); + * ``` + */ + defaultHeight?: number; + /** + * @Deprecated If set to true, the context menu in visualizations will be enabled. + * @example + * ```js + * const embed = new LiveboardEmbed('#tsEmbed', { + * ... // other options + * enableVizTransformations:true, + * }) + * ``` + * @version: SDK: 1.1.0 | ThoughtSpot: 8.1.0.sw + */ + enableVizTransformations?: boolean; + /** + * The Liveboard to display in the embedded view. + * Use either liveboardId or pinboardId to reference the Liveboard to embed. + * @version SDK: 1.3.0 | ThoughtSpot ts7.aug.cl, 7.2.1 + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * liveboardId:id of liveboard, + * }) + */ + liveboardId?: string; + /** + * To support backward compatibility + * @hidden + */ + pinboardId?: string; + /** + * The visualization within the Liveboard to display. + * @version SDK: 1.9.1 | ThoughtSpot: 8.1.0.cl, 8.4.1-sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * vizId:'430496d6-6903-4601-937e-2c691821af3c', + * }) + * ``` + */ + vizId?: string; + /** + * If set to true, all filter chips from a + * Liveboard page will be read-only (no X buttons) + * @version SDK: 1.3.0 | ThoughtSpot ts7.aug.cl, 7.2.1.sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * preventLiveboardFilterRemoval:true, + * }) + * ``` + */ + preventLiveboardFilterRemoval?: boolean; + /** + * Array of visualization IDs which should be visible when the Liveboard + * renders. This can be changed by triggering the `SetVisibleVizs` + * event. + * @version SDK: 1.9.1 | ThoughtSpot: 8.1.0.cl, 8.4.1-sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * visibleVizs: [ + * '430496d6-6903-4601-937e-2c691821af3c', + * 'f547ec54-2a37-4516-a222-2b06719af726' + * ] + * }) + */ + visibleVizs?: string[]; + /** + * To support backward compatibility + * @hidden + */ + preventPinboardFilterRemoval?: boolean; + /** + * Render embedded Liveboards and visualizations in the + * new Liveboard experience mode. + * @version SDK: 1.14.0 | ThoughtSpot: 8.6.0.cl, 8.8.1-sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * liveboardV2:true, + * }) + * ``` + */ + liveboardV2?: boolean; + /** + * Set a Liveboard tab as an active tab. + * Specify the tab ID. + * @example + * ```js + * const embed = new LiveboardEmbed('#tsEmbed', { + * ... // other options + * activeTabId:'id-1234', + * }) + * ``` + * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1-sw + */ + activeTabId?: string; + /** + * Show or hide the tab panel of the embedded Liveboard. + * @version SDK: 1.25.0 | Thoughtspot: 9.6.0.cl, 9.8.0.sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * hideTabPanel:true, + * }) + * ``` + */ + hideTabPanel?: boolean; + /** + * Show or hide the Liveboard header. + * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl, 9.8.0.sw + * @default false + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other liveboard view config + * hideLiveboardHeader:true, + * }); + * ``` + */ + hideLiveboardHeader?: boolean; + /** + * Show or hide the Liveboard title. + * @default false + * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl, 9.8.0.sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * showLiveboardTitle:true, + * }) + * ``` + */ + showLiveboardTitle?: boolean; + /** + * Show or hide the Liveboard description. + * @default false + * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl, 9.8.0.sw + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * showLiveboardDescription:true, + * }) + * ``` + */ + showLiveboardDescription?: boolean; + /** + * Control the position and visibility of + * the Liveboard header as the users scroll down the + * embedded Liveboard page. + * @example + * ```js + * const embed = new LiveboardEmbed('#embed', { + * ... // other Liveboard view config + * isLiveboardHeaderSticky: true, + * }); + * ``` + * @version SDK: 1.26.0 | Thoughtspot: 9.7.0.cl, 9.8.0.sw + */ + isLiveboardHeaderSticky?: boolean; + /** + * enable or disable ask sage + * @default false + * @version SDK: 1.29.0 | Thoughtspot: 9.12.0.cl + * @example + * ```js + * const embed = new SearchEmbed('#tsEmbed', { + * ... // other options + * enableAskSage:true, + * }) + * ``` + */ + enableAskSage?: boolean; + /** + * This flag is used to enable the 2 column layout on a Liveboard + * @type {boolean} + * @default false + * @version SDK: 1.32.0 | ThoughtSpot:10.1.0.cl + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * enable2ColumnLayout: true, + * }) + * ``` + */ + enable2ColumnLayout?: boolean; + /** + * Show a preview image of the visualization before the visualization loads. + * Only works for visualizations embeds with a viz id. + * + * Also, viz snashot should be enabled in the ThoughtSpot instance. + * Contact ThoughtSpot support to enable this feature. + * + * Since, this will show preview images, be careful that it may show + * undesired data to the user when using row level security. + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * liveboardId: 'liveboard-id', + * vizId: 'viz-id', + * showPreviewLoader: true, + * }); + * embed.render(); + * ``` + * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl + */ + showPreviewLoader?: boolean; + /** + * This flag is used to enable the compact header on a Liveboard + * @type {boolean} + * @default false + * @version SDK: 1.35.0 | ThoughtSpot:10.3.0.cl + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * isLiveboardCompactHeaderEnabled: true, + * }) + * ``` + */ + isLiveboardCompactHeaderEnabled?: boolean; + /** + * This flag is used to show/hide verified icon in the Liveboard compact header + * @type {boolean} + * @default true + * @version SDK: 1.35.0 | ThoughtSpot:10.4.0.cl + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * showLiveboardVerifiedBadge: true, + * }) + * ``` + */ + showLiveboardVerifiedBadge?: boolean; + /** + * This flag is used to show/hide the re-verify banner + * in Liveboard compact header + * @type {boolean} + * @default true + * @version SDK: 1.35.0 | ThoughtSpot:10.4.0.cl + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * showLiveboardReverifyBanner: true, + * }) + * ``` + */ + showLiveboardReverifyBanner?: boolean; + /** + * This flag is used to enable/disable hide irrelevant filters in a Liveboard tab + * @type {boolean} + * @default false + * @version SDK: 1.36.0 | ThoughtSpot:10.6.0.cl + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * hideIrrelevantChipsInLiveboardTabs: true, + * }) + * ``` + */ + hideIrrelevantChipsInLiveboardTabs?: boolean; + + /** + * The Liveboard to run on regular intervals to fetch the cdw token. + * @hidden + * @version SDK: 1.35.0 | ThoughtSpot:10.6.0.cl + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * oAuthPollingInterval: value in milliseconds, + * }) + */ + oAuthPollingInterval?: number; + + /** + * The Liveboard is set to force a token fetch during the initial load. + * @hidden + * @version SDK: 1.35.0 | ThoughtSpot:10.6.0.cl + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * isForceRedirect: false, + * }) + */ + isForceRedirect?: boolean; + + /** + * The source connection ID for authentication. + * @hidden + * @version SDK: 1.35.0 | ThoughtSpot:10.6.0.cl + * @example + * ```js + * const embed = new LiveboardEmbed('#embed-container', { + * ... // other options + * dataSourceId: '', + * }) + */ + dataSourceId?: string; +} \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..c569b80 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,23 @@ +import { ViewConfig, EmbedEventHandlers } from "./types"; + +export type ErrorCallback = (error: Error) => void; + +export interface EmbedProps extends ViewConfig, EmbedEventHandlers { + onErrorSDK?: ErrorCallback; +} + +//TODO : Emit the error message from the Vercel Shell +export const enum ERROR_MESSAGE { + INIT_ERROR = "Coudln't initialize the component", + EMBED_ERROR = "Coudln't embed the component", + AUTH_ERROR = "Authentication failed", + EVENT_ERROR = "Coudln't attach event handler", + COMPONENT_UNMOUNTED_ERROR = "Error while unmounting the component", + CONFIG_ERROR = "Error while updating the config", +} + +export const notifyErrorSDK = (error: Error, onErrorSDK?: ErrorCallback, errorMessage?: ERROR_MESSAGE) => { + onErrorSDK?.(error); + console.error(error, errorMessage); + return; +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e0491e9 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "ESNext", + "moduleResolution": "node", + "declaration": true, + "declarationMap": false, + "jsx": "react", + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "baseUrl": ".", + "paths": { + "react-native-webview": ["node_modules/react-native-webview"] + } + }, + "include": ["src/**/*", "src/index.ts"], + "exclude": ["node_modules", "dist"] +}